summaryrefslogtreecommitdiffstats
path: root/mobile/android/tests/background/junit4/resources
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /mobile/android/tests/background/junit4/resources
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/tests/background/junit4/resources')
-rw-r--r--mobile/android/tests/background/junit4/resources/dlc_sync_deleted_item.json8
-rw-r--r--mobile/android/tests/background/junit4/resources/dlc_sync_old_format.json23
-rw-r--r--mobile/android/tests/background/junit4/resources/dlc_sync_single_font.json23
-rw-r--r--mobile/android/tests/background/junit4/resources/experiments.json99
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_atom_blogger.xml13
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_atom_feedburner.xml2
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_atom_planetmozilla.xml4996
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_atom_wikipedia.xml34
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss10_planetmozilla.xml3860
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss20_planetmozilla.xml3853
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_heise.xml1965
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_medium.xml100
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_spon.xml314
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_tumblr.xml95
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_wikipedia.xml21
-rw-r--r--mobile/android/tests/background/junit4/resources/feed_rss_wordpress.xml84
-rw-r--r--mobile/android/tests/background/junit4/resources/robolectric.properties3
17 files changed, 15493 insertions, 0 deletions
diff --git a/mobile/android/tests/background/junit4/resources/dlc_sync_deleted_item.json b/mobile/android/tests/background/junit4/resources/dlc_sync_deleted_item.json
new file mode 100644
index 000000000..50b04f0e2
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/dlc_sync_deleted_item.json
@@ -0,0 +1,8 @@
+{
+ "data":[
+ {
+ "id":"c906275c-3747-fe27-426f-6187526a6f06",
+ "deleted": true
+ }
+ ]
+}
diff --git a/mobile/android/tests/background/junit4/resources/dlc_sync_old_format.json b/mobile/android/tests/background/junit4/resources/dlc_sync_old_format.json
new file mode 100644
index 000000000..378bc64c6
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/dlc_sync_old_format.json
@@ -0,0 +1,23 @@
+{
+ "data":[
+ {
+ "kind":"font",
+ "original": {
+ "mimetype":"application/x-font-ttf",
+ "filename":"CharisSILCompact-R.ttf",
+ "hash":"4ed509317f1bb441b185ea13bf1c9d19d1a0b396962efa3b5dc3190ad88f2067",
+ "size":1727656
+ },
+ "last_modified":1455710632607,
+ "attachment": {
+ "mimetype":"application/x-gzip",
+ "size":548720,
+ "hash":"960be4fc5a92c1dc488582b215d5d75429fd4ffbee463105d29992cd792a912e",
+ "location":"/attachments/0d28a72d-a51f-46f8-9e5a-f95c61de904e.gz",
+ "filename":"CharisSILCompact-R.ttf.gz"
+ },
+ "type":"asset-archive",
+ "id":"c906275c-3747-fe27-426f-6187526a6f06"
+ }
+ ]
+}
diff --git a/mobile/android/tests/background/junit4/resources/dlc_sync_single_font.json b/mobile/android/tests/background/junit4/resources/dlc_sync_single_font.json
new file mode 100644
index 000000000..0de84b85d
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/dlc_sync_single_font.json
@@ -0,0 +1,23 @@
+{
+ "data":[
+ {
+ "kind":"font",
+ "last_modified":1455710632607,
+ "attachment": {
+ "mimetype":"application/x-gzip",
+ "size":548720,
+ "hash":"960be4fc5a92c1dc488582b215d5d75429fd4ffbee463105d29992cd792a912e",
+ "location":"/attachments/0d28a72d-a51f-46f8-9e5a-f95c61de904e.gz",
+ "filename":"CharisSILCompact-R.ttf.gz",
+ "original": {
+ "mimetype":"application/x-font-ttf",
+ "filename":"CharisSILCompact-R.ttf",
+ "hash":"4ed509317f1bb441b185ea13bf1c9d19d1a0b396962efa3b5dc3190ad88f2067",
+ "size":1727656
+ }
+ },
+ "type":"asset-archive",
+ "id":"c906275c-3747-fe27-426f-6187526a6f06"
+ }
+ ]
+}
diff --git a/mobile/android/tests/background/junit4/resources/experiments.json b/mobile/android/tests/background/junit4/resources/experiments.json
new file mode 100644
index 000000000..870a57778
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/experiments.json
@@ -0,0 +1,99 @@
+
+{
+ "data": [
+ {
+ "name": "active-experiment",
+ "match": {
+ },
+ "buckets": {
+ "min": "0",
+ "max": "100"
+ },
+ "values": {
+ "foo": true
+ }
+ },
+
+ {
+ "name": "inactive-experiment",
+ "match": {
+ "appId": "^NOPE$"
+ },
+ "buckets": {
+ "min": "0",
+ "max": "0"
+ }
+ },
+ {
+ "name": "bookmark-history-menu",
+ "match": {
+ },
+ "buckets": {
+ "min": "0",
+ "max": "100"
+ }
+ },
+ {
+ "name": "is-matching",
+ "match": {
+ "appId": "^org.mozilla.gecko$"
+ },
+ "buckets": {
+ "min": "0",
+ "max": "100"
+ }
+ },
+ {
+ "name": "is-not-matching",
+ "match": {
+ "appId": "^org.mozilla.fennec|^org.mozilla.firefox_beta$"
+ },
+ "buckets": {
+ "min": "0",
+ "max": "100"
+ }
+ },
+ {
+ "name": "promote-add-to-homescreen",
+ "buckets": {
+ "max": "100",
+ "min": "50"
+ },
+ "last_modified": 1467705654772,
+ "values": {
+ "lastVisitMaximumAgeMs": 600000,
+ "minimumTotalVisits": 5,
+ "lastVisitMinimumAgeMs": 30000
+ },
+ "id": "20d278d7-0d35-4811-8f01-bf24e31ba51b",
+ "match": {
+ "appId": "^org.mozilla.fennec|^org.mozilla.firefox_beta$"
+ },
+ "schema": 1467705310595
+ },
+ {
+ "name": "offline-cache",
+ "buckets": {
+ "max": "100",
+ "min": "0"
+ },
+ "last_modified": 1467705429859,
+ "id": "9f1ea043-c1d8-48ba-802d-aeabaf667afe",
+ "match": {
+ "appId": "^org.mozilla.fennec|^org.mozilla.firefox_beta$"
+ },
+ "schema": 1467705310595
+ },
+ {
+ "name": "bookmark-history-menu",
+ "buckets": {
+ "max": "100",
+ "min": "0"
+ },
+ "last_modified": 1467705381971,
+ "id": "29988035-1a59-4671-b679-2c717a68bd12",
+ "match": {},
+ "schema": 1467705310595
+ }
+ ]
+}
diff --git a/mobile/android/tests/background/junit4/resources/feed_atom_blogger.xml b/mobile/android/tests/background/junit4/resources/feed_atom_blogger.xml
new file mode 100644
index 000000000..994876d76
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_atom_blogger.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18929277</id><updated>2016-02-18T09:07:17.583-08:00</updated><category term="jetpack"/><title type='text'>mykzilla</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default?start-index=26&amp;max-results=25'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>114</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18929277.post-3538029308224239292</id><published>2016-01-11T08:57:00.001-08:00</published><updated>2016-01-11T08:57:31.366-08:00</updated><title type='text'>URL Has Been Changed</title><content type='html'>&lt;dl&gt;&lt;dd&gt;The URL you have reached, &lt;a href=&quot;http://mykzilla.blogspot.com/&quot;&gt;http://mykzilla.blogspot.com/&lt;/a&gt;, has been changed. The new URL is &lt;a href=&quot;https://mykzilla.org/&quot;&gt;https://mykzilla.org/&lt;/a&gt;. Please make a note of it.&lt;/dd&gt;&lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/3538029308224239292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=3538029308224239292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3538029308224239292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3538029308224239292'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2016/01/url-has-been-changed.html' title='URL Has Been Changed'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/08518329693863067865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7658939959003799797</id><published>2015-06-23T16:05:00.000-07:00</published><updated>2015-06-23T16:07:06.667-07:00</updated><title type='text'>Introducing PluotSorbet</title><content type='html'>&lt;a href=&quot;https://github.com/mozilla/pluotsorbet&quot;&gt;PluotSorbet&lt;/a&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition&quot;&gt;J2ME&lt;/a&gt;-compatible virtual machine written in JavaScript. Its goal is to enable users you run J2ME apps (i.e. &lt;a href=&quot;https://en.wikipedia.org/wiki/MIDlet&quot;&gt;MIDlets&lt;/a&gt;) in web apps without a native plugin. It does this by interpreting Java bytecode and compiling it to JavaScript code. It also provides a virtual filesystem (via &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API&quot;&gt;IndexedDB&lt;/a&gt;), network sockets (through the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket&quot;&gt;TCPSocket API&lt;/a&gt;), and other common J2ME APIs, like &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Contacts_API&quot;&gt;Contacts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The project reuses as much existing code as possible, to minimize its surface area and maximize its compatibility with other J2ME implementations. It incorporates the &lt;a href=&quot;https://java.net/projects/phoneme&quot;&gt;PhoneME&lt;/a&gt; reference implementation, numerous tests from &lt;a href=&quot;https://www.sourceware.org/mauve/&quot;&gt;Mauve&lt;/a&gt;, and a variety of JavaScript libraries (including &lt;a href=&quot;http://www-cs-students.stanford.edu/%7Etjw/jsbn/&quot;&gt;jsbn&lt;/a&gt;, &lt;a href=&quot;https://github.com/digitalbazaar/forge&quot;&gt;Forge&lt;/a&gt;, and &lt;a href=&quot;https://github.com/eligrey/FileSaver.js&quot;&gt;FileSaver.js&lt;/a&gt;). The virtual machine is originally based on &lt;a href=&quot;https://github.com/YaroslavGaponov/node-jvm&quot;&gt;node-jvm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PluotSorbet makes it possible to bring J2ME apps to Firefox OS. J2ME may be a moribund platform, but it still has &lt;a href=&quot;http://netmarketshare.com/operating-system-market-share.aspx?qprid=9&amp;amp;qpcustom=Java+ME&amp;amp;qpcustomb=1&quot;&gt;non-negligible market share&lt;/a&gt;, not to mention a number of useful apps. So it retains residual value, which PluotSorbet can extend to Firefox OS devices.&lt;br /&gt;&lt;br /&gt;PluotSorbet is also still under development, with a variety of issues to address. To learn more about PluotSorbet, check out its &lt;a href=&quot;https://github.com/mozilla/pluotsorbet/blob/master/README.md&quot;&gt;README&lt;/a&gt;, clone its &lt;a href=&quot;https://github.com/mozilla/pluotsorbet&quot;&gt;Git repository&lt;/a&gt;, peruse its &lt;a href=&quot;https://github.com/mozilla/pluotsorbet/issues&quot;&gt;issue tracker&lt;/a&gt;, and say hello to its developers in &lt;a href=&quot;irc://irc.mozilla.org/pluotsorbet&quot;&gt;irc.mozilla.org#pluotsorbet&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7658939959003799797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7658939959003799797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7658939959003799797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7658939959003799797'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2015/06/introducing-pluotsorbet.html' title='Introducing PluotSorbet'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/08518329693863067865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-2146007198307190404</id><published>2014-03-28T16:58:00.002-07:00</published><updated>2014-03-28T16:58:42.947-07:00</updated><title type='text'>simplify asynchronous method declarations with Task.async()</title><content type='html'>In Mozilla code, &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Task.spawn()&lt;/span&gt; is becoming a common way to implement asynchronous operations, especially methods like the &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;greet&lt;/span&gt; method in this &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;greeter&lt;/span&gt; object:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #202020; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;greeter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;message:&lt;/span&gt; &lt;span style=&quot;color: #ed9d13;&quot;&gt;&quot;Hello, NAME!&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;,&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;greet:&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;(name)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;Task.spawn((&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;*()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;yield&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;sendGreeting(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;.message.replace(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13;&quot;&gt;/NAME/&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;name));&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;}).bind(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;})&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Task.spawn()&lt;/span&gt; makes the operation logic simple, but the wrapper function and &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;bind()&lt;/span&gt; call required to start the task on method invocation and bind its &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;this&lt;/span&gt; reference make the overall implementation complex.&lt;br /&gt;&lt;br /&gt;Enter &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Task.async()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Like &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Task.spawn()&lt;/span&gt;, it creates a task, but it doesn&#39;t immediately start it. Instead, it returns an &quot;async function&quot; whose invocation starts the task, and the async function binds the task to its own &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;this&lt;/span&gt; reference at invocation time. That makes it simpler to declare the method:&lt;br /&gt;&lt;br /&gt;&lt;!-- HTML generated using hilite.me --&gt; &lt;div style=&quot;background: #202020; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;greeter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;message:&lt;/span&gt; &lt;span style=&quot;color: #ed9d13;&quot;&gt;&quot;Hello, NAME!&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;,&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;greet:&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;Task.async(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;*(name)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;yield&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;sendGreeting(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;.message.replace(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13;&quot;&gt;/NAME/&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;name));&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;})&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;With identical semantics:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #202020; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;greeter.greet(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13;&quot;&gt;&quot;Mitchell&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0;&quot;&gt;).then((reply)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;...&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0;&quot;&gt;});&lt;/span&gt; &lt;span style=&quot;color: #999999; font-style: italic;&quot;&gt;// behaves the same&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;(And it avoids a couple anti-patterns in the process.)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Task.async()&lt;/span&gt; is inspired by ECMAScript&#39;s &lt;a href=&quot;http://wiki.ecmascript.org/doku.php?id=strawman:async_functions&quot;&gt;Async Functions strawman proposal&lt;/a&gt; and &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/hh191443.aspx&quot;&gt;C#&#39;s Async modifier&lt;/a&gt; and was implemented in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=966182&quot;&gt;bug 966182&lt;/a&gt;. It isn&#39;t limited to use in method declarations, although it&#39;s particularly helpful for them.&lt;br /&gt;&lt;br /&gt;Use it to implement your next asynchronous operation!&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/2146007198307190404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=2146007198307190404' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2146007198307190404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2146007198307190404'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2014/03/simplify-asynchronous-method.html' title='simplify asynchronous method declarations with Task.async()'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/08518329693863067865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7603765594353319606</id><published>2014-03-27T13:14:00.000-07:00</published><updated>2014-03-27T13:14:20.326-07:00</updated><title type='text'>qualifications for leadership</title><content type='html'>I&#39;ve been surprised by the negative reaction to Brendan&#39;s promotion by some of my fellow supporters of marriage equality. Perhaps I take it too much for granted that Mozillians recognize the diversity of their community in every possible respect, including politically and religiously, and that the &lt;span style=&quot;font-style: italic;&quot;&gt;only&lt;/span&gt; thing we share in common is our commitment to Mozilla&#39;s mission and the principles for participation.&lt;br /&gt;&lt;br /&gt;Those principles are reflected in our &lt;a href=&quot;http://www.mozilla.org/en-US/about/governance/policies/participation/&quot;&gt;Community Participation Agreement&lt;/a&gt;, to which Brendan has always shown fealty (since long before it was formalized, in my 15-year experience with him), and which could not possibly be clearer about the welcoming nature of Mozilla to all constructive contributors.&lt;br /&gt; &lt;br /&gt;I know that marriage equality has been a long, difficult, and painful battle, the kind that rubs nerves raw and makes it challenging to show any charity to its opponents. But they aren&#39;t all bigots, and I take Brendan at his &lt;a href=&quot;https://brendaneich.com/2014/03/inclusiveness-at-mozilla/&quot;&gt;word and deed&lt;/a&gt; that he&#39;s as committed as I am to the community&#39;s inclusive ideals (and the organization&#39;s employment policies).&lt;br /&gt; &lt;br /&gt;As Andrew Sullivan eloquently states in his recent blog post on &lt;a href=&quot;http://dish.andrewsullivan.com/2014/03/24/religious-belief-and-bigotry/&quot;&gt;Religious Belief and Bigotry&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;margin-left: 40px;&quot;&gt;&quot;Twenty years ago, I was confidently told by my leftist gay friends that Americans were all anti-gay bigots and would never, ever back marriage rights so I should stop trying to reason them out of their opposition. My friends were wrong. Americans are not all bigots. Not even close. They can be persuaded rather than attacked. And if we behave magnanimously and give maximal space for those who sincerely oppose us, then eventual persuasion will be more likely. And our victory more moral and more enduring.&quot; &lt;/div&gt;&lt;br /&gt;I&#39;m chastened to admit that I substantially shared his friends&#39; opinion twenty years ago. But I&#39;m happy to realize I was wrong. And perhaps Brendan will one day do the same. Either way, he qualifies to be a leader at any level in the Mozilla community (and organization), as do the many other Mozilla leaders whose beliefs undoubtedly differ sharply from my own.&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7603765594353319606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7603765594353319606' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7603765594353319606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7603765594353319606'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2014/03/qualifications-for-leadership.html' title='qualifications for leadership'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/08518329693863067865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-4907835732389141704</id><published>2013-10-15T17:05:00.003-07:00</published><updated>2013-10-15T17:05:53.226-07:00</updated><title type='text'>from Webapp SDK to r2d2b2g, Firefox OS Simulator, and the App Manager</title><content type='html'>A little over a year ago, on August 31, 2012, I brainstormed the outline of a &quot;Webapp SDK&quot;:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-qFEN48-NFBI/Ul2-QToFUkI/AAAAAAAAAEY/Pah7FtanWfo/s1600/2012-08-31+10.57.00.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://2.bp.blogspot.com/-qFEN48-NFBI/Ul2-QToFUkI/AAAAAAAAAEY/Pah7FtanWfo/s400/2012-08-31+10.57.00.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;That outline was the genesis for the &lt;a href=&quot;https://hacks.mozilla.org/2012/10/r2d2b2g-an-experimental-prototype-firefox-os-test-environment/&quot;&gt;r2d2b2g experiment&lt;/a&gt;, which built the &lt;a href=&quot;http://www.blueskyonmars.com/2012/11/08/r2d2b2g-is-becoming-the-firefox-os-simulator/&quot;&gt;Firefox OS Simulator&lt;/a&gt;, whose initial version hit the web on September 14, 2012 and which has gone through numerous iterations since then as we evaluated various features to enhance app development.&lt;br /&gt;&lt;br /&gt;And that experiment spurred Mozilla&#39;s &lt;a href=&quot;https://wiki.mozilla.org/DevTools&quot;&gt;Developer Tools group&lt;/a&gt;, particularly its nascent &lt;a href=&quot;https://wiki.mozilla.org/DevTools/AppTools&quot;&gt;App Tools team&lt;/a&gt;, to build Firefox&#39;s new App Manager, which landed last month and was &lt;a href=&quot;https://hacks.mozilla.org/2013/10/introducing-the-firefox-os-app-manager/&quot;&gt;introduced today on Hacks&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Despite the twisty passage from experiment to product, that initial outline bears a surprising resemblance to the App Manager feature set. The Manager checks off three of the four features on the outline&#39;s primary list—&quot;start Gaia in B2G,&quot; &quot;package app,&quot; and &quot;test app in Gaia/B2G&quot;—plus a few on its secondary list, like &quot;debug from Firefox&quot; and &quot;test on mobile device,&quot; with &quot;edit manifest in GUI&quot; well underway over in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=912912&quot;&gt;bug 912912&lt;/a&gt;. And the Simulator continues to provide B2G/Gaia via an easy-to-install addon that integrates with the Manager.&lt;br /&gt;&lt;br /&gt;Like any good product of a successful experiment, however, the Manager&#39;s reach has exceeded its progenitor&#39;s grasp! So it also gives you access to pre-installed apps, lets you take screenshots of device/Simulator screens, and will doubtless continue to sprout handy features to make app development great.&lt;br /&gt;&lt;br /&gt;So kudos to the folks who built it, and long live the App Manager!&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/4907835732389141704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=4907835732389141704' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4907835732389141704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4907835732389141704'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2013/10/from-webapp-sdk-to-r2d2b2g-firefox-os.html' title='from Webapp SDK to r2d2b2g, Firefox OS Simulator, and the App Manager'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-qFEN48-NFBI/Ul2-QToFUkI/AAAAAAAAAEY/Pah7FtanWfo/s72-c/2012-08-31+10.57.00.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-4775473125409851813</id><published>2013-08-23T10:55:00.001-07:00</published><updated>2013-08-23T10:55:06.641-07:00</updated><title type='text'>fixing this morning&#39;s mach OS X psutil bustage</title><content type='html'>If mach is broken in your mozilla-central clone on Mac OS X this morning:&lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;08-23 10:20 &amp;gt; ./mach build&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;Error running mach:&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&#39;build&#39;]&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;The error occurred in code that was called by the mach command. This is either&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;a bug in the called code itself or in the way that mach is calling it.&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;You should consider filing a bug for this issue.&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;If filing a bug, please include the full output of mach, including this error&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;message.&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;The details of the failure are as follows:&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;AttributeError: &#39;module&#39; object has no attribute &#39;TCPS_ESTABLISHED&#39;&lt;/tt&gt;&lt;br&gt; &lt;br&gt; &lt;tt&gt;&amp;nbsp; File &quot;/Users/myk/Mozilla/central/python/mozbuild/mozbuild/mach_commands.py&quot;, line 293, in build&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from mozbuild.controller.building import BuildMonitor&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp; File &quot;/Users/myk/Mozilla/central/python/mozbuild/mozbuild/controller/building.py&quot;, line 22, in &amp;lt;module&amp;gt;&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import psutil&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp; File &quot;/Users/myk/Mozilla/central/python/psutil/psutil/__init__.py&quot;, line 95, in &amp;lt;module&amp;gt;&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import psutil._psosx as _psplatform&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp; File &quot;/Users/myk/Mozilla/central/python/psutil/psutil/_psosx.py&quot;, line 48, in &amp;lt;module&amp;gt;&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _TCP_STATES_TABLE = {_psutil_osx.TCPS_ESTABLISHED : CONN_ESTABLISHED,&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Then you&#39;ve been bit by the fix for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=908296&quot;&gt;bug 908296&lt;/a&gt;. To resolve the bustage, run this command in your Hg clone:&lt;br&gt; &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt; &lt;blockquote&gt;hg status -in python/psutil | xargs rm&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Or, if you&#39;ve cloned the &lt;a href=&quot;https://github.com/mozilla/mozilla-central&quot;&gt;Git mirror&lt;/a&gt;, run this instead:&lt;br&gt; &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt; &lt;blockquote&gt;git clean -xf python/psutil&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/4775473125409851813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=4775473125409851813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4775473125409851813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4775473125409851813'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2013/08/fixing-this-mornings-mach-os-x-psutil.html' title='fixing this morning&#39;s mach OS X psutil bustage'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7658176042227879683</id><published>2013-06-07T16:04:00.000-07:00</published><updated>2013-06-07T16:04:04.952-07:00</updated><title type='text'>64-bit Linux ADB for Simulator</title><content type='html'>Thanks to the efforts of new Mozilla intern &lt;a href=&quot;https://github.com/bkase&quot;&gt;Brandon Kase&lt;/a&gt;, the &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/r2d2b2g-linux.xpi&quot;&gt;latest preview build of Firefox OS Simulator for Linux&lt;/a&gt; includes a 64-bit version of ADB, so you can push an app to an FxOS device from 64-bit Linux installations without any extra packages!&lt;br /&gt; &lt;br /&gt; Building it was tricky, because the Android SDK build scripts don&#39;t support that target. Brandon first tried simply specifying the target, which worked on an older version of ADB (1.0.24). But it failed on the latest version (1.0.31), which links with a bundled copy of libcrypto that includes 32-bit assembly.&lt;br /&gt; &lt;br /&gt; Ubuntu 13.04 (Raring) ships a 64-bit &lt;a href=&quot;http://packages.ubuntu.com/raring/android-tools-adb&quot;&gt;android-tools-adb package&lt;/a&gt;, though, so we knew it could be done. And its &lt;a href=&quot;http://packages.ubuntu.com/source/raring/android-tools&quot;&gt;source package&lt;/a&gt;&#39;s build system is much simpler than the SDK&#39;s. We just needed a binary that works on distributions with older versions of glibc than Raring&#39;s 2.17. And one that doesn&#39;t depend on a specific version of libcrypto, which varies around the Linux world; whereas Raring&#39;s ADB executable appears to need the specific version that comes with that distribution.&lt;br /&gt; &lt;br /&gt; So Brandon modified the source package&#39;s Makefile to link libcrypto statically (note the absolute path to libcrypto.a, which may vary):&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt; &lt;tt&gt;--- debian/makefiles/adb.mk&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013-03-26 14:15:41.000000000 -0700&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;+++ adb-static-crypto.mk&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013-06-06 16:51:52.794521267 -0700&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;@@ -40,15 +40,16 @@&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;CPPFLAGS+= -I.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;CPPFLAGS+= -I../include&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;CPPFLAGS+= -I../../../external/zlib&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;+CPPFLAGS+= -I/usr/include/openssl&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;-LIBS+= -lc -lpthread -lz -lcrypto&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;+LIBS+= -lc -lpthread -lz -ldl&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;OBJS= $(SRCS:.c=.o)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;all: adb&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;adb: $(OBJS)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp; $(CC) -o $@ $(LDFLAGS) $(OBJS) /usr/lib/x86_64-linux-gnu/libcrypto.a $(LIBS)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;clean:&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt; &lt;/tt&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rm -rf $(OBJS) adb&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt; Then I copied the source package to my CentOS 16 build machine (which has glibc 2.12) and built it there. After which the resultant executable worked on all the distributions we tested: Ubuntu 13.04, Ubuntu 10.04, CentOS 16, and Arch Linux (kernel 3.9.3-1-ARCH).&lt;br /&gt; &lt;br /&gt; Presumably it will work on others too. But if it still doesn&#39;t work for you, &lt;a href=&quot;https://github.com/mozilla/r2d2b2g/issues&quot;&gt;let us know&lt;/a&gt;!&lt;br /&gt; &lt;br /&gt; And if you just want the ADB executable, sans Simulator, &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/adb-1.0.31-linux64.zip&quot;&gt;here it is&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7658176042227879683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7658176042227879683' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7658176042227879683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7658176042227879683'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2013/06/64-bit-linux-adb-for-simulator.html' title='64-bit Linux ADB for Simulator'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-2950140535922521480</id><published>2012-10-02T12:08:00.001-07:00</published><updated>2012-10-02T12:13:24.657-07:00</updated><title type='text'>r2d2b2g implementation details</title><content type='html'>Over at Mozilla Hacks, I just &lt;a href=&quot;https://hacks.mozilla.org/2012/10/r2d2b2g-an-experimental-prototype-firefox-os-test-environment/&quot;&gt;blogged about r2d2b2g&lt;/a&gt; (ratta-datta-batta-ga), an experimental prototype test environment for Firefox OS that makes it drop-dead simple to test your app in &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Boot_to_Gecko/Using_the_B2G_desktop_client&quot;&gt;B2G Desktop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;r2d2b2g is an addon, but it bundles &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/&quot;&gt;B2G Desktop nightly builds&lt;/a&gt;, which are native executables, and thus the addon is platform-specific, with packages available for &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/r2d2b2g-mac.xpi&quot;&gt;Mac&lt;/a&gt;, &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/r2d2b2g-linux.xpi&quot;&gt;Linux 32-bit&lt;/a&gt;, and &lt;a href=&quot;https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/r2d2b2g-windows.xpi&quot;&gt;Windows&lt;/a&gt; (caveat: B2G Desktop for Windows currently crashes on startup due to bug &lt;strike&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=794662&quot;&gt;794662&lt;/a&gt;&lt;/strike&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=795484&quot;&gt;795484&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The packages are large, 50-60MB each, partly because of the executables, but mostly because they also bundle &lt;a href=&quot;https://wiki.mozilla.org/Gaia&quot;&gt;Gaia&lt;/a&gt; profiles, including all default apps. (It&#39;s probably worth bundling a few of these, for demonstration purposes, but we could make the packages much smaller by removing the rest.)&lt;br /&gt;&lt;br /&gt;r2d2b2g uses the &lt;a href=&quot;https://addons.mozilla.org/en-US/developers/builder&quot;&gt;Add-on SDK&lt;/a&gt; as its addon framework and relies on several third-party addon modules (&lt;a href=&quot;https://github.com/ochameau/jetpack-subprocess&quot;&gt;subprocess&lt;/a&gt;, &lt;a href=&quot;https://github.com/voldsoftware/menuitems-jplib&quot;&gt;menuitems&lt;/a&gt;) along with some Python utilities (&lt;a href=&quot;https://github.com/mozilla/mozdownload&quot;&gt;mozdownload&lt;/a&gt;, &lt;a href=&quot;https://github.com/mozilla/mozbase&quot;&gt;mozbase&lt;/a&gt;) to download and unpack B2G Desktop builds. Plus Gaia, although recent work to bundle Gaia profiles with B2G Desktop builds may break that dependency.&lt;br /&gt;&lt;br /&gt;I&#39;ve demoed the project to a variety of folks over the last couple weeks, and I&#39;ve received a bunch of positive feedback about it. B2G Desktop combines approachability with phoneliness and is the best existing test environment for Firefox OS. But its configuration is a challenge, and it provides no obvious affordances for installing and testing your own app. r2d2b2g shows that these problems are tractable (even if it doesn&#39;t yet solve them all) and demonstrates a promising product path.&lt;br /&gt;&lt;br /&gt;After seeing r2d2b2g, Kevin Dangoor drafted a &lt;a href=&quot;https://docs.google.com/document/d/1OptOCWO4b_b1aa4Gtwr82_q-mW5ybteoWNpPAJUIFNk/edit&quot;&gt;PRD for a Firefox OS Simulator&lt;/a&gt; that I&#39;ll use to guide further development. Interested in participating? Clone the code from its &lt;a href=&quot;https://github.com/mozilla/r2d2b2g&quot;&gt;GitHub repository&lt;/a&gt; and contribute your improvements!&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/2950140535922521480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=2950140535922521480' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2950140535922521480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2950140535922521480'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2012/10/r2d2b2g-implementation-details.html' title='r2d2b2g implementation details'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-704490864096897779</id><published>2012-03-07T18:04:00.001-08:00</published><updated>2012-03-07T18:04:16.546-08:00</updated><title type='text'>Next/Previous Tab on Mac Consistent At Last</title><content type='html'>After blogging about the &lt;a href=&quot;http://mykzilla.blogspot.com/2011/09/nextprevious-tab-keyboard-shortcuts-on.html&quot;&gt;inconsistency of keyboard shortcuts for Next/Previous Tab on Mac&lt;/a&gt; last year, I found out that Firefox, Thunderbird, and Komodo also support Command + Option + LeftArrow|RightArrow, and Adium has a General &amp;gt; &quot;Switch tabs with&quot; pref that I can set to the same chord.&lt;br&gt; &lt;br&gt; (Later, I switched IM clients from Adium to InstantBird, which also supports that combination.)&lt;br&gt; &lt;br&gt; That left Terminal, which I couldn&#39;t figure out how to configure to support the same shortcut. Until now.&lt;br&gt; &lt;br&gt; I&#39;m not sure if it&#39;s because I have since upgraded to Mac OS X 10.7 (Lion). I could&#39;ve sworn I tried something like this back when I wrote that previous blog post, and it didn&#39;t work.&lt;br&gt; &lt;ol&gt; &lt;li&gt;Go to System Preferences &amp;gt; Keyboard &amp;gt; Keyboard Shortcuts &amp;gt; Application Shortcuts.&lt;/li&gt; &lt;li&gt;Press the + (plus) button.&lt;/li&gt; &lt;li&gt;Select &quot;Other...&quot; from the Application menu and select Utilities &amp;gt; Terminal from the file picker dialog.&lt;/li&gt; &lt;li&gt;Enter &quot;Select Next Tab&quot; (without the quotes) into the Menu Title field.&lt;/li&gt; &lt;li&gt;Focus the Keyboard Shortcut field and press Command + Option + RightArrow to set the keyboard shortcut, which will appear as &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt; &amp;#8997;&amp;#8984;&amp;#8594;.&lt;/li&gt; &lt;li&gt;Press the Add button.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Repeat steps 4-6 with &quot;Select Previous Tab&quot; and Command + Option + LeftArrow, which will appear as &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt; &amp;#8997;&amp;#8984;&amp;#8592;.&lt;br&gt; &lt;/p&gt; &lt;p&gt;Those shortcuts should now work in Terminal.&lt;br&gt; &lt;/p&gt; &lt;p&gt;With this change, all five of my current primary productivity applications on Mac (Firefox, Thunderbird, Instantbird, Komodo, and Terminal) support a consistent pair of keyboard shortcuts for Next/Previous Tab, which are two of the most common commands I issue in all of those apps.&lt;br&gt; &lt;/p&gt; &lt;p&gt;Woot!&lt;br&gt; &lt;br&gt; &lt;/p&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/704490864096897779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=704490864096897779' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/704490864096897779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/704490864096897779'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2012/03/nextprevious-tab-on-mac-consistent-at.html' title='Next/Previous Tab on Mac Consistent At Last'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-4717272844287397408</id><published>2012-03-07T13:46:00.001-08:00</published><updated>2012-03-07T13:46:45.454-08:00</updated><title type='text'>generating a fingerprint for an SSH key</title><content type='html'>After recently &lt;a href=&quot;https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation&quot;&gt;discovering a security vulnerability&lt;/a&gt; that allows an attacker to add an SSH key to a GitHub user account, GitHub is requiring all users to audit their SSH keys. Its &lt;a href=&quot;https://github.com/settings/ssh/audit&quot;&gt;audit page&lt;/a&gt; lists one&#39;s keys by type and fingerprint, but it doesn&#39;t say how it generated the fingerprint or how to generate one for your local copy of a key to compare it with. Nor does it let you see the whole key.&lt;br&gt; &lt;br&gt; And since I don&#39;t generate such fingerprints very often, I didn&#39;t know how to do it. So I tried &lt;tt&gt;cksum&lt;/tt&gt;, &lt;tt&gt;md5&lt;/tt&gt;, and &lt;tt&gt;shasum&lt;/tt&gt; on my Mac, but none of their checksums matched. Turns out the tool to use is &lt;tt&gt;ssh-keygen&lt;/tt&gt;:&lt;br&gt; &lt;br&gt; &lt;tt&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; ssh-keygen -l -f path/to/keyfile&lt;/tt&gt;&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/4717272844287397408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=4717272844287397408' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4717272844287397408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4717272844287397408'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2012/03/generating-fingerprint-for-ssh-key.html' title='generating a fingerprint for an SSH key'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-3538011216013400890</id><published>2011-10-17T10:38:00.001-07:00</published><updated>2011-10-17T10:38:52.345-07:00</updated><title type='text'>Mozilla Status Board Text is Markdown</title><content type='html'>It isn&#39;t documented anywhere that I can find, but Benjamin Smedberg&#39;s handy &lt;a href=&quot;http://benjamin.smedbergs.us/weekly-updates.fcgi/&quot;&gt;Mozilla Status Board&lt;/a&gt; tool parses status text as &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt;, which is how I added a &lt;b&gt;Didn&#39;t&lt;/b&gt; header to the &lt;b&gt;Done&lt;/b&gt; section of my &lt;a href=&quot;http://benjamin.smedbergs.us/weekly-updates.fcgi/user/mykmelez&quot;&gt;status update&lt;/a&gt; with all the things I planned to do last week but didn&#39;t make happen. (The &lt;b&gt;Done&lt;/b&gt;, &lt;b&gt;Next&lt;/b&gt;, and &lt;b&gt;Coordination&lt;/b&gt; headers are all &lt;b&gt;H4&lt;/b&gt;s, so I prepended four hash marks to &lt;tt&gt;#### &lt;b&gt;Didn&#39;t&lt;/b&gt;&lt;/tt&gt; to make it the same size).&lt;br&gt; &lt;br&gt; (Note that &lt;tt&gt;[&lt;a href=&quot;http://daringfireball.net/projects/markdown/basics&quot;&gt;Markdown-style links&lt;/a&gt;](&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://daringfireball.net/projects/markdown/basics&quot;&gt;http://daringfireball.net/projects/markdown/basics&lt;/a&gt;)&lt;/tt&gt; don&#39;t work and cause the entire section in which they appear to remain unparsed. However angle-bracketed URLs, as recommended by &lt;tt&gt;&lt;a href=&quot;http://labs.apache.org/webarch/uri/rfc/rfc3986.html#delimiting&quot;&gt;RFC 3986&lt;/a&gt; &lt;a class=&quot;moz-txt-link-rfc2396E&quot; href=&quot;http://labs.apache.org/webarch/uri/rfc/rfc3986.html#delimiting&quot;&gt;&amp;lt;http://labs.apache.org/webarch/uri/rfc/rfc3986.html#delimiting&amp;gt;&lt;/a&gt;&lt;/tt&gt;, work when added to the ends of lines. And &quot;&lt;tt&gt;bug ###&lt;/tt&gt;&quot; references are auto-linkified.)&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/3538011216013400890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=3538011216013400890' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3538011216013400890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3538011216013400890'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/10/mozilla-status-board-text-is-markdown.html' title='Mozilla Status Board Text is Markdown'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-3002229182794927051</id><published>2011-09-16T08:32:00.001-07:00</published><updated>2011-09-16T08:32:13.528-07:00</updated><title type='text'>to all the bugs I&#39;ve filed before</title><content type='html'>The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=20142&quot;&gt;first bug I filed&lt;/a&gt; was marked as &lt;i&gt;duplicate&lt;/i&gt;; the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=20187&quot;&gt;second&lt;/a&gt; was &lt;i&gt;worksforme&lt;/i&gt; (although Chris Petersen could reproduce it before he couldn&#39;t anymore); and the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=24840&quot;&gt;third&lt;/a&gt; was &lt;i&gt;invalid&lt;/i&gt; (it was the spec, not the code, that was errant). The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=25082&quot;&gt;fourth&lt;/a&gt; is the first that was &lt;i&gt;fixed&lt;/i&gt;.&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/3002229182794927051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=3002229182794927051' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3002229182794927051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/3002229182794927051'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/09/to-all-bugs-ive-filed-before.html' title='to all the bugs I&#39;ve filed before'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-2481752447493541518</id><published>2011-09-09T17:01:00.000-07:00</published><updated>2011-09-09T17:00:36.580-07:00</updated><title type='text'>&quot;Next/Previous Tab&quot; Keyboard Shortcuts on Windows</title><content type='html'>On my Windows laptop, I use the following four programs with tabbed interfaces on a regular basis:&lt;br&gt; &lt;ul&gt; &lt;li&gt;Firefox&lt;/li&gt; &lt;li&gt;Thunderbird&lt;/li&gt; &lt;li&gt;Instantbird&lt;/li&gt; &lt;li&gt;Komodo IDE&lt;/li&gt; &lt;/ul&gt; (I&#39;d love to have tabs in my Windows terminal app of choice, &lt;a href=&quot;http://code.google.com/p/mintty/&quot;&gt;Mintty&lt;/a&gt;, but its developer &lt;a href=&quot;http://code.google.com/p/mintty/issues/detail?id=8&quot;&gt;thinks tabs should be implemented at the window manager level&lt;/a&gt;.)&lt;br&gt; &lt;br&gt; Unlike &lt;a href=&quot;http://mykzilla.blogspot.com/2011/09/nextprevious-tab-keyboard-shortcuts-on.html&quot;&gt;on my Mac&lt;/a&gt;, all those programs implement the same keyboard shortcut for switching to the previous/next tab, and it&#39;s a simple one with just a two-key chord: Control + PageUp / PageDown.&lt;br&gt; &lt;br&gt; Ha!&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/2481752447493541518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=2481752447493541518' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2481752447493541518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/2481752447493541518'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/09/nextprevious-tab-keyboard-shortcuts-on_09.html' title='&quot;Next/Previous Tab&quot; Keyboard Shortcuts on Windows'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-1639696569383368856</id><published>2011-09-08T17:03:00.001-07:00</published><updated>2011-09-08T17:03:31.723-07:00</updated><title type='text'>&quot;Next/Previous Tab&quot; Keyboard Shortcuts on Mac</title><content type='html'>On my Mac, I use the following five programs with tabbed interfaces on a regular basis:&lt;br&gt; &lt;ul&gt; &lt;li&gt;Firefox&lt;/li&gt; &lt;li&gt;Thunderbird&lt;/li&gt; &lt;li&gt;Adium&lt;/li&gt; &lt;li&gt;Terminal&lt;/li&gt; &lt;li&gt;Komodo IDE&lt;/li&gt; &lt;/ul&gt; &lt;br&gt; And those programs implement the following five different keyboard shortcuts for switching to the previous/next tab:&lt;br&gt; &lt;ul&gt; &lt;li&gt;Control + PageUp / PageDown (Firefox, Thunderbird)&lt;br&gt; &lt;/li&gt; &lt;li&gt;Command + LeftArrow / RightArrow (Adium)&lt;/li&gt; &lt;li&gt;Command + PageUp / PageDown (Komodo IDE)&lt;/li&gt; &lt;li&gt;Command + Shift + [ / ] (Terminal)&lt;/li&gt; &lt;li&gt;Command + Shift + LeftArrow / RightArrow (Terminal)&lt;/li&gt; &lt;/ul&gt; Hrm.&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/1639696569383368856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=1639696569383368856' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1639696569383368856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1639696569383368856'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/09/nextprevious-tab-keyboard-shortcuts-on.html' title='&quot;Next/Previous Tab&quot; Keyboard Shortcuts on Mac'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-4435398397928021957</id><published>2011-09-07T14:25:00.000-07:00</published><updated>2011-09-20T11:37:47.397-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>gitflow vs. the SDK</title><content type='html'>&lt;a href=&quot;http://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;gitflow&lt;/a&gt; is a model for developing and shipping software using &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt;. &lt;a href=&quot;https://addons.mozilla.org/en-US/developers/builder&quot;&gt;Add-on SDK&lt;/a&gt; uses Git, and &lt;a href=&quot;https://wiki.mozilla.org/Jetpack/Development_Process&quot;&gt;it too has a model&lt;/a&gt;, which is similar to gitflow in some ways and different in others. Here&#39;s a comparison of the two and some thoughts on why they vary.&lt;br /&gt;&lt;br /&gt;First, some similarities: both models use multiple branches, including an ongoing branch for general development and another ongoing branch that is always ready for release (their names vary, but that&#39;s a trivial difference). Both also permit development on temporary feature (topic) branches and utilize a branch for stabilization of the codebase leading up to a release. And both accommodate the occasional hotfix release in similar ways.&lt;br /&gt;&lt;br /&gt;(Aside: gitflow appears to encourage feature branches, but I tend to agree with &lt;a href=&quot;http://martinfowler.com/bliki/FeatureBranch.html&quot;&gt;Martin Fowler&lt;/a&gt; through &lt;a href=&quot;http://pauljulius.com/blog/2009/09/03/feature-branches-are-poor-mans-modular-architecture/&quot;&gt;Paul Julius&lt;/a&gt; that continuously integrating with a central development branch is preferable.)&lt;br /&gt;&lt;br /&gt;Second, some differences: the SDK uses a single ongoing stabilization branch, while gitflow uses multiple short-lived stabilization branches, one per release. And in the SDK, stabilization fixes land on the development branch and then get cherry-picked to the stabilization branch; whereas in gitflow, stabilization fixes land on the stabilization branch and then get merged to the development branch.&lt;br /&gt;&lt;br /&gt;(Also, the SDK releases on a regular time/quality-driven &quot;train&quot; schedule similar to &lt;a href=&quot;http://mozilla.github.com/process-releases/draft/development_overview/&quot;&gt;Firefox&#39;s&lt;/a&gt;, while gitflow may anticipate an irregular feature/quality-driven release schedule, although it can be applied to projects with train schedules, like &lt;a href=&quot;http://lloyd.io/applying-gitflow&quot;&gt;BrowserID&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;A benefit of gitflow&#39;s approach to stabilization is that its change graph includes only distinct changes, whereas cherry-picking adds duplicate, semi-associated changes to the SDK&#39;s graph. However, a downside of gitflow&#39;s approach is that developers must attend to where they land changes, whereas SDK developers always land changes on its development branch, and its release manager takes on the chore of getting those changes onto the stabilization branch.&lt;br /&gt;&lt;br /&gt;(It isn&#39;t clear what happens in gitflow if a change lands on the development branch while a release is being stabilized and afterward is identified as being wanted for the release. Perhaps it gets cherry-picked?)&lt;br /&gt;&lt;br /&gt;Overall, these models seem fairly similar, and it wouldn&#39;t be too hard to make the SDK&#39;s be essentially gitflow. We would just need to stipulate that developers land stabilization fixes on the stabilization branch, and the release manager&#39;s job would then be to merge that branch back to the development branch periodically instead of cherry-picking in the other direction.&lt;br /&gt;&lt;br /&gt;However, it isn&#39;t clear to me that such a change would be preferable. What do you think?</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/4435398397928021957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=4435398397928021957' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4435398397928021957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/4435398397928021957'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/09/gitflow-vs-sdk.html' title='gitflow vs. the SDK'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-8020854027593557159</id><published>2011-08-21T22:51:00.000-07:00</published><updated>2011-09-20T11:38:43.594-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>Administer Git? Get a job!</title><content type='html'>As I &lt;a href=&quot;http://mykzilla.blogspot.com/2011/08/why-add-on-sdk-doesnt-land-in-mozilla.html&quot;&gt;mentioned recently&lt;/a&gt;, &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; (on &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;) has become a popular VCS for Mozilla-related projects.&lt;br&gt; &lt;br&gt; GitHub is a fantastic tool for collaboration, and the site does a great job running a Git server, but given the importance of the VCS, and because Mozilla&#39;s automated test machines don&#39;t have access to servers outside the Mozilla firewall, Mozilla should &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=528360&quot;&gt;run its own Git server&lt;/a&gt; (that syncs with GitHub, so developers can continue to use that site for collaboration).&lt;br&gt; &lt;br&gt; Unfortunately, the organization doesn&#39;t have a great deal of in-house Git server administration experience, but we&#39;re &lt;a href=&quot;http://hire.jobvite.com/CompanyJobs/Careers.aspx?c=qpX9Vfwa&amp;amp;cs=9Kt9Vfw1&amp;amp;page=Job%20Description&amp;amp;j=oIfPVfwr&quot;&gt;hiring systems administrators&lt;/a&gt;, so if you grok Git hosting and meet the other requirements, &lt;a href=&quot;http://hire.jobvite.com/CompanyJobs/Careers.aspx?c=qpX9Vfwa&amp;amp;page=Apply&amp;amp;j=oIfPVfwr&quot;&gt;send in your resume&lt;/a&gt;!&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/8020854027593557159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=8020854027593557159' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/8020854027593557159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/8020854027593557159'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/08/administer-git-get-job.html' title='Administer Git? Get a job!'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-1307851753993957811</id><published>2011-08-11T13:33:00.000-07:00</published><updated>2011-09-20T11:38:43.545-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>Why the Add-on SDK Doesn&#39;t &quot;Land in mozilla-central&quot;</title><content type='html'>Various Mozillians sometimes suggest that the Add-on SDK should &quot;land in mozilla-central&quot; and wonder why it doesn&#39;t. Here&#39;s why.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Add-on SDK depends on features of Firefox (and Gecko), and the SDK&#39;s development process synchronizes its release schedule with Firefox&#39;s. Nevertheless, the SDK isn&#39;t a component of Firefox, it&#39;s a distinct product with its own codebase, development process, and release schedule.&lt;br /&gt;&lt;br /&gt;Mozilla makes multiple products that interact with Firefox (addons.mozilla.org, a.k.a. AMO, is another), and distinct product development efforts should generally utilize separate code repositories, to avoid contention between the projects regarding tree management, the stages of the software development lifecycle (i.e. when which branch is in alpha, beta, etc.), and the schedules for merging between branches.&lt;br /&gt;&lt;br /&gt;There can be exceptions to that principle, for products that share a bunch of code, use the same development process, and have the same release schedule (cf. the Firefoxes for desktop and mobile). But the SDK is not one of those exceptions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It shares no code with Firefox. Its process utilizes one fewer branch and six fewer weeks of development than the Firefox development process, to minimize the burden of branch management and stabilization build testing on its much smaller development team and testing community. And it merges its branches and ships its releases two weeks before Firefox, to give AMO and addon developers time to update addons for each new version of the browser.&lt;br /&gt;&lt;br /&gt;Living in its own repository makes it possible for the SDK to have these differences in its process, and it also makes it possible for us to change the process in the future, for example to move up the branch/release dates one week, if we discover that AMO and addon developers would benefit from three weeks of lead time; or to ship twice as frequently, if we determine that doing so would get APIs for new Firefox features into developers&#39; hands faster.&lt;br /&gt;&lt;br /&gt;Finally, the Jetpack project has a vibrant community of contributors (including both organization staff and volunteers) who strongly prefer contributing via Git and &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;, because they find it easier, more efficient, and more enjoyable, and for whom working in mozilla-central would mean taking too great a hit on their productivity, passion, and participation.&lt;br /&gt;&lt;br /&gt;Mozilla Labs innovates not only on features and user experience but also on development process and tools, and while Jetpack didn&#39;t lead the way to GitHub, we were a fast follower once early experiments validated its benefits. And our experience since then has only confirmed our decision, as GitHub has proven to be a fantastic tool for branch management, code review/integration, and other software development tasks.&lt;br /&gt;&lt;br /&gt;Other Mozillians agree: there are now almost two hundred members and over one hundred repositories (not counting forks) in the Mozilla organization on GitHub, with major initiatives like &lt;a href=&quot;https://github.com/mozilla/openwebapps&quot;&gt;Open Web Apps&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/browserid&quot;&gt;BrowserID&lt;/a&gt; being hosted there, not to mention all the Mozilla projects in user repositories, including &lt;a href=&quot;https://github.com/graydon/rust&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://github.com/jbalogh/zamboni&quot;&gt;Zamboni&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Even if we don&#39;t make mozilla-central the canonical repository for SDK development, however, we could still periodically drop a copy of the SDK source against which Firefox changes should be tested into mozilla-central. And doing so would theoretically make it easier for Firefox developers to run SDK tests when they discover that a Firefox change breaks the SDK, because they wouldn&#39;t have to get the SDK first.&lt;br /&gt;&lt;br /&gt;But the benefit to Firefox developers is minimal. Currently, we periodically drop a reference to the SDK revision against which Firefox changes should be tested, and developers have to do the following to initiate testing:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp; wget -i testing/jetpack/jetpack-location.txt -O addon-sdk.tar.bz2
+ &lt;br /&gt;&amp;nbsp; tar xjf addon-sdk.tar.bz2
+ &lt;br /&gt;&amp;nbsp; cd addon-sdk-[revision]
+ &lt;br /&gt;&amp;nbsp; source bin/activate
+ &lt;br /&gt;&amp;nbsp; cfx testall --binary path/to/Firefox/build
+ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We can simplify this to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp; testing/jetpack/clone
+ &lt;br /&gt;&amp;nbsp; cd addon-sdk
+ &lt;br /&gt;&amp;nbsp; source bin/activate
+ &lt;br /&gt;&amp;nbsp; cfx testall --binary path/to/Firefox/build
+ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Whereas if we dropped the source instead of just a reference to it, it would instead be the only slightly simpler: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp; cd testing/jetpack/addon-sdk
+ &lt;br /&gt;&amp;nbsp; source bin/activate
+ &lt;br /&gt;&amp;nbsp; cfx testall --binary path/to/Firefox/build
+ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Either of which can be abstracted to a single make target.&lt;br /&gt;&lt;br /&gt;But if we were to drop source instead of a reference thereto, the drops would be larger and riskier changes. And test automation would still need to be updated to support Git (or at least continue to use brittle Git -&amp;gt; Mercurial mirroring), in order to run tests on SDK changes, which periodic source drops do not address.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, this doesn&#39;t mean that no SDK code will ever land in mozilla-central.&lt;br /&gt;&lt;br /&gt;Various folks have discussed integrating parts of the SDK into core Firefox&lt;span class=&quot;st&quot;&gt;—&lt;/span&gt;including stable API implementations, the module loader, and possibly the bootstrapper&lt;span class=&quot;st&quot;&gt;—&lt;/span&gt;to reduce the size of addon packages, improve addon startup times, and decrease addon memory consumption. I have written a very preliminary draft of a &lt;a href=&quot;https://wiki.mozilla.org/Features/Jetpack/Land_Parts_of_Add-on_SDK_In_Core&quot;&gt;feature page describing this work&lt;/a&gt;, although I do not think it is a high priority at the moment, relative to the other priorities identified in the &lt;a href=&quot;https://wiki.mozilla.org/Jetpack/Roadmap&quot;&gt;Jetpack roadmap&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And Dietrich Ayala recently suggested &lt;a href=&quot;http://groups.google.com/group/mozilla.dev.planning/browse_frm/thread/2b57ebe15aad4130&quot;&gt;integrating the SDK into core Firefox for use by core features&lt;/a&gt;, by which he presumably also means the API implementations/module loader/bootstrapper rather than the command-line tool for testing and packaging addons.&lt;br /&gt;&lt;br /&gt;Nevertheless, I am (and, I suspect, the whole Jetpack team is) even open to discussing integration of the command-line tool (or its replacement by a graphical equivalent), merging together the two products, and erasing the distinction between them, just as Firefox ships with core features for web development.&amp;nbsp; We&#39;ve even drafted a &lt;a href=&quot;https://wiki.mozilla.org/Features/Jetpack/Add-on_SDK_as_an_Addon&quot;&gt;feature page for converting the SDK into an addon&lt;/a&gt;, which is a big step in that direction.&lt;br /&gt;&lt;br /&gt;But until that happens, farther on up the road, the SDK is its own product that we develop with its own process and ship on its own schedule. And it has good reason to live in its own repository, and a Git one at that, as do the many (and growing number of) other Mozilla projects using similar processes and tools, which our community-wide development, collaboration, and testing infrastructure must evolve to accommodate.</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/1307851753993957811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=1307851753993957811' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1307851753993957811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1307851753993957811'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2011/08/why-add-on-sdk-doesnt-land-in-mozilla.html' title='Why the Add-on SDK Doesn&#39;t &quot;Land in mozilla-central&quot;'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-6715608859512848344</id><published>2010-12-02T11:07:00.001-08:00</published><updated>2011-09-20T11:38:43.568-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>SDK Training and More at Add-on-Con</title><content type='html'>&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt;Next Wednesday, December 8, I&#39;ll be at &lt;a href=&quot;http://addoncon.com/&quot;&gt;Add-on-Con&lt;/a&gt;.&lt;br&gt; &lt;br&gt; In the morning, I&#39;ll conduct a training session introducing Mozilla&#39;s new Add-on SDK, which makes it faster and easier to build Firefox add-ons. Afterwards, I&#39;ll be around and about to discuss add-ons and answer questions about the SDK and add-on development generally.&lt;br&gt; &lt;br&gt; Lots of other Mozilla folks will also be on hand over the course of the two-day conference, including &lt;a href=&quot;http://www.oxymoronical.com/&quot;&gt;Dave Townsend&lt;/a&gt;, Jorge Villalobos, &lt;a href=&quot;http://jboriss.wordpress.com/&quot;&gt;Jeniffer Boriss&lt;/a&gt;, &lt;a href=&quot;http://starkravingfinkle.org/blog/&quot;&gt;Mark Finkle&lt;/a&gt;, and &lt;a href=&quot;http://blog.fligtar.com/&quot;&gt;Justin Scott&lt;/a&gt;. A rockin&#39; time should be had by all. Join us!&lt;br&gt; &lt;br&gt; &lt;/div&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/6715608859512848344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=6715608859512848344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/6715608859512848344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/6715608859512848344'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/12/sdk-training-and-more-at-add-on-con.html' title='SDK Training and More at Add-on-Con'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-1323551422046235302</id><published>2010-11-27T20:47:00.001-08:00</published><updated>2011-09-20T11:38:43.550-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>Further Adventures In Git(/Hub)ery</title><content type='html'>&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt; This evening I decided to check if there were any outstanding pull requests for the SDK repository (to which I haven&#39;t been paying attention).&lt;br&gt; &lt;br&gt; There were! The oldest was &lt;a href=&quot;https://github.com/mozilla/addon-sdk/pull/29&quot;&gt;pull request 29&lt;/a&gt; from Thomas Bassetto, which contains two small fixes (&lt;a href=&quot;https://github.com/tbassetto/addon-sdk/commit/8268334070d03a896d5c006d1b4db94d4cb44b17&quot;&gt;first&lt;/a&gt;, &lt;a href=&quot;https://github.com/tbassetto/addon-sdk/commit/666ad7a99e05e338348dfc579d5b1f75e8d3bb1b&quot;&gt;second&lt;/a&gt;) to the docs.&lt;br&gt; &lt;br&gt; So I fetched the branch of his fork in which the changes reside:&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git fetch &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;https://github.com/tbassetto/addon-sdk.git&quot;&gt;https://github.com/tbassetto/addon-sdk.git&lt;/a&gt; master&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; But that branch (and the fork in general) is a few weeks out-of-date, so &quot;&lt;tt&gt;git diff HEAD FETCH_HEAD&lt;/tt&gt;&quot; showed a bunch of changes, and it was unclear how painful the merge would be.&lt;br&gt; &lt;br&gt; Thus I decided to try cherry-picking the changes, my first time using &quot;&lt;tt&gt;git cherry-pick&lt;/tt&gt;&quot;.&lt;br&gt; &lt;br&gt; The first one went great:&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git cherry-pick 8268334070d03a896d5c006d1b4db94d4cb44b17&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;Finished one cherry-pick.&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;[master ceadb1f] Fixed an internal link in the widget doc&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Except that I realized afterward I hadn&#39;t added &quot;r,a=myk&quot; to the commit message. So I tried &quot;&lt;tt&gt;git commit --amend&lt;/tt&gt;&quot; for the first time, which worked just fine:&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git commit --amend&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;[master 2d674a6] Fixed an internal link in the widget doc; r,a=myk&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Next time I&#39;ll remember to use the &quot;&lt;tt&gt;--edit&lt;/tt&gt;&quot; flag to &quot;&lt;tt&gt;git cherry-pick&lt;/tt&gt;&quot;, which lets one &quot;edit the commit message prior to committing.&quot;&lt;br&gt; &lt;br&gt; The second cherry-pick was more complicated, because I only wanted one of the two changes in the commit (in &lt;a href=&quot;https://github.com/tbassetto/addon-sdk/commit/666ad7a99e05e338348dfc579d5b1f75e8d3bb1b#commitcomment-204023&quot;&gt;my review&lt;/a&gt;, I had identified the second change as unnecessary); and, as it turned out, also because there was a merge conflict with other commits.&lt;br&gt; &lt;br&gt; I started by cherry-picking the commit with the &quot;&lt;tt&gt;--no-commit&lt;/tt&gt;&quot; option (so I could remove the second change):&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git cherry-pick --no-commit 666ad7a99e05e338348dfc579d5b1f75e8d3bb1b&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;Automatic cherry-pick failed.&amp;nbsp; After resolving the conflicts,&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;mark the corrected paths with &#39;git add &amp;lt;paths&amp;gt;&#39; or &#39;git rm &amp;lt;paths&amp;gt;&#39; and commit the result.&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;When commiting, use the option &#39;-c 666ad7a&#39; to retain authorship and message.&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; The conflict was trivial, and I knew where it was, so I resolved it manually (instead of trying &quot;&lt;tt&gt;git mergetool&lt;/tt&gt;&quot; for the first time), removed the second change, added the merged file, and committed the result, using the &quot;&lt;tt&gt;-c&lt;/tt&gt;&quot; option to preserve the original author and commit message while allowing me to edit the message to add &quot;r,a=myk&quot;:&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git add packages/addon-kit/docs/request.md&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;$ git commit -c 666ad7a&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;[master 774d1cb] Completed the example in the Request module documentation; r,a=myk&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;&amp;nbsp;1 files changed, 1 insertions(+), 0 deletions(-)&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Then I used &quot;&lt;tt&gt;gitg&lt;/tt&gt;&quot; and &quot;&lt;tt&gt;git log master ^upstream/master&lt;/tt&gt;&quot; to verify that the commits looked good to go, after which I pushed them:&lt;br&gt; &lt;br&gt; &lt;blockquote&gt;&lt;tt&gt;$ git push upstream master&lt;/tt&gt;&lt;br&gt; &lt;tt&gt;[git&#39;s standard obscure and disconcerting gobbledygook]&lt;/tt&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;br&gt; Finally, I closed the pull request with &lt;a href=&quot;https://github.com/mozilla/addon-sdk/pull/29#issuecomment-570630&quot;&gt;this comment&lt;/a&gt; that summarized what I did and provided links to the cherry-picked commits.&lt;br&gt; &lt;br&gt; It would have been nice if the cherry-picked commit that didn&#39;t have merge conflicts (and which I didn&#39;t change in the process of merging) had kept its original commit ID, but I sense that that is somehow a fundamental violation of the model.&lt;br&gt; &lt;br&gt; It would also have been nice if the cherry-picked commit messages had been automatically annotated with references to the original commits.&lt;br&gt; &lt;br&gt; But overall the process seemed pretty reasonable, it was fairly easy to do what I wanted and recover from mistakes, and the author, committer, reviewer, and approver are clearly indicated in the cherry-picked commits (&lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/2d674a6ea84d3be88b5365b2d24b994297a60d7a&quot;&gt;first&lt;/a&gt;, &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/774d1cbf49e152a030a0bf6cbde7b4139c8c3f49&quot;&gt;second&lt;/a&gt;).&lt;br&gt; &lt;br&gt; [Also &lt;a href=&quot;http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/430750c65fe80231&quot;&gt;posted to the discussion group&lt;/a&gt;.]&lt;br&gt; &lt;br&gt; &lt;/div&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/1323551422046235302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=1323551422046235302' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1323551422046235302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/1323551422046235302'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/11/further-adventures-in-githubery.html' title='Further Adventures In Git(/Hub)ery'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7960433840999647174</id><published>2010-11-27T20:39:00.001-08:00</published><updated>2011-09-20T11:38:43.583-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>More Git/Hub Workflow Experiences</title><content type='html'>After posting about my &lt;a href=&quot;http://mykzilla.blogspot.com/2010/11/github-workflow-experiences.html&quot;&gt;first Git/Hub workflow experiences&lt;/a&gt;, I got lots of helpful input from various folks, particularly Erik Vold, Irakli Gozalishvili, and Brian Warner, which led me to refine my process for handling pull requests:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;From the &quot;how to merge this pull request&quot; section of the pull request page (f.e. &lt;a href=&quot;https://github.com/mozilla/addon-sdk/pull/43&quot;&gt;pull request 34&lt;/a&gt;), copy the command from step two, but change the word &quot;pull&quot; to &quot;fetch&quot; to fetch the remote branch containing the changes without also merging it:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git fetch &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;https://github.com/toolness/jetpack-sdk.git&quot;&gt;https://github.com/toolness/jetpack-sdk.git&lt;/a&gt; bug-610507&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Use the magic FETCH_HEAD reference to the last fetched branch to verify that the set of changes is what you expect:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;git diff &lt;/tt&gt;&lt;tt&gt;HEAD &lt;/tt&gt;&lt;tt&gt;FETCH_HEAD&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;(The exact syntax here may need some work; HEAD..FETCH_HEAD? three dots?)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Merge the remote branch into your local branch with a custom commit message:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;git merge FETCH_HEAD --no-ff -m&quot;bug 610507: get rid of the nsjetpack package; r=myk&quot;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Push the changes upstream:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;git push upstream master&lt;/tt&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I like this set of commands because it doesn&#39;t require me to add a remote, I can copy/paste the fetch command from GitHub (being careful not to issue the pull before I change it to a fetch), and I always type the same FETCH_HEAD reference to the remote branch in step three.&lt;br /&gt;&lt;br /&gt;However, I wish the &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/0e23d1c1555d5de228ed7ad62c8715e2775d2390&quot;&gt;merge commit page&lt;/a&gt; explicitly referenced the &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/68b6e306dfeccef103b071e0812dc3a375830ac0&quot;&gt;specific&lt;/a&gt; &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/715cb47c720bcdd11846cae6c6cab325bb1a982b&quot;&gt;commits&lt;/a&gt; that were merged. It does mention that it&#39;s a branch merge, it isn&#39;t obvious how to get from that page to the pages for the commits I merged from the branch.&lt;br /&gt;&lt;br /&gt;&quot;&lt;tt&gt;git log --oneline --graph&lt;/tt&gt;&quot;, &lt;tt&gt;gitg&lt;/tt&gt;, and &lt;tt&gt;gitk&lt;/tt&gt; do give me that information, though, so I&#39;m ok on the command line, anyway.&lt;br /&gt;&lt;br /&gt;[More discussion can be found in the &lt;a href=&quot;http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/2c6cb3e7f3bec468&quot;&gt;discussion group thread&lt;/a&gt;.]</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7960433840999647174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7960433840999647174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7960433840999647174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7960433840999647174'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/11/more-github-workflow-experiences.html' title='More Git/Hub Workflow Experiences'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7037189428773681360</id><published>2010-11-12T18:55:00.000-08:00</published><updated>2011-09-20T11:38:43.577-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>Git/Hub Workflow Experiences</title><content type='html'>&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt;The Jetpack project recently migrated its SDK repository to Git (hosted on GitHub), and we&#39;ve been working out changes to the bug/review/commit workflow that GitHub&#39;s tools enable (specifically, pull requests).&lt;/div&gt;&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt;Here are some of my initial experiences and my thoughts on them (which I&#39;ve also &lt;a href=&quot;http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/2c6cb3e7f3bec468&quot;&gt;posted to the Jetpack discussion group&lt;/a&gt;).&lt;/div&gt;&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt; &lt;/div&gt;&lt;div class=&quot;moz-text-html&quot; lang=&quot;x-western&quot;&gt; Warning: Git wonkery ahead, with excruciating details. I would not want to read this post. I recommend you skip it. ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt; Part 1: Wherein I Handle My First Pull Request&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To fix some test failures, Atul submitted &lt;a href=&quot;https://github.com/mozilla/addon-sdk/pull/33&quot;&gt;GitHub pull request 33&lt;/a&gt;, I reviewed the changes (comprising &lt;a href=&quot;https://github.com/toolness/jetpack-sdk/commit/97619b0b25554712756827de883883c9b810319d&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://github.com/toolness/jetpack-sdk/commit/405390a586f6c09bad2b26183fe2925d09bcd52b&quot;&gt;commits&lt;/a&gt;) on GitHub, and then I pushed them to the canonical repository via the following set of commands:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;git checkout -b toolness-&lt;span class=&quot;commit-ref from&quot;&gt;4.0b7-bustage-fixes&lt;/span&gt; master&lt;/li&gt;&lt;li&gt;git pull &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;https://github.com/toolness/jetpack-sdk.git&quot;&gt;https://github.com/toolness/jetpack-sdk.git&lt;/a&gt; &lt;span class=&quot;commit-ref from&quot;&gt;4.0b7-bustage-fixes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;git checkout master&lt;/li&gt;&lt;li&gt;git merge toolness-&lt;span class=&quot;commit-ref from&quot;&gt;4.0b7-bustage-fixes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;git push upstream master&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;That landed the &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/97619b0b25554712756827de883883c9b810319d&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/405390a586f6c09bad2b26183fe2925d09bcd52b&quot;&gt;commits&lt;/a&gt; in the canonical repository, but it isn&#39;t obvious that they were related (i.e. part of the same pull request), that I was the one who reviewed them, or that I was the one who pushed them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Part 2: Wherein I Handle My Second Pull Request&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thus, for the fix for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=611042&quot;&gt;bug 611042&lt;/a&gt;, for which Atul submitted &lt;a href=&quot;https://github.com/mozilla/addon-sdk/pull/34&quot;&gt;GitHub pull request 34&lt;/a&gt;, I again reviewed the changes (also comprising &lt;a href=&quot;https://github.com/toolness/jetpack-sdk/commit/5e6ca0e1834e65623f6ac87d3828965da420847c&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://github.com/toolness/jetpack-sdk/commit/1ab9c78c94fb08610460ad19fd763a7402fc233c&quot;&gt;commits&lt;/a&gt;) on GitHub, but then I pushed them to the &lt;a href=&quot;https://github.com/mozilla/addon-sdk&quot;&gt;canonical repository&lt;/a&gt; via this different set of commands (after discussion with Atul and Patrick Walton of the Rust team):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;git checkout -b toolness-bug-611042 master&lt;/li&gt;&lt;li&gt;git pull &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;https://github.com/toolness/jetpack-sdk.git&quot;&gt;https://github.com/toolness/jetpack-sdk.git&lt;/a&gt; bug-611042&lt;/li&gt;&lt;li&gt;(There might have been something else here, since the pull request resulted in a merge; I don&#39;t quite remember.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;git checkout master&lt;/li&gt;&lt;li&gt;git merge --no-ff --no-commit toolness-bug-611042&lt;/li&gt;&lt;li&gt;git commit --signoff -m &quot;bug 611042: remove request.response.xml for e10s compatibility; r=myk&quot; --author &quot;atul&quot;&lt;/li&gt;&lt;li&gt;git push upstream master&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Because Atul&#39;s pull request was no longer against the tip (since I had just merged those previous changes), when I pulled the remote bug-611042 branch into my local toolness-bug-611042 branch (step 2), I had to merge his changes, which resulted in a &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/6a3c9e2a614f29b61e580a7a7619f91dd1306eea&quot;&gt;merge commit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Merging the changes to my local master with &quot;--no-ff&quot; and &quot;--no-commit&quot; (step 5) then allowed me to commit the merge to my master branch manually (step 6), resulting in another &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/9f202a3003cddace040bc695ab7137d4a31051ec&quot;&gt;merge commit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For the second merge commit, I specified &quot;--signoff&quot;, which added &quot;Signed-off-by: Myk Melez &lt;a class=&quot;moz-txt-link-rfc2396E&quot; href=&quot;mailto:myk@mozilla.org&quot;&gt;&lt;myk@mozilla.org&gt;&lt;/myk@mozilla.org&gt;&lt;/a&gt;&quot; to the commit message; crafted a custom commit message that included &quot;r=myk&quot;; and specified &#39;--author &quot;atul&quot;&#39;, which made Atul the author of the merge.&lt;br /&gt;&lt;br /&gt;I dislike having the former merge commit in history, since it&#39;s extraneous, unuseful details about how I did the merging locally before I pushed to the canonical repository. I&#39;m not sure how to avoid it, though.&lt;br /&gt;&lt;br /&gt;On the other hand, I like having the latter merge commit in history, since it provides context for Atul&#39;s &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/5e6ca0e1834e65623f6ac87d3828965da420847c&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/1ab9c78c94fb08610460ad19fd763a7402fc233c&quot;&gt;commits&lt;/a&gt;: the bug number, the fact that the changes were reviewed, and a commit message that describes the changes as a whole.&lt;br /&gt;&lt;br /&gt;I&#39;m ambivalent about --signoff vs. adding &quot;r=myk&quot; to the commit message, as they seem equivalentish, with --signoff being more explicit (so in theory it might form part of an enlightened workflow in the future), while &quot;r=myk&quot; is simpler.&lt;br /&gt;&lt;br /&gt;And I dislike having made Atul the author of the merge, since it&#39;s incorrect: he wasn&#39;t the author of the merge, he was only the author of the changes (for which he is correctly credited). And if the merge itself caused problems (f.e. I accidentally backed out other recent changes in the process), I would be the one responsible for fixing those problems, not Atul.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Part 3: Pushing Patches&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In addition to pull requests, one can also contribute via patches. I&#39;ve pushed a few of these via something like the following set of commands:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;git apply patch.diff&lt;/li&gt;&lt;li&gt;git commit -a -m &quot;bug &lt;number&gt;: &lt;description changes=&quot;&quot; of=&quot;&quot;&gt;; r=myk&quot; --author &quot;&lt;author name=&quot;&quot;&gt;&quot;&lt;br /&gt;&lt;/author&gt;&lt;/description&gt;&lt;/number&gt;&lt;/li&gt;&lt;li&gt;git push upstream master&lt;/li&gt;&lt;/ol&gt;That results in a commit like &lt;a href=&quot;https://github.com/mozilla/addon-sdk/commit/026b4e8e78336c2dbbf30edb14e5db78ca4afb21&quot;&gt;this one&lt;/a&gt;, which shows me as the committer and the patch author as the author. And that seems like a fine record of what happened.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Part 4: To Bug or Not To Bug?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the questions GitHub raises is whether or not every change deserves a bug report. And if not, how do we differentiate those that do from the rest?&lt;br /&gt;&lt;br /&gt;I don&#39;t have the definitive answers to these questions, but my sense, from my experience so far, is that we shouldn&#39;t require all changes to be accompanied by bug reports, but larger, riskier, time-consuming, and/or controversial changes should have reports to capture history, provide a forum for discussion, and permit project planning; while bug reports should be optional for smaller, safer, quickly-resolved, and/or non-controversial changes.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7037189428773681360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7037189428773681360' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7037189428773681360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7037189428773681360'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/11/github-workflow-experiences.html' title='Git/Hub Workflow Experiences'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-236254320002589931</id><published>2010-07-15T14:22:00.000-07:00</published><updated>2011-09-20T11:38:43.557-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jetpack"/><title type='text'>My Recent Jetpack Presentations</title><content type='html'>The last few weeks have been presentation-heavy.&lt;br /&gt;&lt;br /&gt;First, I gave a presentation about the Jetpack project (past accomplishments, present status, future plans) at the &lt;a href=&quot;https://wiki.mozilla.org/MAOW:2010:London&quot;&gt;2010 London Mozilla Add-ons Workshop&lt;/a&gt; (MAOW), including a demo of using &lt;a href=&quot;https://builder.mozillalabs.com/&quot;&gt;Add-on Builder&lt;/a&gt; to build an add-on in five minutes.&lt;br /&gt;&lt;br /&gt;Then I reprised the Add-on Builder demo as part of the opening day keynote at the &lt;a href=&quot;https://wiki.mozilla.org/Summit2010&quot;&gt;Mozilla Summit&lt;/a&gt;, where it got a great reception. You can watch it in &lt;a href=&quot;http://www.youtube.com/watch?v=lKN4_fOKEWQ&quot;&gt;this Youtube video&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, I gave an updated version of the MAOW presentation on the third day of the summit. The slides are available in &lt;a href=&quot;https://people.mozilla.com/%7Emyk/presentations/Prepare%20for%20Liftoff%20-%20Summit%202010.odp&quot;&gt;OpenDocument&lt;/a&gt; and &lt;a href=&quot;https://people.mozilla.com/%7Emyk/presentations/Prepare%20for%20Liftoff%20-%20Summit%202010.pdf&quot;&gt;PDF&lt;/a&gt; formats, and Jetpack presentation materials generally are all available from the &lt;a href=&quot;https://wiki.mozilla.org/Labs/Jetpack/Presentations&quot;&gt;Jetpack Presentations wiki page&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/236254320002589931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=236254320002589931' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/236254320002589931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/236254320002589931'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/07/my-recent-jetpack-presentations.html' title='My Recent Jetpack Presentations'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-6583468542975089893</id><published>2010-03-05T23:03:00.001-08:00</published><updated>2010-04-18T23:58:52.841-07:00</updated><title type='text'>This blog has moved</title><content type='html'>&lt;br /&gt; This blog is now located at http://mykzilla.blogspot.com/.&lt;br /&gt; You will be automatically redirected in 30 seconds, or you may click &lt;a href=&#39;http://mykzilla.blogspot.com/&#39;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; For feed subscribers, please update your feed subscriptions to&lt;br /&gt; http://mykzilla.blogspot.com/feeds/posts/default.&lt;br /&gt; </content><link rel="related" href="http://mykzilla.blogspot.com/" title="This blog has moved"/><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/6583468542975089893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=6583468542975089893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/6583468542975089893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/6583468542975089893'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2010/03/this-blog-has-moved.html' title='This blog has moved'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7015776887411907934</id><published>2009-11-17T17:26:00.000-08:00</published><updated>2009-11-17T17:26:50.807-08:00</updated><title type='text'>The Skinny on Raindrop&#39;s Mailing List Extensions</title><content type='html'>Raindrop is an exploration of messaging innovation that strives to intelligently assist people in managing their flood of incoming messages. And mailing lists are a common source of messages you need to manage. So, with assistance from the Raindrop hackers, I wrote extensions that make it easier to deal with messages from mailing lists.&lt;br /&gt;&lt;br /&gt;Their goal is to soothe two particular pain points when dealing with mailing lists: grouping their messages together by list and unsubscribing from them once you&#39;re no longer interested in their subject matter.&lt;br /&gt;&lt;br /&gt;This post explains how the extensions do this; touches on some aspects of Raindrop&#39;s message processing and data storage models; and speculates about possible future directions for the extensions.&lt;br /&gt;&lt;h3&gt;Raindrop Extensibility&lt;/h3&gt;Raindrop is being built with the explicit goal of being broadly and deeply extensible, and it includes a number of APIs for adding and modifying functionality. The mailing list enhancements comprise two related extensions, one in the backend and one in the user interface.&lt;br /&gt;&lt;br /&gt;The backend extension plugs into Raindrop&#39;s incoming message processor, intercepting incoming email messages and extracting info about the mailing lists to which they belong. It also handles much of the work of unsubscribing from a list.&lt;br /&gt;&lt;br /&gt;The frontend extension plugs into Raindrop&#39;s Inflow application, modifying its interface to show you the most recent mailing list messages at a glance, group mailing list conversations together by list, and provide a button you can press to easily unsubscribe from a mailing list.&lt;br /&gt;&lt;h3&gt;Message Processing and Data Storage&lt;br /&gt;&lt;/h3&gt;Before getting into how the extensions work, it&#39;s useful to know a bit about how Raindrop processes and stores messages.&lt;br /&gt;&lt;br /&gt;Raindrop stores information using &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;CouchDB&lt;/a&gt;, a document-centric database whose principal unit of information storage and retrieval is the document (the equivalent of a record in SQL databases). Documents are just JSON blobs that can contain arbitrary name -&gt; value pairs (unlike SQL records, which can only contain values for predeclared columns).&lt;br /&gt;&lt;br /&gt;To distinguish between different kinds of documents, Raindrop assigns each a schema (similar to a table in SQL parlance) that describes (and may one day constrain) its properties. The &lt;tt&gt;rd.msg.email&lt;/tt&gt; schema is the primary schema representing an email message, while the &lt;tt&gt;rd.mailing-list&lt;/tt&gt; is the schema representing a mailing list, and the &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; is a simple schema that associates messages with their lists.&lt;br /&gt;&lt;br /&gt;(In an SQL database, &lt;tt&gt;rd.msg.email&lt;/tt&gt; and &lt;tt&gt;rd.mailing-list&lt;/tt&gt; would be tables whose rows represent email messages and mailing lists, while &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; would be a table whose rows map one to the other.)&lt;br /&gt;&lt;br /&gt;Note that there&#39;s a many-to-one relationship between messages and lists, since messages belong to a single list, although lists contain many messages, so &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; isn&#39;t strictly necessary. Its &lt;tt&gt;list-id&lt;/tt&gt; property (which identifies the list to which the message belongs) could simply be a property of &lt;tt&gt;rd.msg.email&lt;/tt&gt; docs (or, in SQL terms, a foreign key in the &lt;tt&gt;rd.msg.email&lt;/tt&gt; table).&lt;br /&gt;&lt;br /&gt;But putting it into its own document has several advantages. First, it improves robustness, as it reduces the possibility of conflicts between extensions and core code writing to the same documents.&lt;br /&gt;&lt;br /&gt;It also improves write performance, as it&#39;s faster to add a document than to modify an existing one (although index generation and read performance can be an issue).&lt;br /&gt;&lt;br /&gt;Finally, it improves extensibility, because it makes it possible to write an extension that extends the backend mailing list extension.&lt;br /&gt;&lt;br /&gt;That&#39;s because Raindrop&#39;s incoming message processing model allows extensions to observe the creation of any kind of document, including those created by other extensions.&lt;br /&gt;&lt;br /&gt;So just as the mailing list extension observes the creation of &lt;tt&gt;rd.msg.email&lt;/tt&gt; documents, another extension can observe the creation of &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; documents and process them further in some useful way. If the mailing list extension simply modified the original document instead of creating its own, that would require some additional and more complicated API.&lt;br /&gt;&lt;h3&gt;The Backend Extension&lt;/h3&gt;The primary function of the backend extension is to examine every incoming message and dress the ones from mailing lists with some additional structured information that the frontend can use to organize them.&lt;br /&gt;&lt;br /&gt;Backend extensions are accompanied by a JSON manifest that tells Raindrop what kinds of incoming documents it wants to intercept. The mailing list extension&#39;s manifest registers it as an observer of incoming &lt;tt&gt;rd.msg.email&lt;/tt&gt; documents, which get created when Raindrop retrieves an email message:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;&quot;schemas&quot; : {&lt;br /&gt; &quot;rd.ext.workqueue&quot; : {&lt;br /&gt; &quot;source_schemas&quot; : [&quot;rd.msg.email&quot;],&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;The extension itself is a Python script with a &lt;tt&gt;handler&lt;/tt&gt; function that gets passed the &lt;tt&gt;rd.msg.email&lt;/tt&gt; document and looks to see if it contains a &lt;tt&gt;List-ID&lt;/tt&gt; header (or, in certain cases, another identifier) identifying the mailing list from which the message comes:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;def handler(message):&lt;br /&gt; ...&lt;br /&gt; if &#39;list-id&#39; in message[&#39;headers&#39;]:&lt;br /&gt; # Extract the ID and name of the mailing list from the list-id header.&lt;br /&gt; # Some mailing lists give only the ID, but others (Google Groups,&lt;br /&gt; # Mailman) provide both using the format &#39;NAME &amp;lt;id&amp;gt;&#39;, so we extract them&lt;br /&gt; # separately if we detect that format.&lt;br /&gt; list_id = message[&#39;headers&#39;][&#39;list-id&#39;][0]&lt;br /&gt; ...&lt;/pre&gt;&lt;br /&gt;If it doesn&#39;t find a list identifier, it simply returns, and Raindrop continues processing the message:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;if not list_id:&lt;br /&gt; logger.debug(&quot;NO LIST ID; ignoring message %s&quot;, message_id)&lt;br /&gt; return&lt;/pre&gt;&lt;br /&gt;Otherwise, it calls Raindrop&#39;s &lt;tt&gt;emit_schema&lt;/tt&gt; function to create an &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; document linking the message document to an &lt;tt&gt;rd.mailing-list&lt;/tt&gt; document representing the mailing list:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;emit_schema(&#39;rd.msg.email.mailing-list&#39;, { &#39;list_id&#39;: list_id })&lt;/pre&gt;&lt;br /&gt;In this function call, &lt;tt&gt;rd.msg.email.mailing-list&lt;/tt&gt; is the type of document to create, while &lt;tt&gt;{ &#39;list_id&#39;: list_id }&lt;/tt&gt; is the document itself, written as Python that will get serialized to JSON.&lt;br /&gt;&lt;br /&gt;A document created inside a backend extension like this automatically gets a reference to the document the extension is processing (i.e. the &lt;tt&gt;rd.msg.email&lt;/tt&gt; document), so the only thing it has to explicitly include is a reference to the list document, in the form of a &lt;tt&gt;list_id&lt;/tt&gt; property whose value is the list identifier.&lt;br /&gt;&lt;br /&gt;The extension also checks if there&#39;s an &lt;tt&gt;rd.mailing-list&lt;/tt&gt; document in the database for the mailing list itself, and if not, it creates one, populating it with information from the message&#39;s &lt;tt&gt;List-*&lt;/tt&gt; headers, like how to unsubscribe from the list. Otherwise, it updates the existing mailing list document if the message&#39;s &lt;tt&gt;List-*&lt;/tt&gt; headers contain updates.&lt;br /&gt;&lt;h3&gt;The Frontend Extension&lt;/h3&gt;The frontend extension uses the information extracted by the backend to help users manage mailing lists in the Inflow application.&lt;br /&gt;&lt;br /&gt;It adds a widget to the Home view that shows you the last few messages from your lists at the bottom of the page, so you can keep an eye on those messages without having to give them your full attention:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.melez.com/mykzilla/uploaded_images/latest-list-messages-714113.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img src=&quot;http://www.melez.com/mykzilla/uploaded_images/latest-list-messages-714111.png&quot; height=&quot;176&quot; width=&quot;320&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It adds a list of your mailing lists to the Organizer widget:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.melez.com/mykzilla/uploaded_images/mailing-list-list-722772.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img src=&quot;http://www.melez.com/mykzilla/uploaded_images/mailing-list-list-722768.png&quot; height=&quot;320&quot; width=&quot;190&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And when you click on the name of a list, it shows you its conversations in the conversation pane:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.melez.com/mykzilla/uploaded_images/list-conversations-763392.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img src=&quot;http://www.melez.com/mykzilla/uploaded_images/list-conversations-763369.png&quot; height=&quot;201&quot; width=&quot;320&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In traditional mail clients, users who want to break out their list messages into separate buckets like this typically have to create a folder for each list to contain its messages and then a filter for each list to move incoming list messages into the appropriate folders. The extension does this for you automatically!&lt;br /&gt;&lt;br /&gt;Finally, while viewing list conversations, if the extension knows how to unsubscribe you from the list, it displays an Unsubscribe button:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.melez.com/mykzilla/uploaded_images/unsubscribe-button-794151.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img src=&quot;http://www.melez.com/mykzilla/uploaded_images/unsubscribe-button-794149.png&quot; height=&quot;201&quot; width=&quot;320&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Pressing the button (and then confirming your decision) unsubscribes you from the list. You don&#39;t have to do anything else, like remembering your username/password for some web page, sending an email, or confirming your request with the list admin. The extensions handle all those details for you so you don&#39;t have to know about them!&lt;br /&gt;&lt;h3&gt;List Unsubscription&lt;/h3&gt;In case you do want to know the details, however, it goes like this...&lt;br /&gt;&lt;br /&gt;First, the frontend extension sends a message to the list&#39;s admin address requesting unsubscription, with a certain command (like &quot;unsubscribe&quot;) in the subject or body of the message (lists often specify exactly what command to send in the &lt;tt&gt;mailto:&lt;/tt&gt; link they include in the &lt;tt&gt;List-Unsubscribe&lt;/tt&gt; header):&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;From: Jan Reilly &lt;jan@example.com&gt;&lt;br /&gt;To: wasbigtalk-admin@example.com&lt;br /&gt;Subject: unsubscribe&lt;/jan@example.com&gt;&lt;/pre&gt;&lt;br /&gt;Then the server responds with a message requesting confirmation of the request, often putting a unique token into the Subject or Reply-To header to track the request:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;From: wasbigtalk-admin@example.com&lt;br /&gt;To: jan@example.com&lt;br /&gt;Subject: please confirm unsubscribe from wasbigtalk (4bc3b7e439fd)&lt;br /&gt;&lt;br /&gt;Hello jan@example.com,&lt;br /&gt;&lt;br /&gt;We have received a request to unsubscribe you from wasbigtalk.&lt;br /&gt;Please confirm this request to unsubscribe by replying to this email.&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;Then the backend extension responds with a message confirming the request that includes the unique token:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;From: jan@example.com&lt;br /&gt;To: wasbigtalk-admin@example.com&lt;br /&gt;Subject: Re: please confirm unsubscribe from wasbigtalk (4bc3b7e439fd)&lt;/pre&gt;&lt;br /&gt;Finally, the server responds with a message confirming that the subscriber has, indeed, been unsubscribed:&lt;br /&gt;&lt;pre style=&quot;background-color: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: black; padding: 10px;&quot;&gt;From: wasbigtalk-admin@example.com&lt;br /&gt;To: jan@example.com&lt;br /&gt;Subject: you have been unsubscribed from wasbigtalk&lt;br /&gt;&lt;br /&gt;Hello jan@example.com,&lt;br /&gt;&lt;br /&gt;Your unsubscription from wasbigtalk was successful.&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;At this point, the backend extension marks the list unsubscribed in the database, and the frontend extension marks it unsubscribed in the user interface.&lt;br /&gt;&lt;br /&gt;This process matches the way much mailing list server software works, although there are daemons in the details, so the extensions have to be programmed to support each server individually.&lt;br /&gt;&lt;br /&gt;Currently, they know how to handle &lt;a href=&quot;http://groups.google.com/&quot;&gt;Google Groups&lt;/a&gt; and &lt;a href=&quot;http://www.gnu.org/software/mailman/&quot;&gt;Mailman&lt;/a&gt; lists. &lt;a href=&quot;http://www.mj2.org/&quot;&gt;Majordomo2&lt;/a&gt; (used by the &lt;a href=&quot;http://www.bugzilla.org/&quot;&gt;Bugzilla&lt;/a&gt; and &lt;a href=&quot;http://www.openbsd.org/&quot;&gt;OpenBSD&lt;/a&gt; projects, among others) is not supported, because it doesn&#39;t send &lt;tt&gt;List-*&lt;/tt&gt; headers (alhough supposedly it can be configured to do so). The &lt;a href=&quot;http://www.w3.org/&quot;&gt;W3C&lt;/a&gt;&#39;s list server is not yet supported, although it does send &lt;tt&gt;List-*&lt;/tt&gt; headers, and support should be fairly easy to add.&lt;br /&gt;&lt;br /&gt;Note that some of the processing the extension does is (locale-dependent) &quot;screen&quot;-scraping, as Google Groups and Mailman don&#39;t consistently identify the list ID and message type in some of their correspondence. In the long run, hopefully server software will improve in that regard. Perhaps someone can spearhead an effort to make it so?&lt;br /&gt;&lt;h3&gt;The Future&lt;/h3&gt;The extensions&#39; current features fit in well with Raindrop&#39;s goal of helping people better handle their flood of incoming messages. But there is surely much more they could do to help in this regard.&lt;br /&gt;&lt;br /&gt;Besides general improvements to reliability and robustness--like support for additional list servers and handling of localized admin messages--they could let you resubscribe to a mailing list from which you&#39;ve unsubscribed. And perhaps they could automatically fetch the messages you missed while you were away. Or even retrieve the entire archive of a list to which you&#39;re subscribed, so you can browse the archive in Raindrop!&lt;br /&gt;&lt;br /&gt;What bugs you about mailing lists? And how might Raindrop&#39;s mailing list extensions make them easier (and even funner) to use?</content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7015776887411907934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7015776887411907934' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7015776887411907934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7015776887411907934'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2009/11/skinny-on-raindrops-mailing-list.html' title='The Skinny on Raindrop&#39;s Mailing List Extensions'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18929277.post-7740719470656815276</id><published>2009-11-04T15:58:00.001-08:00</published><updated>2009-11-04T15:58:03.687-08:00</updated><title type='text'>Building/Releasing Personas</title><content type='html'>Want to know how a popular extension like Personas gets built and released? Neither do I! Yet I know anyway. And I&#39;ve written it down for your edification! So &lt;a href=&quot;https://wiki.mozilla.org/Labs/Personas/Build&quot;&gt;check it out&lt;/a&gt;.&lt;br&gt; &lt;br&gt; </content><link rel='replies' type='application/atom+xml' href='http://mykzilla.blogspot.com/feeds/7740719470656815276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18929277&amp;postID=7740719470656815276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7740719470656815276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18929277/posts/default/7740719470656815276'/><link rel='alternate' type='text/html' href='http://mykzilla.blogspot.com/2009/11/buildingreleasing-personas.html' title='Building/Releasing Personas'/><author><name>Myk Melez</name><uri>http://www.blogger.com/profile/01837818348188071923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-_YZppM5V97U/VedxzrpG9BI/AAAAAAAAAGA/wHrKKAgCoH0/s220/headshot-2014.jpg'/></author><thr:total>0</thr:total></entry></feed> \ No newline at end of file
diff --git a/mobile/android/tests/background/junit4/resources/feed_atom_feedburner.xml b/mobile/android/tests/background/junit4/resources/feed_atom_feedburner.xml
new file mode 100644
index 000000000..85c4aaddf
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_atom_feedburner.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-1531829516427013333</id><updated>2016-01-21T16:20:29.143+01:00</updated><category term="Instant Mustache" /><category term="Intent" /><category term="ViewPager" /><category term="camera" /><category term="BlinkLayout" /><category term="CameraFragment" /><category term="Layout" /><category term="ViewGroup" /><category term="glass" /><category term="google glass" /><category term="picture" /><category term="API" /><category term="Animation" /><category term="Boolean" /><category term="Clean Code" /><category term="Discovery" /><category term="External storage" /><category term="Fragment" /><category term="FragmentPagerAdapter" /><category term="FragmentStatePagerAdapter" /><category term="Framework" /><category term="Handler" /><category term="Integer" /><category term="IntentService" /><category term="Library" /><category term="Looper" /><category term="MediaScanner" /><category term="Minimal marketable app" /><category term="Network" /><category term="Offscreen pages" /><category term="OnClickListener" /><category term="OnPageChangeListener" /><category term="OrientationEventListener" /><category term="PagerAdapter" /><category term="Resources" /><category term="SeekBar" /><category term="Service" /><category term="Sharing" /><category term="String" /><category term="SurfaceView" /><category term="TextUtils" /><category term="UI" /><category term="Uri" /><category term="bezel swipe" /><category term="fake dragging" /><category term="firefox" /><category term="gdk" /><category term="immersion" /><category term="margin" /><category term="mirror api" /><category term="mockup" /><category term="mozilla" /><category term="orientation" /><category term="restricted profiles" /><category term="roadmap" /><category term="rotation" /><category term="scrolling" /><category term="sketch" /><category term="support library" /><category term="voice input" /><title type="text">Android Zeitgeist</title><subtitle type="html" /><link rel="alternate" type="text/html" href="http://www.androidzeitgeist.com/" /><author><name>Sebastian Kaspari</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AndroidZeitgeist" /><feedburner:info uri="androidzeitgeist" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-4435702616301783869</id><published>2015-09-17T19:46:00.000+02:00</published><updated>2015-09-17T19:46:08.239+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><category scheme="http://www.blogger.com/atom/ns#" term="restricted profiles" /><title type="text">Support for restricted profiles in Firefox 42</title><content type="html">One of our goals for &lt;a href="https://www.mozilla.org/en-US/firefox/android/"&gt;Firefox for Android&lt;/a&gt; 42.0 was to create a kid and parent-friendly web experience (Project &lt;i&gt;KinderFox / KidFox&lt;/i&gt;): The browser should be easy to use for a kid and at the same time parents want to be in control and decide what the kid can do with it.&lt;br /&gt;&lt;br /&gt;There are a lot of things you can do to create a kid-friendly browsing experience. In this first version we focused on making the browser simpler by hiding complex or kid-unfriendly features and utilizing the parental controls of the Android system: &lt;i&gt;Restricted profiles&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;What are restricted profiles?&lt;/h3&gt;&lt;br /&gt;Restricted Profiles have been introduced in Android 4.3. The device administrator can create these profiles and restrict access to apps and features on the device. In addition to that restrictions inside an app can be configured if supported by the app.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2nsGZS3PMBQ/VeSXR42xZcI/AAAAAAAAluA/eXr4RUP6QQs/s1600/restricted-profiles-settings.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-2nsGZS3PMBQ/VeSXR42xZcI/AAAAAAAAluA/eXr4RUP6QQs/s640/restricted-profiles-settings.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Configuring which apps the restricted profile can acccess.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;A unique feature of restricted profiles is that they share the Google account of the device owner. It does not allow full-access to everything connected to the account but it allows the restricted user to watch content (e.g. movies and music) bought with that account or use paid applications. Of course only if the device owner explicitly allowed this. &lt;br /&gt;&lt;br /&gt;Unfortunately Restricted Profiles are only supported on tablets so far. It is a pity because in the meantime Google allowed to create full-featured and guest profiles on phones too.&lt;br /&gt;&lt;br /&gt;The following DevBytes episodes gives a good overview about the Restricted Profiles APIs:&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/pdUcANNm72o" width="560"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Being in control&lt;/h3&gt;&lt;br /&gt;Our final list of restrictable features for Firefox 42 contains 10 items:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Disable add-on installation &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable 'Import from Android' (Bookmark import) &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable developer tools &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable Home customization (&lt;a href="https://hacks.mozilla.org/2014/07/building-firefox-hub-add-ons-for-firefox-for-android/"&gt;Home panels&lt;/a&gt;) &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable Private Browsing &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable Location Services (Contributing to &lt;a href="https://location.services.mozilla.com/"&gt;Mozilla's Location Service&lt;/a&gt;) &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable Display settings &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable 'Clear browsing history' &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable master password &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Disable Guest Browsing &lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;Limiting access to features is a very personal decision. Not every parent wants to control every aspect of the browsing experience. That's why we decided to make these restrictions configurable by the parent. By implementing a broadcast receiver that listens to &lt;a href="https://developer.android.com/reference/android/content/Intent.html#ACTION_GET_RESTRICTION_ENTRIES"&gt;ACTION_GET_RESTRICTION_ENTRIES&lt;/a&gt; actions it's possible to send a list of restrictions to the system and so they will show up in the admin interface:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9loC85f7nwM/VfrYo9ck7lI/AAAAAAAAmXo/ffox2Np3nZk/s1600/app-restrictions.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-9loC85f7nwM/VfrYo9ck7lI/AAAAAAAAmXo/ffox2Np3nZk/s640/app-restrictions.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Configuring restrictions of an application.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Later the application can query the &lt;a href="http://developer.android.com/reference/android/os/UserManager.html"&gt;UserManager&lt;/a&gt; to ask which restrictions have been enabled or disabled.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Technical details&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;User restrictions vs. application restrictions&lt;/b&gt;&lt;br /&gt;There are two kinds of restrictions. &lt;a href="http://developer.android.com/reference/android/os/UserManager.html#getUserRestrictions%28%29"&gt;User restrictions&lt;/a&gt; are imposed on the user by the system and &lt;a href="http://developer.android.com/reference/android/os/UserManager.html#getApplicationRestrictions%28java.lang.String%29"&gt;application restrictions&lt;/a&gt; are added by an application via the broadcast mechanism mentioned above. An application can query the &lt;a href="http://developer.android.com/reference/android/os/UserManager.html"&gt;UserManager&lt;/a&gt; only for its own and global user restrictions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Detecting restricted profiles&lt;/b&gt;&lt;br /&gt;One of the first things you might want to do in your app is to detect if the current user is using a restricted or a normal profile. There's no API method to do that and the video linked above suggests to query the user restrictions from the &lt;a href="http://developer.android.com/reference/android/os/UserManager.html"&gt;UserManager&lt;/a&gt; and if the returned bundle is not empty then you are in a restricted profile.&lt;br /&gt;&lt;br /&gt;This worked fine until we deployed the application to a phone running an Android M preview build. On this phone - that doesn't even support restricted profiles - the &lt;a href="http://developer.android.com/reference/android/os/UserManager.html"&gt;UserManager&lt;/a&gt; always returned a restriction. Whoops, suddenly everyone with Android M on their phones had a very limited &lt;a href="https://nightly.mozilla.org/"&gt;Firefox Nightly&lt;/a&gt;. We then switched to iterating over the returned Bundles (for application and user restrictions) and only assuming we are in a restricted profile if at least one restriction in those bundles is enabled (&lt;i&gt;getBoolean()&lt;/i&gt; returns true).&lt;br /&gt;&lt;br /&gt;In general it is a better approach to never detect whether you are in a restricted profile or not but instead always check whether a specific (application) restriction is enabled or not.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A resource qualifier would be nice&lt;/b&gt;&lt;br /&gt;Hiding features and UI in restricted profiles will add a lot of &lt;i&gt;if&lt;/i&gt; statements to the code base. It would have been nice to have a &lt;a href="http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources"&gt;resource qualifier&lt;/a&gt; for restricted profiles to load different layouts, drawables and other configurations. Besides that this would also solve the "detect restricted profile" problem quite elegant.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Strict mode: Disk read violation&lt;/b&gt;&lt;br /&gt;At runtime we noticed that we have been triggering a lot of disk read violations. Looking at &lt;a href="http://androidxref.com/5.1.1_r6/xref/frameworks/base/services/core/java/com/android/server/pm/UserManagerService.java#readApplicationRestrictionsLocked"&gt;Android's source code&lt;/a&gt; it turns out that &lt;a href="http://developer.android.com/reference/android/os/UserManager.html#getApplicationRestrictions%28java.lang.String%29"&gt;UserManager.getApplicationRestrictions()&lt;/a&gt; reads and parses an XML file on every call. Without caching anything like &lt;a href="http://developer.android.com/reference/android/content/SharedPreferences.html"&gt;SharedPreferences&lt;/a&gt; do. We worked around that by implementing our own memory cache and refreshing the list of restrictions whenever the application is resumed. To update restrictions the user will always have to switch to the admin profile and therefore leave (and later resume) the application.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No Fun&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Android Marshmallow (6.0) introduced a new &lt;i&gt;Easter egg&lt;/i&gt; system restriction: &lt;a href="http://developer.android.com/reference/android/os/UserManager.html#DISALLOW_FUN"&gt;UserManager.DISALLOW_FUN&lt;/a&gt; - &lt;i&gt;Specifies if the user is not allowed to have fun. In some cases, the device owner may wish to prevent the user from experiencing amusement or joy while using the device. The default value is false&lt;/i&gt;.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;What's next?&lt;/h3&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8hdHsE2sf6Q/Vfr6lwJChxI/AAAAAAAAmZA/lSpXgbzrKsQ/s1600/kidbrowser.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-8hdHsE2sf6Q/Vfr6lwJChxI/AAAAAAAAmZA/lSpXgbzrKsQ/s640/kidbrowser.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Simplified browser UI with custom theme using a restricted profile (Firefox 42).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;With the current set of restrictions parents can create a kid-friendly and simplified browsing experience. Of course there are a lot of more possible features around parental controls that come to mind like block lists and restricting Web APIs (Microphone, Webcam). Some of these ideas have already been filed (&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1125710"&gt;Bug 1125710&lt;/a&gt;) and in addition to that we just started planning features for the next version (&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205615"&gt;Bug 1205615&lt;/a&gt;). More ideas are definitely welcome!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Testing and feedback&lt;/h3&gt;&lt;br /&gt;At the time of this writing support for restricted profiles is available in &lt;a href="https://ftp.mozilla.org/pub/mozilla.org/mobile/nightly/latest-mozilla-aurora-android-api-11/"&gt;Aurora&lt;/a&gt; (42.0) and &lt;a href="https://nightly.mozilla.org/"&gt;Nightly&lt;/a&gt; (43.0) builds of Firefox. Restricted Profiles serve a very specific use case and therefore do not get as much usage coverage like other browser features. If you do have a tablet and are interested in restricted profiles then help us testing it! :)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Contributing &lt;/h3&gt;&lt;br /&gt;Firefox for Android is open-source software and contributors are very welcome!&amp;nbsp;You can find me on IRC (irc.mozilla.org) in #mobile (my nickname is "sebastian"), on &lt;a href="https://twitter.com/Anti_Hype"&gt;Twitter&lt;/a&gt; and &lt;a href="http://plus.google.com/+SebastianKaspari"&gt;Google+&lt;/a&gt;. &lt;a href="https://wiki.mozilla.org/Mobile/Get_Involved"&gt;Get involved with Firefox for Android&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;More resources about Project &lt;i&gt;KidFox&lt;/i&gt;&lt;/h3&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://wiki.mozilla.org/Mobile/Projects/Kinderfox"&gt;Mozilla Wiki: Project KinderFox&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://wiki.mozilla.org/Mobile/Projects/Kid_browsing"&gt;Mozilla Wiki: KidFox proposal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://wiki.mozilla.org/Mobile/Briefs/Kidfox"&gt;Mozilla wiki: KidFox brief&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1125710"&gt;Generic meta bug &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1125984"&gt;Bugzilla meta bug for v1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205615"&gt;Bugzilla meta bug for v2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/xaSicfGuwOU" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/4435702616301783869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2015/09/support-restricted-profiles-firefox.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/4435702616301783869" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/4435702616301783869" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/xaSicfGuwOU/support-restricted-profiles-firefox.html" title="Support for restricted profiles in Firefox 42" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-2nsGZS3PMBQ/VeSXR42xZcI/AAAAAAAAluA/eXr4RUP6QQs/s72-c/restricted-profiles-settings.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2015/09/support-restricted-profiles-firefox.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-1833936883751020212</id><published>2014-11-20T08:30:00.001+01:00</published><updated>2014-11-20T08:32:09.334+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Discovery" /><category scheme="http://www.blogger.com/atom/ns#" term="Intent" /><category scheme="http://www.blogger.com/atom/ns#" term="Library" /><category scheme="http://www.blogger.com/atom/ns#" term="Network" /><title type="text">Introducing Android Network Intents</title><content type="html">&lt;a href="https://github.com/pocmo/Android-Network-Intents"&gt;Android Network Intents&lt;/a&gt; is a library that I wrote for &lt;a href="http://landsofruin.com/"&gt;Lands of Ruin&lt;/a&gt; - a game that two friends and I are developing. To avoid a complicated network setup to play the game against a friend, we needed a way to discover games running on the local network. Android offers a &lt;a href="http://developer.android.com/training/connect-devices-wirelessly/nsd.html"&gt;Network Service Discovery (NSD)&lt;/a&gt; since API level 16 (Android 4.1) but we kept running into problems using it. This lead to writing this library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What does the library do?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The library allows you to send &lt;a href="http://developer.android.com/reference/android/content/Intent.html"&gt;Intents&lt;/a&gt; to listening clients on the local network (WiFi) without knowing who these clients are. Sender and receiver do not need to connect to each other. Therefore the library can be used to write custom discovery protocols.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Sending Intents (Transmitter)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;An &lt;i&gt;Intent&lt;/i&gt; is sent by using the&amp;nbsp;&lt;i&gt;Transmitter&lt;/i&gt;&amp;nbsp;class. A&amp;nbsp;&lt;i&gt;TransmitterException&lt;/i&gt;&amp;nbsp;is thrown in case of error.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-r6N5E7HFdJc/VGyPPqvem4I/AAAAAAAAbn8/aJ_XtPS7lkU/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.33.29.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-r6N5E7HFdJc/VGyPPqvem4I/AAAAAAAAbn8/aJ_XtPS7lkU/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.33.29.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Network-Intents/wiki/Sending-Intents"&gt;Sending an Intent&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Receiving Intents (Receiver)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Intents are received using the&amp;nbsp;&lt;i&gt;Discovery&lt;/i&gt;&amp;nbsp;class. Once started by calling&amp;nbsp;&lt;i&gt;enable()&lt;/i&gt;&amp;nbsp;the&amp;nbsp;&lt;i&gt;Discovery&lt;/i&gt;&amp;nbsp;class will spawn a background thread that will wait for incoming&amp;nbsp;&lt;i&gt;Intent&lt;/i&gt;&amp;nbsp;objects. A&amp;nbsp;&lt;i&gt;DiscoveryListener&lt;/i&gt;&amp;nbsp;instance will be notified about every incoming&amp;nbsp;&lt;i&gt;Intent&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fNRqCrKBhbg/VGyPnT00VdI/AAAAAAAAboE/XnejMaKLuyw/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.37.46.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-fNRqCrKBhbg/VGyPnT00VdI/AAAAAAAAboE/XnejMaKLuyw/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.37.46.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Network-Intents/wiki/Receiving-Intents"&gt;Writing a DiscoveryListener to receive events.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_GOcgSh-4qY/VGyPpC2sA-I/AAAAAAAAboM/TVMtxnj-zKk/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.37.55.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-_GOcgSh-4qY/VGyPpC2sA-I/AAAAAAAAboM/TVMtxnj-zKk/s1600/Screen%2BShot%2B2014-11-19%2Bat%2B13.37.55.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Network-Intents/wiki/Receiving-Intents"&gt;Starting and stoping the discovery.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Things you should know&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The Intents are sent as &lt;a href="http://en.wikipedia.org/wiki/Multicast"&gt;UDP multicast&lt;/a&gt; packets. Unlike TCP the UDP protocol does not guarantee that a sent packet will be received and there is no confirmation or retry mechanism. Even though losing a packet only happens rarely in a stable WiFi, the library is not intended for using as a stable &lt;i&gt;communication&lt;/i&gt; protocol. Instead you can use it to find other clients (by sending an Intent in a periodic interval) and then establish a stable TCP connection for communication.&lt;br /&gt;&lt;br /&gt;On GitHub you can find a &lt;a href="https://github.com/pocmo/Android-Network-Intents/tree/master/samples"&gt;chat sample application&lt;/a&gt; using the library. While this is a convenient example, it is not a good use of the library for the reasons state above. You obviously do not want to lose chat messages.&lt;br /&gt;&lt;br /&gt;We are using the library for almost two years in Lands of Ruin and didn't observe any problems. However the game only runs on tablets so far. In theory the library should run on all Android versions back to API level 3 (Android 1.5) but this has obviously never been tested.&lt;br /&gt;&lt;br /&gt;You can find &lt;a href="https://github.com/pocmo/Android-Network-Intents"&gt;Android Network Intents on GitHub&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/frg0Ba2z4H0" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/1833936883751020212/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2014/11/introducing-android-network-intents17.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1833936883751020212" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1833936883751020212" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/frg0Ba2z4H0/introducing-android-network-intents17.html" title="Introducing Android Network Intents" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-r6N5E7HFdJc/VGyPPqvem4I/AAAAAAAAbn8/aJ_XtPS7lkU/s72-c/Screen%2BShot%2B2014-11-19%2Bat%2B13.33.29.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2014/11/introducing-android-network-intents17.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8654031246499256112</id><published>2013-12-24T15:24:00.001+01:00</published><updated>2013-12-24T15:24:38.598+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="glass" /><category scheme="http://www.blogger.com/atom/ns#" term="google glass" /><category scheme="http://www.blogger.com/atom/ns#" term="immersion" /><category scheme="http://www.blogger.com/atom/ns#" term="voice input" /><title type="text">Hello World Immersion - Developing for Google Glass #2</title><content type="html">This article describes how to create a simple hello world application for Google Glass using the&amp;nbsp;Glass Development Kit (GDK). As described in the &lt;a href="http://www.androidzeitgeist.com/2013/12/mirror-api-gdk-developing-google-glass.html"&gt;previous article&lt;/a&gt; you have two options how your Glassware should show up on the device: As a &lt;i&gt;live card&lt;/i&gt; that is part of the timeline or as an &lt;i&gt;immersion&lt;/i&gt;&amp;nbsp;that is displayed outside of the context of the timeline. This article focuses on how to write an immersion.&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;What is an immersion?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;An immersion is basically an Android activity. The name immersion implies that it is not part of the normal Glass timeline. Instead it takes full control of the device - except for the back gesture (Swipe down). To go back to the timeline you need to leave the immersion.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-75TfF3lNoWs/UrhgTb9OPZI/AAAAAAAASH4/wESuu-yTUy4/s1600/glass_timeline_immersion.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-75TfF3lNoWs/UrhgTb9OPZI/AAAAAAAASH4/wESuu-yTUy4/s1600/glass_timeline_immersion.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Once started an immersion takes full control of the screen.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Project setup&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Create a normal Android project with the following settings:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Set &lt;i&gt;minSdkVersion&lt;/i&gt; and &lt;i&gt;targetSdkVersion&lt;/i&gt; to 15 (Android 4.0.3)&lt;/li&gt;&lt;li&gt;Set &lt;i&gt;compileSdkVersion&lt;/i&gt; to&amp;nbsp;&lt;i&gt;"Google Inc.:Glass Development Kit Sneak Peek:15"&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Do not assign a theme to your application or derive your own theme from&amp;nbsp;&lt;i&gt;Theme.DeviceDefault&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Creating the immersion&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Let's create a simple activity. The &lt;a href="https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card"&gt;Card&lt;/a&gt; class helps us to create a layout that looks like a timeline card.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Fj2t5BJi7yk/Urlo4Z4_FYI/AAAAAAAASI0/4qv2fF4ElX8/s1600/helloworldactivity.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Fj2t5BJi7yk/Urlo4Z4_FYI/AAAAAAAASI0/4qv2fF4ElX8/s1600/helloworldactivity.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/Glass/HelloWorldImmersion/HelloWorld/src/main/java/de/androidzeitgeist/glass/helloworld/immersion/HelloWorldActivity.java"&gt;HelloWorldActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Launching the Glassware - Voice commands&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;After creating the activity we need a way to start our Glassware. A common way to launch Glassware is to use a voice trigger. Let's add a simple voice trigger to start our &lt;i&gt;hello world&lt;/i&gt; activity.&lt;br /&gt;&lt;br /&gt;First we need to declare a string resource for our voice command.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MnJseZKHYxY/Url83ImZEZI/AAAAAAAASJc/Lrxu_J2gZ8w/s1600/resource_hello_world.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MnJseZKHYxY/Url83ImZEZI/AAAAAAAASJc/Lrxu_J2gZ8w/s1600/resource_hello_world.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/Glass/HelloWorldImmersion/HelloWorld/src/main/res/values/strings.xml"&gt;strings.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The next step is to create an XML resource file for the voice trigger using the previously created string value.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8y21kaJD3fI/Url839921yI/AAAAAAAASJw/HUZ4Po3-lr4/s1600/trigger_hello_world.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-8y21kaJD3fI/Url839921yI/AAAAAAAASJw/HUZ4Po3-lr4/s1600/trigger_hello_world.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/Glass/HelloWorldImmersion/HelloWorld/src/main/res/xml/voice_trigger.xml"&gt;voice_trigger.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Now we can add an intent filter for the VOICE_TRIGGER action to our activity. A meta-data tag links it to the XML file we wrote above.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GfHAXMZTDas/Url83illC8I/AAAAAAAASJs/oBmo7h4_Tuk/s1600/hello_world_activity.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-GfHAXMZTDas/Url83illC8I/AAAAAAAASJs/oBmo7h4_Tuk/s1600/hello_world_activity.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/Glass/HelloWorldImmersion/HelloWorld/src/main/AndroidManifest.xml"&gt;AndroidManifest.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The developer guide requires you to add an icon for the touch menu to the activity (white in color on transparent background, 50x50 pixels). The&amp;nbsp;&lt;a href="http://glass-asset-utils.appspot.com/icons-submission.html"&gt;Glass Asset Studio&lt;/a&gt;&amp;nbsp;is a helpful tool to generate these icons.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MWCSEYXWpUQ/UrmYIdPJp6I/AAAAAAAASKE/h2c7egiWuNs/s1600/50x50_icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MWCSEYXWpUQ/UrmYIdPJp6I/AAAAAAAASKE/h2c7egiWuNs/s1600/50x50_icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The final Glassware&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Now we can start our Glassware by saying "&lt;i&gt;ok glass, show hello world&lt;/i&gt;":&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-R3N3nwLXIIg/UrlsMbHPgkI/AAAAAAAASJA/9P6foH55OUc/s1600/hello_world_glassware.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="340" src="http://4.bp.blogspot.com/-R3N3nwLXIIg/UrlsMbHPgkI/AAAAAAAASJA/9P6foH55OUc/s400/hello_world_glassware.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Another option to start our Glassware is to use the touch menu and scroll to the "&lt;i&gt;show hello world&lt;/i&gt;" command:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5KjJBjb5qn4/UrlupI3MTuI/AAAAAAAASJM/j6-nNCKgWJM/s1600/hello_world_glassware_menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="340" src="http://2.bp.blogspot.com/-5KjJBjb5qn4/UrlupI3MTuI/AAAAAAAASJM/j6-nNCKgWJM/s400/hello_world_glassware_menu.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The source code for this &lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/tree/master/Glass/HelloWorldImmersion"&gt;Hello World Glassware is available on GitHub&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/fr-WO1v1SIU" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8654031246499256112/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/12/google-glass-immersion-hello-world.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8654031246499256112" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8654031246499256112" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/fr-WO1v1SIU/google-glass-immersion-hello-world.html" title="Hello World Immersion - Developing for Google Glass #2" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-75TfF3lNoWs/UrhgTb9OPZI/AAAAAAAASH4/wESuu-yTUy4/s72-c/glass_timeline_immersion.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/12/google-glass-immersion-hello-world.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-5605536583111663735</id><published>2013-12-22T13:03:00.001+01:00</published><updated>2013-12-22T13:03:25.308+01:00</updated><title type="text">Android 2013</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-swoL-7rAksk/UrbIgrRXS0I/AAAAAAAASEk/FuB-KSnuxuU/s1600/android_2013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-swoL-7rAksk/UrbIgrRXS0I/AAAAAAAASEk/FuB-KSnuxuU/s1600/android_2013.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It's the end of the year - &lt;a href="http://www.youtube.com/watch?v=H7jtC8vjXw8"&gt;YouTube&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=Lv-sY_z8MNs"&gt;Google Zeitgeist&lt;/a&gt; have posted their reviews. Let's have a look on what happened in the Android world in 2013.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-S2ecXdl66_I/UrbQgaKZPxI/AAAAAAAASFE/qChEPdoly-w/s1600/nexus4.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-S2ecXdl66_I/UrbQgaKZPxI/AAAAAAAASFE/qChEPdoly-w/s200/nexus4.png" width="200" /&gt;&lt;/a&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;January&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;2012 is over and the Nexus 4 is the current flagship phone made by Google and LG.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;February&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://android-developers.blogspot.de/2013/02/google-sign-in-now-part-of-google-play.html"&gt;Google+ Sign-In is integrated&lt;/a&gt; into the Google Play Services and Google starts accepting &lt;a href="http://www.nytimes.com/2013/02/21/technology/google-looks-to-make-its-computer-glasses-stylish.html?_r=0"&gt;applications for the Google Glass Explorer program&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;March&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The new &lt;a href="http://android-developers.blogspot.de/2013/03/now-is-time-to-switch-to-new-google.html"&gt;Android developer console is out of preview&lt;/a&gt;. While &lt;a href="http://officialandroid.blogspot.de/2013/03/celebrating-google-plays-first-birthday.html"&gt;Google Play celebrates it first birthday&lt;/a&gt;, the &lt;a href="http://techcrunch.com/2013/07/01/android-led-by-samsung-continues-to-storm-the-smartphone-market-pushing-a-global-70-market-share/?ncid=tcdaily"&gt;market share of Android hits 64%&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;April&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The &lt;a href="http://android-developers.blogspot.de/2013/04/update-on-tablet-app-guidelines-and.html"&gt;tablet guidelines are updated&lt;/a&gt; and the Android developer console starts to &lt;a href="http://android-developers.blogspot.de/2013_04_01_archive.html"&gt;show tablet optimization tips&lt;/a&gt;. Google pushes a &lt;a href="http://android-developers.blogspot.de/2013/04/new-look-new-purchase-flow-in-google.html"&gt;Google Play app update&lt;/a&gt; that features a redesigned UI. Samsung releases it new flaship phone - &lt;a href="http://en.wikipedia.org/wiki/Samsung_Galaxy_S4"&gt;the Samsung Galaxy S4&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;May&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-wZeaMyx7VUs/UrbPAzv69mI/AAAAAAAASE4/-VEbnrV9MF4/s1600/io2013.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-wZeaMyx7VUs/UrbPAzv69mI/AAAAAAAASE4/-VEbnrV9MF4/s1600/io2013.png" /&gt;&lt;/a&gt;The &lt;a href="https://developers.google.com/events/io/"&gt;Google I/O&lt;/a&gt;&amp;nbsp;takes place for three days from May 15th to 17th. This time there won't be a new Android release. Instead Google releases &lt;a href="http://android-developers.blogspot.de/2013/05/social-gaming-location-and-more-in.html"&gt;new game services and a new location API&lt;/a&gt;. At the Google I/O a new IDE for Android development is introduced: &lt;a href="http://android-developers.blogspot.de/2013/05/android-studio-ide-built-for-android.html"&gt;Android Studio&lt;/a&gt;. Since then every couple of weeks a new Android Studio update is pushed to the developer community.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt; &lt;span style="font-size: large;"&gt;&lt;b&gt;July&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;A new flavor of Android Jelly Bean is released: &lt;a href="http://android-developers.blogspot.de/2013/07/android-43-and-updated-developer-tools.html"&gt;Android 4.3&lt;/a&gt;. Open GL ES 3.0 and support for&amp;nbsp;low-power Bluetooth Smart devices are some of the new features. Furthermore a new version of the Nexus 7 is released. Together with the new tablet Google &lt;a href="http://officialandroid.blogspot.de/2013/07/from-tvs-to-tablets-everything-you-love.html"&gt;releases the Chromecast dongle&lt;/a&gt; and the &lt;a href="http://googledevelopers.blogspot.de/2013/07/cast-content-from-your-apps-to-tv-with.html"&gt;Google Cast SDK preview&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;August&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Google releases &lt;a href="http://android-developers.blogspot.de/2013/08/google-play-services-32.html"&gt;version 3.2 of the Google Play Services&lt;/a&gt;. The update&amp;nbsp;includes several enhancements to the Location Based Services. With the r18 release of the support library Google&amp;nbsp;released a new backward-compatible &lt;a href="http://android-developers.blogspot.de/2013/08/actionbarcompat-and-io-2013-app-source.html"&gt;Action Bar implementation called ActionBarCompat&lt;/a&gt;. Motorola is releasing the &lt;a href="http://en.wikipedia.org/wiki/Moto_X"&gt;Moto X&lt;/a&gt; - its first phone since the company has been acquired by Google. The same month &lt;a href="https://plus.google.com/u/0/+HugoBarra/posts/BzZMqRht1xQ"&gt;Hugo Barra announces to leave Google&lt;/a&gt; after 5½ years to join the Xiaomi team in China.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;September&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://android-developers.blogspot.de/2013/09/renderscript-in-android-support-library.html"&gt;RenderScript is now part of the support library&lt;/a&gt; and can be used&amp;nbsp;on plaform versions all the way back to Android 2.2 (Froyo). Jean-Baptiste Queru, who worked on the Android Open Source Project at Google, &lt;a href="http://www.androidpolice.com/2013/09/17/jean-baptiste-queru-now-at-yahoo-as-senior-principal-engineer-working-on-mobile-apps/"&gt;starts a new job at Yahoo&lt;/a&gt;. Google launches the &lt;a href="http://officialandroid.blogspot.de/2013/08/find-your-lost-phone-with-android.html"&gt;Android device manager website&lt;/a&gt; to&amp;nbsp;locate, lock and ring misplaced devices.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://1.bp.blogspot.com/-qksojJjcafk/UrbQ_JNFI_I/AAAAAAAASFM/mOaNvKPz2d0/s1600/nexus5.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-qksojJjcafk/UrbQ_JNFI_I/AAAAAAAASFM/mOaNvKPz2d0/s200/nexus5.png" width="200" /&gt;&lt;/a&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;October&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;After a lot of leaks and rumors &lt;a href="https://www.google.com/nexus/5/"&gt;a new Nexus phone is released&lt;/a&gt; on Halloween. Together with the Nexus 5 a new Android version - &lt;a href="http://www.android.com/kitkat/"&gt;Android 4.4 KitKat&lt;/a&gt; - is published.&amp;nbsp;Full-screen immersive mode, a new transitions framework, a printing framework and a storage access framework are some of the many new features. In addition to that he &lt;a href="http://android-developers.blogspot.de/2013/10/google-play-services-40.html"&gt;Google Play Services are updated to version 4.0&lt;/a&gt;. With &lt;a href="https://plus.google.com/+RomainGuy/posts/faCzPs6GKtg"&gt;Romain Guy another popular Android team member is leaving&lt;/a&gt; - but remaining at Google.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;November&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The &lt;a href="http://android-developers.blogspot.de/2013/11/app-translation-service-now-available.html"&gt;App Translation Service&lt;/a&gt;, announced at Google I/O, is now available for every developer. Motorola releases a second phone - the &lt;a href="http://en.wikipedia.org/wiki/Moto_G"&gt;Moto G&lt;/a&gt;. Android hits a new record with &lt;a href="http://www.highlightpress.com/android-tops-80-global-smartphone-market-share-windows-phone-up-156-year-on-year/6708/tharper"&gt;80% market share&lt;/a&gt;. The Google Glass team releases a first sneak peek version of the &lt;a href="https://developers.google.com/glass/develop/gdk/"&gt;Glass development kit (GDK)&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;December&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Two small updates for Android KitKat are released: &lt;a href="http://en.wikipedia.org/wiki/Android_version_history#Android_4.4_KitKat_.28API_level_19.29"&gt;Android 4.4.1 and 4.4.2&lt;/a&gt;. The Android device manager &lt;a href="http://techcrunch.com/2013/12/11/google-android-device-manager-play-store/"&gt;is now available as an app&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;Android Design in Action&lt;/i&gt; team releases its 2013 Recap:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/ajO2zFEtEYs" width="560"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;2014?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;What has been your Android highlight in 2013 and what are your wishes for 2014?&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/f-NE_F-73GY" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/5605536583111663735/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/12/android-2013.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5605536583111663735" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5605536583111663735" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/f-NE_F-73GY/android-2013.html" title="Android 2013" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-swoL-7rAksk/UrbIgrRXS0I/AAAAAAAASEk/FuB-KSnuxuU/s72-c/android_2013.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/12/android-2013.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-3139284173480483099</id><published>2013-12-16T21:21:00.004+01:00</published><updated>2013-12-16T21:21:56.392+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gdk" /><category scheme="http://www.blogger.com/atom/ns#" term="glass" /><category scheme="http://www.blogger.com/atom/ns#" term="google glass" /><category scheme="http://www.blogger.com/atom/ns#" term="mirror api" /><title type="text">Mirror API and GDK - Developing for Google Glass #1</title><content type="html">I recently got my hands on&lt;a href="http://www.google.com/glass/start/"&gt; Google Glass&lt;/a&gt; and decided to write some articles about developing applications for Glass. After all it's Android that is running on Glass.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What is Glass?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;It's very complicated to explain Google Glass just using text. Only wearing and using it will give you this aha moment. However the following video, made by Google, gives you a good impression about how it feels like.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/v1uyQZNg2vE" width="560"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What is Glass from a developer's point of view?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Google Glass is an Android device running Android 4.0.3. What you see through Glass is basically a customized &lt;i&gt;Launcher&lt;/i&gt; / &lt;i&gt;Home screen&lt;/i&gt; application (a timeline of cards about current and past events) and a slightly different theme. This makes it really interesting for Android developers to develop for Glass: You can use almost all the familiar Android framework APIs. However wearing Glass feels totally different than using a mobile phone. So there's a big difference in designing applications. But not only the UI is different: You can't just port an existing application to Glass. Use cases have to be designed especially for Glass. Some features of your app might not make sense on Glass. Some other interesting features might only be possible on Glass. It's almost impossible to get a feeling for that without using Glass for some days.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Back to writing code.. Currently we can decide between two ways to develop for Glass: The Mirror API or an early preview of the Glass Development Kit (GDK). Let's have a look at both and see what they are capable of.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;The Mirror API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The Mirror API has been the first API that has been introduced by the Glass team. It's a server-side API meaning the applications don't run on Glass itself but on your server and it's your server that interacts with Glass.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Mirror API is great for pushing cards to the timeline of Glass and sharing content from Glass with your server application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some examples of applications that could use the Mirror API:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Twitter client&lt;/b&gt;: The server pushes interesting tweets to the timeline of the Glass owner. The user can share photos and messages with the application and they will be posted to the Twitter timeline.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Context-aware notifications&lt;/b&gt;: Your server subscribes to the user's location. Every now and then your server will receive the latest user location. You use this location to post interesting and related cards to the timeline of the user.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;More about the Mirror API&lt;/b&gt;:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://developers.google.com/glass/develop/mirror/quickstart/"&gt;Google Developers: Mirror API Quick Start&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=CxB1DuwGRqk"&gt;YouTube: Google I/O 2013 - Building Glass Services with the Google Mirror API&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Glass Development Kit (GDK)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;With the GDK you can build Android applications that run directly on Glass. Think of the GDK as Android 4.0.3 SDK with some extra APIs for Google Glass. It's worth mentioning that the GDK is currently in an early preview state. The API is not complete and some important parts are missing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When developing Glass you have two options how your application should show up on Glass:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Live Cards&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wpH3qxEjT_Y/Uq9XLpCVIJI/AAAAAAAAR4A/my3NMMsA1SQ/s1600/glass_timeline_livecard.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-wpH3qxEjT_Y/Uq9XLpCVIJI/AAAAAAAAR4A/my3NMMsA1SQ/s1600/glass_timeline_livecard.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;How a live card shows up in the Glass timeline.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Your application shows up as a card in the timeline (left of the Glass clock). You have again two options how to render these cards:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Low-Frequency Rendering&lt;/b&gt;: Your card is rendered using &lt;a href="https://developer.android.com/reference/android/widget/RemoteViews.html"&gt;Remote Views&lt;/a&gt;. Think of it as a Home screen widget on Android phones. A background service is responsible for updating these views. You only update the views every now and then.&lt;/li&gt;&lt;li&gt;&lt;b&gt;High Frequency Rendering&lt;/b&gt;: Your background service renders directly on the live card's surface. You can draw anything and are not limited to Android views. Furthermore you can update the card many times a second.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Immersion&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9Wv_J7QV5AM/Uq9XdQLAvuI/AAAAAAAAR4I/AwZ0p8RzYPM/s1600/glass_timeline_immersion.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-9Wv_J7QV5AM/Uq9XdQLAvuI/AAAAAAAAR4I/AwZ0p8RzYPM/s1600/glass_timeline_immersion.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;An Immersion is not part of the timeline but "replaces" it.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;An immersion is at the bottom a regular Android activity. For your activity to look like a timeline card:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Don't assign a theme to your activity or use the DeviceDefault theme as base for your customization.&lt;/li&gt;&lt;li&gt;Even though you can use the touch pad of Glass almost like a d-pad: Try to avoid most input-related Android widgets. They don't make much sense on Glass because you are not using a touch screen. Instead try to use gestures with the &lt;a href="https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector"&gt;GestureDetector&lt;/a&gt;&amp;nbsp;class or &lt;a href="https://developers.google.com/glass/develop/gdk/input/voice"&gt;voice input&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Use the &lt;a href="https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card"&gt;Card class&lt;/a&gt; and its &lt;a href="https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#toView()"&gt;toView()&lt;/a&gt; method to create a view that looks like regular Glass card.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;More about the GDK&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://developers.google.com/glass/develop/gdk/quick-start"&gt;Google Developers: GDK Quick Start&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=oZSLKtpgQkc"&gt;YouTube: Glass Development Kit Sneak Peek&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/JXGHhmdRusw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/3139284173480483099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/12/mirror-api-gdk-developing-google-glass.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/3139284173480483099" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/3139284173480483099" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/JXGHhmdRusw/mirror-api-gdk-developing-google-glass.html" title="Mirror API and GDK - Developing for Google Glass #1" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-wpH3qxEjT_Y/Uq9XLpCVIJI/AAAAAAAAR4A/my3NMMsA1SQ/s72-c/glass_timeline_livecard.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/12/mirror-api-gdk-developing-google-glass.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-3096175864289654512</id><published>2013-08-22T12:43:00.002+02:00</published><updated>2013-08-22T12:43:53.597+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="Handler" /><category scheme="http://www.blogger.com/atom/ns#" term="Intent" /><category scheme="http://www.blogger.com/atom/ns#" term="IntentService" /><category scheme="http://www.blogger.com/atom/ns#" term="Looper" /><category scheme="http://www.blogger.com/atom/ns#" term="Service" /><title type="text">Read the code: IntentService</title><content type="html">&lt;span style="font-size: x-small;"&gt;In the new category &lt;b&gt;Read the code&lt;/b&gt; I’m going to show the internals of the Android framework. Reading the code of the framework can give you a good impression about what’s going on under the hood. In addition to that knowing how the framework developers solved common problems can help you to find the best solutions when facing problems in your own app code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What is the IntentService class good for?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;This article is about the &lt;a href="https://developer.android.com/reference/android/app/IntentService.html"&gt;IntentService&lt;/a&gt; class of Android. Extending the IntentService class is the best solution for implementing a background service that is going to process something in a queue-like fashion. You can pass data via &lt;a href="https://developer.android.com/reference/android/content/Intent.html"&gt;Intents&lt;/a&gt; to the IntentService and it will take care of queuing and processing the Intents on a worker thread one at a time. When writing your IntentService implementation you are required to override the &lt;a href="https://developer.android.com/reference/android/app/IntentService.html#onHandleIntent(android.content.Intent)"&gt;onHandleIntent()&lt;/a&gt; method to process the data of the supplied Intents.&lt;br /&gt;&lt;br /&gt;Let’s take a look at a simple example: This DownloadService class receives Uris to download data from. It will download only one thing at a time with the other requests waiting in a queue.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VJ13VmPcpx4/UhXgpEhsitI/AAAAAAAANSk/ZLzJYR-7ypE/s1600/DownloadService.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-VJ13VmPcpx4/UhXgpEhsitI/AAAAAAAANSk/ZLzJYR-7ypE/s1600/DownloadService.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/IntentService/DownloadService.java"&gt;DownloadService&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;The components&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Before we dip into the source code of the IntentService class, let's first take a look at the different components that we need to know in order to understand the source code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Handler&lt;/b&gt;&amp;nbsp;(&lt;a href="https://developer.android.com/reference/android/os/Handler.html"&gt;documentation&lt;/a&gt;) (&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/os/Handler.java"&gt;source code&lt;/a&gt;)&lt;br /&gt;You may already have used Handler objects. When a Handler is created on the UI thread, messages can be posted to it and these messages will be processed on the UI thread.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ServiceHandler&lt;/b&gt;&amp;nbsp;(&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#58"&gt;source code&lt;/a&gt;)&lt;br /&gt;The ServiceHandler inner-class is a helper class extending the Handler class to delegate the Intent wrapped inside a Message object to the IntentService for processing.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--OVWzXz_dlQ/UhXZNL7nZII/AAAAAAAANR0/3pWwyp_Iw3g/s1600/ServiceHandler.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--OVWzXz_dlQ/UhXZNL7nZII/AAAAAAAANR0/3pWwyp_Iw3g/s1600/ServiceHandler.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#58"&gt;ServiceHandler inner class of&amp;nbsp;android.app.IntentService&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Looper&lt;/b&gt;&amp;nbsp;(&lt;a href="https://developer.android.com/reference/android/os/Looper.html"&gt;documentation&lt;/a&gt;) (&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/os/Looper.java#Looper"&gt;source code&lt;/a&gt;)&lt;br /&gt;The Looper class has a MessageQueue object attached to it and blocks the current thread until a Message is received. This message will be passed to the assigned Handler. After that the Looper processes the next message in the queue or blocks again until a message is received.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HandlerThread&lt;/b&gt;&amp;nbsp;(&lt;a href="https://developer.android.com/reference/android/os/HandlerThread.html"&gt;documentation&lt;/a&gt;) (&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/os/HandlerThread.java#HandlerThread"&gt;source code&lt;/a&gt;)&lt;br /&gt;A HandlerThread is a Thread implementation that does all the Looper setup for you. By creating and starting a HandlerThread instance you will have a running thread with a Looper attached to it waiting for messages to process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Read the code!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we know enough about all the components to understand the &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java"&gt;IntentService code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;onCreate()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YHAG_7OKKhI/UhXazQgkmkI/AAAAAAAANSA/57KqOScdP9k/s1600/IntentService_oncreate.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-YHAG_7OKKhI/UhXazQgkmkI/AAAAAAAANSA/57KqOScdP9k/s1600/IntentService_oncreate.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#101"&gt;IntentService.onCreate()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;At first a HandlerThread is created and started. We now have a background thread running that already has a Looper assigned. This Looper is waiting on the background thread for messages to process.&lt;br /&gt;&lt;br /&gt;Next a ServiceHandler is created for this Looper. The Handler’s &lt;a href="https://developer.android.com/reference/android/os/Handler.html#handleMessage(android.os.Message)"&gt;handleMessage&lt;/a&gt;() method will be called for every message received by the Looper. The ServiceHandler obtains the Intent object from the Message and passes it to the onHandleIntent() method of the IntentService.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;onStart()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-C91WSSI62cw/UhXbfPQsAJI/AAAAAAAANSI/k5Hyb0QB9qI/s1600/IntentService_onstart.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-C91WSSI62cw/UhXbfPQsAJI/AAAAAAAANSI/k5Hyb0QB9qI/s1600/IntentService_onstart.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#115"&gt;IntentService.onStart()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The onStart() method is called every time &lt;a href="https://developer.android.com/reference/android/content/Context.html#startService(android.content.Intent)"&gt;startService()&lt;/a&gt; is called. We wrap the Intent in a Message object and post it to the Handler. The Handler will enqueue it in the message queue of the Looper. The onStart() method is deprecated since API level 5 (Android 2.0). Instead onStartCommand() should be implemented.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;onStartCommand()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HB0fPJbsY8A/UhXcBOrAYAI/AAAAAAAANSQ/pfU3UUXUmE8/s1600/IntentService_onstartcommand.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-HB0fPJbsY8A/UhXcBOrAYAI/AAAAAAAANSQ/pfU3UUXUmE8/s1600/IntentService_onstartcommand.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#129"&gt;IntentService.onStartCommand()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In onStartCommand() we call onStart() to enqueue the Intent. We return &lt;a href="https://developer.android.com/reference/android/app/Service.html#START_REDELIVER_INTENT"&gt;START_REDELIVER_INTENT&lt;/a&gt; or &lt;a href="https://developer.android.com/reference/android/app/Service.html#START_NOT_STICKY"&gt;START_NOT_STICK&lt;/a&gt; depending on what the child class has set via&amp;nbsp;&lt;a href="https://developer.android.com/reference/android/app/IntentService.html#setIntentRedelivery(boolean)"&gt;setIntentRedelivery()&lt;/a&gt;. Depending on this setting an Intent will be redelivered to the service if the process dies before onHandleIntent() returns or the Intent will die as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;onDestroy()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GkK4xWmOWu0/UhXcmqOLkQI/AAAAAAAANSY/M8oZn2GF5FY/s1600/IntentService_ondestroy.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-GkK4xWmOWu0/UhXcmqOLkQI/AAAAAAAANSY/M8oZn2GF5FY/s1600/IntentService_ondestroy.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#134"&gt;IntentService.onDestroy()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In onDestroy() we just need to stop the Looper.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The IntentService code is quite short and simple, yet a powerful pattern. With the &lt;a href="https://developer.android.com/reference/android/os/Handler.html"&gt;Handler&lt;/a&gt;, &lt;a href="https://developer.android.com/reference/android/os/Looper.html"&gt;Looper&lt;/a&gt; and &lt;a href="https://developer.android.com/reference/java/lang/Thread.html"&gt;Thread&lt;/a&gt; class you can easily build your own simple processing queues.&lt;br /&gt;&lt;br /&gt;Oh, and if you are looking for an exercise. The code of the onCreate() method contains a TODO comment that I omitted above:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QlS7sJHfj1I/UhXp96c9r_I/AAAAAAAANS0/iRXyCb9E7NI/s1600/oncreate_todo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-QlS7sJHfj1I/UhXp96c9r_I/AAAAAAAANS0/iRXyCb9E7NI/s1600/oncreate_todo.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/IntentService.java#101"&gt;TODO in onCreate()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/ohV1Ybma6A4" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/3096175864289654512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/08/read-code-intentservice.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/3096175864289654512" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/3096175864289654512" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/ohV1Ybma6A4/read-code-intentservice.html" title="Read the code: IntentService" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-VJ13VmPcpx4/UhXgpEhsitI/AAAAAAAANSk/ZLzJYR-7ypE/s72-c/DownloadService.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/08/read-code-intentservice.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-5050374432842781763</id><published>2013-05-27T19:31:00.001+02:00</published><updated>2013-05-27T19:31:31.801+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="Intent" /><category scheme="http://www.blogger.com/atom/ns#" term="picture" /><category scheme="http://www.blogger.com/atom/ns#" term="Sharing" /><title type="text">Sharing the taken picture - Instant Mustache #9</title><content type="html">&lt;div&gt;&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;Click here&lt;/a&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;articles about Instant Mustache&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;Up to now&lt;/a&gt; our app can take and view pictures. The next step is to share the taken picture with other Android apps. This is done via &lt;a href="https://developer.android.com/guide/components/intents-filters.html"&gt;Intents&lt;/a&gt;. The Intent system is one of the most powerful features of Android. It allows us to interact with any app that accepts images with almost no extra afford.&lt;br /&gt;&lt;br /&gt;We could create an &lt;a href="https://developer.android.com/guide/topics/ui/actionbar.html"&gt;ActionBar&lt;/a&gt; item and when clicked launch an &lt;a href="https://developer.android.com/reference/android/content/Intent.html"&gt;Intent&lt;/a&gt;&amp;nbsp;to share the image but instead we are going to use a &lt;a href="http://developer.android.com/training/sharing/shareaction.html"&gt;ShareActionProvider&lt;/a&gt;. The ShareActionProvider adds a share icon to the ActionBar as well as the icon of the app that the user has shared pictures the most with. By clicking this icon the user can share directly with this app. In addition to that the ShareActionProvider shows a sub menu with more apps that the given picture can be shared with.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-pDiZ5iw7DMw/UaOT6GqMHuI/AAAAAAAALjk/oLbP5J6_nok/s1600/shareactionprovider.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-pDiZ5iw7DMw/UaOT6GqMHuI/AAAAAAAALjk/oLbP5J6_nok/s1600/shareactionprovider.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A ShareActionProvider with Google+ as default share action.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-L_-glPQZGF8/UaOXqTIYImI/AAAAAAAALkE/ofFypChT2Ew/s1600/shareactionprovider_menu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="285" src="http://4.bp.blogspot.com/-L_-glPQZGF8/UaOXqTIYImI/AAAAAAAALkE/ofFypChT2Ew/s320/shareactionprovider_menu.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Sub menu of a ShareActionProvider.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;If sharing is a key feature of your activity, you should consider using the ShareActionProvider.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We start by creating an XML menu file for adding the share action. For legacy reasons the ActionBar uses the same approach for creating action items as the menu in Android 2.x.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KWMveO6nNuo/UaOTQWFlM1I/AAAAAAAALjc/OXqcUuxPmhg/s1600/activity_photo_menu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-KWMveO6nNuo/UaOTQWFlM1I/AAAAAAAALjc/OXqcUuxPmhg/s1600/activity_photo_menu.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-09/res/menu/activity_photo.xml"&gt;activity_photo.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Once we inflated the menu in &lt;a href="https://developer.android.com/reference/android/app/Activity.html#onCreateOptionsMenu(android.view.Menu)"&gt;onCreateOptionsMenu()&lt;/a&gt; we need to set the Intent used to share the photo.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0eTGVnhBo_0/UaOVjb4aX-I/AAAAAAAALj0/mXc2KKjxi0k/s1600/initialize_share_action.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-0eTGVnhBo_0/UaOVjb4aX-I/AAAAAAAALj0/mXc2KKjxi0k/s1600/initialize_share_action.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-09/src/com/androidzeitgeist/mustache/activity/PhotoActivity.java#L45"&gt;PhotoActivity.initializeShareAction()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Let's take a look at the different components of the Intent:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;ACTION_SEND&lt;/b&gt;: The default action used for “sending” data to an other unspecified activity.&lt;/li&gt;&lt;li&gt;&lt;b&gt;MIME&lt;/b&gt; type: The MIME type of the data being sent. Other apps can define multiple MIME types they accept. We are sending a JPEG image and therefore we are using the MIME type “image/jpeg”. To learn more about MIME types start with the &lt;a href="https://en.wikipedia.org/wiki/Internet_media_type"&gt;"Internet media type" Wikipedia article&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;EXTRA_STREAM&lt;/b&gt;: &lt;a href="https://developer.android.com/reference/android/net/Uri.html"&gt;Uri&lt;/a&gt; that points to the data that should be sent. In our case the Uri is pointing to the image file on the external storage.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;That's it already. For all changes done to the code base, see the &lt;a href="https://github.com/pocmo/Instant-Mustache/commit/4bded2002dfd56f63245d59e07a44e71deb04172"&gt;repository on GitHub&lt;/a&gt;. In the next article we'll polish some aspects of the app before we start implementing the Face detection feature.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/APLuQCN5xxA" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/5050374432842781763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/05/sharing-taken-picture-instant-mustache-9.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5050374432842781763" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5050374432842781763" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/APLuQCN5xxA/sharing-taken-picture-instant-mustache-9.html" title="Sharing the taken picture - Instant Mustache #9" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-pDiZ5iw7DMw/UaOT6GqMHuI/AAAAAAAALjk/oLbP5J6_nok/s72-c/shareactionprovider.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/05/sharing-taken-picture-instant-mustache-9.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8353658165969956441</id><published>2013-01-14T20:47:00.000+01:00</published><updated>2013-01-14T20:47:04.700+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="camera" /><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="orientation" /><category scheme="http://www.blogger.com/atom/ns#" term="OrientationEventListener" /><category scheme="http://www.blogger.com/atom/ns#" term="rotation" /><title type="text">Fixing the rotation - Instant Mustache #8</title><content type="html">&lt;div&gt;&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;Click here&lt;/a&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;articles about Instant Mustache&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Wrong orientation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you run the current version of Instant Mustache and take some pictures you'll notice something odd: The orientation of the taken pictures is sometimes wrong. This may depend on the device you are using. When using a Galaxy Nexus the picture will be rotated 90° to the left when taking a picture in portrait mode but will be rotated correctly when taking a picture in landscape mode.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RDkIH8Iw8VY/UPRZTnyZA2I/AAAAAAAAH0Q/BU7sRAlQQOw/s1600/rotation_error.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="239" src="http://1.bp.blogspot.com/-RDkIH8Iw8VY/UPRZTnyZA2I/AAAAAAAAH0Q/BU7sRAlQQOw/s320/rotation_error.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Wrong orientation of photo that has been taken in portrait mode&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;How does this happen? You may remember that we've used &lt;a href="https://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"&gt;Camera.setDisplayOrientation()&lt;/a&gt; in one of the &lt;a href="http://www.androidzeitgeist.com/2012/10/displaying-camera-preview-instant.html"&gt;previous articles&lt;/a&gt; to explicitly set the display rotation. First, this setting only affects the preview picture. The picture passed to the &lt;a href="https://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html"&gt;Camera.ShutterCallback&lt;/a&gt; isn't affected by this setting. And second, we still have to account into how the device is rotated in the moment of taking the picture.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Detecting and remembering the orientation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;What we need to do in our code is to register an &lt;a href="https://developer.android.com/reference/android/view/OrientationEventListener.html"&gt;OrientationEventListener&lt;/a&gt; to get notified whenever the orientation changes. We'll remember this orientation and use this to rotate the taken image once the callback returns.&lt;br /&gt;&lt;br /&gt;Whenever the orientation changes &lt;a href="https://developer.android.com/reference/android/view/OrientationEventListener.html#onOrientationChanged(int)"&gt;onOrientationChanged(int)&lt;/a&gt; of the listener will be called. The orientation will be passed to the method in degrees, ranging from 0 to 359. We need to normalize this value as we are only interested in 90° steps for rotating the picture.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-JQ2Rm-uZ0gQ/UPRahx8kf2I/AAAAAAAAH0c/v7NIwzqReBM/s1600/cameraorientationlistener_normalize.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-JQ2Rm-uZ0gQ/UPRahx8kf2I/AAAAAAAAH0c/v7NIwzqReBM/s1600/cameraorientationlistener_normalize.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-08/src/com/androidzeitgeist/mustache/listener/CameraOrientationListener.java#L31"&gt;CameraOrientationListener.normalize()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Another method called &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-08/src/com/androidzeitgeist/mustache/listener/CameraOrientationListener.java#L51"&gt;rememberOrientation()&lt;/a&gt; will be used to save the orientation of the device in the moment of the user pressing the shutter button.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rqdv0tzl52Y/UPRbbrb1vBI/AAAAAAAAH00/2Ldj2OrPXBM/s1600/camerafragment_takepicture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-rqdv0tzl52Y/UPRbbrb1vBI/AAAAAAAAH00/2Ldj2OrPXBM/s1600/camerafragment_takepicture.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-08/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L231"&gt;CameraFragment.takePicture()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Rotating the picture&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we just need to rotate the Bitmap. We do this by creating a new Bitmap object and applying a rotated &lt;a href="http://developer.android.com/reference/android/graphics/Matrix.html"&gt;Matrix&lt;/a&gt; to the pixels. The rotation angle is calculated by summing the remembered orientation, the display orientation and the natural rotation of the device.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Kp9GQ7CSHik/UPRcKSjRiBI/AAAAAAAAH1I/cTRdA_NYgjI/s1600/camerafragment_onpicturetaken.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Kp9GQ7CSHik/UPRcKSjRiBI/AAAAAAAAH1I/cTRdA_NYgjI/s1600/camerafragment_onpicturetaken.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-08/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L241"&gt;CameraFragment.onPictureTaken()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Result&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3lBP-pDo5cQ/UPRd8jZp-LI/AAAAAAAAH14/kJaLh3-Mdak/s1600/result_rotation.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="242" src="http://3.bp.blogspot.com/-3lBP-pDo5cQ/UPRd8jZp-LI/AAAAAAAAH14/kJaLh3-Mdak/s320/result_rotation.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photos rotated correctly in portrait and landscape mode&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/17oriJk6I8w" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8353658165969956441/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2013/01/fixing-rotation-camera-picture.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8353658165969956441" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8353658165969956441" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/17oriJk6I8w/fixing-rotation-camera-picture.html" title="Fixing the rotation - Instant Mustache #8" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-RDkIH8Iw8VY/UPRZTnyZA2I/AAAAAAAAH0Q/BU7sRAlQQOw/s72-c/rotation_error.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2013/01/fixing-rotation-camera-picture.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-1598031232613876637</id><published>2012-12-22T14:21:00.000+01:00</published><updated>2012-12-22T14:27:19.476+01:00</updated><title type="text">Android 2012</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dKfHvBySVQk/UNWsnfVSK6I/AAAAAAAAHR8/FYWEUfw0yeU/s1600/android2012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-dKfHvBySVQk/UNWsnfVSK6I/AAAAAAAAHR8/FYWEUfw0yeU/s1600/android2012.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After &lt;a href="http://www.youtube.com/watch?v=xY_MUB8adEQ"&gt;Google Zeitgeist&lt;/a&gt; and&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=iCkYw3cRwLo"&gt;YouTube&lt;/a&gt;&amp;nbsp;looked back on 2012 it’s time to do the same for Android.&lt;span id="goog_2128203782"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;January&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/-4cV7er0VgPI/UNWw0GXYL5I/AAAAAAAAHSQ/nDFaspNqWns/s1600/androiddesign.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="157" src="http://4.bp.blogspot.com/-4cV7er0VgPI/UNWw0GXYL5I/AAAAAAAAHSQ/nDFaspNqWns/s200/androiddesign.png" width="200" /&gt;&lt;/a&gt;The year 2011 has just ended and the &lt;b&gt;Galaxy Nexus&lt;/b&gt; is the current flagship phone. 12 days later on January 12th the &lt;b&gt;&lt;a href="http://developer.android.com/design/index.html"&gt;Android Design&lt;/a&gt;&lt;/b&gt; website launched. Followed by the &lt;b&gt;&lt;a href="https://plus.google.com/u/0/+AndroidDevelopers/posts"&gt;Android developers Google+ page&lt;/a&gt;&lt;/b&gt; on January 30th.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;February&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first numbers of the year are published. &lt;b&gt;850,000&lt;/b&gt; Android phones are activated every day. &lt;b&gt;300 million &lt;/b&gt;devices have been activated so far.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;March&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On March 5th &lt;b&gt;&lt;a href="http://android-developers.blogspot.de/2012/03/android-apps-break-50mb-barrier.html"&gt;expansion files&lt;/a&gt;&lt;/b&gt; are introduced and &lt;b&gt;Android apps break the 50MB barrier&lt;/b&gt; expanding the size limit to &lt;b&gt;4GB&lt;/b&gt;. The Android market retires and is reborn as &lt;b&gt;Google play&lt;/b&gt; on March 6th. The same month on March 21st the &lt;b&gt;SDK tools and ADT revision 17&lt;/b&gt; are released, adding an emulator that supports running x86 system images on Windows and Mac OS X. An update to the Android Developer Console on March 29th allows &lt;b&gt;multiple users&lt;/b&gt; to manage published Android apps.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qPqhAtg_PVg/UNWxPkos_2I/AAAAAAAAHSY/ivgQD4D4Nmo/s1600/appclinic.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-qPqhAtg_PVg/UNWxPkos_2I/AAAAAAAAHSY/ivgQD4D4Nmo/s200/appclinic.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;April&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The emulator gets even more faster on April 9th by adding &lt;b&gt;GPU support&lt;/b&gt;. On April 20th the first episode of &lt;b&gt;&lt;a href="http://www.youtube.com/playlist?list=PLB7B9B23D864A55C3"&gt;Friday App Review&lt;/a&gt;&lt;/b&gt; airs and is later called &lt;b&gt;&lt;a href="http://www.youtube.com/playlist?list=PLB7B9B23D864A55C3"&gt;The app clinic&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;May&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;On May 4th Wolfram Rittmeyer publishes the first posting on his blog &lt;b&gt;&lt;a href="http://www.grokkingandroid.com/"&gt;Grokking Android&lt;/a&gt;&lt;/b&gt;. Followed by the first article published on &lt;a href="http://www.androidzeitgeist.com/"&gt;&lt;b&gt;Android Zeitgeist&lt;/b&gt;&lt;/a&gt; on May 27th. 3 days before on May 24th &lt;b&gt;&lt;a href="http://android-developers.blogspot.de/2012/05/in-app-subscriptions-in-google-play.html"&gt;In-app Subscriptions&lt;/a&gt;&lt;/b&gt; are launched on Google Play.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;June&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-HvAwcdnUaq4/UNWxlZCN7XI/AAAAAAAAHSg/jM3slhIq--k/s1600/google-io-logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="40" src="http://1.bp.blogspot.com/-HvAwcdnUaq4/UNWxlZCN7XI/AAAAAAAAHSg/jM3slhIq--k/s200/google-io-logo.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;The &lt;b&gt;&lt;a href="https://developers.google.com/events/io/"&gt;Google I/O&lt;/a&gt;&lt;/b&gt; takes place for three days from June 27th to 29th. There are now &lt;b&gt;900,000&lt;/b&gt; Android devices activated every day and &lt;b&gt;400 million&lt;/b&gt; devices have been activated up to now. &lt;b&gt;Android 4.1 (Jelly Bean)&lt;/b&gt; is publicly shown for the first time on June 27th. The same day the &lt;b&gt;Android 4.1 SDK&lt;/b&gt; is released. In addition to that the first tablet by Google is unveiled: The &lt;b&gt;Nexus 7&lt;/b&gt;. On the second day of the Google I/O the &lt;b&gt;Android SDK tools&lt;/b&gt; are updated to &lt;b&gt;revision 20&lt;/b&gt;. At the end of the Google I/O there have been 3.5 million live streams seen from 170 countries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;July&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-iu-C9xVT-_U/UNWyPKppPJI/AAAAAAAAHS4/JfRWJvOp7dg/s1600/ouya.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-iu-C9xVT-_U/UNWyPKppPJI/AAAAAAAAHS4/JfRWJvOp7dg/s200/ouya.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;On July 3rd the &lt;b&gt;&lt;a href="http://www.ouya.tv/"&gt;Ouya&lt;/a&gt;&lt;/b&gt;, an Android based console, is unveiled and a Kickstarter campaign is started on July 10th. On July 9th the &lt;b&gt;Android 4.1 source code&lt;/b&gt; is published as part of the Android Open Source Project (AOSP).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;August&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The funding phase for the &lt;b&gt;Ouya&lt;/b&gt; is completed. The campaign collected $8,596,475. That’s 904% more than the initial campaign goal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;September&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;New numbers are released. There are now &lt;b&gt;1.3 million devices&lt;/b&gt; activated every a day. About &lt;b&gt;70,000&lt;/b&gt; of these devices are tablets. &lt;b&gt;480 million&lt;/b&gt; devices have been activated up to now. On September 9th the first episode of &lt;b&gt;&lt;a href="http://www.youtube.com/playlist?list=PLWz5rJ2EKKc9Wam5jE-9oY8l6RpeAx-XM"&gt;This week in Android development&lt;/a&gt;&lt;/b&gt; airs. A day later the first episode of &lt;b&gt;&lt;a href="http://www.youtube.com/playlist?list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF"&gt;Android Design in Action&lt;/a&gt;&lt;/b&gt; is uploaded to YouTube.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;October&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-iMCBRXK31yE/UNWx_vXgIjI/AAAAAAAAHSw/9PXrh3tQBs4/s1600/nexus4.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="167" src="http://3.bp.blogspot.com/-iMCBRXK31yE/UNWx_vXgIjI/AAAAAAAAHSw/9PXrh3tQBs4/s200/nexus4.png" width="200" /&gt;&lt;/a&gt;Till mid October &lt;b&gt;3 million Nexus 7&lt;/b&gt; units have been sold. Starting from October 15th the &lt;b&gt;new Google Play Developer Console&lt;/b&gt; is available to everyone. Google planned a &lt;b&gt;launch event&lt;/b&gt; on October 29th in New York but it has been cancelled due to Hurricane Sandy. Nevertheless the &lt;b&gt;Nexus 4&lt;/b&gt; and &lt;b&gt;Nexus 10&lt;/b&gt; are introduced online this day. These are the first devices to run &lt;b&gt;Android 4.2&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;November&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first episode of &lt;a href="http://www.youtube.com/playlist?list=PLWz5rJ2EKKc9loen4OjS03gdjI0JhF4cW"&gt;(╯°□°)╯︵ ┻━┻&lt;/a&gt; airs on November 8th. On November 13th the &lt;b&gt;Nexus 4&lt;/b&gt; and &lt;b&gt;Nexus 10&lt;/b&gt; went on sale and are sold out in minutes. Later that day the &lt;b&gt;Android 4.2 SDK platform&lt;/b&gt; is released. Another day later the &lt;b&gt;Android SDK tools revision 21&lt;/b&gt; are released.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;December&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Google releases a new &lt;b&gt;&lt;a href="http://android-developers.blogspot.de/2012/12/new-google-maps-android-api-now-part-of.html"&gt;Google Maps API&lt;/a&gt;&lt;/b&gt; for Android on December 3rd. On December 10th a new version of the&lt;b&gt; &lt;a href="http://android-developers.blogspot.de/2012/12/in-app-billing-version-3.html"&gt;In-App billing API&lt;/a&gt;&lt;/b&gt; is released.&lt;br /&gt;&lt;br /&gt;The Android team releases their &lt;b&gt;Happy Holidays&lt;/b&gt; video:&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/967nio2LF7s" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;2013?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What has been your Android highlight in 2012 and what are your wishes for 2013?&lt;/b&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/6_wXwDjJRdc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/1598031232613876637/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/12/android-2012.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1598031232613876637" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1598031232613876637" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/6_wXwDjJRdc/android-2012.html" title="Android 2012" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-dKfHvBySVQk/UNWsnfVSK6I/AAAAAAAAHR8/FYWEUfw0yeU/s72-c/android2012.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/12/android-2012.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8734004828090755204</id><published>2012-12-11T20:41:00.000+01:00</published><updated>2012-12-11T20:41:51.969+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="Clean Code" /><category scheme="http://www.blogger.com/atom/ns#" term="String" /><category scheme="http://www.blogger.com/atom/ns#" term="TextUtils" /><title type="text">Mind the gap: String.isEmpty()</title><content type="html">&lt;span style="font-size: x-small;"&gt;Articles labeled "Mind the gap" are short articles mostly about simple problems that arise from using different API levels of Android. They are more short trivia postings than big teachings about Android development.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I try to write code as readable as possible. That's the reason why I don't want to compare a String to an other empty String object or check its length when I want to know if a String is empty.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FWLirpvHLAM/UMbfKHp3tUI/AAAAAAAAHCI/NPnjM4Qx5Pk/s1600/isemptyvariants.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-FWLirpvHLAM/UMbfKHp3tUI/AAAAAAAAHCI/NPnjM4Qx5Pk/s1600/isemptyvariants.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;In the book "&lt;a href="http://books.google.de/books?id=dwSfGQAACAAJ&amp;amp;dq=isbn:0132350882y"&gt;Clean code&lt;/a&gt;" by &lt;a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin"&gt;Robert C. Martin&lt;/a&gt; you can read&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Grady_Booch"&gt;Grady Booch&lt;/a&gt; saying: "Clean code reads like well-written prose". So I try to use &lt;a href="http://developer.android.com/reference/java/lang/String.html#isEmpty()"&gt;String.isEmpty()&lt;/a&gt; for that reason. Internally it may do a length check as well (I stopped my investigation at the &lt;i&gt;native&lt;/i&gt; keyword)&amp;nbsp;but when reading the following snippet it is absolutely obvious what I intend to do.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fPosAzNzRYc/UMbecA_7d3I/AAAAAAAAHB4/K6lPAMAkrIs/s1600/isEmptyMethod.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-fPosAzNzRYc/UMbecA_7d3I/AAAAAAAAHB4/K6lPAMAkrIs/s1600/isEmptyMethod.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Even though &lt;a href="http://developer.android.com/reference/java/lang/String.html#isEmpty()"&gt;isEmpty()&lt;/a&gt; has been introduced in Java 1.6 it hasn't been available in Android until API level 9 (Android 2.3) so I accidentally caused some crashes on earlier versions of Android. Nowadays &lt;a href="http://tools.android.com/tips/lint"&gt;lint&lt;/a&gt;&amp;nbsp;thankfully&amp;nbsp;saves me from doing this error.&lt;br /&gt;&lt;br /&gt;So what to do now? I don't know if someone at Google felt the same but there is a class in the Android framework that solves that problem: &lt;a href="http://developer.android.com/reference/android/text/TextUtils.html"&gt;TextUtils&lt;/a&gt;. This class also has a lot of other helpful methods like &lt;a href="http://developer.android.com/reference/android/text/TextUtils.html#join(java.lang.CharSequence, java.lang.Object[])"&gt;join()&lt;/a&gt; to join an array of elements to a String using a&amp;nbsp;delimiter&amp;nbsp;or &lt;a href="http://developer.android.com/reference/android/text/TextUtils.html#getReverse(java.lang.CharSequence, int, int)"&gt;getReverse() &lt;/a&gt;to reverse a String (Take that interview question!).&lt;br /&gt;&lt;br /&gt;In addition to that the TextUtils class has a method &lt;a href="http://developer.android.com/reference/android/text/TextUtils.html#isEmpty(java.lang.CharSequence)"&gt;isEmpty()&lt;/a&gt; that is available since API level 1.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nzyWV2TAHaM/UMbelfdSHCI/AAAAAAAAHCA/Z2lLIH_YddU/s1600/TextUtils.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-nzyWV2TAHaM/UMbelfdSHCI/AAAAAAAAHCA/Z2lLIH_YddU/s1600/TextUtils.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Phew! By the way: &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/text/TextUtils.java#TextUtils.isEmpty%28java.lang.CharSequence%29"&gt;Internally&lt;/a&gt; isEmpty() checks if the length of the String is 0 (and does a null check).&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/jbePXNFlMnA" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8734004828090755204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/12/string-is-empty.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8734004828090755204" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8734004828090755204" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/jbePXNFlMnA/string-is-empty.html" title="Mind the gap: String.isEmpty()" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-FWLirpvHLAM/UMbfKHp3tUI/AAAAAAAAHCI/NPnjM4Qx5Pk/s72-c/isemptyvariants.png" height="72" width="72" /><thr:total>5</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/12/string-is-empty.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-4510260145421419236</id><published>2012-11-05T20:40:00.000+01:00</published><updated>2012-11-05T20:40:10.181+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bezel swipe" /><category scheme="http://www.blogger.com/atom/ns#" term="fake dragging" /><category scheme="http://www.blogger.com/atom/ns#" term="scrolling" /><category scheme="http://www.blogger.com/atom/ns#" term="SeekBar" /><category scheme="http://www.blogger.com/atom/ns#" term="support library" /><category scheme="http://www.blogger.com/atom/ns#" term="ViewPager" /><title type="text">Examining the ViewPager #3</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the ViewPager component.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/viewpager.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to see a list of&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/viewpager.html" style="font-size: small;"&gt;all articles of this series&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Horizontal scrolling pages&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Have you ever tried putting horizontal scrolling components inside a &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html"&gt;ViewPager&lt;/a&gt;? Well, since revision 9 of the &lt;a href="http://developer.android.com/tools/extras/support-library.html"&gt;support library&lt;/a&gt; this is supported by the ViewPager. As long as the inner component can scroll horizontally this component will be scrolled. Whenever the component can't be further scrolled the ViewPager will handle the touch events and you start to switch to the next page. This works out-of-the-box for scrolling view components of Android like the &lt;a href="http://developer.android.com/reference/android/webkit/WebView.html"&gt;WebView&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Internally the ViewPager uses &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewCompat.html#canScrollHorizontally(android.view.View, int)"&gt;ViewCompat.canScrollHorizontally(View v, int direction)&lt;/a&gt;&amp;nbsp;to determine if a child view can be scrolled horizontally and should receive the according touch events. Unfortunately this method is only implemented for Android 4.0 (API level 14) and above. For all earlier versions this method will always return false and therefore never scroll the components inside the ViewPager.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Bezel swipe&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Allowing horizontal scrolling components introduces a new problem: What if you want to switch pages but not scroll every component to its horizontal end? When you start the swipe at the phone's bezel (or actually from the edge of the ViewPager) you'll switch pages instead of scrolling the page's content. This gesture is called &lt;i&gt;bezel swipe&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;For reading more about the bezel swipe gesture from a UI point of view read "&lt;a href="http://www.androiduipatterns.com/2012/02/bezel-swipe-solution-to-pan-and-swipe.html"&gt;Bezel swipe, a Solution to Pan and Swipe Confusion?&lt;/a&gt;" on &lt;a href="http://www.androiduipatterns.com/"&gt;Android UI Patterns&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The good news is again: The ViewPager supports bezel swipe out of the box. But as you can't horizontally scroll inside pages on devices running an Android version lower than 4.0 (API level 14) bezel swipe isn't of any use on these as well.&lt;br /&gt;&lt;br /&gt;The area to start a bezel swipe has a width of either 16dp or a 10th of the total width of the ViewPager depending on which one is smaller.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dNYV1OuZvdQ/UJgLXTptXHI/AAAAAAAAGS4/Zt0OXlBwbaM/s1600/viewpager_bezel_swipe.png" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-dNYV1OuZvdQ/UJgLXTptXHI/AAAAAAAAGS4/Zt0OXlBwbaM/s1600/viewpager_bezel_swipe.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Fake dragging&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ViewPager supports fake dragging. Fake dragging can be used to simulate a dragging event/animation, e.g. for detecting drag events on a different component and delegating these to the ViewPager.&lt;br /&gt;&lt;br /&gt;You have to signal the ViewPager when to start or end a fake drag by calling &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#beginFakeDrag()"&gt;beginFakeDrag()&lt;/a&gt; and &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#endFakeDrag()"&gt;endFakeDrag()&lt;/a&gt; on it. After starting a fake drag you can use &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#fakeDragBy(float)"&gt;fakeDragBy(float)&lt;/a&gt; to drag the ViewPager by the given amount of pixels along the x axis (negative values to the left and positive values to the right).&lt;br /&gt;&lt;br /&gt;The following example uses a &lt;a href="http://developer.android.com/reference/android/widget/SeekBar.html"&gt;SeekBar&lt;/a&gt;&amp;nbsp;whose current progress state is used to fake drag a ViewPager by the given percentage.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-SFr1EyEfN4Q/UJgNTawCuSI/AAAAAAAAGTA/Pq_75XpuIes/s1600/SeekBarPagerListener.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-SFr1EyEfN4Q/UJgNTawCuSI/AAAAAAAAGTA/Pq_75XpuIes/s1600/SeekBarPagerListener.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/ViewPager/03/SeekBarPagerListener.java"&gt;SeekBarPagerListener.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;This video shows the fake drag in action:&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" height="360" src="http://www.youtube.com/embed/us8w2g9YXC4?rel=0" width="480"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/GsNXoeK7N6Y" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/4510260145421419236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/11/examining-viewpager-3.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/4510260145421419236" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/4510260145421419236" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/GsNXoeK7N6Y/examining-viewpager-3.html" title="Examining the ViewPager #3" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-dNYV1OuZvdQ/UJgLXTptXHI/AAAAAAAAGS4/Zt0OXlBwbaM/s72-c/viewpager_bezel_swipe.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/11/examining-viewpager-3.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-5361828375857120954</id><published>2012-10-30T23:35:00.000+01:00</published><updated>2012-10-30T23:35:59.679+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="Intent" /><category scheme="http://www.blogger.com/atom/ns#" term="Uri" /><title type="text">Displaying the taken picture – Instant Mustache #7</title><content type="html">&lt;div&gt;&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection. &lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;Click here&lt;/a&gt; to get a chronological list of all published &lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;articles about Instant Mustache&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Writing the PhotoActivity&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;In the &lt;a href="http://www.androidzeitgeist.com/2012/10/taking-picture-instant-mustache-6.html"&gt;last article&lt;/a&gt; we wrote the code to take a camera picture and save it on the external storage. After saving the file the activity will be finished and a Toast will show up. This is not really user-friendly so now we'll write our next activity which will display the taken picture and later offer the option to share this picture.&lt;br /&gt;&lt;br /&gt;We'll start by creating an empty activity called &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/PhotoActivity.java"&gt;PhotoActivity&lt;/a&gt; and add it to the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/AndroidManifest.xml#L30"&gt;manifest&lt;/a&gt; of our application. For now the layout will only contain an &lt;a href="http://developer.android.com/reference/android/widget/ImageView.html"&gt;ImageView&lt;/a&gt; to display the picture:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KnA5sDjgZds/UJBOSqCkiZI/AAAAAAAAF2k/q3_2TKxMJ8I/s1600/layout_activity_photo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-KnA5sDjgZds/UJBOSqCkiZI/AAAAAAAAF2k/q3_2TKxMJ8I/s1600/layout_activity_photo.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/res/layout/activity_photo.xml"&gt;activity_photo.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Instead of showing a toast in our &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/CameraActivity.java"&gt;CameraActivity&lt;/a&gt; we create an Intent to start the PhotoActivity and use &lt;a href="http://developer.android.com/reference/android/content/Intent.html#setData(android.net.Uri)"&gt;setData(Uri)&lt;/a&gt; on the Intent object to pass a &lt;a href="http://developer.android.com/reference/android/net/Uri.html"&gt;Uri&lt;/a&gt; pointing to the picture file:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VSkxvSyGYTU/UJBOjJYq-aI/AAAAAAAAF2s/q1DBQt-Ib9A/s1600/intent_start_photo_activity.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-VSkxvSyGYTU/UJBOjJYq-aI/AAAAAAAAF2s/q1DBQt-Ib9A/s1600/intent_start_photo_activity.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/CameraActivity.java#L116"&gt;onPictureTaken() - CameraActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;In &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/PhotoActivity.java#L19"&gt;onCreate(Bundle)&lt;/a&gt; of the PhotoActivity we'll retrieve the Uri from the Intent and pass it to the ImageView. The ImageView will take care of loading the picture from the external storage and displaying it.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tE-1b0nu5Ic/UJBO0nSip_I/AAAAAAAAF20/Thmkq7JwsmM/s1600/photo_activity_on_create.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-tE-1b0nu5Ic/UJBO0nSip_I/AAAAAAAAF20/Thmkq7JwsmM/s1600/photo_activity_on_create.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/PhotoActivity.java#L19"&gt;onCreate() - PhotoActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;And that's already all the code we need for the first version of the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-07/src/com/androidzeitgeist/mustache/activity/PhotoActivity.java"&gt;PhotoActivity&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-sX-QuJWGZtQ/UJBVljLcABI/AAAAAAAAF3I/XEL1UJHnjiI/s1600/camera_and_photo_screenshot.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-sX-QuJWGZtQ/UJBVljLcABI/AAAAAAAAF3I/XEL1UJHnjiI/s1600/camera_and_photo_screenshot.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;CameraActivity (left) and PhotoActivity (right)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/bA7tWUcBxoc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/5361828375857120954/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/displaying-taken-picture-instant.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5361828375857120954" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/5361828375857120954" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/bA7tWUcBxoc/displaying-taken-picture-instant.html" title="Displaying the taken picture – Instant Mustache #7" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-KnA5sDjgZds/UJBOSqCkiZI/AAAAAAAAF2k/q3_2TKxMJ8I/s72-c/layout_activity_photo.png" height="72" width="72" /><thr:total>3</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/displaying-taken-picture-instant.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-73829038323965617</id><published>2012-10-26T20:59:00.000+02:00</published><updated>2012-10-30T23:17:25.534+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="camera" /><category scheme="http://www.blogger.com/atom/ns#" term="CameraFragment" /><category scheme="http://www.blogger.com/atom/ns#" term="External storage" /><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="MediaScanner" /><category scheme="http://www.blogger.com/atom/ns#" term="OnClickListener" /><category scheme="http://www.blogger.com/atom/ns#" term="picture" /><title type="text">Taking a picture – Instant Mustache #6</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After writing the necessary code to display a camera preview in &lt;a href="http://www.androidzeitgeist.com/2012/10/displaying-camera-preview-instant.html"&gt;the last article&lt;/a&gt; it's now time to actually take a picture and save it on the external storage of the device.&lt;br /&gt;&lt;br /&gt;We start by extending the layout of the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/activity/CameraActivity.java"&gt;CameraActivity&lt;/a&gt; to include a button for taking a picture. We assign a method to it to be called when the user clicks on the button via the attribute &lt;a href="http://developer.android.com/reference/android/view/View.html#attr_android:onClick"&gt;android:onClick&lt;/a&gt;. Another option would be to assign an &lt;a href="http://developer.android.com/reference/android/view/View.OnClickListener.html"&gt;OnClickListener&lt;/a&gt; to the view in code. Defining the method in the XML results in less code but has the disadvantage of not being checked by the compiler. Since one of the last releases of the Android SDK the &lt;a href="http://tools.android.com/tips/lint"&gt;lint&lt;/a&gt; tool is able to check the onClick attributes for correctness. So we will use the XML attribute here.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hmHriQ9ppUo/UIqjpzAIkZI/AAAAAAAAFpQ/PJZvXOEn5XE/s1600/activity_camera.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-hmHriQ9ppUo/UIqjpzAIkZI/AAAAAAAAFpQ/PJZvXOEn5XE/s1600/activity_camera.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/res/layout/activity_camera.xml"&gt;activity_camera.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;As we encapsulated the code handling the &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html"&gt;Camera&lt;/a&gt; object inside the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java"&gt;CameraFragment&lt;/a&gt; class the activity just calls takePicture() on the fragment when the user presses the button.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FE7ro562XUI/UIqkAHnPvzI/AAAAAAAAFpY/-IZ0ncr7CbU/s1600/CameraActivity_takePicture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-FE7ro562XUI/UIqkAHnPvzI/AAAAAAAAFpY/-IZ0ncr7CbU/s1600/CameraActivity_takePicture.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/activity/CameraActivity.java#L64"&gt;takePicutre() - CameraActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The fragment calls &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback)"&gt;takePicture()&lt;/a&gt; on the Camera object. It's possible to pass up to four callbacks to this method: A shutter callback, a raw callback, a postview callback and a jpeg callback. According to the documentation their usage is:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The shutter callback occurs after the image is captured. This can be used to trigger a sound to let the user know that image has been captured.&lt;/li&gt;&lt;li&gt;The raw callback occurs when the raw image data is available.&lt;/li&gt;&lt;li&gt;The postview callback occurs when a scaled, fully processed postview image is available.&lt;/li&gt;&lt;li&gt;The jpeg callback occurs when the compressed image is available.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We are only interested in the JPEG image. The fragment itself is also the callback so we'll implement the Camera.PictureCallback interface.&lt;br /&gt;&lt;br /&gt;Once the picture is taken &lt;a href="http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html#onPictureTaken(byte[], android.hardware.Camera)"&gt;onPictureTaken()&lt;/a&gt; will be called with a byte array. We decode the given byte array and create a &lt;a href="http://developer.android.com/reference/android/graphics/Bitmap.html"&gt;Bitmap&lt;/a&gt; object and pass it via the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/listener/CameraFragmentListener.java"&gt;CameraFragmentListener&lt;/a&gt; interface to our CameraActivity. Later we will use this bitmap to draw the mustaches on it.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HmhBl2pWTlo/UIqkdSoODnI/AAAAAAAAFpg/cJ69yQZOIeg/s1600/CameraFragment_onPictureTaken.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-HmhBl2pWTlo/UIqkdSoODnI/AAAAAAAAFpg/cJ69yQZOIeg/s1600/CameraFragment_onPictureTaken.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L224"&gt;onPictureTaken() - CameraFragment.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Saving the picture to the external storage&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Once the activity receives the bitmap object it needs to do a bunch of things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Determine the directory to save the picture to and create it if necessary&lt;/li&gt;&lt;li&gt;Create a unique file for the picture inside the directory and save the image data to it&lt;/li&gt;&lt;li&gt;Notify the MediaScanner that we created a new file&lt;/li&gt;&lt;li&gt;Show a toast that the picture has been saved successfully (For now until we've written the activity to display the taken picture).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Determining the directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We want to save the picture into a directory on the external storage that is visible for all other applications. By calling &lt;a href="http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)"&gt;Environment.getExternalStoragePublicDirectory()&lt;/a&gt; and passing &lt;a href="http://developer.android.com/reference/android/os/Environment.html#DIRECTORY_PICTURES"&gt;Environment.DIRECTORY_PICTURES&lt;/a&gt; we get the public directory for pictures (Available since API Level 8). Inside this directory we'll create a directory with the name of our application (if it doesn't exist already).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-etMHinejAMU/UIqlvdRKOlI/AAAAAAAAFpo/QlH_Lu4dUOY/s1600/determining_directory.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-etMHinejAMU/UIqlvdRKOlI/AAAAAAAAFpo/QlH_Lu4dUOY/s1600/determining_directory.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/activity/CameraActivity.java#L77"&gt;onPictureTaken() - CameraActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="font-size: large;"&gt;Saving the file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We'll create a file with a unique file name containing a timestamp, e.g.: MUSTACHE_20121031_235959.jpg. The &lt;a href="http://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream)"&gt;compress()&lt;/a&gt; method of the bitmap object is used to save the picture into the file.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-yNhLaUTQOs8/UIqlxhiP9tI/AAAAAAAAFp0/HlPPxj7_L9w/s1600/saving_picture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-yNhLaUTQOs8/UIqlxhiP9tI/AAAAAAAAFp0/HlPPxj7_L9w/s1600/saving_picture.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/activity/CameraActivity.java#L92"&gt;onPictureTaken() - CameraActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Notifying the MediaScanner&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Scanning the SD card for changes is costly. Therefore most Android versions only scan the whole card if the card is re-inserted or was mounted by another device. This seems to be different in different vendor versions of Android but nevertheless you can't assume a file to be seen by other applications (for example the gallery) until it has been scanned by the &lt;a href="http://developer.android.com/reference/android/media/MediaScannerConnection.html"&gt;MediaScanner&lt;/a&gt;. For that reason we'll notify the MediaScanner about the file we've created.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BKiT4GJmj8s/UIqlw9LsiFI/AAAAAAAAFpw/K1_jEkvhX98/s1600/notify_mediascanner.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-BKiT4GJmj8s/UIqlw9LsiFI/AAAAAAAAFpw/K1_jEkvhX98/s1600/notify_mediascanner.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-06/src/com/androidzeitgeist/mustache/activity/CameraActivity.java#L107"&gt;onPictureTaken() - CameraActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;By now we've already created a simple camera application. We can take pictures and they show up in the gallery of the device. Pretty cool so far, huh?&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/c-K683UuF5g" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/73829038323965617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/taking-picture-instant-mustache-6.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/73829038323965617" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/73829038323965617" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/c-K683UuF5g/taking-picture-instant-mustache-6.html" title="Taking a picture – Instant Mustache #6" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-hmHriQ9ppUo/UIqjpzAIkZI/AAAAAAAAFpQ/PJZvXOEn5XE/s72-c/activity_camera.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/taking-picture-instant-mustache-6.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8727545494996059717</id><published>2012-10-25T21:24:00.000+02:00</published><updated>2012-11-05T19:31:06.680+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="margin" /><category scheme="http://www.blogger.com/atom/ns#" term="Offscreen pages" /><category scheme="http://www.blogger.com/atom/ns#" term="OnPageChangeListener" /><category scheme="http://www.blogger.com/atom/ns#" term="ViewPager" /><title type="text">Examining the ViewPager #2</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the ViewPager component.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/viewpager.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to see a list of&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/viewpager.html" style="font-size: small;"&gt;all articles of this series&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Offscreen pages&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html"&gt;ViewPager&lt;/a&gt; doesn't create all its pages at once. When using a lot of pages this would be horribly slow and even unnecessary if the user would never swipe through all these pages. By default the ViewPager only creates the current page as well as the offscreen pages to the left and right of the current page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HzlJvCZIyQc/UIkzJpr1neI/AAAAAAAAFls/jfMZCwnu30I/s1600/offscreen_pages.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-HzlJvCZIyQc/UIkzJpr1neI/AAAAAAAAFls/jfMZCwnu30I/s1600/offscreen_pages.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you only use a small amount of pages you may get a better performance by creating them all at once. You can use &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)"&gt;setOffscreenPageLimit(int limit)&lt;/a&gt; to set the number of pages that will be created and retained. Note that the limit applies to both sides of the current page. So if you set the offscreen page limit to 2 the ViewPager will retain 5 pages: The current page plus 2 pages to the left and right.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Responding to changing states&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can get notified whenever the displayed page changes or is incrementally scrolled. To listen to these state changes you can implement the &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html"&gt;OnPageChangeListener&lt;/a&gt; interface or extend the &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.SimpleOnPageChangeListener.html"&gt;SimpleOnPageChangeListener&lt;/a&gt; class if you do not intent to override every method of the interfacce.&lt;br /&gt;&lt;br /&gt;The following example listener updates the title of the activity according to the title of the currently selected page:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xgUfOiVWc_g/UIkzQ_OCF8I/AAAAAAAAFl0/Fp_eXNYlt4g/s1600/UpdateTitleListener.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-xgUfOiVWc_g/UIkzQ_OCF8I/AAAAAAAAFl0/Fp_eXNYlt4g/s1600/UpdateTitleListener.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/ViewPager/02/UpdateTitleListener.java"&gt;UpdateTitleListener.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Margin between pages&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When scrolling through pages they all look like glued together. You can use &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setPageMargin(int)"&gt;setPageMargin(int pixels)&lt;/a&gt; to define a margin between pages. The gap is filled with the background color of the ViewPager.&lt;br /&gt;&lt;br /&gt;The following screenshots are showing the same ViewPager during switching pages. The left screenshot shows the ViewPager with no page margin set. In the right screenshot the margin has been set to 20 pixels. Notice that the method expects the margin to be defined in pixels. To use the same physical margin on all kind of screens independent from their pixel density define the margin in density independent pixels (dp) and &lt;a href="http://stackoverflow.com/a/6327095/234908"&gt;convert them to the actual number of pixels&lt;/a&gt; for the current screen.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fS9q-7IO-Uc/UIkzWvgeSoI/AAAAAAAAFl8/GESmB7vau7c/s1600/page_margin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-fS9q-7IO-Uc/UIkzWvgeSoI/AAAAAAAAFl8/GESmB7vau7c/s1600/page_margin.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It's also possible to define a drawable that will be used to fill the margin between two pages using &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setPageMarginDrawable(int)"&gt;setPageMarginDrawable(int resId)&lt;/a&gt; or &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setPageMarginDrawable(android.graphics.drawable.Drawable)"&gt;setPageMarginDrawable(Drawable d)&lt;/a&gt;. The best approach is to use a &lt;a href="http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch"&gt;Nine-patch&lt;/a&gt; that be scaled dynamically by the system to fill the space between the pages.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Switching pages programmatically&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can also switch between pages programmatically. Using &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setCurrentItem(int, boolean)"&gt;setCurrentItem(int position, boolean smoothScroll)&lt;/a&gt; you can switch to the given position. If the second parameter is &lt;span style="color: #660000;"&gt;true&lt;/span&gt; a smooth animated transition is being performed. Using &lt;span style="color: #660000;"&gt;false&lt;/span&gt; the ViewPager will switch to the given page without any animation. If you always want to switch pages with an animation you can also leave the second parameter and use &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setCurrentItem(int)"&gt;setCurrentItem(int position)&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/EUMG4ssJLOA" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8727545494996059717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/examining-viewpager-2.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8727545494996059717" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8727545494996059717" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/EUMG4ssJLOA/examining-viewpager-2.html" title="Examining the ViewPager #2" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-HzlJvCZIyQc/UIkzJpr1neI/AAAAAAAAFls/jfMZCwnu30I/s72-c/offscreen_pages.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/examining-viewpager-2.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-1618586447717593615</id><published>2012-10-22T18:30:00.000+02:00</published><updated>2012-10-30T23:18:43.358+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FragmentPagerAdapter" /><category scheme="http://www.blogger.com/atom/ns#" term="FragmentStatePagerAdapter" /><category scheme="http://www.blogger.com/atom/ns#" term="PagerAdapter" /><category scheme="http://www.blogger.com/atom/ns#" term="ViewPager" /><title type="text">Examining the ViewPager #1</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the ViewPager component. &lt;a href="http://www.androidzeitgeist.com/p/viewpager.html"&gt;Click here&lt;/a&gt; to see a list of &lt;a href="http://www.androidzeitgeist.com/p/viewpager.html"&gt;all articles of this series&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://developer.android.com/tools/extras/support-library.html"&gt;Android support library&lt;/a&gt; offers a great UI component for horizontal scrolling pages: &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html"&gt;The ViewPager&lt;/a&gt;. Over the last iterations of the support library more and more functionality has been added to the ViewPager silently. For that reason I decided to study the various features of the ViewPager more closely. This will be a series of articles covering several of these features.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Disclaimer upfront&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;According to the &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html"&gt;documentation of the ViewPager&lt;/a&gt; the implementation and API of the class may change in future releases. Therefore also this blog posting may not be up-to-date if you are reading this a long time after the published date. Check the &lt;a href="http://developer.android.com/reference/android/support/v4/view/ViewPager.html"&gt;documentation&lt;/a&gt; if some of the examples may not work anymore as I described them here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The basics&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ViewPager is a &lt;a href="http://developer.android.com/reference/android/view/ViewGroup.html"&gt;ViewGroup&lt;/a&gt; that displays by default one page at a time. The user can switch between these pages by swiping horizontally. A &lt;a href="http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html"&gt;PagerAdapter&lt;/a&gt; dynamically provides these pages which can be just views or fragments. However the ViewPager is not an AdapterView like the ListView or the GridView. Therefore you need to implement a specific adapter class in order to use the ViewPager class.&lt;br /&gt;&lt;br /&gt;The following video shows a ViewPager with different colored pages:&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" height="360" src="http://www.youtube.com/embed/tcnGyRc9t0M?rel=0" width="480"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Adapter using fragments&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The easiest way to write an adapter for a ViewPager is to use fragments and let your adapter implementation extend the &lt;a href="http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html"&gt;FragmentPagerAdapter&lt;/a&gt; class. You only need to implement &lt;a href="http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html#getItem(int)"&gt;getItem(int position)&lt;/a&gt; to return a fragment for the page at the given position and &lt;a href="http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getCount()"&gt;getCount()&lt;/a&gt; to return the number of pages to display.&lt;br /&gt;&lt;br /&gt;The following implementation shows the FragmentPagerAdapter used for the video above:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CkknYiuF5vQ/UIQMY-pOFOI/AAAAAAAAFjY/es0HrjuPA0U/s1600/SampleFragmentPagerAdapter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-CkknYiuF5vQ/UIQMY-pOFOI/AAAAAAAAFjY/es0HrjuPA0U/s1600/SampleFragmentPagerAdapter.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/ViewPager/01/SampleFragmentPagerAdapter.java"&gt;SampleFragmentPagerAdapter.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Saving fragment states&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When using a &lt;a href="http://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html"&gt;FragmentPagerAdapter&lt;/a&gt; and swiping through the pages the ViewPager may eventually have created fragments for all the pages. Depending on the number of pages this may need a large amount of memory just for holding all the offscreen pages. To solve this problem the support library offers the &lt;a href="http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html"&gt;FragmentStatePagerAdapter&lt;/a&gt; class. This adapter will destroy fragments not visible to the user when needed. Whenever this happens the adapter saves the fragment's current state using &lt;a href="http://developer.android.com/reference/android/app/Fragment.html#onSaveInstanceState(android.os.Bundle)"&gt;onSaveInstanceState(Bundle outState) &lt;/a&gt;of the fragment class to restore it when the fragment for this page gets recreated.&lt;br /&gt;&lt;br /&gt;Implementing an adapter extending the FragmentStatePagerAdapter is exactly the same as when using the FragmentPagerAdapter class. Just your fragment needs to take care of saving its state when getting destroyed. Take a look at the &lt;a href="http://developer.android.com/reference/android/app/Fragment.html#onSaveInstanceState(android.os.Bundle)"&gt;documentation&lt;/a&gt; for an example on how to retain the state of a fragment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Adapter using views&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can also use the ViewPager with only View objects as pages if using fragments isn't an option for you. It's a bit more tricky to implement the adapter as you'll have to directly extend the &lt;a href="http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html"&gt;PagerAdapter&lt;/a&gt; class.&lt;br /&gt;&lt;br /&gt;The following example creates an adapter that shows a number of different colored pages like the FragmentPagerAdapter implementation above.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mxaO0n1cYhQ/UIQNo43ZszI/AAAAAAAAFjw/FQ5bbhdhrMU/s1600/SamplePagerAdapter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-mxaO0n1cYhQ/UIQNo43ZszI/AAAAAAAAFjw/FQ5bbhdhrMU/s1600/SamplePagerAdapter.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/ViewPager/01/SamplePagerAdapter.java"&gt;SamplePagerAdaper.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;As you can see you need to write some boilerplate code to add and remove the views to the pager. I published a simple&amp;nbsp;&lt;a href="https://gist.github.com/3927202"&gt;ViewPagerAdapter&lt;/a&gt; class on GitHub that does all this for you so that you don't need to write much more code than when using fragments:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-RG1Pybe0Qko/UIQNEZ0emlI/AAAAAAAAFjo/wiW86E8k3lY/s1600/SamplePagerAdapter2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-RG1Pybe0Qko/UIQNEZ0emlI/AAAAAAAAFjo/wiW86E8k3lY/s1600/SamplePagerAdapter2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Android-Zeitgeist-Samples/blob/master/ViewPager/01/SamplePagerAdapter2.java"&gt;SamplePagerAdapter2.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/Xd7oNSltXJE" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/1618586447717593615/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/examining-viewpager-14.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1618586447717593615" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/1618586447717593615" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/Xd7oNSltXJE/examining-viewpager-14.html" title="Examining the ViewPager #1" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/tcnGyRc9t0M/default.jpg" height="72" width="72" /><thr:total>4</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/examining-viewpager-14.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-2935160722418880762</id><published>2012-10-18T19:28:00.003+02:00</published><updated>2012-10-30T23:19:15.647+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="camera" /><category scheme="http://www.blogger.com/atom/ns#" term="CameraFragment" /><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="SurfaceView" /><title type="text">Displaying the camera preview - Instant Mustache #5</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://www.androidzeitgeist.com/2012/10/using-fragment-for-camera-preview.html"&gt;the last article&lt;/a&gt; we already have three components: A &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/activity/CameraActivity.java"&gt;CameraActivity&lt;/a&gt; with not much code, an empty &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java"&gt;CameraFragment&lt;/a&gt; and a &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/listener/CameraFragmentListener.java"&gt;CameraFragmentListener&lt;/a&gt; interface for the communication between fragment and activity. Now we need to write the actual CameraFragment code to display the camera preview.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The CameraPreview component&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For displaying the preview we need an instance of &lt;a href="http://developer.android.com/reference/android/view/SurfaceView.html"&gt;SurfaceView&lt;/a&gt; to draw the actual camera picture on. We'll extend the SurfaceView to create our own view component called &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/view/CameraPreview.java"&gt;CameraPreview&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.androidzeitgeist.com/2012/08/lets-start-coding-not-instant-mustache-3.html"&gt;In the first articles&lt;/a&gt; we decided to use a square ratio for the preview. After some testing around it seems the emulator is the only "device" that supports a square sized camera preview and picture size out of the box. To work around this issue we would need to use a widely supported ratio (4:3) and crop the preview picture as well as the taken photo ourselves. To keep the code and the first version of the app small (and to follow the &lt;a href="http://www.androidzeitgeist.com/2012/07/minimal-marketable-app-instant-mustache.html"&gt;Minimal Marketable App&lt;/a&gt; principle) I decided to change this requirement. We will use the commonly supported ratio of 4:3.&lt;br /&gt;&lt;br /&gt;We implement onMeasure() to set the dimension of the view to a 4:3 ratio:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NJ3UtjTFli4/UIA4oX9FTuI/AAAAAAAAFhg/AMivOOGn94Y/s1600/onmeasure.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-NJ3UtjTFli4/UIA4oX9FTuI/AAAAAAAAFhg/AMivOOGn94Y/s1600/onmeasure.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/view/CameraPreview.java#L32"&gt;onMeasure() - CameraPreview.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Setting up the camera&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Even though we know our desired ratio we can't just set a size via &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html#setParameters(android.hardware.Camera.Parameters)"&gt;camera.setParameters(Camera.Parameters)&lt;/a&gt;. Instead we have to query the &lt;a href="http://developer.android.com/reference/android/hardware/Camera.Parameters.html"&gt;Camera.Parameters&lt;/a&gt; object we get from getParameters() to retrieve a list of supported preview and picture sizes. Then we have to scan this list for a size that has our desired ratio. This is what determineBestSize() does:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9EpZpQQQk_g/UH2o5PQn4kI/AAAAAAAAFgk/Ip5ecGrvDSU/s1600/determine_size.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-9EpZpQQQk_g/UH2o5PQn4kI/AAAAAAAAFgk/Ip5ecGrvDSU/s1600/determine_size.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L190"&gt;determineBestSize() - CameraFragment.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;We are using a threshold for the preview and picture size to save some heap space for the bitmap transformations we'll do later. For now these limits are 640x480 for the preview size and 1280x960 for the &amp;nbsp;picture size.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Finally the determined values are used to setup the camera object:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-aeWvWYDnT2s/UH2uJVZkAFI/AAAAAAAAFg4/puouCbK7VOQ/s1600/setup_camera.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-aeWvWYDnT2s/UH2uJVZkAFI/AAAAAAAAFg4/puouCbK7VOQ/s1600/setup_camera.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L166"&gt;setupCamera() - CameraFragment.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The CameraPreview component will be used as view of our CameraFragment by returning it in &lt;a href="http://developer.android.com/reference/android/app/Fragment.html#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)"&gt;onCreateView()&lt;/a&gt;. In addition to that our CameraFragment needs to implement &lt;a href="http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html"&gt;SurfaceHolder.Callback&lt;/a&gt; in order to get notified when the surface is created or destroyed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Accessing the camera&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To access the camera of the device we need to call &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html#open(int)"&gt;Camera.open(int cameraId)&lt;/a&gt; to obtain a &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html"&gt;Camera&lt;/a&gt; object. The camera ids are numbered starting with 0. As we currently don't want to support multiple cameras we will just call Camera.open(0).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately using the camera can cause undefined exceptions to be thrown. Therefore we need to wrap some code accessing the camera object into try-catch blocks and catch the generic Exception object. This is usually &lt;a href="http://source.android.com/source/code-style.html#dont-catch-generic-exception"&gt;considered bad practice&lt;/a&gt; but in this case &lt;a href="http://developer.android.com/guide/topics/media/camera.html#access-camera"&gt;encouraged to do by the documentation&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Sharing the camera resource&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The camera can only be used by one application at a time so we need to release the camera every time the activity gets paused. Otherwise the user would not be able to use other camera applications while our activity is in the background. In some cases not releasing the camera can lead to the CameraService crashing. If this happens no camera application can be used until the user reboots his phone. We never want this to happen.&lt;br /&gt;&lt;br /&gt;To be safe we will open the camera by calling Camera.open() in the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L70"&gt;onResume()&lt;/a&gt; method of the CameraFragment and releasing it again in &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L87"&gt;onPause()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once we have a Camera object and our surface is created we can assign the surface to the camera object and start the preview. We wrap the call to startPreview() in our own method called &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L97"&gt;startCameraPreview()&lt;/a&gt; inside our fragment. This way we can setup the camera object before actually starting the preview.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KFpfQOjQJY4/UIA567dmV6I/AAAAAAAAFho/fv7wu7wsUYg/s1600/startpreview.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-KFpfQOjQJY4/UIA567dmV6I/AAAAAAAAFho/fv7wu7wsUYg/s1600/startpreview.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L97"&gt;startCameraPreview() - CameraFragment.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Determining the display orientation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The screen can be rotated in four different angles (0°, 90°, 180°, 270°). In addition to that the camera can also be built into the device in four different angles by the manufacturer. Finally the camera can be on the front or on the back of the device. We will need to get all these angles and tell the camera object the display orientation so that the preview will be drawn on the surface using the right rotation.&lt;br /&gt;&lt;br /&gt;This sounds tricky but fortunately there's a &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"&gt;code snippet for that in the Android documentation&lt;/a&gt;. We'll use &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"&gt;this code snippet&lt;/a&gt; to implement &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-05/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java#L126"&gt;determineDisplayOrientation()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Screenshot&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;And that's how our app looks like so far:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YuVQvTJ3OU0/UIA00sECLRI/AAAAAAAAFhM/R8mHYZhRnIE/s1600/mustache_screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-YuVQvTJ3OU0/UIA00sECLRI/AAAAAAAAFhM/R8mHYZhRnIE/s1600/mustache_screen.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;As always the&amp;nbsp;&lt;a href="https://github.com/pocmo/Instant-Mustache/tree/article-05"&gt;source code&amp;nbsp;of the current version&lt;/a&gt; of the app is available at Github.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/C01oUsX3kSI" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/2935160722418880762/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/displaying-camera-preview-instant.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2935160722418880762" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2935160722418880762" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/C01oUsX3kSI/displaying-camera-preview-instant.html" title="Displaying the camera preview - Instant Mustache #5" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-NJ3UtjTFli4/UIA4oX9FTuI/AAAAAAAAFhg/AMivOOGn94Y/s72-c/onmeasure.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/displaying-camera-preview-instant.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-7757019473292818494</id><published>2012-10-15T19:28:00.002+02:00</published><updated>2012-10-30T23:19:35.663+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fragment" /><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><title type="text">Using a fragment for the camera preview - Instant Mustache #4</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This article will be the first one about writing the CameraActivity for &lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;Instant Mustache&lt;/a&gt;. From &lt;a href="http://www.androidzeitgeist.com/2012/08/lets-start-coding-not-instant-mustache-3.html"&gt;the last article&lt;/a&gt; we already know how the layout of the activity should look like. Now it's time to start the coding part.&lt;br /&gt;&lt;br /&gt;I won't cover all the lines of code in this and the following blog articles but you can always get the complete &lt;a href="https://github.com/pocmo/Instant-Mustache"&gt;source code of Instant Mustache at GitHub&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Using a fragment&lt;/b&gt;&lt;br /&gt;We'll move the actual code (and layout) that handles the camera preview to a &lt;a href="http://developer.android.com/guide/components/fragments.html"&gt;fragment&lt;/a&gt;. Using fragments has several advantages:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fragments can be reused in different activities and layouts. Therefore they are perfect building blocks for composing UIs for different screen sizes.&lt;/li&gt;&lt;li&gt;They encapsulate the code for a specific component including the layout of the component. This makes the activity code and layout much more simpler and cleaner. By using a bunch of fragments the activity basically only has to handle events and delegate them to the appropriate fragments. This leads to the activity becoming some kind of light meta controller instead of an unreadable dumping ground for handling everything on the current screen.&lt;/li&gt;&lt;li&gt;Fragments can be dynamically added, removed, replaced, added to the back stack, animated and other cool things that can be painful to do yourself.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;Activity layout&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0in;"&gt;As said before we are moving the camera preview code and layout to a fragment. Therefore our activity's layout is really quite simple:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;span style="margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://www.blogger.com/goog_154278281"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-9A5F03FauP0/UHxDx3aMDcI/AAAAAAAAFfE/x245XxDRKJk/s1600/camera_activity_layout_2.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/res/layout/activity_camera.xml"&gt;activity_camera.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;Communication between activity and fragment&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;There are situations where the fragment needs to notify the activity about events. In our case the fragment needs to tell the activity when it's unable to instantiate a camera preview so that the activity can handle this error case. Of course we could just access the activity inside the fragment using &lt;a href="http://developer.android.com/reference/android/app/Fragment.html#getActivity()"&gt;getActivity()&lt;/a&gt; and cast it to a CameraActivity object to get access to a method like onCameraError() but then our fragment would only be usable with this particular activity:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: #444444; font-family: Courier New, Courier, monospace;"&gt;CameraActivity activity = (CameraActivity) getActivity();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: #444444; font-family: Courier New, Courier, monospace;"&gt;activity.onCameraError();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;We work around this issue by defining an interface that has to be implemented by the CameraActivity and every other component that wants to use the CameraFragment:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--DMu6Y45ciU/UHxBNXetSII/AAAAAAAAFe0/YrGtXiPkUXE/s1600/fragment_listener.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span style="color: black;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--DMu6Y45ciU/UHxBNXetSII/AAAAAAAAFe0/YrGtXiPkUXE/s1600/fragment_listener.png" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/listener/CameraFragmentListener.java"&gt;&lt;span style="color: black; font-size: small;"&gt;CameraFragmentListener.java&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Every time our fragment gets attached to an activity &lt;a href="http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)"&gt;onAttach()&lt;/a&gt; will be called with the activity as parameter. We use this method to enforce that the activity implements our defined interface:&lt;br /&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;span style="margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://www.blogger.com/goog_154278245"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-hGixG23tyHc/UHxBneeyqOI/AAAAAAAAFe8/VF7FmuzO8Jk/s1600/fragment_on_attach.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/fragment/CameraFragment.java"&gt;CameraFragment.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Finally take a look at the &lt;a href="https://github.com/pocmo/Instant-Mustache/blob/article-04/src/com/androidzeitgeist/mustache/activity/CameraActivity.java"&gt;CameraActivity source code on GitHub&lt;/a&gt;. It just sets the layout in onCreate() and shows a &lt;a href="http://developer.android.com/guide/topics/ui/notifiers/toasts.html"&gt;toast&lt;/a&gt; in case of the fragment calling onCameraError(). As this method will be called in case of non-recoverable errors we'll also finish the activity.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/BCc8E5OcNig" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/7757019473292818494/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/10/using-fragment-for-camera-preview.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/7757019473292818494" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/7757019473292818494" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/BCc8E5OcNig/using-fragment-for-camera-preview.html" title="Using a fragment for the camera preview - Instant Mustache #4" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-9A5F03FauP0/UHxDx3aMDcI/AAAAAAAAFfE/x245XxDRKJk/s72-c/camera_activity_layout_2.png" height="72" width="72" /><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/10/using-fragment-for-camera-preview.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8978580997544983984</id><published>2012-08-20T19:02:00.001+02:00</published><updated>2012-10-30T23:19:51.789+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Boolean" /><category scheme="http://www.blogger.com/atom/ns#" term="Integer" /><category scheme="http://www.blogger.com/atom/ns#" term="Resources" /><title type="text">Know your resources: Integers and Booleans</title><content type="html">An Android application isn't only code but comes with a bunch of &lt;a href="http://developer.android.com/guide/topics/resources/index.html"&gt;resources&lt;/a&gt;. Probably the most important resources (besides layouts and drawables) are the string resources. In conjunction with the &lt;a href="http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources"&gt;resource qualifiers&lt;/a&gt; they are not only perfect to externalize strings for localization but also for defining different internal configurations of your app.&lt;br /&gt;&lt;br /&gt;However sometimes string resources are overused. Especially when they are used to define boolean or integer values. Let's look at the following example. Code lines like the next ones can be found in several Android projects. For example you can find &lt;a href="https://github.com/pocmo/Yaaic/blob/master/application/src/org/yaaic/model/Settings.java#L74"&gt;some of these in Yaaic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XLbaLF9yRos/UDJrT8HzfaI/AAAAAAAAFMk/6_ctbD-1rQ8/s1600/resources_example01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-XLbaLF9yRos/UDJrT8HzfaI/AAAAAAAAFMk/6_ctbD-1rQ8/s1600/resources_example01.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Loading string resources and parsing as boolean or integer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Or even worse in a condition without casting, doing a string comparison:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-IfOUvr3e9og/UDJrri2Gu3I/AAAAAAAAFMs/qB5wMlRTBzI/s1600/resources_example02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-IfOUvr3e9og/UDJrri2Gu3I/AAAAAAAAFMs/qB5wMlRTBzI/s1600/resources_example02.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Loading boolean as string resource and doing string comparison&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The code above is not wrong but instead of using string resources and parsing or comparing them it would be easier to use resources of the appropriate type. Fortunately Android allows to&amp;nbsp;define &lt;a href="http://developer.android.com/guide/topics/resources/more-resources.html#Bool"&gt;boolean&lt;/a&gt; and &lt;a href="http://developer.android.com/guide/topics/resources/more-resources.html#Integer"&gt;integer&lt;/a&gt; resources too (since API level 1). It's basically the same process as defining a string resource in XML just use the bool and integer tags:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BIkUDBXNXFU/UDJr4uQMhTI/AAAAAAAAFM0/39d0Vj3jIKo/s1600/xml_resources.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-BIkUDBXNXFU/UDJr4uQMhTI/AAAAAAAAFM0/39d0Vj3jIKo/s1600/xml_resources.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Defining boolean and integer resources in XML&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;After that you can access these resources in code. However there are no &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/content/Context.java#304"&gt;alias methods&lt;/a&gt; on the &lt;a href="http://developer.android.com/reference/android/content/Context.html"&gt;Context&lt;/a&gt; object like for string resources. Therefore you need to get a &lt;a href="http://developer.android.com/reference/android/content/res/Resources.html"&gt;Resources&lt;/a&gt; instance first and then ask it for the defined resources.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-bLP5ceuA0xY/UDOhAxoQunI/AAAAAAAAFNM/ONwuHscnEDw/s1600/accessing_resources.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-bLP5ceuA0xY/UDOhAxoQunI/AAAAAAAAFNM/ONwuHscnEDw/s1600/accessing_resources.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Accessing integer and boolean resources from code&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/SH5Bn82Meao" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8978580997544983984/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/08/know-your-resources-integers-and.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8978580997544983984" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8978580997544983984" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/SH5Bn82Meao/know-your-resources-integers-and.html" title="Know your resources: Integers and Booleans" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-XLbaLF9yRos/UDJrT8HzfaI/AAAAAAAAFMk/6_ctbD-1rQ8/s72-c/resources_example01.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/08/know-your-resources-integers-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-7567694303001801787</id><published>2012-08-01T21:01:00.002+02:00</published><updated>2012-10-30T23:20:51.695+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="mockup" /><category scheme="http://www.blogger.com/atom/ns#" term="sketch" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title type="text">Let's start coding ... NOT! - Instant Mustache #3</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the &lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html"&gt;last two articles&lt;/a&gt; about Instant Mustache we've talked a lot and it's about time to start coding! Yet I’ve to disappoint you for now. There still will be no code in this article. Before we’ll start coding we’ve to define what we actually need or want. From the last article we already know there will be two screens. But what we don’t know yet is how they should look like. So how will we figure out how the (very simple) UI will look like? Of course we can fire up our code editor or visual editor but there’s a much faster way to get results: Good old paper.&lt;br /&gt;&lt;br /&gt;I won’t talk about paper prototypes or UI development and user testing here. But there’s a better resource for that. The &lt;a href="http://www.androiduipatterns.com/"&gt;Android UI Patterns blog&lt;/a&gt; has a lot of articles published covering a variety of Android UI topics. Here we are going to just sketch some screens, play around and hopefully come up with an idea of how the app will feel like when it’s finally developed. As said before I'll use paper for that. Other people may like to use software for creating mockups (&lt;a href="http://www.fluidui.com/"&gt;Fluid UI&lt;/a&gt; seems to be a nice online tool for that). It's up to you what works the best for you. For me paper is the easiest way to try different ideas without the limitations of a software tool. But the important thing is: We won't write a lot of code that we need to throw away again after we realize that our initial idea may not be as good as we thought.&lt;br /&gt;&lt;br /&gt;The following photo shows a bunch of discarded drawings I came up with during brainstorming the UI:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vLyg3OA870M/UBlqUI8HXhI/AAAAAAAAEeA/E3oDqTCMi9o/s1600/screens.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://2.bp.blogspot.com/-vLyg3OA870M/UBlqUI8HXhI/AAAAAAAAEeA/E3oDqTCMi9o/s400/screens.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;b&gt;The camera screen (CameraActivity)&lt;/b&gt;&lt;br /&gt;The first screen the user will see after launching the app will be the camera screen. There are two main components we need: A camera preview and a button to take a photo. In addition to that we may want to reserve some space for future features like switching between cameras and mustaches.&lt;br /&gt;&lt;br /&gt;Let's take a look at the the final version of the camera screen as I've drawn it:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ACfaRYTWXiQ/UBlrUkZlmPI/AAAAAAAAEe4/c5nw7R2I3EM/s1600/final_camera_activity.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ACfaRYTWXiQ/UBlrUkZlmPI/AAAAAAAAEe4/c5nw7R2I3EM/s1600/final_camera_activity.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;CameraActivity&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The following decisions I've made during drawing and experimenting:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I want the app to have an &lt;a href="http://developer.android.com/design/patterns/actionbar.html"&gt;ActionBar&lt;/a&gt;. To be consistent I also want the ActionBar in the camera screen. I don't know yet if it's useful to show the app title "Instant Mustache" in the ActionBar as I've drawn it. It's quite long and may take up too much space. Furthermore the overflow menu drawn here may not be visible as we have no menu entries defined yet.&lt;/li&gt;&lt;li&gt;The camera picture will be a square. We'll have to define a picture ratio and a square may fit quite nice into the screen. The darker areas on the screen will grow or shrink depending on the screen size of the device and always center the camera preview.&lt;/li&gt;&lt;li&gt;There will be a bar at the bottom of the screen which will house the button for taking a picture. Here we will have enough space for adding more functionality in later releases.&lt;/li&gt;&lt;li&gt;Almost all activities showing a camera preview are fixed in their orientation. While moving the phone around to take a photo you don't want the phone to destroy the current activity, do the rotation and re-create the activity. Especially because the camera picture will be oriented correctly anyways because you are rotating the camera inside the phone as well. To satisfy the previous points we will fixate the orientation to portrait mode.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;The photo screen (PhotoActivity)&lt;/b&gt;&lt;br /&gt;After taking a photo you will see another screen showing the photo you've taken and you'll have the option to share the photo with other apps on your phone.&lt;br /&gt;&lt;br /&gt;That's how my final version of the photo screen looks like:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZkXDFTYoBTs/UBlv6nT4mRI/AAAAAAAAEfI/RGFW1HHcngE/s1600/final_share_activity.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZkXDFTYoBTs/UBlv6nT4mRI/AAAAAAAAEfI/RGFW1HHcngE/s1600/final_share_activity.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;PhotoActivtiy&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The first version of this screen will be really simple:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;At the top we'll have the ActionBar again. To share the photo we'll add a &lt;a href="http://developer.android.com/guide/topics/ui/actionbar.html#ActionProvider"&gt;ShareActionProvider&lt;/a&gt; that shows a list of available share targets as well as the most used app as an icon right beside it.&lt;/li&gt;&lt;li&gt;Below the ActionBar we'll show the taken photo and that's everything for now.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;What's next?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now we've defined how our two screens will look like. In the next article we are going to launch our IDE and start writing the CameraActivity. I am curious to know what you think about the UI as described here and if you have other ideas. Let me know in the comments or on Google+.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/xRHDRu4wROY" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/7567694303001801787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/08/lets-start-coding-not-instant-mustache-3.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/7567694303001801787" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/7567694303001801787" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/xRHDRu4wROY/lets-start-coding-not-instant-mustache-3.html" title="Let's start coding ... NOT! - Instant Mustache #3" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-vLyg3OA870M/UBlqUI8HXhI/AAAAAAAAEeA/E3oDqTCMi9o/s72-c/screens.png" height="72" width="72" /><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/08/lets-start-coding-not-instant-mustache-3.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-2631040260680088231</id><published>2012-07-03T20:08:00.003+02:00</published><updated>2012-10-30T23:21:12.300+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><category scheme="http://www.blogger.com/atom/ns#" term="Minimal marketable app" /><category scheme="http://www.blogger.com/atom/ns#" term="roadmap" /><title type="text">Minimal marketable app - Instant Mustache #2</title><content type="html">&lt;span style="font-size: x-small;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;Click here&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-size: small;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;In &lt;a href="http://www.androidzeitgeist.com/2012/06/instant-mustache-1-idea.html"&gt;the last article&lt;/a&gt; I described roughly the idea behind Instant Mustache. Now it's time to get more concrete. While doing so we try to follow the principle of the minimal marketable feature (MMF).&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Minimal marketable feature&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The idea behind the minimal marketable feature is to strip all aspects of a feature that are not necessarily needed to end up with a useful (or marketable) feature. After that you'll end up with smaller features that are easier and faster to develop. This is only a very rough explanation of MMF. You can find a way better &lt;a href="http://www.upstarthq.com/2010/04/introduction-to-minimum-marketable-features-mmf/"&gt;Introduction to Minimum marketable feature&lt;/a&gt; at the upstart blog.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="background-color: white; font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Minimal marketable app&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;In this case we are slightly modifying this idea to end up with something like a &lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;minimal marketable app&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. This means we are going one level higher and strip all features that are not essentially required for a first releasable app. This does not mean that we won't develop these features at all but our first version will be without them enabling us to ship the app as early as possible. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Let's continue with an example. When you think about the app (&lt;a href="http://www.androidzeitgeist.com/2012/06/instant-mustache-1-idea.html"&gt;see first article&lt;/a&gt;) you will very fast come up with an idea like: The user should be able to select between a bunch of mustaches - more mustaches = more fun. But do we really need this feature when we launch the app? No, we don't. Our fun app will still be fun with one single mustache. Of course this is one of the first features we should have in the next release after the initial one.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Another feature that's easy to come up with is switching between the cameras of a device. In most cases this means switching between back and front camera. Again for our basic app it's totally acceptable to strip this feature in the first release. The users of our app won't be able to take pictures of themselves easily and therefore they won't have much fun when there's no mustache-less friend to photograph around. Therefore we should rank this feature high as well to implement it right after the first release.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;In our case the minimal marketable feature set is an app that has two screens: A camera screen - with a camera preview and a button to take a picture - and a second screen that shows the picture you took and has an option to share this picture. The camera preview will show a live preview. Every detected face on the live preview will automatically have a mustache overlayed. If you take a picture the second screen will show the composed picture including the added mustaches. The user will be able to share the picture via the &lt;a href="http://android-developers.blogspot.co.uk/2012/02/share-with-intents.html"&gt;Android intent system&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Roadmap and Milestones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Nothing is more motivating than playing around with what you have created. In contrast nothing is more killing motivation than programming for ages without coming up with something that runs at all.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;This leads us to the goal to always have a running prototype that step by step gets features added until it's ready to ship. So let's break the functionality into parts that can be implemented in order and always leave us with a working prototype that we can deploy on our phone and use at the next party.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;b&gt;Milestone #1&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;A camera screen that shows the camera preview and has a button to take a photo. The photos will be saved on the SD card. After that we will end up with a basic camera app that we can use to take photos on the go. Goodbye native camera app!&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Milestone #2&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;: &lt;/span&gt;&lt;/b&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We add the second screen. After taking a photo we’ll switch to this second screen which shows the taken photo and has an option to share the photo.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Milestone #3&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;: &lt;/span&gt;&lt;/b&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;It’s time to add the face tracking. We’ll use the face tracking and display mustaches for every face on top of the camera preview.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Milestone #4&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;: &lt;/span&gt;&lt;/b&gt;&lt;b id="internal-source-marker_0.039026354206725955"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;When taking a photo we’ll compose the final photo using the information of the face tracking. The composed photo will contain mustaches like the preview screen before. The composed photo will be saved on the SD card and shown in the second screen. We are ready to release!&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/D7VVl5yQcUE" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/2631040260680088231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/07/minimal-marketable-app-instant-mustache.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2631040260680088231" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2631040260680088231" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/D7VVl5yQcUE/minimal-marketable-app-instant-mustache.html" title="Minimal marketable app - Instant Mustache #2" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/07/minimal-marketable-app-instant-mustache.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-2571392770508842451</id><published>2012-06-08T12:14:00.002+02:00</published><updated>2012-10-30T23:21:30.173+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Animation" /><category scheme="http://www.blogger.com/atom/ns#" term="BlinkLayout" /><category scheme="http://www.blogger.com/atom/ns#" term="Layout" /><category scheme="http://www.blogger.com/atom/ns#" term="ViewGroup" /><title type="text">Creating a MarqueeLayout with the Android Animation System</title><content type="html">When I posted the article about &lt;a href="http://www.androidzeitgeist.com/2012/05/curious-blinklayout.html"&gt;the hidden BlinkLayout&lt;/a&gt; inside Android’s LayoutInflater &lt;a href="https://plus.google.com/105344175486242358933/posts"&gt;Thierry-Dimitri Roy&lt;/a&gt; wrote on Google+:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-kpn1WJrtNRw/T9CZQxI269I/AAAAAAAADnM/Pxbd7NWhWkM/s1600/gpluscomment.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-kpn1WJrtNRw/T9CZQxI269I/AAAAAAAADnM/Pxbd7NWhWkM/s1600/gpluscomment.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That’s a challenge I accept! Back in the days when I worked at Jimdo we developed “&lt;a href="http://www.youtube.com/watch?v=RDNhra-6dQo"&gt;a lifeboat for GeoCities&lt;/a&gt;” which allowed users to migrate their GeoCities website to Jimdo before GeoCities finally shut down in 2009. So I’ve some kind of heart for&amp;nbsp;GeoCities&amp;nbsp;users.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://developer.android.com/guide/topics/graphics/view-animation.html"&gt;view animation system&lt;/a&gt; of Android makes it quite easy to develop something like a MarqueeLayout. All we need to do is to extend an existing ViewGroup and attach a marquee-like animation to every instance.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://developer.android.com/reference/android/view/animation/TranslateAnimation.html"&gt;TranslateAnimation&lt;/a&gt; does already exactly what we need: It moves a view from a starting position to an ending position. The two positions can either be declared absolute (position on the screen) or relative to the view or its parent. After that we only need to define the duration of the animation and Android will do the rest for us.&lt;br /&gt;&lt;br /&gt;We'll define the start and end positions of the animation by using coordinates relative to the view. When using relative coordinates you can think of our view having a size of 1x1 and it's top left corner placed at (0,0).&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-002il9hIkbs/T9CiYixSw3I/AAAAAAAADnY/-04SitxZqVg/s1600/view.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-002il9hIkbs/T9CiYixSw3I/AAAAAAAADnY/-04SitxZqVg/s1600/view.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View of size 1x1 at position (0,0)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If our view's width stretches to the whole width of the screen we can consider the screen's size also 1 (relative to the view's width).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-a8TAfL-nbQs/T9ClZz9tuxI/AAAAAAAADnk/qwDhuGD7DRU/s1600/view_on_screen.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-a8TAfL-nbQs/T9ClZz9tuxI/AAAAAAAADnk/qwDhuGD7DRU/s1600/view_on_screen.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View (green) filling full width of screen (grey)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Assuming a screen size of 1 and a starting position on the right side outside of the screen gives us a relative starting position of (1,0). This will place our view exactly outside the screen (or it's parent).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wuSTX1TEt88/T9Cl3Z4JaxI/AAAAAAAADns/orVD4QJqXMg/s1600/start_at_1_0.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="231" src="http://2.bp.blogspot.com/-wuSTX1TEt88/T9Cl3Z4JaxI/AAAAAAAADns/orVD4QJqXMg/s320/start_at_1_0.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View animation starting at (1,0)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The view should move from the starting position to the left until it's outside of the screen at (-1, 0).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NOoImxh16nw/T9CmIXQJRqI/AAAAAAAADn0/OF_7nGDw9Pw/s1600/end_-1_0_1.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="231" src="http://4.bp.blogspot.com/-NOoImxh16nw/T9CmIXQJRqI/AAAAAAAADn0/OF_7nGDw9Pw/s320/end_-1_0_1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View animation stopping at (-1,0)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The animation system will generate all transient positions needed for the animation. Given all the information above we can write a simple MarqueeLayout in a few lines:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;span style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://www.blogger.com/goog_1690609543"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-OaTBb9uyHZ4/T9Cox5IvbMI/AAAAAAAADoA/bD9eXxmXu-Y/s1600/marquee_layout_code.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://source.androidzeitgeist.com/raw/marquee_layout_code.txt"&gt;MarqueeLayout.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;That's what our MarqueeLayout looks like when adding a TextView to it:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="360" src="http://www.youtube.com/embed/r1LT2EpIB0s" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The following code was used to set up an activity using our MarqueeLayout:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;span style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://www.blogger.com/goog_1690609550"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-VzGJqlPup70/T9CpDx20HUI/AAAAAAAADoI/iw61M_02ZuQ/s1600/marquee_activity.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://source.androidzeitgeist.com/raw/marquee_layout_activity.txt"&gt;MarqueeLayoutActivity.java&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/5ogW6KCmbFc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/2571392770508842451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/06/creating-marqueelayout-with-android.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2571392770508842451" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/2571392770508842451" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/5ogW6KCmbFc/creating-marqueelayout-with-android.html" title="Creating a MarqueeLayout with the Android Animation System" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-kpn1WJrtNRw/T9CZQxI269I/AAAAAAAADnM/Pxbd7NWhWkM/s72-c/gpluscomment.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/06/creating-marqueelayout-with-android.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-8985540882459629006</id><published>2012-06-05T20:33:00.000+02:00</published><updated>2012-10-30T23:21:46.957+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instant Mustache" /><title type="text">Instant Mustache #1 - The idea</title><content type="html">&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: x-small; white-space: normal;"&gt;This article is part of a series of articles about the development process of Instant Mustache, a fun camera app that adds mustaches to all faces using face detection.&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;Click here&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: x-small; white-space: normal;"&gt;&amp;nbsp;to get a chronological list of all published&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.androidzeitgeist.com/p/instant-mustache.html" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;articles about Instant Mustache&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; font-size: x-small; white-space: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;The idea&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="internal-source-marker_0.8338896373752505"&gt;&lt;span style="font-family: Arial; vertical-align: baseline;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;Instant Mustache is the name of an app that I'm going to develop. The idea is to show the development process of an app starting from a rough idea to a full featured app in the Android market. I'll demonstrate the process of developing the app as well as the thoughts and decisions involved. The source code will be publicly available on &lt;/span&gt;&lt;a href="http://github.com/pocmo/Instant-Mustache" style="font-size: 15px; font-weight: normal; white-space: pre-wrap;"&gt;GitHub&lt;/a&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="internal-source-marker_0.8338896373752505"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Later versions of this series of articles are expected to be about topics like &lt;i&gt;refactoring&lt;/i&gt;, adding &lt;i&gt;features&lt;/i&gt;, &lt;i&gt;testing&lt;/i&gt; and maybe &lt;i&gt;monetization&lt;/i&gt;. I'll try to make everything as transparent as possible including user statistics of the Android market.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;The app&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b id="internal-source-marker_0.8338896373752505"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Instant Mustache is a fun app that utilizes the face tracking feature of Android 4.x to add mustaches to all detected faces currently visible to the camera. Users will be able to take funny pictures and share them with their friends on social networks or other apps on their mobile phone. The user shouldn't need to place the mustaches herself. Instead the placing should be done automatically for every detected face.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;span id="internal-source-marker_0.8338896373752505"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;This is a rough idea every developer can come up with. In the following postings we will refine the idea, plan the app with some basic wireframes and develop an elementary version that can be extended to match our planned full-featured app later.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;b&gt;Do not forget the napkin&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b id="internal-source-marker_0.8338896373752505"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Of course as a good entrepreneur we had this world-changing idea on the go and had only time to sketch it on a napkin to not forget it later.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;So here is the napkin we came up with:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-fF1hf6-tlzA/T8ZmAQiTOzI/AAAAAAAADb4/ADS5E1ODlLU/s1600/instant_mustache_tissue.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-fF1hf6-tlzA/T8ZmAQiTOzI/AAAAAAAADb4/ADS5E1ODlLU/s200/instant_mustache_tissue.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/QNOIAC4E51A" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/8985540882459629006/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/06/instant-mustache-1-idea.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8985540882459629006" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/8985540882459629006" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/QNOIAC4E51A/instant-mustache-1-idea.html" title="Instant Mustache #1 - The idea" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-fF1hf6-tlzA/T8ZmAQiTOzI/AAAAAAAADb4/ADS5E1ODlLU/s72-c/instant_mustache_tissue.jpg" height="72" width="72" /><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/06/instant-mustache-1-idea.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-1531829516427013333.post-9065086572488467738</id><published>2012-05-27T19:01:00.002+02:00</published><updated>2012-10-30T23:22:02.346+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BlinkLayout" /><category scheme="http://www.blogger.com/atom/ns#" term="Layout" /><category scheme="http://www.blogger.com/atom/ns#" term="ViewGroup" /><title type="text">The curious BlinkLayout</title><content type="html">&lt;span id="internal-source-marker_0.19517051335424185"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;While reading the source code of Android's &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/view/LayoutInflater.java#LayoutInflater"&gt;LayoutInflater class&lt;/a&gt; I found a hidden gem that seems to be quite unnoticed yet. Ladies and gentlemen I present you the mighty &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/view/LayoutInflater.java#LayoutInflater.BlinkLayout"&gt;BlinkLayout&lt;/a&gt;. Views that are placed inside this ViewGroup blink at a rate of 500ms.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The BlinkLayout is an inner class of the LayoutInflater and can therefore only be used in a XML layout that will be parsed by a LayoutInflater instance. Due to the implementation it's only possible to use it as root node using the &amp;lt;blink&amp;gt; tag inside a XML layout.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;It seems like the BlinkLayout is available since Android 4.0 and isn't used in the Android source code I observed. Maybe it was added for debugging reasons and was forgotten later.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/o_EX1mH5ZvM/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/o_EX1mH5ZvM?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt; &lt;param name="bgcolor" value="#FFFFFF" /&gt; &lt;embed width="320" height="266" src="http://www.youtube.com/v/o_EX1mH5ZvM?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;T&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;he video above shows the BlinkLayout in action using the following layout XML:&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2PBd4Bdwjr8/T8I-BukTXnI/AAAAAAAADZs/_z-Ajl7hOlo/s1600/blinklayout_xml.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/-2PBd4Bdwjr8/T8I-BukTXnI/AAAAAAAADZs/_z-Ajl7hOlo/s1600/blinklayout_xml.png" title="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://source.androidzeitgeist.com/raw/blinklayout_view_xml.txt"&gt;main_layout.xml&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;T&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;he following snippet was used to inflate the layout and pass it to the activity:&lt;/span&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;span style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://www.blogger.com/goog_899898043"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-zgP0dePQwzw/T8JIp8nqZ0I/AAAAAAAADaY/ZP7LER-JmM0/s1600/blinklayout_code.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://source.androidzeitgeist.com/raw/blinklayout_activity_code.txt"&gt;BlinkLayoutActivity.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidZeitgeist/~4/1MleyCfQAow" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.androidzeitgeist.com/feeds/9065086572488467738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.androidzeitgeist.com/2012/05/curious-blinklayout.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/9065086572488467738" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1531829516427013333/posts/default/9065086572488467738" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidZeitgeist/~3/1MleyCfQAow/curious-blinklayout.html" title="The curious BlinkLayout" /><author><name>Sebastian Kaspari</name><uri>https://plus.google.com/112283223674539938062</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-20YfT7gfh08/AAAAAAAAAAI/AAAAAAAArYw/l6jF4JnmC2E/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-2PBd4Bdwjr8/T8I-BukTXnI/AAAAAAAADZs/_z-Ajl7hOlo/s72-c/blinklayout_xml.png" height="72" width="72" /><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.androidzeitgeist.com/2012/05/curious-blinklayout.html</feedburner:origLink></entry></feed>
diff --git a/mobile/android/tests/background/junit4/resources/feed_atom_planetmozilla.xml b/mobile/android/tests/background/junit4/resources/feed_atom_planetmozilla.xml
new file mode 100644
index 000000000..1638ed9b1
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_atom_planetmozilla.xml
@@ -0,0 +1,4996 @@
+<?xml version="1.0"?>
+<!--
+ Snapshot from http://planet.mozilla.org/atom.xml
+-->
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
+ <title>Planet Mozilla</title>
+ <updated>2016-01-26T19:01:54Z</updated>
+ <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
+ <author>
+ <name>Planet Mozilla Module Team</name>
+ <email>planet@mozilla.org</email>
+ </author>
+ <id>http://planet.mozilla.org/atom.xml</id>
+ <link href="http://planet.mozilla.org/atom.xml" rel="self" type="application/atom+xml"/>
+ <link href="http://planet.mozilla.org/" rel="alternate"/>
+
+ <entry xml:lang="en-US">
+ <id>https://quality.mozilla.org/?p=49454</id>
+ <link href="https://quality.mozilla.org/2016/01/firefox-45-0-beta-3-testday-february-5th/" rel="alternate" type="text/html"/>
+ <title>Firefox 45.0 Beta 3 Testday, February 5th</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hello Mozillians, We are happy to announce that Friday, February 5th, we are organizing Firefox 45.0 Beta 3 Testday. We will be focusing our testing on the following features: Search Refactoring, Synced Tabs Menu, Text to Speech and Grouped Tabs Migration. Check out the … <a class="go" href="https://quality.mozilla.org/2016/01/firefox-45-0-beta-3-testday-february-5th/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hello Mozillians,</p>
+ <p>We are happy to announce that <strong>Friday, February 5th</strong>, we are organizing <strong>Firefox 45.0 Beta 3 Testday</strong>. We will be focusing our testing on the following features: <em>Search Refactoring, Synced Tabs Menu, Text to Speech and Grouped Tabs Migration</em>. Check out the detailed instructions via <a href="https://public.etherpad-mozilla.org/p/testday-20160205" target="_blank">this etherpad</a>.</p>
+ <p>No previous testing experience is required, so feel free to join us on <strong><a href="http://widget01.mibbit.com/?server=irc.mozilla.org&amp;channel=%23qa">#qa IRC channel</a></strong> where our moderators will offer you guidance and answer your questions.</p>
+ <p>Join us and help us make Firefox better! See you on <strong>Friday</strong>!</p></div>
+ </content>
+ <updated>2016-01-26T14:40:55Z</updated>
+ <category term="Community"/>
+ <category term="Firefox Team"/>
+ <category term="QMO News"/>
+ <author>
+ <name>vasilica.mihasca</name>
+ </author>
+ <source>
+ <id>https://quality.mozilla.org</id>
+ <link href="https://quality.mozilla.org/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://quality.mozilla.org" rel="alternate" type="text/html"/>
+ <subtitle>Driving quality across Mozilla with data, metrics and a strong community focus</subtitle>
+ <title>Mozilla Quality Assurance</title>
+ <updated>2016-01-26T14:46:40Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://dlawrence.wordpress.com/?p=29</id>
+ <link href="https://dlawrence.wordpress.com/2016/01/26/happy-bmo-push-day-4/" rel="alternate" type="text/html"/>
+ <title>Happy BMO Push Day!</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">the following changes have been pushed to bugzilla.mozilla.org: [1240575] Update form.reps.budget [1226028] API for batching MozReview requests discuss these changes on mozilla.tools.bmo.<img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;blog=58816&amp;post=29&amp;subd=dlawrence&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>the following changes have been pushed to bugzilla.mozilla.org:</p>
+ <ul>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1240575" target="_blank">1240575</a>] Update form.reps.budget</li>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1226028" target="_blank">1226028</a>] API for batching MozReview requests</li>
+ </ul>
+ <p>discuss these changes on <a href="https://lists.mozilla.org/listinfo/tools-bmo" target="_blank">mozilla.tools.bmo</a>.</p><br/> <a href="http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/29/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/29/"/></a> <img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;blog=58816&amp;post=29&amp;subd=dlawrence&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-26T14:27:50Z</updated>
+ <category term="Uncategorized"/>
+ <author>
+ <name>dlawrence</name>
+ </author>
+ <source>
+ <id>https://dlawrence.wordpress.com</id>
+ <logo>https://s2.wp.com/i/buttonw-com.png</logo>
+ <link href="https://dlawrence.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://dlawrence.wordpress.com" rel="alternate" type="text/html"/>
+ <link href="https://dlawrence.wordpress.com/osd.xml" rel="search" title="Dave's Ramblings" type="application/opensearchdescription+xml"/>
+ <link href="https://dlawrence.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
+ <subtitle>Thoughts somehow related to web, linux, mobile and other things I am interested in</subtitle>
+ <title>Dave's Ramblings</title>
+ <updated>2016-01-26T14:31:40Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/tanvi/?p=198</id>
+ <link href="https://blog.mozilla.org/tanvi/2016/01/26/updated-firefox-security-indicators/" rel="alternate" type="text/html"/>
+ <title>Updated Firefox Security Indicators</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This article has been coauthored by Aislinn Grigas, Senior Interaction Designer, Firefox Desktop Cross posting with Mozilla’s Security Blog November 3, 2015 Over the past few months, Mozilla has been improving the user experience of our privacy and security features in Firefox. One specific initiative has focused on the feedback shown in our address bar… <a class="more-link" href="https://blog.mozilla.org/tanvi/2016/01/26/updated-firefox-security-indicators/" title="Read the rest of &#x201C;Updated Firefox Security Indicators&#x201D;">Read more</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em>This article has been coauthored by Aislinn Grigas, Senior Interaction Designer, Firefox Desktop</em><br/>
+ <em>Cross posting with <a href="https://blog.mozilla.org/security/2015/11/03/updated-firefox-security-indicators-2/">Mozilla’s Security Blog</a></em></p>
+ <p>November 3, 2015</p>
+ <p>Over the past few months, Mozilla has been improving the user experience of our privacy and security features in Firefox. One specific initiative has focused on the feedback shown in our address bar around a site’s security. The major changes are highlighted below along with the rationale behind each change.</p>
+ <p><a href="https://blog.mozilla.org/security/files/2015/10/combo-graph21.png"><img alt="" class="alignnone wp-image-2045 size-full" height="914" src="https://blog.mozilla.org/security/files/2015/10/combo-graph21.png" width="1518"/></a></p>
+ <h3>Change to DV Certificate treatment in the address bar</h3>
+ <p>Color and iconography is commonly used today to communicate to users when a site is secure. The most widely used patterns are coloring a lock icon and parts of the address bar green. This treatment has a straightforward rationale given green = good in most cultures. Firefox has historically used two different color treatments for the lock icon – a gray lock for <a href="https://en.wikipedia.org/wiki/Domain-validated_certificate">Domain-validated (DV) certificates</a> and a green lock for <a href="https://en.wikipedia.org/wiki/Extended_Validation_Certificate">Extended Validation (EV) certificates</a>. The average user is likely not going to understand this color distinction between EV and DV certificates. The overarching message we want users to take from both certificate states is that their connection to the site is secure. We’re therefore updating the color of the lock when a DV certificate is used to match that of an EV certificate.</p>
+ <p>Although the same green icon will be used, the UI for a site using EV certificates will continue to differ from a site using a DV certificate. Specifically, EV certificates are used when <a href="https://en.wikipedia.org/wiki/Certificate_authority">Certificate Authorities (CA)</a> verify the owner of a domain. Hence, we will continue to include the organization name verified by the CA in the address bar.</p>
+ <h3>Changes to Mixed Content Blocker UI on HTTPS sites</h3>
+ <p>A second change we’re introducing addresses what happens when a page served over a secure connection contains <a href="https://developer.mozilla.org/en-US/docs/Security/MixedContent">Mixed Content</a>. Firefox’s Mixed Content Blocker proactively blocks <a href="https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_active_content">Mixed Active Content</a> by default. Users historically saw a <a href="https://people.mozilla.org/~tvyas/FigureA.jpg">shield icon</a> when Mixed Active Content was blocked and were given the option to disable the protection.</p>
+ <p>Since the Mixed Content state is closely tied to site security, the information should be communicated in one place instead of having two separate icons. Moreover, we have seen that the <a href="https://telemetry.mozilla.org/new-pipeline/dist.html#!cumulative=0&amp;end_date=2015-09-17&amp;keys=__none__!__none__!__none__&amp;max_channel_version=beta%252F41&amp;measure=MIXED_CONTENT_UNBLOCK_COUNTER&amp;min_channel_version=null&amp;product=Firefox&amp;sanitize=1&amp;sort_keys=submissions&amp;start_date=2015-08-11&amp;table=0&amp;trim=1&amp;use_submission_date=0">number of times users override mixed content protection</a> is slim, and hence the need for dedicated mixed content iconography is diminishing. Firefox is also using the shield icon for another feature in <a href="https://support.mozilla.org/en-US/kb/private-browsing-use-firefox-without-history">Private Browsing Mode</a> and we want to avoid making the iconography ambiguous.</p>
+ <p>The updated design that ships with Firefox 42 combines the lock icon with a warning sign which represents Mixed Content. When Firefox blocks Mixed Active Content, we retain the green lock since the HTTP content is blocked and hence the site remains secure.</p>
+ <p>For users who want to learn more about a site’s security state, we have added an informational panel to further explain differences in page security. This panel appears anytime a user clicks on the lock icon in the address bar.</p>
+ <p>Previously users could <a href="https://people.mozilla.org/~tvyas/FigureB.jpg">click on the shield icon</a> in the rare case they needed to override mixed content protection. With this new UI, users can still do this by clicking the arrow icon to expose more information about the site security, along with a disable protection button.</p>
+ <div class="wp-caption alignnone" id="attachment_2034" style="width: 557px;"><a href="https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png"><img alt="mixed active content click and subpanel" class="wp-image-2034 " height="176" src="https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png" width="547"/></a><p class="wp-caption-text">Users can click the lock with warning icon and proceed to disable Mixed Content Protection.</p></div>
+ <h3/>
+ <h3>Loading Mixed Passive Content on HTTPS sites</h3>
+ <p>There is a second category of Mixed Content called <a href="https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_passivedisplay_content">Mixed Passive Content</a>. Firefox does not block Mixed Passive Content by default. However, when it is loaded on an HTTPS page, we let the user know with iconography and text. In previous versions of Firefox, we used a gray warning sign to reflect this case.</p>
+ <p>We have updated this iconography in Firefox 42 to a gray lock with a yellow warning sign. We degrade the lock from green to gray to emphasize that the site is no longer completely secure. In addition, we use a vibrant color for the warning icon to amplify that there is something wrong with the security state of the page.</p>
+ <p><a href="https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1.png"><img alt="" class="alignnone wp-image-2042 " height="100" src="https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1-600x221.png" width="268"/></a></p>
+ <p>We also use this iconography when the certificate or TLS connection used by the website relies on deprecated cryptographic algorithms.</p>
+ <p>The above changes will be rolled out in Firefox 42. Overall, the design improvements make it simpler for our users to understand whether or not their interactions with a site are secure.</p>
+ <h3>Firefox Mobile</h3>
+ <p>We have made similar changes to the site security indicators in Firefox for Android, which you can learn more about <a href="https://support.mozilla.org/en-US/kb/mixed-content-blocker-firefox-android#w_how-do-i-know-if-a-page-has-mixed-content">here</a>.</p></div>
+ </content>
+ <updated>2016-01-26T05:58:29Z</updated>
+ <category term="Browser Security"/>
+ <author>
+ <name>Tanvi Vyas</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/tanvi</id>
+ <link href="https://blog.mozilla.org/tanvi/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/tanvi" rel="alternate" type="text/html"/>
+ <subtitle>Security Engineering - @TanviHacks</subtitle>
+ <title>Tanvi's Blog</title>
+ <updated>2016-01-26T06:16:19Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://blog.mozilla.org/?p=9166</id>
+ <link href="https://blog.mozilla.org/blog/2016/01/25/firefox-can-now-get-push-notifications-from-your-favorite-sites/" rel="alternate" type="text/html"/>
+ <title>Firefox Can Now Get Push Notifications From Your Favorite Sites</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Firefox for Windows, Mac and Linux now lets you choose to receive push notifications from websites if you give them permission. This is similar to Web notifications, except now you can receive notifications for websites even when they’re not loaded … <a class="go" href="https://blog.mozilla.org/blog/2016/01/25/firefox-can-now-get-push-notifications-from-your-favorite-sites/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Firefox for Windows, Mac and Linux now lets you choose to receive push notifications from websites if you give them permission. This is similar to Web notifications, except now you can receive notifications for websites even when they’re not loaded in a tab. This is super useful for websites like email, weather, social networks and shopping, which you might check frequently for updates.</p>
+ <p>You can manage your notifications in the Control Center by clicking the <img alt="'I' Icon" class="alignnone wp-image-9170" height="10" src="https://blog.mozilla.org/wp-content/uploads/2016/01/IIcon.png" width="10"/> icon on the left side of the address bar.</p>
+ <p><b>Push Notifications for Web Developers</b><br/>
+ To make this functionality possible, Mozilla helped establish the Web Push W3C standard that’s gaining momentum across the Web. We also continue to explore the new design pattern known as<a href="https://blog.mozilla.org/futurereleases/2015/11/17/extending-the-webs-capabilities-in-firefox-and-beyond/"> Progressive Web Apps</a>. If you’re a developer who wants to implement push notifications on your site, you can learn more in this<a href="https://hacks.mozilla.org/2016/01/web-push-arrives-in-firefox-44/"> Hacks blog post</a>.</p>
+ <p><b>More information:</b></p>
+ <ul>
+ <li>Download<a href="https://www.mozilla.org/firefox/new/"> Firefox for Windows, Mac, Linux</a></li>
+ <li>Release Notes for<a href="https://www.mozilla.org/firefox/44.0/releasenotes/"> Firefox for Windows, Mac, Linux</a></li>
+ <li>Download<a href="https://play.google.com/store/apps/details?id=org.mozilla.firefox&amp;referrer=utm_source%3Dmozilla%26utm_medium"> Firefox for Android</a></li>
+ <li>Release Notes for<a href="https://www.mozilla.org/firefox/android/44.0/releasenotes/"> Firefox for Android</a></li>
+ </ul></div>
+ </content>
+ <updated>2016-01-26T01:56:50Z</updated>
+ <category term="Firefox"/>
+ <author>
+ <name>Mozilla</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org</id>
+ <link href="https://blog.mozilla.org/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org" rel="alternate" type="text/html"/>
+ <subtitle>News, notes and ramblings from the Mozilla project</subtitle>
+ <title>The Mozilla Blog</title>
+ <updated>2016-01-26T16:01:47Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://benoitgirard.wordpress.com/?p=651</id>
+ <link href="https://benoitgirard.wordpress.com/2016/01/25/using-recordreplay-to-investigate-intermittent-oranges/" rel="alternate" type="text/html"/>
+ <title>Using RecordReplay to investigate intermittent oranges</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This is a quick write up to summarize my, and Jeff’s, experience, using RR to debug a fairly rare intermittent reftest failure. There’s still a lot of be learned about how to use RR effectively so I’m hoping sharing this will help others. Finding the root of the bad pixel First given a offending pixel […]<img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=benoitgirard.wordpress.com&amp;blog=12112851&amp;post=651&amp;subd=benoitgirard&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is a quick write up to summarize my, and Jeff’s, experience, using RR to debug a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1226748">fairly rare intermittent reftest failure</a>. There’s still a lot of be learned about how to use RR effectively so I’m hoping sharing this will help others.</p>
+ <h3>Finding the root of the bad pixel</h3>
+ <p>First given a offending pixel I was able to set a breakpoint on it using <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Hacking_Tips#rr_with_reftest">these instructions</a>. Next using <a href="https://github.com/jrmuizel/rr-dataflow">rr-dataflow</a> I was able to step from the offending bad pixel to the display item responsible for this pixel. Let me emphasize this for a second since it’s incredibly impressive. rr + rr-dataflow allows you to go from a buffer, through an intermediate surface, to the compositor on another thread, through another intermediate surface, back to the main thread and eventually back to the relevant display item. All of this was automated except for when the two pixels are blended together which is logically ambiguous. The speed at which rr was able to reverse continue through this execution was very impressive!</p>
+ <p>Here’s the trace of this part: <a href="https://gist.github.com/bgirard/e707e9b97556b500d9ae">rr-trace-reftest-pixel-origin</a></p>
+ <h3>Understanding the decoding step</h3>
+ <p>From here I started comparing a replay of a failing test and a non failing step and it was clear that the DisplayList was different. In one we have a nsDisplayBackgroundColor in the other we don’t. From here I was able to step through the decoder and compare the sequence. This was very useful in ruling out possible theories. It was easy to step forward and backwards in the good and bad replay debugging sessions to test out various theories about race conditions and understanding at which part of the decode process the image was rejected. It turned out that we sent two decodes, one for the metadata that is used to sized the frame tree and the other one for the image data itself.</p>
+ <h3>Comparing the frame tree</h3>
+ <p>In hindsight, it would have been more effective to start debugging this test by looking at the frame tree (and I imagine for other tests looking at the display list and layer tree) first would have been a quicker start. It works even better if you have a good and a bad trace to compare the difference in the frame tree. From here, I found that the difference in the layer tree came from a change hint that wasn’t guaranteed to come in before the draw.</p>
+ <p>The problem is now well understood: When we do a sync decode on reftest draw, if there’s an image error we wont flush the style hints since we’re already too deep in the painting pipeline.</p>
+ <h3>Take away</h3>
+ <ul>
+ <li>Finding the root cause of a bad pixel is very easy, and fast, to do using rr-dataflow.</li>
+ <li>However it might be better to look for obvious frame tree/display list/layer tree difference(s) first.</li>
+ <li>Debugging a replay is a lot simpler then debugging against non-determinist re-runs and a lot less frustrating too.</li>
+ <li>rr is really useful for race conditions, especially rare ones.</li>
+ </ul><br/> <a href="http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/651/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/651/"/></a> <img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=benoitgirard.wordpress.com&amp;blog=12112851&amp;post=651&amp;subd=benoitgirard&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-25T22:16:01Z</updated>
+ <category term="Graphics"/>
+ <category term="Mozilla"/>
+ <author>
+ <name>benoitgirard</name>
+ </author>
+ <source>
+ <id>https://benoitgirard.wordpress.com</id>
+ <logo>https://s2.wp.com/i/buttonw-com.png</logo>
+ <link href="https://benoitgirard.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://benoitgirard.wordpress.com" rel="alternate" type="text/html"/>
+ <link href="https://benoitgirard.wordpress.com/osd.xml" rel="search" title="Benoit Girard's Blog" type="application/opensearchdescription+xml"/>
+ <link href="https://benoitgirard.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
+ <subtitle>My Programming Experiences</subtitle>
+ <title>Benoit Girard's Blog</title>
+ <updated>2016-01-25T22:30:59Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://blog.servo.org/2016/01/25/twis-48/</id>
+ <link href="http://blog.servo.org/2016/01/25/twis-48/" rel="alternate" type="text/html"/>
+ <title>These Weeks In Servo 48</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In the <a href="https://github.com/pulls?page=1&amp;q=is%3Apr+is%3Amerged+closed%3A2016-01-11..2016-01-25+user%3Aservo">last two weeks</a>, we landed 130 PRs in the Servo organization’s repositories.</p>
+
+ <p>After months of work by vlad and many others, Windows support <a href="https://github.com/servo/servo/pull/9385">landed</a>! Thanks to everyone who contributed fixes, tests, reviews, and even encouragement (or impatience!) to help us make this happen.</p>
+
+ <h3 id="notable-additions">Notable Additions</h3>
+
+ <ul>
+ <li>nikki <a href="https://github.com/servo/servo/pull/9391">added</a> tests and support for checking the Fetch redirect count</li>
+ <li>glennw <a href="https://github.com/servo/servo/pull/9359">implemented</a> horizontal scrolling with arrow keys</li>
+ <li>simon <a href="https://github.com/servo/servo/pull/9333">created</a> a script that parses all of the CSS properties parsed by Servo</li>
+ <li>ms2ger <a href="https://github.com/servo/servo/pull/9293">removed</a> the legacy reftest framework</li>
+ <li>fernando <a href="https://github.com/servo/crowbot/pull/33">made</a> crowbot able to rejoin IRC after it accidentally floods the channel</li>
+ <li>jack <a href="https://github.com/servo/saltfs/pull/193">added</a> testing the <code>geckolib</code> target to our CI</li>
+ <li>antrik <a href="https://github.com/servo/ipc-channel/pull/25">fixed</a> transfer corruption in ipc-channel on 32-bit</li>
+ <li>valentin <a href="https://github.com/servo/rust-url/pull/119">added</a> and simon <a href="https://github.com/servo/rust-url/pull/152">extended</a> IDNA support in rust-url, which is required for both web and Gecko compatibility</li>
+ </ul>
+
+ <h3 id="new-contributors">New Contributors</h3>
+
+ <ul>
+ <li><a href="https://github.com/Chandler">Chandler Abraham</a></li>
+ <li><a href="https://github.com/DarinM223">Darin Minamoto</a></li>
+ <li><a href="https://github.com/coder543">Josh Leverette</a></li>
+ <li><a href="https://github.com/shssoichiro">Joshua Holmer</a></li>
+ <li><a href="https://github.com/therealkbhat">Kishor Bhat</a></li>
+ <li><a href="https://github.com/MonsieurLanza">Lanza</a></li>
+ <li><a href="https://github.com/mattkuo">Matthew Kuo</a></li>
+ <li><a href="https://github.com/waterlink">Oleksii Fedorov</a></li>
+ <li><a href="https://github.com/stspyder">St.Spyder</a></li>
+ <li><a href="https://github.com/vvuk">Vladimir Vukicevic</a></li>
+ <li><a href="https://github.com/apopiak">apopiak</a></li>
+ <li><a href="https://github.com/askalski">askalski</a></li>
+ </ul>
+
+ <h3 id="screenshot">Screenshot</h3>
+
+ <p>Screencast of this post being upvoted on reddit… from Windows!</p>
+
+ <p><img alt="(screencast)" src="http://blog.servo.org/images/upvote-windows.gif" title="Screencast of upvoting on Reddit on Windows."/></p>
+
+ <h3 id="meetings">Meetings</h3>
+
+ <p>We had a <a href="https://github.com/servo/servo/wiki/Meeting-2016-01-11">meeting</a> on some CI-related woes, documenting tags and mentoring, and dependencies for the style subsystem.</p></div>
+ </summary>
+ <updated>2016-01-25T20:30:00Z</updated>
+ <source>
+ <id>http://blog.servo.org/</id>
+ <author>
+ <name>The Servo Blog</name>
+ </author>
+ <link href="http://blog.servo.org/" rel="alternate" type="text/html"/>
+ <link href="http://blog.servo.org/feed.xml" rel="self" type="application/rss+xml"/>
+ <title>Servo Blog</title>
+ <updated>2016-01-26T02:01:45Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/</id>
+ <link href="https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/" rel="alternate" type="text/html"/>
+ <title>Mozilla Weekly Project Meeting, 25 Jan 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Mozilla Weekly Project Meeting" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/e9/4f/e94fbd7f8df916c75a60e63a85b9168c.png" width="160"/>
+ The Monday Project Meeting
+ </p></div>
+ </summary>
+ <updated>2016-01-25T19:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/community/?p=2292</id>
+ <link href="http://blog.mozilla.org/community/2016/01/25/firefox-44-new-contributors/" rel="alternate" type="text/html"/>
+ <title>Firefox 44 new contributors</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">With the release of Firefox 44, we are pleased to welcome the 28 developers who contributed their first code change to Firefox in this release, 23 of whom were brand new volunteers! Please join us in thanking each of these … <a class="go" href="http://blog.mozilla.org/community/2016/01/25/firefox-44-new-contributors/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>With the release of Firefox 44, we are pleased to welcome the <strong>28 developers</strong> who contributed their first code change to Firefox in this release, <strong>23</strong> of whom were brand new volunteers! Please join us in thanking each of these diligent and enthusiastic individuals, and take a look at their contributions:</p>
+ <ul>
+ <li>mkm: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208124">1208124</a></li>
+ <li>Aditya Motwani: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1209087">1209087</a></li>
+ <li>Aniket Vyas: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1197309">1197309</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1197315">1197315</a></li>
+ <li>Chirath R: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1216941">1216941</a></li>
+ <li>Christiane Ruetten: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1209091">1209091</a></li>
+ <li>Fernando Campo: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1199815">1199815</a></li>
+ <li>Grisha Pushkov: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=994555">994555</a></li>
+ <li>Guang-De Lin: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1150305">1150305</a></li>
+ <li>Hassen ben tanfous: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1074804">1074804</a></li>
+ <li>Helen V. Holmes: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205046">1205046</a></li>
+ <li>Henrik Tjäder: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1161698">1161698</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1209912">1209912</a></li>
+ <li>Johann Hofmann: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1192432">1192432</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1198405">1198405</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1204072">1204072</a></li>
+ <li>Kapeel Sable: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1212171">1212171</a></li>
+ <li>Manav Batra: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1202618">1202618</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1212280">1212280</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1214626">1214626</a></li>
+ <li>Manuel Casas Barrado: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1172662">1172662</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1193674">1193674</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1200693">1200693</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1203298">1203298</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205684">1205684</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1212331">1212331</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1212338">1212338</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1214582">1214582</a></li>
+ <li>Matt Howell: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208626">1208626</a></li>
+ <li>Matthew Turnbull: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1213620">1213620</a></li>
+ <li>Olivier Yiptong: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1210936">1210936</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1210940">1210940</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1213078">1213078</a></li>
+ <li>Piotr Tworek: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1209446">1209446</a></li>
+ <li>Rocik: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1070719">1070719</a></li>
+ <li>Roland Sako: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1207733">1207733</a></li>
+ <li>Ronald Claveau: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1207266">1207266</a></li>
+ <li>Sanchit Nevgi: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205181">1205181</a></li>
+ <li>Shaif Chowdhury: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1185606">1185606</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208121">1208121</a></li>
+ <li>Shubham Jain: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208470">1208470</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208705">1208705</a></li>
+ <li>Stanislas Daniel Claude Dolcini: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1147197">1147197</a></li>
+ <li>Stephanie Ouillon: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1178533">1178533</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1201626">1201626</a></li>
+ <li>Tim Huang: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1181489">1181489</a></li>
+ <li>simplyblue24: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1218204">1218204</a></li>
+ </ul></div>
+ </content>
+ <updated>2016-01-25T16:21:33Z</updated>
+ <category term="Spotlight"/>
+ <author>
+ <name>Josh Matthews</name>
+ </author>
+ <source>
+ <id>http://blog.mozilla.org/community</id>
+ <link href="http://blog.mozilla.org/community/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://blog.mozilla.org/community" rel="alternate" type="text/html"/>
+ <subtitle>News and notes from and for the Mozilla community.</subtitle>
+ <title>about:community</title>
+ <updated>2016-01-25T16:31:42Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>tag:literaci.es,2014:Post/digital-skills-curriculum</id>
+ <link href="http://literaci.es/digital-skills-curriculum" rel="alternate" type="text/html"/>
+ <title xml:lang="en-US">3 things to consider when designing a digital skills framework</title>
+ <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p><img alt="Learning to credential" src="http://bryanmmathers.com/wp-content/uploads/2016/01/learning-to-credential.png"/></p>
+
+ <p>The image above was created by <a href="http://bryanmmathers.com/learning-to-credential" rel="nofollow">Bryan Mathers</a> for our <a href="https://goo.gl/QqwUKP" rel="nofollow">presentation</a> at <a href="http://bettshow.com" rel="nofollow">BETT</a> last week. It shows the way that, in broad brushstrokes, learning design <em>should</em> happen. Before microcredentials such as <a href="http://openbadges.org" rel="nofollow">Open Badges</a> this was a difficult thing to do as both the credential and the assessment are usually given to educators. The flow tends to go <em>backwards</em> from credentials instead of forwards from what we want people to learn.</p>
+
+ <p>But what if you really <em>were</em> starting from scratch? How could you design a digital skills framework that contains knowledge, skills, and behaviours worth learning? Having written my <a href="http://neverendingthesis.com" rel="nofollow">thesis</a> on digital literacies and led Mozilla’s <a href="https://teach.mozilla.org/activities/web-literacy/" rel="nofollow">Web Literacy Map</a> for a couple of years, I’ve got some suggestions. </p>
+ <h3>
+ <a class="head_anchor" href="http://literaci.es/feed#1-define-your-audience" name="1-define-your-audience" rel="nofollow"> </a>1. Define your audience</h3>
+ <p>One of the most important things to define is who your audience is for your digital skills framework. Is it for learners to read? Who are they? How old are they? Are you excluding anyone on purpose? Why / why not?</p>
+
+ <p>You might want to do some research and work around <a href="https://en.wikipedia.org/wiki/Persona_(user_experience)" rel="nofollow">user personas</a> as part of a user-centred design approach. This ensures you’re designing for real people instead of figments of your imagination (or, worse still, in line with your prejudices).</p>
+
+ <p>It’s also good practice to make the language used in the skills framework as precise as possible. Jargon is technical language used for the sake of it. There may be times when it’s impossible not to use a word (e.g. ’<a href="https://en.wikipedia.org/wiki/Meme" rel="nofollow">meme</a>’). If you do this then link to a definition or include a glossary. It’s also useful to check the ‘reading level’ of your framework and, if you really want a challenge, try using <a href="http://splasho.com/upgoer5/" rel="nofollow">Up-Goer Five</a> language.</p>
+ <h3>
+ <a class="head_anchor" href="http://literaci.es/feed#2-focus-on-verbs" name="2-focus-on-verbs" rel="nofollow"> </a>2. Focus on verbs</h3>
+ <p>It’s extremely easy, when creating a framework for learning, to fall into the 'knowledge trap’. Our aim when creating the raw materials from which someone can build a curriculum is to focus on <em>action</em>. Knowledge should make a difference in practice.</p>
+
+ <p>One straightforward way to ensure that you’re focusing on action rather than head knowledge is to use <strong>verbs</strong> when constructing your digital skills framework. If you’re familiar with <a href="https://en.wikipedia.org/wiki/Bloom%27s_taxonomy" rel="nofollow">Bloom’s Taxonomy</a>, then you may find <a href="http://byrdseed.com/differentiator/" rel="nofollow">The Differentiator</a> useful. This pairs verbs with the various levels of Bloom’s.</p>
+ <h3>
+ <a class="head_anchor" href="http://literaci.es/feed#3-add-version-numbers" name="3-add-version-numbers" rel="nofollow"> </a>3. Add version numbers</h3>
+ <p>A framework needs to be a living, breathing thing. It should be subject to revision and updated often. For this reason, you should add version numbers to your documentation. Ideally, the latest version should be at a canonical URL and you should archive previous versions to static URLs. </p>
+
+ <p>I would also advise releasing the first version of your framework not as 'version 1.0’ but as 'v0.1’. This shows that you’re willing for others to provide input, that there will be further versions, and that you know you haven’t got it right first time (and forevermore). </p>
+
+ <hr/>
+
+ <p><strong>Questions? Comments?</strong> Ask me on Twitter (<a href="http://twitter.com/dajbelshaw" rel="nofollow">@dajbelshaw</a>). I also consult around this kind of thing, so hit me up on <a href="http://literaci.es/hello@dynamicskillset.com" rel="nofollow">hello@dynamicskillset.com</a></p></div>
+ </content>
+ <updated>2016-01-25T14:46:34Z</updated>
+ <published>2016-01-25T14:46:34Z</published>
+ <source>
+ <id>tag:literaci.es,2014:/feed</id>
+ <author>
+ <name>Doug Belshaw</name>
+ <email>mail@dougbelshaw.com</email>
+ <uri>http://literaci.es</uri>
+ </author>
+ <link href="http://literaci.es" rel="alternate" type="text/html"/>
+ <link href="http://literaci.es/feed" rel="self" type="application/atom+xml"/>
+ <title xml:lang="en-US">Literacies</title>
+ <updated>2016-01-25T14:46:34Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://fundraising.mozilla.org/?p=800</id>
+ <link href="https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/" rel="alternate" type="text/html"/>
+ <title>Why did you decide to donate today?</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This year, we asked some of our donors why they decided to donate to our end of year fundraising campaign. The Survey The Audience The survey was shown to a random sample of donors whose browser language was set to … <a class="go" href="https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/">Continue reading</a></div>
+ </summary>
+ <updated>2016-01-25T13:31:34Z</updated>
+ <category term="metrics"/>
+ <category term="mozilla"/>
+ <author>
+ <name>Adam Lofting</name>
+ </author>
+ <source>
+ <id>https://fundraising.mozilla.org</id>
+ <link href="https://fundraising.mozilla.org/category/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://fundraising.mozilla.org" rel="alternate" type="text/html"/>
+ <subtitle>We work in the open, we fundraise in the open. This site shows you how we work, shares what we know, and challenges you to help us do it better.</subtitle>
+ <title>Mozilla: View Source Fundraising » mozilla</title>
+ <updated>2016-01-25T13:31:34Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-us">
+ <id>http://www.agmweb.ca/robbie-burns</id>
+ <link href="http://www.agmweb.ca/2016-01-25-robbie-burns/" rel="alternate" type="text/html"/>
+ <title xml:lang="en-us">Robbie Burns</title>
+ <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tonight is Robbie Burns night, in honour of that great Scottish poet. But tonight had me thinking about another night in my past.</p>
+
+ <p>It was about 5 years ago, maybe less, I struggle to remember now. I was in the UK visiting family and my Dad was sick. Cancer and it's treatment is tough, you have good weeks, you have bad weeks and you have really fucking bad weeks. This was a good week and for some reason I was in the UK.</p>
+
+ <p>Myself, my brother and my sister-in-law went down to see him that night. It was Robbie Burns night and that meant an excuse for haggis, really, truly terrible scotch, Scottish dancing and all that. There are many times when I look back at time with my Dad in those last few years. This was definitely one of those times. He was my Dad at his best, cracking jokes and having fun. Living life to the absolute fullest, while you still have that chance.</p>
+
+ <p>We had a great night. That ended way too soon.</p>
+
+ <p>Not long after that the cancer came back and that was that.</p>
+
+ <p>But suddenly tonight, in a bar in Portland I had these memories of my Dad in a waistcoat cracking jokes and having fun on Robbie Burns night. No-one else in the bar seemed to know what night it was. You'd think Robbie Burns night might get a little bit more appreciation, but hey.</p>
+
+ <p>In the many years I've been running this blog I've never written about my Dad passing away. Here's the first time. I miss him.</p>
+
+ <p>Hey Robbie Burns? Thanks for making me remember that night.</p></div>
+ </content>
+ <updated>2016-01-25T08:00:00Z</updated>
+ <source>
+ <id>http://www.agmweb.ca/blog/andy</id>
+ <author>
+ <name>Andy McKay</name>
+ <email>andy@clearwind.ca</email>
+ </author>
+ <link href="http://www.agmweb.ca/blog/andy" rel="alternate" type="text/html"/>
+ <link href="http://www.agmweb.ca/blog/rss/latest/andy/" rel="self" type="application/atom+xml"/>
+ <title xml:lang="en-us">Andy McKay</title>
+ <updated>2016-01-26T06:33:30Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>tag:this-week-in-rust.org,2016-01-25:blog/2016/01/25/this-week-in-rust-115/</id>
+ <link href="http://this-week-in-rust.org/blog/2016/01/25/this-week-in-rust-115/" rel="alternate" type="text/html"/>
+ <title>This Week in Rust 115</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hello and welcome to another issue of <em>This Week in Rust</em>!
+ <a href="http://rust-lang.org">Rust</a> is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> or <a href="mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion">send us an
+ email</a>!
+ Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love
+ contributions</a>.</p>
+ <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/cmr/this-week-in-rust">on GitHub</a>.
+ If you find any errors in this week's issue, <a href="https://github.com/cmr/this-week-in-rust/pulls">please submit a PR</a>.</p>
+ <p>This week's edition was edited by: <a href="https://github.com/nasa42">nasa42</a>, <a href="https://github.com/brson">brson</a>, and <a href="https://github.com/llogiq">llogiq</a>.</p>
+ <h3>Updates from Rust Community</h3>
+ <h4>News &amp; Blog Posts</h4>
+ <ul>
+ <li><img alt="balloon" class="emoji" src="https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0" title=":balloon:"/><img alt="tada" class="emoji" src="https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0" title=":tada:"/> <a href="http://blog.rust-lang.org/2016/01/21/Rust-1.6.html">Announcing Rust 1.6</a>. <img alt="tada" class="emoji" src="https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0" title=":tada:"/><img alt="balloon" class="emoji" src="https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0" title=":balloon:"/></li>
+ <li><a href="http://www.poumeyrol.fr/2016/01/15/Awkward-zone/">Rust, BigData and my laptop</a>.</li>
+ <li>[pdf]<a href="https://cdn.rawgit.com/Gankro/thesis/master/thesis.pdf">You can't spell trust without Rust</a>. Analysis of the semantics and expressiveness of Rust’s type system.</li>
+ <li><a href="http://www.ncameron.org/blog/libmacro/">Libmacro - an API for procedural macros to interact with the compiler</a>.</li>
+ <li><a href="http://www.jonathanturner.org/2016/01/rust-and-blub-paradox.html">Rust and the Blub Paradox</a>. And the <a href="http://www.jonathanturner.org/2016/01/rethinking-the-blub-paradox.html">follow-up</a>.</li>
+ <li>[video] <a href="https://www.youtube.com/channel/UC4mpLlHn0FOekNg05yCnkzQ/videos">Ferris Makes Emulators</a>. Live stream of Ferris developing a N64 emulator in Rust (also on <a href="http://www.twitch.tv/ferrisstreamsstuff/profile">Twitch</a>).</li>
+ </ul>
+ <h4>Notable New Crates &amp; Project Updates</h4>
+ <ul>
+ <li><a href="http://areweconcurrentyet.com/">Are we concurrent yet</a>?</li>
+ <li><a href="https://github.com/gfx-rs/gfx">GFX</a> epic rewrite for the Pipeline State Objects paradigm has <a href="https://github.com/gfx-rs/gfx/pull/828">landed</a>, described <a href="http://gfx-rs.github.io/2016/01/22/pso.html">on the blog</a>.</li>
+ <li><a href="https://github.com/mcarton/rust-herbie-lint">Herbie</a>. A rustc plugin to check for numerical instability.</li>
+ <li><a href="http://blog.piston.rs/2016/01/23/dynamo/">Dynamo</a>. A rusty dynamically typed scripting language.</li>
+ <li><a href="https://github.com/whitequark/rust-vnc">rust-vnc</a>. An implementation of VNC protocol, client state machine and a client.</li>
+ </ul>
+ <h3>Updates from Rust Core</h3>
+ <p>129 pull requests were <a href="https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-18..2016-01-25">merged in the last week</a>.</p>
+ <p>See the <a href="https://internals.rust-lang.org/t/triage-digest-mon-jan-25-2016/3111">triage digest</a> and <a href="https://internals.rust-lang.org/t/subteam-reports-2016-01-22/3106">subteam reports</a> for more details.</p>
+ <h4>Notable changes</h4>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rust/pull/30872">Implement RFC 1252 expanding the OpenOptions structure</a>.</li>
+ <li><a href="https://github.com/rust-lang/book/pull/58">Book: First draft of 'ownership'</a>.</li>
+ <li><a href="https://github.com/rust-lang/cargo/pull/2205">Cargo: Add convenience syntax to install current crate</a>.</li>
+ <li><a href="https://github.com/rust-lang/cargo/pull/2196">Cargo: Introduce cargo metadata subcommand</a>.</li>
+ <li><a href="https://github.com/rust-lang/cargo/pull/2081">Cargo: Implement <code>cargo init</code></a>.</li>
+ <li><a href="https://github.com/rust-lang/cargo/pull/2270">Cargo: Emit a warning when manifest specifies empty dependency constraints</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/29520">Change name when outputting staticlibs on Windows</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30998">Make <code>btree_set::{IntoIter, Iter, Range}</code> covariant</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30917">Avoid bounds checking at <code>slice::binary_search</code></a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30894"><code>std::sync::mpsc</code>: Add <code>fmt::Debug</code> stubs</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30882">resolve: Fix variant namespacing</a>.</li>
+ </ul>
+ <h4>New Contributors</h4>
+ <ul>
+ <li>Adrian Heine</li>
+ <li>Andrea Bedini</li>
+ <li>Guillaume Bonnet</li>
+ <li>Kamal Marhubi</li>
+ <li>Keith Yeung</li>
+ <li>Marc Bowes</li>
+ <li>Martin</li>
+ <li>mopp</li>
+ <li>Olaf Buddenhagen</li>
+ <li>Paul Dicker</li>
+ <li>Peter Kolloch</li>
+ <li>Stephen (Ziyun) Li</li>
+ </ul>
+ <h4>Approved RFCs</h4>
+ <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments)
+ process</a>. These
+ are the RFCs that were approved for implementation this week:</p>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1462">Amendment to RFC 550: Add <code>[</code> to the FOLLOW(ty) in macro future-proofing rules</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1320">Amendment to RFC 1192: Amend <code>RangeInclusive</code> to use an enum</a>.</li>
+ </ul>
+ <h4>Final Comment Period</h4>
+ <p>Every week <a href="https://rust-lang.org/team.html">the team</a> announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. <a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">This week's FCPs</a> are:</p>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/243">Trait-based exception handling</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1361">Improve Cargo target-specific dependencies</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1129">Add a <code>IndexAssign</code> trait that allows overloading "indexed assignment" expressions like <code>a[b] = c</code></a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1196">Allow eliding more type parameters</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1296">Add an <code>alias</code> attribute to <code>#[link]</code> and <code>-l</code></a>.</li>
+ </ul>
+ <h4>New RFCs</h4>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1477">Add compiler support for generic atomic operations</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1478">Translate undefined generic intrinsics to an LLVM <code>unreachable</code> and a lint</a>.</li>
+ </ul>
+ <h3>Upcoming Events</h3>
+ <ul>
+ <li><a href="http://www.meetup.com/opentechschool-berlin/">1/27. OpenTechSchool Berlin: Rust Hack and Learn</a>.</li>
+ <li><a href="http://www.meetup.com/Tokyo-Rust-Meetup/events/227871840/">1/28. Tokyo Rust Meetup #2</a>.</li>
+ <li><a href="http://www.meetup.com/Rust-Berlin/events/227321071/">2/3. Rust Berlin: Leaf and Collenchyma</a>.</li>
+ <li><a href="http://www.meetup.com/de/Rust-Cologne-Bonn/events/227534456/">2/3. Rust Meetup in Cologne / Germany</a>.</li>
+ <li><a href="https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg">2/8. Seattle Rust Meetup</a>.</li>
+ </ul>
+ <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
+ it mentioned here. Email <a href="mailto:erick.tryzelaar@gmail.com">Erick Tryzelaar</a> or <a href="mailto:banderson@mozilla.com">Brian
+ Anderson</a> for access.</p>
+ <h3>fn work(on: RustProject) -&gt; Money</h3>
+ <ul>
+ <li><a href="http://maidsafe.net/rust_engineer.html">Rust Engineer</a> at MaidSafe.</li>
+ <li><a href="https://careers.mozilla.org/en-US/position/ozy21fwU">Research Engineer - Servo</a> at Mozilla.</li>
+ <li><a href="https://careers.mozilla.org/en-US/position/o0H41fww">Senior Research Engineer - Rust</a> at Mozilla.</li>
+ <li><a href="http://plv.mpi-sws.org/rustbelt/">PhD and postdoc positions</a> at MPI-SWS.</li>
+ </ul>
+ <p><em>Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> to get your job offers listed here!</em></p>
+ <h3>Crate of the Week</h3>
+ <p>This week's Crate of the Week is <a href="https://github.com/phildawes/racer">racer</a> which powers code completion in all Rust development environments.</p>
+ <p>Thanks to <a href="https://users.rust-lang.org/users/stebalien">Steven Allen</a> for the suggestion.</p>
+ <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Submit your suggestions for next week</a>!</p>
+ <h3>Quote of the Week</h3>
+ <blockquote>
+ <p>Memory errors are fundamentally state errors, and Rust's move semantics, borrowing, and aliasing XOR mutating help enormously for me to reason about how my program changes state as it executes, to avoid accidental shared state and side effects at a distance. Rust more than any other language I know enables me to do compiler driven design. And internalizing its rules has helped me design better systems, even in other languages.</p>
+ </blockquote>
+ <p>— <a href="https://www.reddit.com/r/rust/comments/4275gz/rust_and_the_blub_paradox/cz8akv9">desiringmachines on /r/rust</a>.</p>
+ <p>Thanks to <a href="https://users.rust-lang.org/users/dikaiosune">dikaiosune</a> for the suggestion.</p>
+ <p><a href="http://users.rust-lang.org/t/twir-quote-of-the-week/328">Submit your quotes for next week</a>!</p></div>
+ </summary>
+ <updated>2016-01-25T05:00:00Z</updated>
+ <author>
+ <name>Corey Richardson</name>
+ </author>
+ <source>
+ <id>http://this-week-in-rust.org/</id>
+ <link href="http://this-week-in-rust.org/" rel="alternate" type="text/html"/>
+ <link href="http://this-week-in-rust.org/atom.xml" rel="self" type="application/atom+xml"/>
+ <title>This Week in Rust</title>
+ <updated>2016-01-25T05:00:00Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>tag:blogger.com,1999:blog-1015214236289077798.post-7056349209464984020</id>
+ <link href="http://tenfourfox.blogspot.com/2016/01/3860-available.html" rel="alternate" type="text/html"/>
+ <title>38.6.0 available</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">TenFourFox 38.6.0 is available for testing (<a href="https://sourceforge.net/projects/tenfourfox/files/38.6.0/">downloads</a>, <a href="https://github.com/classilla/tenfourfox/wiki/Hashes">hashes</a>, <a href="https://github.com/classilla/tenfourfox/wiki/ZZReleaseNotes3860">release notes</a>). I'm sorry it's been so quiet around here; I'm in the middle of a backbreaking Master's course, my last one before I'm finally done with the lousy thing, and I haven't had any time to start on 45 so far. 38.6 does have some other fixes in it, though: I think I found the last place where bookmark backups were being mistakenly saved in LZ4 based on Chris Trusch's report, and the problematic fonts on the iCloud login page are now blacklisted, so you should be able to login again. I can't do much more testing than that, however, since I don't use iCloud personally, so other lapses in font functionality will require the font URL and I'll add them to the blacklist in 38.7. The browser will go live Monday Pacific time as usual. (The temporary workaround is to set <tt>gfx.downloadable_fonts.enabled</tt> to <tt>false</tt>, and switch the setting back when you don't need it anymore.) <p>Speaking of, downloadable fonts were exactly the same problem on the Sun Ultra-3 laptop I've been refurbishing; Oracle still provides a free Solaris 10 build of 38ESR, but it crashes on web fonts for reasons I have yet to diagnose, so I just have them turned off. Yes, it really is a SPARC laptop, a rebranded Tadpole Viper, and I think the fastest one ever made in this form factor (a 1.2GHz UltraSPARC IIIi). It's pretty much what I expected the PowerBook G5 would have been -- hot, overthrottled and power-hungry -- but Tadpole actually built the thing and it's not a disaster, relatively speaking. There's no JIT in this Firefox build, the brand new battery gets only 70 minutes of runtime even with the CPU clock-skewed to hell, it stands a very good chance of rendering me sterile and/or medium rare if I actually use it in my lap and it had at least one sudden overtemp shutdown and pooped all over the filesystem, but between Firefox, Star Office and <tt>pkgsrc</tt> I can actually use it. More on that for laughs in a future post. </p><p>It has been pointed out to me that Leopard Webkit has not made an update in over three months, so hopefully Tobias is still doing okay with his port.</p></div>
+ </summary>
+ <updated>2016-01-23T06:02:00Z</updated>
+ <author>
+ <name>ClassicHasClass</name>
+ <email>noreply@blogger.com</email>
+ </author>
+ <source>
+ <id>tag:blogger.com,1999:blog-1015214236289077798</id>
+ <category term="security"/>
+ <category term="mozilla"/>
+ <category term="anfscd"/>
+ <category term="qte"/>
+ <category term="transition"/>
+ <category term="PowerPC"/>
+ <category term="shame"/>
+ <category term="mte"/>
+ <category term="ppc970"/>
+ <category term="applesnark"/>
+ <category term="judgment day"/>
+ <category term="shoutout"/>
+ <category term="parity"/>
+ <category term="tenfourfoxbox"/>
+ <category term="68k"/>
+ <category term="classilla"/>
+ <category term="intel"/>
+ <category term="kubrick"/>
+ <category term="sluggo"/>
+ <category term="statistics"/>
+ <category term="thereisnoxulonlywebextensions"/>
+ <author>
+ <name>ClassicHasClass</name>
+ <email>noreply@blogger.com</email>
+ </author>
+ <link href="http://tenfourfox.blogspot.com/" rel="alternate" type="text/html"/>
+ <link href="http://tenfourfox.blogspot.com/feeds/posts/default?alt=rss" rel="self" type="application/rss+xml"/>
+ <subtitle>What's new in TenFourFox, the Mozilla browser for Power Macs.</subtitle>
+ <title>TenFourFox Development</title>
+ <updated>2016-01-26T18:31:40Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://blog.mozilla.org/netpolicy/?p=907</id>
+ <link href="https://blog.mozilla.org/netpolicy/2016/01/22/addressing-the-chilling-effect-of-patent-damages/" rel="alternate" type="text/html"/>
+ <title>Addressing the Chilling Effect of Patent Damages</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last year, we unveiled the Mozilla Open Software Patent License as part of our Initiative to help limit the negative impacts that patents have on open source software. While those were an important first step for us, we continue to … <a class="go" href="https://blog.mozilla.org/netpolicy/2016/01/22/addressing-the-chilling-effect-of-patent-damages/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Last year, we unveiled the <a href="https://www.mozilla.org/about/patents/license/">Mozilla Open Software Patent License</a> as part of our <a href="https://www.mozilla.org/about/patents/">Initiative</a> to help limit the negative impacts that patents have on open source software. While those were an important first step for us, we continue to do more. This past Wednesday, Mozilla joined several other tech and software companies in filing an <a href="https://blog.mozilla.org/netpolicy/files/2016/01/Halo-Stryker-Internet-Companies-brief.pdf">amicus brief</a> with the Supreme Court of the United States in the <i>Halo</i> and <i>Stryker</i> cases.</p>
+ <p>In the brief, we urge the Court to limit the availability of treble damages. Treble damages are significant because they greatly increase the amount of money owed if a defendant is found to “willfully infringe” a patent. As a result, many open source projects and technology companies will refuse to look into or engage in discussions about patents, in order to avoid even a remote possibility of willful infringement. This makes it very hard to address the chilling effects that patents can have on open source software development, open innovation, and collaborative efforts.</p>
+ <p>We hope that our brief will help the Court see how this legal standard has affected technology companies and persuade the Court to limit treble damages.</p></div>
+ </content>
+ <updated>2016-01-23T00:17:34Z</updated>
+ <category term="Open Source"/>
+ <category term="patent"/>
+ <category term="United States"/>
+ <author>
+ <name>Elvin Lee</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/netpolicy</id>
+ <link href="http://blog.mozilla.org/netpolicy/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/netpolicy" rel="alternate" type="text/html"/>
+ <subtitle>Mozilla's official blog on open Internet policy initiatives and developments</subtitle>
+ <title>Open Policy &amp; Advocacy</title>
+ <updated>2016-01-25T20:46:35Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/addons/?p=7640</id>
+ <link href="https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/" rel="alternate" type="text/html"/>
+ <title>Add-on Signing Update</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In Firefox 43, we made it a default requirement for add-ons to be signed. This requirement can be disabled by toggling a preference that was originally scheduled to be removed in Firefox 44 for release and beta versions (this preference … <a class="go" href="https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In Firefox 43, we made it a default requirement for add-ons to be signed. This requirement can be disabled by <a href="https://wiki.mozilla.org/Addons/Extension_Signing#FAQ">toggling a preference</a> that was originally scheduled to be removed in Firefox 44 for release and beta versions (this preference will continue to be available in the Nightly, Developer, and ESR Editions of Firefox for the foreseeable future). </p>
+ <p>We are delaying the removal of this preference to Firefox 46 for a couple of reasons: We’re adding a feature in Firefox 45 that allows <a href="https://blog.mozilla.org/addons/2015/12/23/loading-temporary-add-ons/">temporarily loading unsigned restartless add-ons</a> in release, which will allow developers of those add-ons to use Firefox for testing, and we’d like this option to be available when we remove the preference. We also want to ensure that developers have adequate time to finish the transition to signed add-ons. </p>
+ <p>The <a href="https://wiki.mozilla.org/Addons/Extension_Signing#Timeline">updated timeline</a> is available on the signing wiki, and you can look up <a href="https://wiki.mozilla.org/RapidRelease/Calendar">release dates for Firefox versions</a> on the releases wiki. Signing will be mandatory in the beta and release versions of Firefox from 46 onwards, at which point unbranded builds based on beta and release will be provided for testing.</p></div>
+ </content>
+ <updated>2016-01-22T22:40:59Z</updated>
+ <category term="developers"/>
+ <category term="general"/>
+ <category term="releases"/>
+ <author>
+ <name>Kev Needham</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/addons</id>
+ <link href="https://blog.mozilla.org/addons/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/addons" rel="alternate" type="text/html"/>
+ <title>Mozilla Add-ons Blog</title>
+ <updated>2016-01-25T20:46:40Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://coopcoopbware.tumblr.com/post/137832199980</id>
+ <link href="http://coopcoopbware.tumblr.com/post/137832199980" rel="alternate" type="text/html"/>
+ <title>RelEng &amp; RelOps Weekly Highlights - January 22, 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p/><figure class="alignright"><a href="https://www.flickr.com/photos/proud2bcan8dn/1150097247/in/faves-19934681@N00/" target="_blank" title="wine-and-pies"><img alt="wine-and-pies" src="https://farm2.staticflickr.com/1216/1150097247_2f11cb4c2d_z.jpg?zz=1" width="200px"/></a>Releng: drinkin’ wine and makin’ pies.</figure>It’s encouraging to see more progress this week on both the build/release promotion and TaskCluster migration fronts, our two major efforts for this quarter.<p/>
+
+ <p><b>Modernize infrastructure:</b></p>
+ <p>In a continuing effort to enable faster, more reliable, and more easily-run tests for TaskCluster components, Dustin landed support for an in-memory, credential-free mock of Azure Table Storage in the <a href="https://www.npmjs.com/package/azure-entities" target="_blank">azure-entities</a> package. Together with the fake mock support he added to <a href="https://github.com/djmitche/taskcluster-lib-testing" target="_blank">taskcluster-lib-testing</a>, this allows tests for components like taskcluster-hooks to run without network access and without the need for any credentials, substantially decreasing the barrier to external contributions.</p>
+
+ <p>All release promotion tasks are now signed by default. Thanks to Rail for his work here to help improve verifiability and chain-of-custody in our upcoming release process. (<a href="https://bugzil.la/1239682" target="_blank">https://bugzil.la/1239682</a>)
+ Beetmover has been spotted in the wild! Jordan has been working on this new tool as part of our release promotion project. Beetmover helps move build artifacts from one place to another (generally between S3 buckets these days), but can also be extended to perform validation actions inline, e.g. checksums and anti-virus. (<a href="https://bugzil.la/1225899" target="_blank">https://bugzil.la/1225899</a>)</p>
+
+ <p>Dustin configured the “desktop-test” and “desktop-build” docker images to build automatically on push. That means that you can modify the Dockerfile under `testing/docker`, push to try, and have the try job run in the resulting image, all without pushing any images. This should enable much quicker iteration on tweaks to the docker images. Note, however, that updates to the base OS images (ubuntu1204-build and centos6-build) still require manual pushes.</p>
+
+ <p>Mark landed Puppet code for base windows 10 support including secrets and ssh keys management.</p>
+
+ <p><b>Improve CI pipeline:</b></p>
+
+ <p>Vlad and Amy repurposed 10 Windows XP machines as Windows 7 to improve the wait times in that test pool (<a href="https://bugzil.la/1239785" target="_blank">https://bugzil.la/1239785</a>)
+ Armen and Joel have been working on porting the Gecko tests to run under TaskCluster, and have narrowed the failures down to the single digits. This puts us on-track to enable Linux debug builds and tests in TaskCluster as the canonical build/test process.</p>
+
+ <p><b>Release:</b></p>
+
+ <p>Ben finished up work on enhanced Release Blob validation in Balrog (<a href="https://bugzil.la/703040" target="_blank">https://bugzil.la/703040</a>), which makes it much more difficult to enter bad data into our update server.</p>
+
+ <p>You may recall Mihai, our former intern who <a href="http://coopcoopbware.tumblr.com/post/133490693210/welcome-back-mihai" target="_blank">we just hired back in November</a>. Shortly after joining the team, he jumped into the <a href="https://wiki.mozilla.org/ReleaseEngineering/Releaseduty" target="_blank">releaseduty</a> rotation to provide much-needed extra bandwidth. The learning curve here is steep, but over the course of the Firefox 44 release cycle, he’s taken on more and more responsibility. He’s even volunteered to do releaseduty for the Firefox 45 release cycle as well. Perhaps the most impressive thing is that he’s also taken the time to update (or write) the releaseduty docs so that the next person who joins the rotation will be that much further ahead of the game. Thanks for your hard work here, Mihai!</p>
+
+ <p><b>Operational:</b></p>
+
+ <p>Hal did some cleanup work to remove unused mozharness configs and directories from the build mercurial repos. These resources have long-since moved into the main mozilla-central tree. Hopefully this will make it easier for contributors to find the canonical copy! (<a href="https://bugzil.la/1239003" target="_blank">https://bugzil.la/1239003</a>)</p>
+
+ <p><b>Hiring:</b></p>
+
+ <p>We’re still hiring for a full-time <a href="https://careers.mozilla.org/position/oi8b2fwn" target="_blank">Build &amp; Release Engineer</a>, and we are still accepting applications for <a href="https://careers.mozilla.org/position/ofA51fwF" target="_blank">interns for 2016</a>. Come join us!</p>
+
+ <p>Well, I don’t know about you, but all that hard work makes me hungry for pie. See you next week!</p></div>
+ </summary>
+ <updated>2016-01-22T20:49:38Z</updated>
+ <category term="Mozilla"/>
+ <category term="releng"/>
+ <category term="highlights"/>
+ <source>
+ <id>http://coopcoopbware.tumblr.com/</id>
+ <author>
+ <name>Chris Cooper</name>
+ </author>
+ <link href="http://coopcoopbware.tumblr.com/" rel="alternate" type="text/html"/>
+ <link href="http://coopcoopbware.tumblr.com/tagged/Mozilla/rss" rel="self" type="application/rss+xml"/>
+ <title>Five different types of fried cheese</title>
+ <updated>2016-01-22T21:00:12Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/foundation-demos-january-22-2016/</id>
+ <link href="https://air.mozilla.org/foundation-demos-january-22-2016/" rel="alternate" type="text/html"/>
+ <title>Foundation Demos January 22 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Foundation Demos January 22 2016" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/1c/a0/1ca0b9b2609cdd4e6e3577a8c3df8cfc.jpg" width="160"/>
+ Mozilla Foundation Demos January 22 2016
+ </p></div>
+ </summary>
+ <updated>2016-01-22T18:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/sumo/?p=3667</id>
+ <link href="https://blog.mozilla.org/sumo/2016/01/22/whats-up-with-sumo-22nd-january/" rel="alternate" type="text/html"/>
+ <title>What’s up with SUMO – 22nd January</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hello, SUMO Nation! The third week of the new year is already behind us. Time flies when you’re not paying attention… What are you going to do this weekend? Let us know in the comments, if you feel like sharing … <a class="go" href="https://blog.mozilla.org/sumo/2016/01/22/whats-up-with-sumo-22nd-january/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Hello, SUMO Nation!</strong></p>
+ <p><a href="http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png"><img alt="sumo_logo" class="aligncenter size-full wp-image-3670" height="387" src="http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png" width="383"/></a>The third week of the new year is already behind us. Time flies when you’re not paying attention… What are you going to do this weekend? Let us know in the comments, if you feel like sharing :-) I hope to be in the mountains, getting some fresh (bracing) air, and enjoying nature.</p>
+ <h3><strong class="username">Welcome, new contributors!<br/>
+ </strong></h3>
+ <ul>
+ <li class="author">
+ <div class="author"><a class="username" href="https://support.mozilla.org/user/johnmwc2" target="_blank">johnmwc2</a></div>
+ </li>
+ <li class="author"><a class="author-name" href="https://support.mozilla.org/user/myanesp" target="_blank">myanesp</a></li>
+ <li class="author"><a class="author-name" href="https://support.mozilla.org/user/Harish.A" target="_blank">Harish.A</a></li>
+ <li class="author"><a class="author-name" href="https://support.mozilla.org/user/hoolibob" target="_blank">hoolibob</a></li>
+ <li class="author"><a class="author-name" href="https://support.mozilla.org/user/Meteoro890" target="_blank">Meteoro890</a></li>
+ </ul>
+ <div class="author">If you just joined us, don’t hesitate – come over and <a href="https://support.mozilla.org/forums/buddies" target="_blank">say “hi” in the forums!</a></div>
+ <div class="author"/>
+ <div class="author">
+ <h3><strong>Contributors of the week<br/>
+ </strong></h3>
+ <ul>
+ <li><span class="author-a-z74z1rz89z69z76zbz72zz69zz67z9z82zniz71z"><a href="https://support.mozilla.org/user/safwan.rahman" target="_blank">Safwan</a> for his work on the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=619284" target="_blank">draft feature for l10n / KB editing</a> – rock on!</span></li>
+ <li><a href="https://support.mozilla.org/user/artist" target="_blank">Artist</a> and <a href="https://support.mozilla.org/user/pollti" target="_blank">Pollti</a> for their the work on updating important articles for Focus with limited time – woot!</li>
+ </ul>
+ <div class="" id="magicdomid64">
+ <p><strong><span style="text-decoration: underline;">We salute you!</span></strong></p>
+ </div>
+ <div class="author">Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can <a href="https://support.mozilla.org/forums/buddies/711364?last=65670" target="_blank">nominate them for the Buddy of the Month!</a></div>
+ <div class="author"/>
+ </div>
+ <h3><strong>Most recent SUMO Community meeting</strong></h3>
+ <ul>
+ <li><a href="https://public.etherpad-mozilla.org/p/sumo-2016-01-18" target="_blank">You can read the notes here</a> (most of the staff members were AFK due to MLK Day in the US) and see the video on our <a href="https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos" target="_blank">YouTube channel</a> and <a href="https://air.mozilla.org/search/?q=sumo" target="_blank">at AirMozilla</a>.<del> </del><del><br/>
+ </del></li>
+ <li><strong>IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: <a href="https://support.mozilla.org/en-US/forums/contributors/711752?last=67873">(Monday) Community Meetings in 2016</a>.</strong></li>
+ </ul>
+ <h3><strong>The next SUMO Community meeting… </strong></h3>
+ <ul>
+ <li style="text-align: left;">is happening on <a href="https://public.etherpad-mozilla.org/p/sumo-2016-01-25" target="_blank">Monday the 25th – join us</a>!</li>
+ <li style="text-align: left;"><strong>Reminder: if you want to add a discussion topic to the upcoming meeting agenda:</strong>
+ <ul>
+ <li style="text-align: left;">Start a thread in the <a href="https://support.mozilla.org/forums/contributors" target="_blank">Community Forums</a>, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).</li>
+ <li style="text-align: left;">Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).</li>
+ <li style="text-align: left;">If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.</li>
+ </ul>
+ </li>
+ </ul>
+ <h3><strong class="author-g-ivsra51ph44x461i">Developers</strong></h3>
+ <ul>
+ <li><a href="http://edwin.mozilla.io/t/sumo" target="_blank">You can see the current state of the backlog our developers are working on here</a>.</li>
+ <li><a href="https://public.etherpad-mozilla.org/p/sumo-p-2016-01-21" target="_blank">The latest SUMO Platform meeting notes can be found here</a>.</li>
+ <li>Interested in learning how Kitsune (the engine behind SUMO) works? <a href="http://kitsune.readthedocs.org/" target="_blank">Read more about it here</a> and <a href="https://github.com/mozilla/kitsune/" target="_blank">fork it on GitHub</a>!</li>
+ <li>We have a new link for promoting contributions to Kitsune’s code. Please use <strong>http://mzl.la/SUMOdev</strong> whenever you want to show interested people to see what Kitsune is all about – thanks!</li>
+ </ul>
+ <p><a href="http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png"><img alt="mission_developers" class="aligncenter size-full wp-image-3668" height="406" src="http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png" width="437"/></a></p>
+ <h3><strong>Social</strong></h3>
+ <ul>
+ <li>Next week, there will be a kick-off meeting for the rethinking of Mozilla’s general support strategy through social networks. <a href="https://support.mozilla.org/user/Madasan" target="_blank">Are you interested in taking part? Let Madalina know!</a></li>
+ </ul>
+ <h3><strong>Community</strong></h3>
+ <ul>
+ <li>The NDA process and list is currently being reworked under the leadership of the Participation Team. Expect to see messaging on this subject in the coming days.</li>
+ <li>
+ <div class="title"><strong><a href="https://support.mozilla.org/forums/contributors/711729?last=67763">IMPORTANT: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.</a></strong></div>
+ </li>
+ <li>Are you going to FOSDEM next week? Would you like to have a small SUMO-meetup? <a href="https://support.mozilla.org/user/vesper" target="_blank">Let me know</a>!</li>
+ <li>
+ <div class="title">Ongoing reminder: if you think you can benefit from getting <a href="https://wiki.mozilla.org/Community_Hardware" target="_blank">a second-hand device</a> to help you with contributing to SUMO, you know where to find us.</div>
+ </li>
+ </ul>
+ <p><a href="http://blog.mozilla.org/sumo/files/2016/01/hero_support.png"><img alt="hero_support" class="aligncenter size-full wp-image-3669" height="383" src="http://blog.mozilla.org/sumo/files/2016/01/hero_support.png" width="367"/></a></p>
+ <div class="">
+ <div class="" id="magicdomid83">
+ <h3><strong class="author-g-ivsra51ph44x461i">Localization</strong></h3>
+ </div>
+ </div>
+ <div class="" id="magicdomid95">
+ <ul>
+ <li>You can <a href="https://support.mozilla.org/forums/l10n-forum/711781" target="_blank">read more about the recent “infrequent contributor survey” in this thread</a>. In short: the good news is that we’re doing a good job at making it easy enough for everyone to contribute. The bad news – we’re not doing enough to make sure they know what to do after their first contribution. Expect some changes in the messaging for first-time contributors to the KB :-)</li>
+ <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1012384" target="_blank">Our magical l10n dashboards keep being magical</a> ;-) Thank you for your patience. If you see any discrepancies between the number of localized articles and the percentage shown in the bar, file a bug!</li>
+ </ul>
+ </div>
+ <div class="" id="magicdomid75">
+ <h3><strong>Firefox<br/>
+ </strong></h3>
+ <ul>
+ <li><strong>for Android</strong>
+ <ul>
+ <li><a href="https://support.mozilla.org/forums/contributors/711712?last=67653">Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions</a>.</li>
+ <li>
+ <div class="title"><a href="https://support.mozilla.org/forums/contributors/711718?last=67822">Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions</a> with everyone in the forum.</div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li><strong>for Desktop</strong>
+ <ul>
+ <li>Heads up – next week should be release week! Keep your eyes peeled ;-)</li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li><strong>for iOS</strong>
+ <div class="" id="magicdomid85">
+ <ul class="list-bullet1">
+ <li><span class="author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj">No news from the world of Firefox for iOS this week.</span></li>
+ </ul>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <p>Thank you for reading all the way down here… More to come next week! You know where to find us, so see you around – keep rocking the open &amp; helpful web!</p></div>
+ </content>
+ <updated>2016-01-22T17:43:56Z</updated>
+ <category term="General"/>
+ <author>
+ <name>Michał</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/sumo</id>
+ <link href="https://blog.mozilla.org/sumo/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/sumo" rel="alternate" type="text/html"/>
+ <subtitle>SUpport MOzilla's official blog - rocking the helpful web since 2008!</subtitle>
+ <title>SUMO Blog</title>
+ <updated>2016-01-25T09:31:47Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/bay-area-rust-meetup-january-2016/</id>
+ <link href="https://air.mozilla.org/bay-area-rust-meetup-january-2016/" rel="alternate" type="text/html"/>
+ <title>Bay Area Rust Meetup January 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Bay Area Rust Meetup January 2016" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/87/4f/874f4abef76f55213d50e43d6417ed99.png" width="160"/>
+ Bay Area Rust meetup for January 2016. Topics TBD.
+ </p></div>
+ </summary>
+ <updated>2016-01-22T03:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:49Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://blog.lizardwrangler.com/?p=3953</id>
+ <link href="http://blog.lizardwrangler.com/2016/01/22/honored-to-participate-in-new-un-panel-on-womens-economic-empowerment/" rel="alternate" type="text/html"/>
+ <title>Honored to Participate in New UN Panel on Women’s Economic Empowerment</title>
+ <summary>Women’s economic empowerment is necessary for many reasons. It is necessary to bring health, safety and opportunity to half of humanity. It is necessary to bring investment and health to families and communities. It is necessary to unlock economic growth and build more stable societies. Today the UN Secretary General Ban Ki-moon launched the first […]</summary>
+ <updated>2016-01-22T02:45:58Z</updated>
+ <category term="Mozilla"/>
+ <author>
+ <name>Mitchell Baker</name>
+ </author>
+ <source>
+ <id>http://blog.lizardwrangler.com</id>
+ <link href="http://blog.lizardwrangler.com/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://blog.lizardwrangler.com" rel="alternate" type="text/html"/>
+ <title>Mitchell's Blog</title>
+ <updated>2016-01-22T03:00:15Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://blog.mozilla.org/webdev/?p=4082</id>
+ <link href="https://blog.mozilla.org/webdev/2016/01/21/beer-and-tell-january-2016/" rel="alternate" type="text/html"/>
+ <title>Beer and Tell – January 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call “Beer and Tell”. There’s a wiki page available with a list of the presenters, … <a class="go" href="https://blog.mozilla.org/webdev/2016/01/21/beer-and-tell-january-2016/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call “Beer and Tell”.</p>
+ <p>There’s a <a href="https://wiki.mozilla.org/Webdev/Beer_And_Tell/January_2016">wiki page available</a> with a list of the presenters, as well as links to their presentation materials. There’s also a <a href="https://air.mozilla.org/webdev-beer-and-tell-january-2016/">recording available</a> courtesy of Air Mozilla.</p>
+ <h3>shobson: CSS-Only Disco Ball</h3>
+ <p>First up was <a href="https://mozillians.org/en-US/u/stephaniehobson/">shobson</a> with a cool demo of an <a href="http://codepen.io/stephaniehobson/pen/ZGZBVW?editors=110">animated disco ball made entirely with CSS</a>. The demo uses a repeated radial gradient for the background, and linear gradients plus a border radius for the disco ball itself. The demo was made for use in shobson’s <a href="https://www.youtube.com/watch?v=7poVasAQjos">WordCamp talk</a> about debugging CSS. A <a href="http://stephaniehobson.ca/wordpress/2015/08/15/how-to-debug-css/">blog post</a> with notes from the talk is available as well.</p>
+ <h3>craigcook: Proton – A CSS Framework for Prototyping</h3>
+ <p>Next was <a href="https://mozillians.org/en-US/u/craigcook/">craigcook</a>, who presented <a href="http://craigcook.github.io/proton/">Proton</a>. It’s a CSS framework that is intentionally ugly to encourage use for prototypes only. Unlike other CSS frameworks, the temptation to reuse the classes from the framework in your final page doesn’t occur, which helps avoid the presentational classes that plague sites built using a framework normally.</p>
+ <p>Proton’s website includes an overview of the layout and components provided, as well as examples of prototypes made using the framework.</p>
+ <hr/>
+ <p>If you’re interested in attending the next Beer and Tell, sign up for the <a href="https://lists.mozilla.org/listinfo/dev-webdev">dev-webdev@lists.mozilla.org mailing list</a>. An email is sent out a week beforehand with connection details. You could even add yourself to the wiki and show off your side-project!</p>
+ <p>See you next month!</p></div>
+ </content>
+ <updated>2016-01-21T18:56:46Z</updated>
+ <category term="Beer and Tell"/>
+ <author>
+ <name>Michael Kelly</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/webdev</id>
+ <link href="https://blog.mozilla.org/webdev/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/webdev" rel="alternate" type="text/html"/>
+ <subtitle>For make benefit of glorious tubes</subtitle>
+ <title>Mozilla Web Development</title>
+ <updated>2016-01-21T19:01:37Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/community/?p=2287</id>
+ <link href="http://blog.mozilla.org/community/2016/01/21/this-month-at-mozilla/" rel="alternate" type="text/html"/>
+ <title>This Month at Mozilla</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A lot of exciting things are happening with Participation at Mozilla this month. Here’s a quick round-up of some of the things that are going on! Mozillians Profiles Got a Facelift: Since the start of this year, the Participation Infrastructure … <a class="go" href="http://blog.mozilla.org/community/2016/01/21/this-month-at-mozilla/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p style="text-align: center;"><em>A lot of exciting things are happening with Participation at Mozilla this month. Here’s a quick round-up of some of the things that are going on!</em></p>
+ <h3><b>Mozillians Profiles Got a Facelift: </b></h3>
+ <p>Since the start of this year, the Participation Infrastructure team has had a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs.</p>
+ <p>Their first target for 2016 was to improve the UX on the profile edit interface.</p>
+ <p><a href="https://blog.mozilla.org/community/files/2016/01/new-profile-768x548.png"><img alt="new-profile-768x548" class="aligncenter wp-image-2288 size-large" height="428" src="https://blog.mozilla.org/community/files/2016/01/new-profile-768x548-600x428.png" width="600"/></a><br/>
+ ”We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.”</p>
+ <p>Read the full blog <a href="http://pierros.papadeas.gr/?p=447">here</a>!</p>
+ <h3><b>There are New Ways to Bring Your Design Skills to Mozilla: </b></h3>
+ <p>Are you a passionate designer looking to contribute to Mozilla? You’ll be happy to hear there is a new way to contribute to the many design projects around Mozilla! Submit issues, find collaborators, and work on open source projects by getting involved!</p>
+ <ul>
+ <li>You can check out the projects looking for help, or submit your own on the <a href="https://github.com/mozilla/Community-Design/issues">GitHub Repo</a>.</li>
+ <li><a href="https://docs.google.com/a/mozilla.com/forms/d/1Tw3Mw_CMiqcIQrJF7TB1yIETGYec__NiVhaSz0CAaE8/viewform">Sign-up to the mailing list</a> to be added as a contributor to the Repo, added to the regular meeting list, and to get emails about GitHub trainings and more!</li>
+ <li>And read<a href="http://elioqoshi.me/en/2016/01/mozilla-community-design-kickoff/"> a blogpost</a> about the project and its first meeting.</li>
+ </ul>
+ <p>Learn more <a href="https://discourse.mozilla-community.org/c/community-design">here</a>.</p>
+ <h3><b>136 Volunteers Are Going to Singapore: </b></h3>
+ <p>This weekend 136 participation leaders from all over the world are<a href="https://twitter.com/thephoenixbird/status/690181985222926336"> heading to Singapore</a> to undergo two days of<a href="https://wiki.mozilla.org/Participation/Global_Gatherings_2015"> leadership training</a> to develop the skills, knowledge and attitude to lead Participation in 2016.</p>
+ <div class="wp-caption aligncenter" id="attachment_2289" style="width: 609px;"><a href="https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg"><img alt="Photo credit @thephoenixbird on Twitter" class="wp-image-2289 size-full" height="337" src="https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg" width="599"/></a><p class="wp-caption-text">Photo credit @<a href="https://twitter.com/thephoenixbird/status/690181985222926336" target="_blank">thephoenixbird</a> on Twitter</p></div>
+ <p>If you know someone attending don’t forget to share your questions and goals with them, and follow along over the weekend by watching the hashtag<a href="https://twitter.com/search?q=%23mozsummit"> #MozSummit</a>.</p>
+ <p>Stay tuned after the event for a debrief of the weekend!</p>
+ <h3><b>Friday’s Plenary from Mozlando is now public on Air Mozilla: </b></h3>
+ <p>If you’re interested in learning more about all the exciting new features, projects, and plans that were presented at Mozlando look no further! You can now watch the final plenary sessions on Air Mozilla (it’s a lot of fun so I highly recommend it!) <a href="https://air.mozilla.org/channels/mozlando/">here</a>.</p>
+ <p>Share your questions and comments on discourse <a href="https://discourse.mozilla-community.org/t/friday-plenary-from-mozlando-now-public-on-air-mozilla/6659">here</a>.</p>
+ <p><em>Look forward to more updates like these in the coming months!</em></p></div>
+ </content>
+ <updated>2016-01-21T17:58:33Z</updated>
+ <category term="Participation"/>
+ <category term="Air Mozilla"/>
+ <category term="contributor"/>
+ <category term="MonthlyUpdate"/>
+ <category term="MozParticipation"/>
+ <author>
+ <name>Lucy Harris</name>
+ </author>
+ <source>
+ <id>http://blog.mozilla.org/community</id>
+ <link href="http://blog.mozilla.org/community/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://blog.mozilla.org/community" rel="alternate" type="text/html"/>
+ <subtitle>News and notes from and for the Mozilla community.</subtitle>
+ <title>about:community</title>
+ <updated>2016-01-25T16:31:42Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://blog.mozilla.org/netpolicy/?p=912</id>
+ <link href="https://blog.mozilla.org/netpolicy/2016/01/21/prioritizing-privacy-good-for-business/" rel="alternate" type="text/html"/>
+ <title>Prioritizing privacy: Good for business</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This was originally posted at StaySafeOnline.org in advance of Data Privacy Day. Data Privacy Day – which arrives in just a week – is a day designed to raise awareness and promote best practices for privacy and data protection. It … <a class="go" href="https://blog.mozilla.org/netpolicy/2016/01/21/prioritizing-privacy-good-for-business/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em>This was originally posted at <a href="http://staysafeonline.org/blog/prioritizing-privacy-good-for-business/">StaySafeOnline.org</a> in advance of <a href="http://www.staysafeonline.org/data-privacy-day/events/">Data Privacy Day</a>.</em></p>
+ <p>Data Privacy Day – which arrives in just a week – is a day designed to raise awareness and promote best practices for privacy and data protection. It is a day that looks to the future and recognizes that we can and should do better as an industry. It reminds us that we need to focus on the importance of having the trust of our users.</p>
+ <p>We seek to build trust so we can collectively create the Web our users want – the Web we all want.</p>
+ <p>That Web is based on relationships, the same way that the offline world is. When I log in to a social media account, schedule a grocery delivery online or browse the news, I’m relying on those services to respect my data. While companies are innovating their products and services, they need to be innovating on user trust as well, which means designing to address privacy concerns – and making smart choices (early!) about how to manage data.</p>
+ <p>A <a href="http://www.pewinternet.org/2016/01/14/privacy-and-information-sharing/">recent survey by Pew</a> highlights the thought that each user puts into their choices – and the contextual considerations in various scenarios. They concluded that many participants were annoyed and uncertain by how their information was used, and they are choosing not to interact with those services that they don’t trust. This is a clear call to businesses to foster more trust with their users, which starts by making sure that there are people empowered within your company to ask the right questions: what do your users expect? What data do you need to collect? How can you communicate about that data collection? How should you protect their data? Is holding on to data a risk, or should you delete it?</p>
+ <p>It’s crucial that users are a part of this process – consumers’ data is needed to offer cool, new experiences and a user needs to trust you in order to choose to give you their data. Pro-user innovation can’t happen in a vacuum – the system as it stands today isn’t doing a good job of aligning user interests with business incentives. Good user decisions can be good business decisions, but only if we create thoughtful user-centric products in a way that closes the feedback loop so that positive user experiences are rewarded with better business outcomes.</p>
+ <p>Not prioritizing privacy in product decisions will impact the bottom line. From the many data breaches over the last few years to increasing evidence of eroding trust in online services, data practices are proving to be the dark horse in the online economy. When a company loses user trust, whether on privacy or <a href="https://medium.com/@davidamerland/the-cost-of-losing-trust-97d764a1e696">anything else</a>, it loses customers and the potential for growth.</p>
+ <p>Privacy means different things to different people but what’s clear is that people make decisions about the products and services that they use based on how those companies choose to treat their users. Over this time, the Internet ecosystem has evolved, as has its relationship with users – and some aspects of this evolution threaten the trust that lies at the heart of that relationship. Treating a user as a target – whether for an ad, purchase, or service – undermines the trust and relationship that a business may have with a consumer.</p>
+ <p>The solution is not to abandon the massive value that robust data can bring to users, but rather, to collect and use data leanly, productively and transparently. At Mozilla, we have created a strong set of internal data practices to ensure that data decisions align with our <a href="https://www.mozilla.org/en-US/privacy/principles/">privacy principles</a>. As an industry, we need to keep users at the center of the product vision rather than viewing them as targets of the product – it’s the only way to stay true to consumers and deliver the best, most trusted experiences possible.</p>
+ <p>Want to hear more about how businesses can build relationships with their users by focusing on trust and privacy? We’re holding events in Washington, D.C., and <a href="https://www.eventbrite.com/e/january-privacy-lab-privacy-for-startups-tickets-19849219550?aff=es2">San Francisco</a> with some of our partners to talk about it. Please join us!</p></div>
+ </content>
+ <updated>2016-01-21T17:42:00Z</updated>
+ <category term="Data Governance"/>
+ <category term="privacy"/>
+ <category term="Trust"/>
+ <author>
+ <name>Heather West</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/netpolicy</id>
+ <link href="http://blog.mozilla.org/netpolicy/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/netpolicy" rel="alternate" type="text/html"/>
+ <subtitle>Mozilla's official blog on open Internet policy initiatives and developments</subtitle>
+ <title>Open Policy &amp; Advocacy</title>
+ <updated>2016-01-25T20:46:35Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>https://tacticalsecret.com/tag/mozilla/rss/9c39ad13-14ae-4456-a84e-13612637d832</id>
+ <link href="https://tacticalsecret.com/issuance-rate-for-lets-encrypt/" rel="alternate" type="text/html"/>
+ <title>Issuance Rate for Let's Encrypt</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Gathering data from <a href="https://github.com/jcjones/letsencrypt_statistics">Certificate Transparency logs</a>, here's a snapshot in time of Let's Encrypt's certificate issuance rate per minute from 7-21 January 2016. On 20 January, DreamHost launched formal support for Let's Encrypt, which coincides with a rate increase.</p>
+
+ <p>Note: This is mostly an experimental post with embedding charts; I've</p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Gathering data from <a href="https://github.com/jcjones/letsencrypt_statistics">Certificate Transparency logs</a>, here's a snapshot in time of Let's Encrypt's certificate issuance rate per minute from 7-21 January 2016. On 20 January, DreamHost launched formal support for Let's Encrypt, which coincides with a rate increase.</p>
+
+ <p>Note: This is mostly an experimental post with embedding charts; I've more data in the queue.</p>
+
+ <h3>Let's Encrypt Issuance Rate per Minute</h3>
+
+ <div id="rate_hours"/></div>
+ </content>
+ <updated>2016-01-21T17:07:25Z</updated>
+ <category term="letsencrypt"/>
+ <category term="mozilla"/>
+ <category term="charts"/>
+ <author>
+ <name>James 'J.C.' Jones</name>
+ </author>
+ <source>
+ <id>https://tacticalsecret.com/</id>
+ <link href="https://tacticalsecret.com/" rel="alternate" type="text/html"/>
+ <link href="https://tacticalsecret.com/tag/mozilla/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>On a mission to solve information security issues for the whole Internet. That, and whatever else comes up.</subtitle>
+ <title>mozilla - The Internet of Secure Things</title>
+ <updated>2016-01-21T17:16:43Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/web-qa-weekly-meeting-20160121/</id>
+ <link href="https://air.mozilla.org/web-qa-weekly-meeting-20160121/" rel="alternate" type="text/html"/>
+ <title>Web QA Weekly Meeting, 21 Jan 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Web QA Weekly Meeting" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png" width="160"/>
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ </p></div>
+ </summary>
+ <updated>2016-01-21T17:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:49Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://soledadpenades.com/?p=6379</id>
+ <link href="http://soledadpenades.com/2016/01/21/no-more-tap-tap-tap-sounds-yay/" rel="alternate" type="text/html"/>
+ <link href="https://flattr.com/submit/auto?user_id=8399&amp;popout=1&amp;url=http%3A%2F%2Fsoledadpenades.com%2F2016%2F01%2F21%2Fno-more-tap-tap-tap-sounds-yay%2F&amp;language=en_GB&amp;category=text&amp;title=No+more+tap+tap+tap+sounds%3A+yay%21&amp;description=A+few+days+ago+the+fantastic+Fritz+from+the+Netherlands+told+me+that+my+Hands+On+Web+Audio+slides+had+stopping+working+and+there+was+no+sound+coming+out+from...&amp;tags=bugs%2Cfirefox%2Cjavascript%2Cmozilla%2Cweb+audio%2Cblog" rel="payment" title="Flattr this!" type="text/html"/>
+ <title>No more tap tap tap sounds: yay!</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A few days ago the fantastic Fritz from the Netherlands told me that my Hands On Web Audio slides had stopping working and there was no sound coming out from them in Firefox. @supersole oh noes! I reopened your slides: https://t.co/SO35UfljMI and it doesn't work in @firefox anymore 😱 (works in chrome though.. 😢) — … <a class="more-link" href="http://soledadpenades.com/2016/01/21/no-more-tap-tap-tap-sounds-yay/">Continue reading <span class="screen-reader-text">No more tap tap tap sounds: yay!</span> <span class="meta-nav">→</span></a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>A few days ago the fantastic Fritz from the Netherlands told me that my <a href="http://soledadpenades.com/files/t/2015_howa/">Hands On Web Audio slides</a> had stopping working and there was no sound coming out from them in Firefox.</p>
+ <blockquote class="twitter-tweet" width="550"><p dir="ltr" lang="en"><a href="https://twitter.com/supersole">@supersole</a> oh noes! I reopened your slides: <a href="https://t.co/SO35UfljMI">https://t.co/SO35UfljMI</a> and it doesn't work in <a href="https://twitter.com/firefox">@firefox</a> anymore <img alt="&#x1F631;" class="wp-smiley" src="http://s.w.org/images/core/emoji/72x72/1f631.png" style="height: 1em;"/> (works in chrome though.. <img alt="&#x1F622;" class="wp-smiley" src="http://s.w.org/images/core/emoji/72x72/1f622.png" style="height: 1em;"/>)</p>
+ <p>— Boring Stranger (@fritzvd) <a href="https://twitter.com/fritzvd/status/686481500611735552">January 11, 2016</a></p></blockquote>
+ <p/>
+ <p>Which is pretty disappointing for a slide deck that is built to teach you about Web Audio!</p>
+ <p>I noticed that the issue was only on the introductory slide which uses a modified version of Stuart Memo’s <a href="https://blog.stuartmemo.com/thx-deep-note-in-javascript/">fantastic THX sound recreation</a>-the rest of slides did play sound.</p>
+ <p>I built <a href="http://sole.github.io/test_cases/web_audio/thx_cutting_out/">an isolated test case</a> <small><a href="https://github.com/sole/test_cases/tree/gh-pages/web_audio/thx_cutting_out">(source)</a></small> that used a parameter-capable version of the THX sound code, just in case the issue depended on the number of oscillators, and submitted this funnily titled bug to the Web Audio component: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1240054">Entirely Web Audio generated sound cuts out after a little while, or emits random tap tap tap sounds then silence</a>.</p>
+ <p>I can happily confirm that the bug has been fixed in Nightly and the fix will hopefully be “uplifted” to DevEdition very soon, as it was due to a regression.</p>
+ <p><a href="https://paul.cx/">Paul Adenot</a> (who works in Web Audio and is a Web Audio spec editor, amongst a couple tons of other cool things) was really excited about the bug, saying it was very edge-casey! Yay! And he also explained what did actually happen in lay terms: “you’d have to have a frequency that goes down very very slowly so that the FFT code could not keep up”, which is what the THX sound is doing with the filter frequency automation.</p>
+ <p>I want to thank both Fritz for spotting this out and letting me know and also Stuart for sharing his THX code. It’s amazing what happens when you put stuff on the net and lots of different people use it in different ways and configurations. Together we make everything more robust <img alt=":-)" class="wp-smiley" src="http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png" style="height: 1em;"/></p>
+ <p>Of course also sending thanks to Paul and Ben for identifying and fixing the issue so fast! It’s not been even a week! Woohoo!</p>
+ <p>Well done everyone! <img alt="&#x1F44F;" class="wp-smiley" src="http://s.w.org/images/core/emoji/72x72/1f44f.png" style="height: 1em;"/><img alt="&#x1F3FC;" class="wp-smiley" src="http://s.w.org/images/core/emoji/72x72/1f3fc.png" style="height: 1em;"/></p>
+ <p><a href="http://soledadpenades.com/?flattrss_redirect&amp;id=6379&amp;md5=57babe624711830f95e4b8fbd6e52c91" target="_blank" title="Flattr"><img alt="flattr this!" src="http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png"/></a></p></div>
+ </content>
+ <updated>2016-01-21T15:49:05Z</updated>
+ <category term="Software"/>
+ <category term="bugs"/>
+ <category term="firefox"/>
+ <category term="javascript"/>
+ <category term="mozilla"/>
+ <category term="web audio"/>
+ <author>
+ <name>sole</name>
+ </author>
+ <source>
+ <id>http://soledadpenades.com</id>
+ <link href="http://soledadpenades.com/tag/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://soledadpenades.com" rel="alternate" type="text/html"/>
+ <subtitle>repeat 4[fd 100 rt 90]</subtitle>
+ <title>mozilla – soledad penadés</title>
+ <updated>2016-01-26T02:46:28Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://pierros.papadeas.gr/?p=447</id>
+ <link href="http://pierros.papadeas.gr/?p=447" rel="alternate" type="text/html"/>
+ <title>Mozillians.org Profile Edit refresh</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Since the start of this year, Participation Infrastructure team has a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs. This will not be an one-time effort. We need to invest technically and programmatically in … <a href="http://pierros.papadeas.gr/?p=447">Continue reading <span class="meta-nav">→</span></a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Since the start of this year, Participation Infrastructure team has a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs. This will not be an one-time effort. We need to invest technically and programmatically in order to deliver a first-class product that will be the foundation for identity management across the Mozilla ecosystem.</p>
+ <p>Mozillians.org is full of functionality as it is today, but is paying the debt of being developed by 5 different teams over the past 5 years. We started simple this time. Updated all core technology pieces, did privacy and security reviews, and started the process of consolidating and modernizing many of the things we do in the site.</p>
+ <p>Our first target was Profile Edit. We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.</p>
+ <p><a href="http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile.png" rel="attachment wp-att-448"><img alt="new-profile" class="aligncenter size-large wp-image-448" height="417" src="http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile-1024x731.png" width="584"/></a>Have a<a href="https://mozillians.org/en-US/user/edit/"> look for yourself </a>and don’t miss the chance to update your profile while you do it!</p>
+ <p><a href="https://mozillians.org/en-US/u/comzeradd/">Nikos</a> (on the front-end), <a href="https://mozillians.org/en-US/u/akatsoulas/">Tasos</a> and <a href="https://mozillians.org/en-US/u/jgiannelos/">Nemo</a> (on the back-end) worked hard to deliver this in a speedy manner (as they are used to), and the end result is a testament to what is coming next on Mozillians.org.</p>
+ <p>Our next target? Groups. Currently it is obscure and unclear what all those settings in groups are, what is the functionality and how teams within Mozilla will be using it. We will be tackling this soon. After that, search and stats will be our attention, in an ongoing effort to fortify mozillians.org functionality. Stay tuned, and as always feel free to <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Participation%20Infrastructure&amp;component=Phonebook">file bugs</a> and <a href="https://github.com/mozilla/mozillians">contribute </a>in the process.</p></div>
+ </content>
+ <updated>2016-01-21T11:41:39Z</updated>
+ <category term="Foss Life"/>
+ <category term="Software"/>
+ <category term="Weblog"/>
+ <category term="computer"/>
+ <category term="foss"/>
+ <category term="mozilla"/>
+ <category term="mozillians"/>
+ <category term="partinfra"/>
+ <author>
+ <name>Pierros Papadeas</name>
+ </author>
+ <source>
+ <id>http://pierros.papadeas.gr</id>
+ <link href="http://pierros.papadeas.gr/?feed=rss2&amp;tag=mozilla" rel="self" type="application/rss+xml"/>
+ <link href="http://pierros.papadeas.gr" rel="alternate" type="text/html"/>
+ <subtitle>whereabouts of a life</subtitle>
+ <title>mozilla – Pierro's Spot</title>
+ <updated>2016-01-21T11:45:53Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://adamlofting.com/?p=1396</id>
+ <link href="http://feedproxy.google.com/~r/adamlofting/blog/~3/DoEWpBapwiw/" rel="alternate" type="text/html"/>
+ <title>Blog posts I haven’t written lately</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last year I joked… Thinking about writing a blog post listing the blog posts I’ve been meaning to write… Maybe that will save some time — Adam Lofting (@adamlofting) November 20, 2015 Now, it has come to this. 9 blog posts I’ve not been writing Working on working on the impact of impact Designing Games … <a class="more-link" href="http://adamlofting.com/1396/blog-posts-i-havent-written-lately/">Continue reading <span class="screen-reader-text">Blog posts I haven’t written lately</span></a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Last year I joked…</p>
+ <blockquote class="twitter-tweet" lang="en">
+ <p dir="ltr" lang="en">Thinking about writing a blog post listing the blog posts I’ve been meaning to write… Maybe that will save some time</p>
+ <p>— Adam Lofting (@adamlofting) <a href="https://twitter.com/adamlofting/status/667657889817956352">November 20, 2015</a></p></blockquote>
+ <p/>
+ <p>Now, it has come to this.</p>
+ <h4>9 blog posts I’ve not been writing</h4>
+ <ul>
+ <li>Working on working on the impact of impact</li>
+ <li>Designing Games in <a href="https://en.wikipedia.org/wiki/Amateur" target="_blank">my free time</a></li>
+ <li>Moving Out (the board game)</li>
+ <li>Mozilla Foundation 2016 KPIs</li>
+ <li>Studying Network Science</li>
+ <li>Learning Analytics plans for 2016</li>
+ <li>Daily practice / you are what you do every day</li>
+ <li>Several more A/B tests to write up from <a href="http://fundraising.mozilla.org/">the fundraising campaign</a></li>
+ <li>CRM Progress in 2015</li>
+ </ul>
+ <p>But my most requested blog by far, is an update on the status of my shed / office that I was tagging on to the end my blog posts at this time last year. Many people at Mozfest wanted to know about the shed… so here it is.</p>
+ <p>This time last year:</p>
+ <blockquote class="twitter-tweet" lang="en"><p>
+ Starting in the new office today. It will take time to make it *nice* but it works for now. <a href="http://t.co/sWoC4kFNLc">pic.twitter.com/sWoC4kFNLc</a></p>
+ <p>— Adam Lofting (@adamlofting) <a href="https://twitter.com/adamlofting/status/560361913339899904">January 28, 2015</a>
+ </p></blockquote>
+ <p/>
+ <p>Some pictures from this morning:</p>
+ <p><img alt="office1" class="alignright size-large wp-image-1398" height="282" src="http://adamlofting.com/wp-content/uploads/2016/01/office1-750x320.jpg" width="660"/></p>
+ <p><img alt="office2" class="aligncenter size-large wp-image-1399" height="237" src="http://adamlofting.com/wp-content/uploads/2016/01/office2-750x269.jpg" width="660"/></p>
+ <p>It’s a pretty nice place to work now and it doubles as useful workshop on the weekends. It needs a few finishing touches, but the law of diminishing returns means those finishing touches are lower priority than work that needs to be done elsewhere in the house and garden. So it’ll stay like this a while longer.</p>
+ <img alt="" height="1" src="http://feeds.feedburner.com/~r/adamlofting/blog/~4/DoEWpBapwiw" width="1"/></div>
+ </content>
+ <updated>2016-01-21T09:44:24Z</updated>
+ <category term="Personal"/>
+ <category term="Taking note"/>
+ <category term="Work"/>
+ <category term="life"/>
+ <category term="Mozilla"/>
+ <category term="Planning"/>
+ <category term="shed"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://adamlofting.com/1396/blog-posts-i-havent-written-lately/</feedburner:origLink>
+ <author>
+ <name>Adam</name>
+ </author>
+ <source>
+ <id>http://adamlofting.com</id>
+ <link href="http://adamlofting.com" rel="alternate" type="text/html"/>
+ <link href="http://feeds.feedburner.com/adamlofting/blog" rel="self" type="application/rss+xml"/>
+ <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
+ <subtitle>Thinking out loud about metrics, systems, human experience and the web.</subtitle>
+ <title>Adam Lofting</title>
+ <updated>2016-01-21T09:46:30Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://blog.ziade.org/2016/01/21/a-pelican-web-editor/</id>
+ <link href="http://blog.ziade.org/2016/01/21/a-pelican-web-editor/" rel="alternate" type="text/html"/>
+ <title>A Pelican web editor</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The benefit of being a father again (Freya my 3rd child, was born last week) is
+ that while on paternity leave &amp; between two baby bottles, I can hack on fun stuff.</p>
+ <p>A few months ago, I've built for my running club a Pelican-based website, check it out
+ at : <a class="reference external" href="http://acr-dijon.org">http://acr-dijon.org</a>. Nothing's special about it, except that I am not
+ the one feeding it. The content is added by people from the club that have zero
+ knowledge about softwares, let alone stuff like vim or command line tools.</p>
+ <p>I set up a github-based flow for them, where they add content through the
+ github UI and its minimal reStructuredText preview feature - and then a few
+ of my crons update the website on the server I host.
+ For images and other media, they are uploading them via FTP using FireSSH in Firefox.</p>
+ <p>For the comments, I've switched from Disqus to <a class="reference external" href="https://posativ.org/isso/">ISSO</a>
+ after I got annoyed by the fact that it was impossible to display a simple Disqus
+ UI for people to comment without having to log in.</p>
+ <p>I had to make my club friends go through a minimal
+ reStructuredText syntax training, and things are more of less working now.</p>
+ <p>The system has a few caveats though:</p>
+ <ul class="simple">
+ <li>it's dependent on Github. I'd rather have everything hosted on my server.</li>
+ <li>the github restTRucturedText preview will not display syntax errors and warnings
+ and very often, articles get broken</li>
+ <li>the resulting reST is ugly, and it's a bit hard to force my editors to be stricter
+ about details like empty lines, not using tabs etc.</li>
+ <li>adding folders or organizing articles from Github is a pain</li>
+ <li>editing the metadata tags is prone to many mistakes</li>
+ </ul>
+ <p>So I've decided to build my own web editing tool with the following features:</p>
+ <ul class="simple">
+ <li>resTructuredText cleanup</li>
+ <li>content browsing</li>
+ <li>resTructuredText web editor with live preview that shows warnings &amp; errors</li>
+ <li>a little bit of wsgi glue and a few forms to create articles without
+ having to worry about metadata syntax.</li>
+ </ul>
+ <div class="section" id="restructuredtext-cleanup">
+ <h3>resTructuredText cleanup</h3>
+ <p>The first step was to build a reStructuredText parser that would read some
+ reStructuredText and render it back into a cleaner version.</p>
+ <p>We've imported almost 2000 articles in Pelican from the old blog, so I had
+ a <strong>lot</strong> of samples to make my parser work well.</p>
+ <p>I first tried <a class="reference external" href="https://github.com/benoitbryon/rst2rst">rst2rst</a> but that
+ parser was built for a very specific use case (text wrapping) and was
+ incomplete. It was not parsing all of the reStructuredText syntax.</p>
+ <p>Inspired by it, I wrote my own little parser using <strong>docutils</strong>.</p>
+ <p>Understanding docutils is not a small task. This project is very powerfull
+ but quite complex. One thing that cruelly misses in docutils parser tools
+ is the ability to get the source text from any node, including its children,
+ so you can render back the same source.</p>
+ <p>That's roughly what I had to add in my code. It's ugly but it does the job:
+ it will parse rst files and render the same content, minus all the extraneous
+ empty lines, spaces, tabs etc.</p>
+ </div>
+ <div class="section" id="content-browsing">
+ <h3>Content browsing</h3>
+ <p>Content browsing is pretty straightforward: my admin tool let you browse
+ the Pelican <em>content</em> directory and lists all articles, organized by categories.</p>
+ <p>In our case, each category has a top directory in <em>content</em>. The browser
+ parses the articles using my parser and displays paginated lists.</p>
+ <p>I had to add a cache system for the parser, because one of the directory
+ contains over 1000 articles -- and browsing was kind of slow :)</p>
+ <img alt="http://ziade.org/henet-browsing.png" src="http://ziade.org/henet-browsing.png"/>
+ </div>
+ <div class="section" id="restructuredtext-web-editor">
+ <h3>resTructuredText web editor</h3>
+ <p>The last big bit was the live editor. I've stumbled on a neat little tool
+ called <strong>rsted</strong>, that provides a live preview of the reStructuredText
+ as you are typing it. And it includes warnings !</p>
+ <p>Check it out: <a class="reference external" href="http://rst.ninjs.org/">http://rst.ninjs.org/</a></p>
+ <p>I've stripped it and kept what I needed, and included it in my app.</p>
+ <img alt="http://ziade.org/henet.png" src="http://ziade.org/henet.png"/>
+ <p>I am quite happy with the result so far. I need to add real tests and
+ a bit of documentation, and I will start to train my club friends on it.</p>
+ <p>The next features I'd like to add are:</p>
+ <ul class="simple">
+ <li>comments management, to replace Isso (working on it now)</li>
+ <li>smart Pelican builds. e.g. if a comment is added I don't want to rebuild the whole
+ blog (~1500 articles)</li>
+ <li>media management</li>
+ <li>spell checker</li>
+ </ul>
+ <p>The project lives here: <a class="reference external" href="https://github.com/AcrDijon/henet">https://github.com/AcrDijon/henet</a></p>
+ <p>I am not going to release it, but if someone finds it useful, I could.</p>
+ <p>It's built with Bottle &amp; Bootstrap as well.</p>
+ </div></div>
+ </summary>
+ <updated>2016-01-21T09:40:00Z</updated>
+ <category term="python"/>
+ <category term="mozilla"/>
+ <author>
+ <name>Tarek Ziade</name>
+ </author>
+ <source>
+ <id>http://blog.ziade.org</id>
+ <link href="http://blog.ziade.org" rel="alternate" type="text/html"/>
+ <link href="http://blog.ziade.org/tag/mozilla/feed" rel="self" type="application/rss+xml"/>
+ <subtitle>Tarek Ziadé</subtitle>
+ <title>Fetchez le Python</title>
+ <updated>2016-01-24T20:45:46Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://www.ncameron.org/blog/rss/631106eb-e7b1-47d5-82f9-cb6ad210ea89</id>
+ <link href="http://www.ncameron.org/blog/closures-and-first-class-functions/" rel="alternate" type="text/html"/>
+ <title>Closures and first-class functions</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I wrote a long and probably dull chapter on closures and first-class and higher-order functions in Rust. It goes into some detail on the implementation and some of the subtleties like higher-ranked lifetime bounds.</p>
+
+ <p>I was going to post it here too, but it is really too long. Instead, pop</p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I wrote a long and probably dull chapter on closures and first-class and higher-order functions in Rust. It goes into some detail on the implementation and some of the subtleties like higher-ranked lifetime bounds.</p>
+
+ <p>I was going to post it here too, but it is really too long. Instead, pop over to the 'Rust for C++ programmers' repo and read it <a href="https://github.com/nrc/r4cppp/blob/master/closures.md">there</a>.</p></div>
+ </content>
+ <updated>2016-01-21T08:36:21Z</updated>
+ <category term="Mozilla"/>
+ <category term="Rust"/>
+ <category term="rust-for-c"/>
+ <author>
+ <name>Nick Cameron</name>
+ </author>
+ <source>
+ <id>http://www.ncameron.org/blog/</id>
+ <link href="http://www.ncameron.org/blog/" rel="alternate" type="text/html"/>
+ <link href="http://www.ncameron.org/blog/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>I'm a research engineer at Mozilla working on Rust: the language, compiler, and tools. @nick_r_cameron</subtitle>
+ <title>featherweight musings</title>
+ <updated>2016-01-21T08:46:17Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace</id>
+ <link href="http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace/" rel="alternate" type="text/html"/>
+ <title>Intro to Debugging x86-64 Assembly</title>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’m hacking on an assembly project, and wanted to document some of the tricks I
+ was using for figuring out what was going on. This post might seem a little
+ basic for folks who spend all day heads down in gdb or who do this stuff
+ professionally, but I just wanted to share a quick intro to some tools that
+ others may find useful.
+ (<a href="https://pchiusano.github.io/2014-10-11/defensive-writing.html">oh god, I’m doing it</a>)</p>
+
+ <p>If your coming from gdb to lldb, there’s a few differences in commands. LLDB
+ has
+ <a href="http://lldb.llvm.org/lldb-gdb.html">great documentation</a>
+ on some of the differences. Everything in this post about LLDB is pretty much
+ there.</p>
+
+ <p>The bread and butter commands when working with gdb or lldb are:</p>
+
+ <ul>
+ <li>r (run the program)</li>
+ <li>s (step in)</li>
+ <li>n (step over)</li>
+ <li>finish (step out)</li>
+ <li>c (continue)</li>
+ <li>q (quit the program)</li>
+ </ul>
+
+
+ <p>You can hit enter if you want to run the last command again, which is really
+ useful if you want to keep stepping over statements repeatedly.</p>
+
+ <p>I’ve been using LLDB on OSX. Let’s say I want to debug a program I can build,
+ but is crashing or something:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="nv">$ </span>sudo lldb ./asmttpd web_root
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>Setting a breakpoint on jump to label:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> b sys_write
+ </span><span class="line">Breakpoint 3: <span class="nv">where</span> <span class="o">=</span> asmttpd<span class="sb">`</span>sys_write, <span class="nv">address</span> <span class="o">=</span> 0x00000000000029ae
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>Running the program until breakpoint hit:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ <span class="line-number">8</span>
+ <span class="line-number">9</span>
+ <span class="line-number">10</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> r
+ </span><span class="line">Process 32236 launched: <span class="s1">'./asmttpd'</span> <span class="o">(</span>x86_64<span class="o">)</span>
+ </span><span class="line">Process 32236 stopped
+ </span><span class="line">* thread <span class="c">#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1</span>
+ </span><span class="line"> frame <span class="c">#0: 0x00000000000029ae asmttpd`sys_write</span>
+ </span><span class="line">asmttpd<span class="sb">`</span>sys_write:
+ </span><span class="line">-&gt; 0x29ae &lt;+0&gt;: pushq %rdi
+ </span><span class="line"> 0x29af &lt;+1&gt;: pushq %rsi
+ </span><span class="line"> 0x29b0 &lt;+2&gt;: pushq %rdx
+ </span><span class="line"> 0x29b1 &lt;+3&gt;: pushq %r10
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>Seeing more of the current stack frame:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ <span class="line-number">8</span>
+ <span class="line-number">9</span>
+ <span class="line-number">10</span>
+ <span class="line-number">11</span>
+ <span class="line-number">12</span>
+ <span class="line-number">13</span>
+ <span class="line-number">14</span>
+ <span class="line-number">15</span>
+ <span class="line-number">16</span>
+ <span class="line-number">17</span>
+ <span class="line-number">18</span>
+ <span class="line-number">19</span>
+ <span class="line-number">20</span>
+ <span class="line-number">21</span>
+ <span class="line-number">22</span>
+ <span class="line-number">23</span>
+ <span class="line-number">24</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> d
+ </span><span class="line">asmttpd<span class="sb">`</span>sys_write:
+ </span><span class="line">-&gt; 0x29ae &lt;+0&gt;: pushq %rdi
+ </span><span class="line"> 0x29af &lt;+1&gt;: pushq %rsi
+ </span><span class="line"> 0x29b0 &lt;+2&gt;: pushq %rdx
+ </span><span class="line"> 0x29b1 &lt;+3&gt;: pushq %r10
+ </span><span class="line"> 0x29b3 &lt;+5&gt;: pushq %r8
+ </span><span class="line"> 0x29b5 &lt;+7&gt;: pushq %r9
+ </span><span class="line"> 0x29b7 &lt;+9&gt;: pushq %rbx
+ </span><span class="line"> 0x29b8 &lt;+10&gt;: pushq %rcx
+ </span><span class="line"> 0x29b9 &lt;+11&gt;: movq %rsi, %rdx
+ </span><span class="line"> 0x29bc &lt;+14&gt;: movq %rdi, %rsi
+ </span><span class="line"> 0x29bf &lt;+17&gt;: movq <span class="nv">$0x1</span>, %rdi
+ </span><span class="line"> 0x29c6 &lt;+24&gt;: movq <span class="nv">$0x2000004</span>, %rax
+ </span><span class="line"> 0x29cd &lt;+31&gt;: syscall
+ </span><span class="line"> 0x29cf &lt;+33&gt;: popq %rcx
+ </span><span class="line"> 0x29d0 &lt;+34&gt;: popq %rbx
+ </span><span class="line"> 0x29d1 &lt;+35&gt;: popq %r9
+ </span><span class="line"> 0x29d3 &lt;+37&gt;: popq %r8
+ </span><span class="line"> 0x29 &lt;+39&gt;: popq %r10
+ </span><span class="line"> 0x29d7 &lt;+41&gt;: popq %rdx
+ </span><span class="line"> 0x29d8 &lt;+42&gt;: popq %rsi
+ </span><span class="line"> 0x29d9 &lt;+43&gt;: popq %rdi
+ </span><span class="line"> 0x29da &lt;+44&gt;: retq
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>Getting a back trace (call stack):</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> bt
+ </span><span class="line">* thread <span class="c">#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1</span>
+ </span><span class="line"> * frame <span class="c">#0: 0x00000000000029ae asmttpd`sys_write</span>
+ </span><span class="line"> frame <span class="c">#1: 0x00000000000021b6 asmttpd`print_line + 16</span>
+ </span><span class="line"> frame <span class="c">#2: 0x0000000000002ab3 asmttpd`start + 35</span>
+ </span><span class="line"> frame <span class="c">#3: 0x00007fff9900c5ad libdyld.dylib`start + 1</span>
+ </span><span class="line"> frame <span class="c">#4: 0x00007fff9900c5ad libdyld.dylib`start + 1</span>
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>peeking at the upper stack frame:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> up
+ </span><span class="line">frame <span class="c">#1: 0x00000000000021b6 asmttpd`print_line + 16</span>
+ </span><span class="line">asmttpd<span class="sb">`</span>print_line:
+ </span><span class="line"> 0x21b6 &lt;+16&gt;: movabsq <span class="nv">$0x30cb</span>, %rdi
+ </span><span class="line"> 0x21c0 &lt;+26&gt;: movq <span class="nv">$0x1</span>, %rsi
+ </span><span class="line"> 0x21c7 &lt;+33&gt;: callq 0x29ae ; sys_write
+ </span><span class="line"> 0x21cc &lt;+38&gt;: popq %rcx
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>back down to the breakpoint-halted stack frame:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> down
+ </span><span class="line">frame <span class="c">#0: 0x00000000000029ae asmttpd`sys_write</span>
+ </span><span class="line">asmttpd<span class="sb">`</span>sys_write:
+ </span><span class="line">-&gt; 0x29ae &lt;+0&gt;: pushq %rdi
+ </span><span class="line"> 0x29af &lt;+1&gt;: pushq %rsi
+ </span><span class="line"> 0x29b0 &lt;+2&gt;: pushq %rdx
+ </span><span class="line"> 0x29b1 &lt;+3&gt;: pushq %r10
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>dumping the values of registers:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ <span class="line-number">8</span>
+ <span class="line-number">9</span>
+ <span class="line-number">10</span>
+ <span class="line-number">11</span>
+ <span class="line-number">12</span>
+ <span class="line-number">13</span>
+ <span class="line-number">14</span>
+ <span class="line-number">15</span>
+ <span class="line-number">16</span>
+ <span class="line-number">17</span>
+ <span class="line-number">18</span>
+ <span class="line-number">19</span>
+ <span class="line-number">20</span>
+ <span class="line-number">21</span>
+ <span class="line-number">22</span>
+ <span class="line-number">23</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> register <span class="nb">read</span>
+ </span><span class="line">General Purpose Registers:
+ </span><span class="line"> <span class="nv">rax</span> <span class="o">=</span> 0x0000000000002a90 asmttpd<span class="sb">`</span>start
+ </span><span class="line"> <span class="nv">rbx</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">rcx</span> <span class="o">=</span> 0x00007fff5fbffaf8
+ </span><span class="line"> <span class="nv">rdx</span> <span class="o">=</span> 0x00007fff5fbffa40
+ </span><span class="line"> <span class="nv">rdi</span> <span class="o">=</span> 0x00000000000030cc start_text
+ </span><span class="line"> <span class="nv">rsi</span> <span class="o">=</span> 0x000000000000000f
+ </span><span class="line"> <span class="nv">rbp</span> <span class="o">=</span> 0x00007fff5fbffa18
+ </span><span class="line"> <span class="nv">rsp</span> <span class="o">=</span> 0x00007fff5fbff9b8
+ </span><span class="line"> <span class="nv">r8</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">r9</span> <span class="o">=</span> 0x00007fff7b1670c8 atexit_mutex + 24
+ </span><span class="line"> <span class="nv">r10</span> <span class="o">=</span> 0x00000000ffffffff
+ </span><span class="line"> <span class="nv">r11</span> <span class="o">=</span> 0xffffffff00000000
+ </span><span class="line"> <span class="nv">r12</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">r13</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">r14</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">r15</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">rip</span> <span class="o">=</span> 0x00000000000029ae asmttpd<span class="sb">`</span>sys_write
+ </span><span class="line"> <span class="nv">rflags</span> <span class="o">=</span> 0x0000000000000246
+ </span><span class="line"> <span class="nv">cs</span> <span class="o">=</span> 0x000000000000002b
+ </span><span class="line"> <span class="nv">fs</span> <span class="o">=</span> 0x0000000000000000
+ </span><span class="line"> <span class="nv">gs</span> <span class="o">=</span> 0x0000000000000000
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>read just one register:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="o">(</span>lldb<span class="o">)</span> register <span class="nb">read </span>rdi
+ </span><span class="line"> <span class="nv">rdi</span> <span class="o">=</span> 0x00000000000030cc start_text
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>When you’re trying to figure out what system calls are made by some C code,
+ using dtruss is very helpful. dtruss is available on OSX and seems to be some
+ kind of wrapper around DTrace.</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ <span class="line-number">8</span>
+ <span class="line-number">9</span>
+ <span class="line-number">10</span>
+ <span class="line-number">11</span>
+ <span class="line-number">12</span>
+ <span class="line-number">13</span>
+ <span class="line-number">14</span>
+ <span class="line-number">15</span>
+ <span class="line-number">16</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="nv">$ </span>cat sleep.c
+ </span><span class="line"><span class="c">#include &lt;time.h&gt;</span>
+ </span><span class="line">int main <span class="o">()</span> <span class="o">{</span>
+ </span><span class="line"> struct timespec <span class="nv">rqtp</span> <span class="o">=</span> <span class="o">{</span>
+ </span><span class="line"> 2,
+ </span><span class="line"> 0
+ </span><span class="line"> <span class="o">}</span>;
+ </span><span class="line">
+ </span><span class="line"> nanosleep<span class="o">(</span>&amp;rqtp, NULL<span class="o">)</span>;
+ </span><span class="line"><span class="o">}</span>
+ </span><span class="line">
+ </span><span class="line"><span class="nv">$ </span>clang sleep.c
+ </span><span class="line">
+ </span><span class="line"><span class="nv">$ </span>sudo dtruss ./a.out
+ </span><span class="line">...all kinds of fun stuff
+ </span><span class="line">__semwait_signal<span class="o">(</span>0xB03, 0x0, 0x1<span class="o">)</span> <span class="o">=</span> -1 Err#60
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>If you compile with <code>-g</code> to emit debug symbols, you can use lldb’s disassemble
+ command to get the equivalent assembly:</p>
+
+ <figure class="code"><span/><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+ <span class="line-number">2</span>
+ <span class="line-number">3</span>
+ <span class="line-number">4</span>
+ <span class="line-number">5</span>
+ <span class="line-number">6</span>
+ <span class="line-number">7</span>
+ <span class="line-number">8</span>
+ <span class="line-number">9</span>
+ <span class="line-number">10</span>
+ <span class="line-number">11</span>
+ <span class="line-number">12</span>
+ <span class="line-number">13</span>
+ <span class="line-number">14</span>
+ <span class="line-number">15</span>
+ <span class="line-number">16</span>
+ <span class="line-number">17</span>
+ <span class="line-number">18</span>
+ <span class="line-number">19</span>
+ <span class="line-number">20</span>
+ <span class="line-number">21</span>
+ <span class="line-number">22</span>
+ <span class="line-number">23</span>
+ <span class="line-number">24</span>
+ <span class="line-number">25</span>
+ <span class="line-number">26</span>
+ <span class="line-number">27</span>
+ <span class="line-number">28</span>
+ <span class="line-number">29</span>
+ <span class="line-number">30</span>
+ <span class="line-number">31</span>
+ <span class="line-number">32</span>
+ <span class="line-number">33</span>
+ <span class="line-number">34</span>
+ <span class="line-number">35</span>
+ <span class="line-number">36</span>
+ <span class="line-number">37</span>
+ </pre></td><td class="code"><pre><code class="sh"><span class="line"><span class="nv">$ </span>clang sleep.c -g
+ </span><span class="line"><span class="nv">$ </span>lldb a.out
+ </span><span class="line"><span class="o">(</span>lldb<span class="o">)</span> target create <span class="s2">"a.out"</span>
+ </span><span class="line">Current executable <span class="nb">set </span>to <span class="s1">'a.out'</span> <span class="o">(</span>x86_64<span class="o">)</span>.
+ </span><span class="line"><span class="o">(</span>lldb<span class="o">)</span> b main
+ </span><span class="line">Breakpoint 1: <span class="nv">where</span> <span class="o">=</span> a.out<span class="sb">`</span>main + 16 at sleep.c:3, <span class="nv">address</span> <span class="o">=</span> 0x0000000100000f40
+ </span><span class="line"><span class="o">(</span>lldb<span class="o">)</span> r
+ </span><span class="line">Process 33213 launched: <span class="s1">'/Users/Nicholas/code/assembly/asmttpd/a.out'</span> <span class="o">(</span>x86_64<span class="o">)</span>
+ </span><span class="line">Process 33213 stopped
+ </span><span class="line">* thread <span class="c">#1: tid = 0xeca04, 0x0000000100000f40 a.out`main + 16 at sleep.c:3, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1</span>
+ </span><span class="line"> frame <span class="c">#0: 0x0000000100000f40 a.out`main + 16 at sleep.c:3</span>
+ </span><span class="line"> 1 <span class="c">#include &lt;time.h&gt;</span>
+ </span><span class="line"> 2 int main <span class="o">()</span> <span class="o">{</span>
+ </span><span class="line">-&gt; 3 struct timespec <span class="nv">rqtp</span> <span class="o">=</span> <span class="o">{</span>
+ </span><span class="line"> 4 2,
+ </span><span class="line"> 5 0
+ </span><span class="line"> 6 <span class="o">}</span>;
+ </span><span class="line"> 7
+ </span><span class="line"><span class="o">(</span>lldb<span class="o">)</span> disassemble
+ </span><span class="line">a.out<span class="sb">`</span>main:
+ </span><span class="line"> 0x100000f30 &lt;+0&gt;: pushq %rbp
+ </span><span class="line"> 0x100000f31 &lt;+1&gt;: movq %rsp, %rbp
+ </span><span class="line"> 0x100000f34 &lt;+4&gt;: subq <span class="nv">$0x20</span>, %rsp
+ </span><span class="line"> 0x100000f38 &lt;+8&gt;: leaq -0x10<span class="o">(</span>%rbp<span class="o">)</span>, %rdi
+ </span><span class="line"> 0x100000f3c &lt;+12&gt;: xorl %eax, %eax
+ </span><span class="line"> 0x100000f3e &lt;+14&gt;: movl %eax, %esi
+ </span><span class="line">-&gt; 0x100000f40 &lt;+16&gt;: movq 0x49<span class="o">(</span>%rip<span class="o">)</span>, %rcx
+ </span><span class="line"> 0x100000f47 &lt;+23&gt;: movq %rcx, -0x10<span class="o">(</span>%rbp<span class="o">)</span>
+ </span><span class="line"> 0x100000f4b &lt;+27&gt;: movq 0x46<span class="o">(</span>%rip<span class="o">)</span>, %rcx
+ </span><span class="line"> 0x100000f52 &lt;+34&gt;: movq %rcx, -0x8<span class="o">(</span>%rbp<span class="o">)</span>
+ </span><span class="line"> 0x100000f56 &lt;+38&gt;: callq 0x100000f68 ; symbol stub <span class="k">for</span>: nanosleep
+ </span><span class="line"> 0x100000f5b &lt;+43&gt;: xorl %edx, %edx
+ </span><span class="line"> 0x100000f5d &lt;+45&gt;: movl %eax, -0x14<span class="o">(</span>%rbp<span class="o">)</span>
+ </span><span class="line"> 0x100000f60 &lt;+48&gt;: movl %edx, %eax
+ </span><span class="line"> 0x100000f62 &lt;+50&gt;: addq <span class="nv">$0x20</span>, %rsp
+ </span><span class="line"> 0x100000f66 &lt;+54&gt;: popq %rbp
+ </span><span class="line"> 0x100000f67 &lt;+55&gt;: retq
+ </span></code></pre></td></tr></tbody></table></div></figure>
+
+
+ <p>Anyways, I’ve been learning some interesting things about OSX that I’ll be
+ sharing soon. If you’d like to learn more about x86-64 assembly programming,
+ you should read my other posts about
+ <a href="http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/">writing x86-64</a>
+ and a toy
+ <a href="http://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler-jit/">JIT for Brainfuck</a>
+ (<a href="https://www.reddit.com/r/programming/comments/377ov9/interpreter_compiler_jit/crkkrz4">the creator of Brainfuck liked it</a>).</p>
+
+ <p>I should also do a post on
+ <a href="http://rr-project.org/">Mozilla’s rr</a>,
+ because it can do amazing things like step backwards. Another day…</p></div>
+ </content>
+ <updated>2016-01-21T04:04:00Z</updated>
+ <source>
+ <id>http://nickdesaulniers.github.io/</id>
+ <author>
+ <name>Nick Desaulniers</name>
+ </author>
+ <link href="http://nickdesaulniers.github.io/atom.xml" rel="self" type="application/atom+xml"/>
+ <link href="http://nickdesaulniers.github.io/" rel="alternate" type="text/html"/>
+ <title>Nick Desaulniers</title>
+ <updated>2016-01-21T05:07:32Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>https://rail.merail.ca/posts/rebooting-productivity.html</id>
+ <link href="https://rail.merail.ca/posts/rebooting-productivity.html" rel="alternate" type="text/html"/>
+ <title>Rebooting productivity</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div><p>Every new year gives you an opportunity to sit back, relax,
+ <span class="strike">have some scotch</span> and re-think the passed year. Holidays give
+ you enough free time. Even if you decide to not take a vacation around
+ the holidays, it's usually calm and peaceful.</p>
+ <p>This time, I found myself thinking mostly about productivity, being
+ effective, feeling busy, overwhelmed with work and other related topics.</p>
+ <p>When I started at Mozilla (almost 6 years ago!), I tried to apply all my
+ GTD and time management knowledge and techniques. Working remotely and
+ in a different time zone was an advantage - I had close to zero
+ interruptions. It worked perfect.</p>
+ <p>Last year I realized that my productivity skills had faded away somehow.
+ 40h+ workweeks, working on weekends, delivering goals in the last week
+ of quarter don't sound like good signs. Instead of being productive I
+ felt busy.</p>
+ <p>"Every crisis is an opportunity". Time to make a step back and reboot
+ myself. Burning out at work is not a good idea. :)</p>
+ <p>Here are some ideas/tips that I wrote down for myself you may found
+ useful.</p>
+ <div class="section" id="health-related">
+ <h3>Health related</h3>
+ <ul class="simple">
+ <li>Morning exercises. A 20-minute walk will wake your brain up and
+ generate enough endorphins for the first half of the day.</li>
+ <li>Meditation. 2x20min a day is ideal; 2x10min would work too. Something
+ like <a class="reference external" href="http://www.calm.com/">calm.com</a> makes this a peace of cake.</li>
+ </ul>
+ </div>
+ <div class="section" id="concentration">
+ <h3>Concentration</h3>
+ <ul class="simple">
+ <li>Task #1: make a daily plan. No plan - no work.</li>
+ <li>Don't start your day by reading emails. Get one (little) thing done
+ first - THEN check your email.</li>
+ <li>Try to define outcomes, not tasks. "Ship XYZ" instead of "Work on XYZ".</li>
+ <li>Meetings are time consuming, so "Set a goal for each meeting".
+ Consider skipping a meeting if you don't have any goal set, unless it's a
+ beer-and-tell meeting! :)</li>
+ <li>Constantly ask yourself if what you're working on is important.</li>
+ <li>3-4 times a day ask yourself whether you are doing something towards
+ your goal or just finding something else to keep you busy. If you want
+ to look busy, take your phone and walk around the office with some
+ papers in your hand. Everybody will think that you are a busy person!
+ This way you can take a break and look busy at the same time!</li>
+ <li>Take breaks! <a class="reference external" href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro technique</a> has this option
+ built-in. Taking breaks helps not only to avoid <a class="reference external" href="https://en.wikipedia.org/wiki/Repetitive_strain_injury">RSI</a>, but also
+ keeps your brain sane and gives you time to ask yourself the questions
+ mentioned above. I use <a class="reference external" href="http://www.workrave.org/">Workrave</a> on my
+ laptop, but you can use a real kitchen timer instead.</li>
+ <li>Wear headphones, especially at office. Noise cancelling ones are even
+ better. White noise, nature sounds, or instrumental music are your
+ friends.</li>
+ </ul>
+ </div>
+ <div class="section" id="home-office">
+ <h3>(Home) Office</h3>
+ <ul class="simple">
+ <li>Make sure you enjoy your work environment. Why on the earth would you
+ spend your valuable time working without joy?!</li>
+ <li>De-clutter and organize your desk. Less things around - less
+ distractions.</li>
+ <li>Desk, chair, monitor, keyboard, mouse, etc - don't cheap out on them.
+ Your health is more important and expensive. Thanks to <a class="reference external" href="https://twitter.com/mhoye">mhoye</a> for this advice!</li>
+ </ul>
+ </div>
+ <div class="section" id="other">
+ <h3>Other</h3>
+ <ul class="simple">
+ <li>Don't check email every 30 seconds. If there is an emergency, they
+ will call you! :)</li>
+ <li>Reward yourself at a certain time. "I'm going to have a chocolate at
+ 11am", or "MFBT at 4pm sharp!" are good examples. Don't forget, you
+ are <a class="reference external" href="https://en.wikipedia.org/wiki/Classical_conditioning">Pavlov's dog</a> too!</li>
+ <li>Don't try to read everything NOW. Save it for later and read in a
+ batch.</li>
+ <li>Capture all creative ideas. You can delete them later. ;)</li>
+ <li>Prepare for next task before break. Make sure you know what's next, so
+ you can think about it during the break.</li>
+ </ul>
+ <p>This is my list of things that I try to use everyday. Looking forward to
+ see improvements!</p>
+ <p>I would appreciate your thoughts this topic. Feel free to comment or
+ send a private email.</p>
+ <p>Happy Productive New Year!</p>
+ </div></div></div>
+ </summary>
+ <updated>2016-01-21T02:06:37Z</updated>
+ <category term="mozilla"/>
+ <category term="productivity"/>
+ <author>
+ <name>Rail Aliiev</name>
+ </author>
+ <source>
+ <id>https://rail.merail.ca/</id>
+ <link href="https://rail.merail.ca/" rel="alternate" type="text/html"/>
+ <link href="https://rail.merail.ca/categories/mozilla.xml" rel="self" type="application/rss+xml"/>
+ <title>Rail's Blog (mozilla)</title>
+ <updated>2016-01-21T02:31:38Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://blog.rust-lang.org/2016/01/21/Rust-1.6.html</id>
+ <link href="http://blog.rust-lang.org/2016/01/21/Rust-1.6.html" rel="alternate" type="text/html"/>
+ <title>Announcing Rust 1.6</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hello 2016! We’re happy to announce the first Rust release of the year, 1.6.
+ Rust is a systems programming language focused on safety, speed, and
+ concurrency.</p>
+
+ <p>As always, you can <a href="http://www.rust-lang.org/install.html">install Rust 1.6</a> from the appropriate page on our
+ website, and check out the <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21">detailed release notes for 1.6</a> on GitHub.
+ About 1100 patches were landed in this release.</p>
+
+ <h3 id="what-39-s-in-1-6-stable">What’s in 1.6 stable</h3>
+
+ <p>This release contains a number of small refinements, one major feature, and
+ a change to <a href="https://crates.io">Crates.io</a>.</p>
+
+ <h4 id="libcore-stabilization">libcore stabilization</h4>
+
+ <p>The largest new feature in 1.6 is that <a href="http://doc.rust-lang.org/nightly/core/"><code>libcore</code></a> is now stable! Rust’s
+ standard library is two-tiered: there’s a small core library, <code>libcore</code>, and
+ the full standard library, <code>libstd</code>, that builds on top of it. <code>libcore</code> is
+ completely platform agnostic, and requires only a handful of external symbols
+ to be defined. Rust’s <code>libstd</code> builds on top of <code>libcore</code>, adding support for
+ memory allocation, I/O, and concurrency. Applications using Rust in the
+ embedded space, as well as those writing operating systems, often eschew
+ <code>libstd</code>, using only <code>libcore</code>.</p>
+
+ <p><code>libcore</code> being stabilized is a major step towards being able to write the
+ lowest levels of software using stable Rust. There’s still future work to be
+ done, however. This will allow for a library ecosystem to develop around
+ <code>libcore</code>, but <em>applications</em> are not fully supported yet. Expect to hear more
+ about this in future release notes.</p>
+
+ <h4 id="library-stabilizations">Library stabilizations</h4>
+
+ <p>About 30 library functions and methods are now stable in 1.6. Notable
+ improvements include:</p>
+
+ <p>The <code>drain()</code> family of functions on collections. These methods let you move
+ elements out of a collection while allowing them to retain their backing
+ memory, reducing allocation in certain situations.</p>
+
+ <p>A number of implementations of <code>From</code> for converting between standard library
+ types, mainly between various integral and floating-point types.</p>
+
+ <p>Finally, <code>Vec::extend_from_slice()</code>, which was previously known as
+ <code>push_all()</code>. This method has a significantly faster implementation than the
+ more general <code>extend()</code>.</p>
+
+ <p>See the <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21">detailed release notes</a> for more.</p>
+
+ <h4 id="crates-io-disallows-wildcards">Crates.io disallows wildcards</h4>
+
+ <p>If you maintain a crate on <a href="https://crates.io">Crates.io</a>, you might have seen
+ a warning: newly uploaded crates are no longer allowed to use a wildcard when
+ describing their dependencies. In other words, this is not allowed:</p>
+ <div class="highlight"><pre><code class="language-toml"><span class="p">[</span><span class="n">dependencies</span><span class="p">]</span>
+ <span class="n">regex</span> <span class="o">=</span> <span class="s">"*"</span>
+ </code></pre></div>
+ <p>Instead, you must actually specify <a href="http://doc.crates.io/crates-io.html#using-cratesio-based-crates">a specific version or range of
+ versions</a>, using one of the <code>semver</code> crate’s various options: <code>^</code>,
+ <code>~</code>, or <code>=</code>.</p>
+
+ <p>A wildcard dependency means that you work with any possible version of your
+ dependency. This is highly unlikely to be true, and causes unnecessary breakage
+ in the ecosystem. We’ve been advertising this change as a warning for some time;
+ now it’s time to turn it into an error.</p>
+
+ <h3 id="contributors-to-1-6">Contributors to 1.6</h3>
+
+ <p>We had 132 individuals contribute to 1.6. Thank you so much!</p>
+
+ <ul>
+ <li>Aaron Turon</li>
+ <li>Adam Badawy</li>
+ <li>Aleksey Kladov</li>
+ <li>Alexander Bulaev</li>
+ <li>Alex Burka</li>
+ <li>Alex Crichton</li>
+ <li>Alex Gaynor</li>
+ <li>Alexis Beingessner</li>
+ <li>Amanieu d'Antras</li>
+ <li>Amit Saha</li>
+ <li>Andrea Canciani</li>
+ <li>Andrew Paseltiner</li>
+ <li>androm3da</li>
+ <li>angelsl</li>
+ <li>Angus Lees</li>
+ <li>Antti Keränen</li>
+ <li>arcnmx</li>
+ <li>Ariel Ben-Yehuda</li>
+ <li>Ashkan Kiani</li>
+ <li>Barosl Lee</li>
+ <li>Benjamin Herr</li>
+ <li>Ben Striegel</li>
+ <li>Bhargav Patel</li>
+ <li>Björn Steinbrink</li>
+ <li>Boris Egorov</li>
+ <li>bors</li>
+ <li>Brian Anderson</li>
+ <li>Bruno Tavares</li>
+ <li>Bryce Van Dyk</li>
+ <li>Cameron Sun</li>
+ <li>Christopher Sumnicht</li>
+ <li>Cole Reynolds</li>
+ <li>corentih</li>
+ <li>Daniel Campbell</li>
+ <li>Daniel Keep</li>
+ <li>Daniel Rollins</li>
+ <li>Daniel Trebbien</li>
+ <li>Danilo Bargen</li>
+ <li>Devon Hollowood</li>
+ <li>Doug Goldstein</li>
+ <li>Dylan McKay</li>
+ <li>ebadf</li>
+ <li>Eli Friedman</li>
+ <li>Eric Findlay</li>
+ <li>Erik Davidson</li>
+ <li>Felix S. Klock II</li>
+ <li>Florian Hahn</li>
+ <li>Florian Hartwig</li>
+ <li>Gleb Kozyrev</li>
+ <li>Guillaume Gomez</li>
+ <li>Huon Wilson</li>
+ <li>Igor Shuvalov</li>
+ <li>Ivan Ivaschenko</li>
+ <li>Ivan Kozik</li>
+ <li>Ivan Stankovic</li>
+ <li>Jack Fransham</li>
+ <li>Jake Goulding</li>
+ <li>Jake Worth</li>
+ <li>James Miller</li>
+ <li>Jan Likar</li>
+ <li>Jean Maillard</li>
+ <li>Jeffrey Seyfried</li>
+ <li>Jethro Beekman</li>
+ <li>John Kåre Alsaker</li>
+ <li>John Talling</li>
+ <li>Jonas Schievink</li>
+ <li>Jonathan S</li>
+ <li>Jose Narvaez</li>
+ <li>Josh Austin</li>
+ <li>Josh Stone</li>
+ <li>Joshua Holmer</li>
+ <li>JP Sugarbroad</li>
+ <li>jrburke</li>
+ <li>Kevin Butler</li>
+ <li>Kevin Yeh</li>
+ <li>Kohei Hasegawa</li>
+ <li>Kyle Mayes</li>
+ <li>Lee Jeffery</li>
+ <li>Manish Goregaokar</li>
+ <li>Marcell Pardavi</li>
+ <li>Markus Unterwaditzer</li>
+ <li>Martin Pool</li>
+ <li>Marvin Löbel</li>
+ <li>Matt Brubeck</li>
+ <li>Matthias Bussonnier</li>
+ <li>Matthias Kauer</li>
+ <li>mdinger</li>
+ <li>Michael Layzell</li>
+ <li>Michael Neumann</li>
+ <li>Michael Sproul</li>
+ <li>Michael Woerister</li>
+ <li>Mihaly Barasz</li>
+ <li>Mika Attila</li>
+ <li>mitaa</li>
+ <li>Ms2ger</li>
+ <li>Nicholas Mazzuca</li>
+ <li>Nick Cameron</li>
+ <li>Niko Matsakis</li>
+ <li>Ole Krüger</li>
+ <li>Oliver Middleton</li>
+ <li>Oliver Schneider</li>
+ <li>Ori Avtalion</li>
+ <li>Paul A. Jungwirth</li>
+ <li>Peter Atashian</li>
+ <li>Philipp Matthias Schäfer</li>
+ <li>pierzchalski</li>
+ <li>Ravi Shankar</li>
+ <li>Ricardo Martins</li>
+ <li>Ricardo Signes</li>
+ <li>Richard Diamond</li>
+ <li>Rizky Luthfianto</li>
+ <li>Ryan Scheel</li>
+ <li>Scott Olson</li>
+ <li>Sean Griffin</li>
+ <li>Sebastian Hahn</li>
+ <li>Sébastien Marie</li>
+ <li>Seo Sanghyeon</li>
+ <li>Simonas Kazlauskas</li>
+ <li>Simon Sapin</li>
+ <li>Stepan Koltsov</li>
+ <li>Steve Klabnik</li>
+ <li>Steven Fackler</li>
+ <li>Tamir Duberstein</li>
+ <li>Tobias Bucher</li>
+ <li>Toby Scrace</li>
+ <li>Tshepang Lekhonkhobe</li>
+ <li>Ulrik Sverdrup</li>
+ <li>Vadim Chugunov</li>
+ <li>Vadim Petrochenkov</li>
+ <li>William Throwe</li>
+ <li>xd1le</li>
+ <li>Xmasreturns</li>
+ </ul></div>
+ </summary>
+ <updated>2016-01-21T00:00:00Z</updated>
+ <source>
+ <id>http://blog.rust-lang.org/</id>
+ <author>
+ <name>The Rust Programming Language Blog</name>
+ </author>
+ <link href="http://blog.rust-lang.org/" rel="alternate" type="text/html"/>
+ <link href="http://blog.rust-lang.org/feed.xml" rel="self" type="application/rss+xml"/>
+ <subtitle>Words from the Rust team</subtitle>
+ <title>The Rust Programming Language Blog</title>
+ <updated>2016-01-21T21:36:56Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/addons/?p=7644</id>
+ <link href="https://blog.mozilla.org/addons/2016/01/20/archiving-amo-stats/" rel="alternate" type="text/html"/>
+ <title>Archiving AMO Stats</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">One of the advantages of listing an add-on or theme on addons.mozilla.org (AMO) is that you’ll get statistics on your add-on’s usage. These stats, which are covered by the Mozilla privacy policy, provide add-on developers with information such as the … <a class="go" href="https://blog.mozilla.org/addons/2016/01/20/archiving-amo-stats/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of the advantages of listing an add-on or theme on <a href="https://addons.mozilla.org" target="_blank">addons.mozilla.org</a> (AMO) is that you’ll get statistics on your add-on’s usage. These stats, which are covered by the <a href="https://www.mozilla.org/privacy/" target="_blank">Mozilla privacy policy</a>, provide add-on developers with information such as the number of downloads and daily users, among other insights.</p>
+ <p>Currently, the data that generates these statistics can go back as far as 2007, as we haven’t had an archiving policy. As a result, statistics take up the vast majority of disk space in our database and require a significant amount of processing and operations time. Statistics over a year old are very rarely accessed, and the value of their generation is very low, while the costs are increasing.</p>
+ <p>To reduce our operating and development costs, and increase the site’s reliability for developers, we are introducing an archiving policy.</p>
+ <p>In the coming weeks, statistics data <strong>over one year old</strong> will no longer be stored in the AMO database, and reports generated from them will no longer be accessible through AMO’s add-on statistics pages. Instead, the data will be archived and maintained as plain text files, which developers can download. We will write a follow-up post when these archives become available.</p>
+ <p>If you’ve chosen to keep your add-on’s statistics private, they will remain private when stats are archived. You can check your privacy settings by going to your add-on in the <a href="https://addons.mozilla.org/developers/addons" target="_blank">Developer Hub</a>, clicking on <strong>Edit Listing</strong>, and then <strong>Technical Details</strong>.</p>
+ <p><a href="https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33.png"><img alt="editlisting" class="alignnone size-large wp-image-7645" height="389" src="https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33-600x389.png" width="600"/></a></p>
+ <p>The total number of users and other cumulative counts on add-ons and themes will not be affected and these will continue to function.</p>
+ <p>If you have feedback or concerns, please head to our <a href="https://discourse.mozilla-community.org/t/archiving-of-add-on-statistics/6573" target="_blank">forum post</a> on this topic.</p></div>
+ </content>
+ <updated>2016-01-20T23:54:09Z</updated>
+ <category term="developers"/>
+ <category term="policy"/>
+ <author>
+ <name>Andy McKay</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/addons</id>
+ <link href="https://blog.mozilla.org/addons/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/addons" rel="alternate" type="text/html"/>
+ <title>Mozilla Add-ons Blog</title>
+ <updated>2016-01-25T20:46:40Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/the-joy-of-coding-episode-41/</id>
+ <link href="https://air.mozilla.org/the-joy-of-coding-episode-41/" rel="alternate" type="text/html"/>
+ <title>The Joy of Coding - Episode 41</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="The Joy of Coding - Episode 41" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/cb/68/cb68b6ac48452be7e7f25ddc7b63c959.png" width="160"/>
+ mconley livehacks on real Firefox bugs while thinking aloud.
+ </p></div>
+ </summary>
+ <updated>2016-01-20T18:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/nfroyd/?p=452</id>
+ <link href="https://blog.mozilla.org/nfroyd/2016/01/20/gecko-and-c-onboarding-presentation/" rel="alternate" type="text/html"/>
+ <title>gecko and c++ onboarding presentation</title>
+ <summary>One of the things the Firefox team has been doing recently is having onboarding sessions for new hires. This onboarding currently covers: 1st day setup Bugzilla Building Firefox Desktop Firefox Architecture / Product Communication and Community Javascript and the DOM C++ and Gecko Shipping Software Telemetry Org structure and career development My first day consisted […]</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of the things the Firefox team has been doing recently is having onboarding sessions for new hires. This onboarding currently covers:</p>
+ <ul>
+ <li>1st day setup</li>
+ <li>Bugzilla</li>
+ <li>Building Firefox</li>
+ <li>Desktop Firefox Architecture / Product</li>
+ <li>Communication and Community</li>
+ <li>Javascript and the DOM</li>
+ <li>C++ and Gecko</li>
+ <li>Shipping Software</li>
+ <li>Telemetry</li>
+ <li>Org structure and career development</li>
+ </ul>
+ <p>My first day consisted of some useful HR presentations and then I was given my laptop and a pointer to a wiki page on building Firefox. Needless to say, it took me a while to get started! It would have been super convenient to have an introduction to all the stuff above.</p>
+ <p>I’ve been asked to do the C++ and Gecko session three times. All of the sessions are open to whoever wants to come, not just the new hires, and I think yesterday’s session was easily the most well-attended yet: somewhere between 10 and 20 people showed up. Yesterday’s session was the first session where I made the slides available to attendees (should have been doing that from the start…) and it seemed equally useful to make the slides available to a broader audience as well. The <a href="https://docs.google.com/presentation/d/1ZHUkNzZK2TrF5_4MWd_lqEq7Ph5B6CDbNsizIkBxbnQ/edit?usp=sharing">Gecko and C++ Onboarding slides</a> are up now!</p>
+ <p>This presentation is a “living” presentation; it will get updated for future sessions with feedback and as I think of things that should have been in the presentation or better ways to set things up (some diagrams would be nice…). If you have feedback (good, bad, or ugly) on particular things in the slides or you have suggestions on what other things should be covered, please contact me! Next time I do this I’ll try to record the presentation so folks can watch that if they prefer.</p></div>
+ </content>
+ <updated>2016-01-20T16:48:29Z</updated>
+ <category term="Uncategorized"/>
+ <category term="c++"/>
+ <category term="mozilla"/>
+ <category term="onboarding"/>
+ <category term="presentations"/>
+ <author>
+ <name>Nathan Froyd</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/nfroyd</id>
+ <link href="https://blog.mozilla.org/nfroyd/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/nfroyd" rel="alternate" type="text/html"/>
+ <subtitle>writing code to help other people write code</subtitle>
+ <title>Nathan's Blog</title>
+ <updated>2016-01-20T17:01:01Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://andreasgal.com/?p=573</id>
+ <link href="http://andreasgal.com/2016/01/20/brendan-is-back-to-save-the-web/" rel="alternate" type="text/html"/>
+ <title>Brendan is back to save the Web</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Brendan is back, and he has a plan to save the Web. Its a big and bold plan, and it may just work. I am pretty excited about this. If you have 5 minutes to read along I’ll explain why I think you should be as well. The Web is broken Lets face it, the Web […]<img alt="" border="0" height="1" src="http://pixel.wp.com/b.gif?host=andreasgal.com&amp;blog=891661&amp;post=573&amp;subd=andreasgal&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p class="p1">Brendan is <a href="https://github.com/brave">back</a>, and he has a <a href="http://brave.com/">plan</a> to save the Web. Its a big and bold plan, and it may just work. I am pretty excited about this. If you have 5 minutes to read along I’ll explain why I think you should be as well.</p>
+ <p class="p1"><strong>The Web is broken</strong></p>
+ <p class="p1">Lets face it, the Web today is a mess. Everywhere we go online we are constantly inundated with annoying ads. Often pages are more ads than content, and the more ads the industry throws at us, the more we ignore them, the more obnoxious ads get, trying to catch our attention. As Brendan explains in his blog post, the browser used to be on the user’s side—we call browsers the user agent for a reason. Part of the early success of Firefox was that it blocked popup ads. But somewhere over the last 10 years of modern Web browsers, browsers lost their way and stopped being the user’s agent alone. Why?</p>
+ <p class="p1"><strong>Browsers aren’t free</strong></p>
+ <p class="p1">Making a modern Web browser is not free. It takes hundreds of engineers to make a competitive modern browser engine. Someone has to pay for that, and that someone needs to have a reason to pay for it. Google doesn’t make Chrome for the good of mankind. Google makes Chrome so you can consume more Web and along with it, more Google ads. Each time you click on one, Google makes more money. Chrome is a billion dollar business for Google. And the same is true for pretty much every other browser. Every major browser out there is funded through advertisement. No browser maker can escape this dilemma. Maybe now you understand why no major browser ships with a builtin enabled by default ad-blocker, even though ad-blockers are by far the most popular add-ons.</p>
+ <p class="p1"><strong>Our privacy is at stake</strong></p>
+ <p class="p1">It’s not just the unregulated flood of advertisement that needs a solution. Every ad you see is often selected based on sensitive private information advertisement networks have extracted from your browsing behavior through tracking. Remember how the FBI used to track what books Americans read at the library, and it was a big scandal? Today the Googles and Facebooks of the world know almost every site you visit, everything you buy online, and they use this data to target you with advertisement. I am often puzzled why people are so afraid of the NSA spying on us but show so little concern about all the deeply personal data Google and Facebook are amassing about everyone.</p>
+ <p class="p1"><strong>Blocking alone doesn’t scale</strong></p>
+ <p class="p1">I wish the solution was as easy as just blocking all ads. There is a lot of great Web content out there: news, entertainment, educational content. It’s not free to make all this content, but we have gotten used to consuming it “for free”. Banning all ads without an alternative mechanism would break the economic backbone of the Web. This dilemma has existed for many years, and the big browser vendors seem to have given up on it. It’s hard to blame them. How do you disrupt the status quo without sawing off the (ad revenue) branch you are sitting on?</p>
+ <p class="p1"><strong>It takes an newcomer to fix this mess</strong></p>
+ <p class="p1">I think its unlikely that the incumbent browser vendors will make any bold moves to solve this mess. There is too much money at stake. I am excited to see a startup take a swipe at this problem, because they have little to lose (seed money aside). Brave is getting the user agent back into the game. Browsers have intentionally remained silent onlookers to the ad industry invading users’ privacy. With Brave, Brendan makes the user agent step up and fight for the user as it was always intended to do.</p>
+ <p class="p1">Brave basically consists of two parts: part one blocks third party ad content and tracking signals. Instead of these Brave inserts alternative ad content. Sites can sign up to get a fair share of any ads that Brave displays for them. The big change in comparison to the status quo is that the Brave user agent is in control and can regulate what you see. It’s like a speed limit for advertisement on the Web, with the goal to restore balance and give sites a fair way to monetize while giving the user control through the user agent.</p>
+ <p class="p1"><strong>Making money with a better Web</strong></p>
+ <p class="p1">The ironic part of Brave is that its for-profit. Brave can make money by reducing obnoxious ads and protecting your privacy at the same time. If Brave succeeds, it’s going to drain money away from the crappy privacy-invasive obnoxious advertisement world we have today, and publishers and sites will start transacting in the new Brave world that is regulated by the user agent. Brave will take a cut of these transactions. And I think this is key. It aligns the incentives right. The current funding structure of major browsers encourages them to keep things as they are. Brave’s incentive is to bring down the whole diseased temple and usher in a better Web. Exciting.</p>
+ <p class="p1"><strong>Quick update:</strong> I had a chance to look over the Brave GitHub repo. It looks like the Brave Desktop browser is based on Chromium, not Gecko. Yes, you read that right. <span style="text-decoration: underline;">Brave is using Google’s rendering engine, not Mozilla’s.</span> Much to write about this one, but it will definitely help Brave “hide” better in the large volume of Chrome users, making it harder for sites to identify and block Brave users. Brave for iOS seems to be a <span style="text-decoration: underline;">fork of Firefox for iOS, but it manages to block ads</span> (Mozilla says they can’t).</p><br/>Filed under: <a href="http://andreasgal.com/category/mozilla/">Mozilla</a> <a href="http://feeds.wordpress.com/1.0/gocomments/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreasgal.wordpress.com/573/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/andreasgal.wordpress.com/573/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreasgal.wordpress.com/573/"/></a> <img alt="" border="0" height="1" src="http://pixel.wp.com/b.gif?host=andreasgal.com&amp;blog=891661&amp;post=573&amp;subd=andreasgal&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-20T16:00:00Z</updated>
+ <category term="Mozilla"/>
+ <author>
+ <name>Andreas</name>
+ </author>
+ <source>
+ <id>http://andreasgal.com</id>
+ <logo>http://s2.wp.com/i/buttonw-com.png</logo>
+ <link href="http://andreasgal.com/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://andreasgal.com" rel="alternate" type="text/html"/>
+ <link href="http://andreasgal.com/osd.xml" rel="search" title="Andreas Gal " type="application/opensearchdescription+xml"/>
+ <link href="http://andreasgal.com/?pushpress=hub" rel="hub" type="text/html"/>
+ <subtitle>Entrepreneur. Technologist. Former CTO Mozilla</subtitle>
+ <title>Andreas Gal</title>
+ <updated>2016-01-22T11:45:34Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html</id>
+ <link href="https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html" rel="alternate" type="text/html"/>
+ <title>🙅 @media (-webkit-transform-3d)</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><code>@media (-webkit-transform-3d)</code> is a funny thing that exists on the web.</p>
+
+ <p>It's like, a <a href="https://drafts.csswg.org/mediaqueries-4/#mq-features">media query feature</a> in the form of a prefixed CSS property, which should tell you if your (once upon a time probably Safari-only) browser supports 3D transforms, invented back in the day before we had <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@supports"><code>@supports</code></a>.</p>
+
+ <p>(According to <a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/OtherStandardCSS3Features.html#//apple_ref/doc/uid/TP40007601-SW3">Apple docs</a> it first appeared in Safari 4, along side the other <code>-webkit-transition</code> and <code>-webkit-transform-2d</code> hybrid-media-query-feature-prefixed-css-properties-things that you should immediately forget exist.)</p>
+
+ <p>Older versions of Modernizr <a href="https://github.com/Modernizr/Modernizr/blob/66c694d136241d356e0d24fcbaa5c068b0b0cdae/feature-detects/css/transforms3d.js#L26-L27">used this (and only this)</a> to detect support for 3D transforms, and that seemed pretty OK. (They also did the polite thing and tested <code>@media (transform-3d)</code>, but no browser has ever actually supported that, as it turns out). And because they're so consistently polite, they've since <a href="https://github.com/patrickkettner/Modernizr/commit/a54308e47e269a058472854b1ef417bd54f4e616">updated the test</a> to prefer <code>@supports</code> too (via a pull request from Edge developer Jacob Rossi).</p>
+
+ <p>As it turns out other browsers have been <a href="http://caniuse.com/#feat=transforms3d">updated to support 3D CSS transforms</a>, but sites didn't go back and update their version of Modernizr. So unless you support <code>@media (-webkit-transform-3d)</code> these sites break. Niche websites like <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1239136">yahoo.com</a> and <a href="https://github.com/webcompat/web-bugs/issues/2151">about.com</a>.</p>
+
+ <p>So, anyways. I added <a href="https://compat.spec.whatwg.org/#css-media-queries-webkit-transform-3d"><code>@media (-webkit-transform-3d)</code> to the Compat Standard</a> and we <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1239799">added support for it Firefox</a> so websites stop breaking.</p>
+
+ <p>But you shouldn't ever use it—use <code>@supports</code>. In fact, don't even share this blog post. Maybe delete it from your browser history just in case.</p></div>
+ </summary>
+ <updated>2016-01-20T08:00:00Z</updated>
+ <author>
+ <name>Mike Taylor</name>
+ </author>
+ <source>
+ <id>https://miketaylr.com/posts</id>
+ <link href="https://miketaylr.com/posts" rel="alternate" type="text/html"/>
+ <link href="https://miketaylr.com/posts/rss.xml" rel="self" type="application/rss+xml"/>
+ <rights>3000</rights>
+ <subtitle>Erotic web browser fan-fiction.</subtitle>
+ <title>Mike Taylr Dot Com Web Log</title>
+ <updated>2016-01-20T19:46:39Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://globau.wordpress.com/?p=881</id>
+ <link href="https://globau.wordpress.com/2016/01/20/happy-bmo-push-day-166/" rel="alternate" type="text/html"/>
+ <title>happy bmo push day!</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">the following changes have been pushed to bugzilla.mozilla.org: [1236161] when converting a BMP attachment to PNG fails a zero byte attachment is created [1231918] error handler doesn’t close multi-part responses discuss these changes on mozilla.tools.bmo.Filed under: bmo, mozilla<img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=globau.wordpress.com&amp;blog=25718030&amp;post=881&amp;subd=globau&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>the following changes have been pushed to bugzilla.mozilla.org:</p>
+ <ul>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1236161" target="_blank">1236161</a>] when converting a BMP attachment to PNG fails a zero byte attachment is created</li>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1231918" target="_blank">1231918</a>] error handler doesn’t close multi-part responses</li>
+ </ul>
+ <p>discuss these changes on <a href="https://lists.mozilla.org/listinfo/tools-bmo" target="_blank">mozilla.tools.bmo</a>.</p><br/>Filed under: <a href="https://globau.wordpress.com/category/mozilla/bmo/">bmo</a>, <a href="https://globau.wordpress.com/category/mozilla/">mozilla</a> <img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=globau.wordpress.com&amp;blog=25718030&amp;post=881&amp;subd=globau&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-20T07:33:46Z</updated>
+ <category term="bmo"/>
+ <category term="mozilla"/>
+ <author>
+ <name>glob</name>
+ </author>
+ <source>
+ <id>https://globau.wordpress.com</id>
+ <logo>https://s2.wp.com/i/buttonw-com.png</logo>
+ <link href="https://globau.wordpress.com/category/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://globau.wordpress.com" rel="alternate" type="text/html"/>
+ <link href="https://globau.wordpress.com/osd.xml" rel="search" title="glob blog" type="application/opensearchdescription+xml"/>
+ <link href="https://globau.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
+ <title>mozilla – glob blog</title>
+ <updated>2016-01-26T19:01:06Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>https://www.alex-johnson.net/tag/mozilla/rss/85d84c54-ed0c-4ee5-beb3-8823edb3c074</id>
+ <link href="https://www.alex-johnson.net/removing-honeycomb-code/" rel="alternate" type="text/html"/>
+ <title>Removing Honeycomb Code</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As an effort to reduce the APK size of Firefox for Android and to remove unnecessary code, I will be helping remove the Honeycomb code throughout the Fennec project. Honeycomb will not be supported since Firefox 46, so this code is not necessary. <br/>
+ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1217675">Bug 1217675</a> will keep track of the</p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As an effort to reduce the APK size of Firefox for Android and to remove unnecessary code, I will be helping remove the Honeycomb code throughout the Fennec project. Honeycomb will not be supported since Firefox 46, so this code is not necessary. <br/>
+ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1217675">Bug 1217675</a> will keep track of the progress. <br/>
+ Hopefully this will help reduce the APK size some and clean up the road for <a href="https://www.youtube.com/watch?v=NJ6kzW5t02Y">killing Gingerbread</a> hopefully sometime in the near future.</p></div>
+ </content>
+ <updated>2016-01-20T04:59:34Z</updated>
+ <category term="Mozilla"/>
+ <category term="Android"/>
+ <category term="Mobile"/>
+ <author>
+ <name>Alex Johnson</name>
+ </author>
+ <source>
+ <id>https://www.alex-johnson.net/</id>
+ <link href="https://www.alex-johnson.net/" rel="alternate" type="text/html"/>
+ <link href="https://www.alex-johnson.net/tag/mozilla/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>Open source evangelist; lover of technology and video games.</subtitle>
+ <title>Mozilla - Alex Johnson</title>
+ <updated>2016-01-26T19:01:53Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://www.brianbondy.com/blog/id/172</id>
+ <link href="http://www.brianbondy.com/blog/172/brave-software" rel="alternate" type="text/html"/>
+ <title>Brave Software</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p/><p>Since June of last year, I’ve been co-founding a new startup called <a href="https://brave.com/">Brave Software</a> with <a href="https://en.wikipedia.org/wiki/Brendan_Eich">Brendan Eich</a>.
+ With our amazing team, we're developing something pretty epic.</p><p/>
+ <p/><p>We're building the next-generation of browsers for smartphones and laptops as part of our new ad-tech platform.
+ Our terms of use give our users control over their personal data by blocking ad trackers and third party cookies.
+ We re-integrate fewer and better ads directly into programmatic ad positions, paying revenue shares to users and publishers to support both of these essential parties in the web ecosystem.</p><p/>
+ <p/><p>Coming built in, we have new faster engines for tracking protection, ad block, HTTPS Everywhere, safe ads with rev-share, and more.
+ We're seeing massive web page load time speedups.</p><p/>
+
+
+ <p/><p>We're starting to bring people in for early developer build access on all platforms.</p><p/>
+ <p/><p>I’m happy to share that the browsers we’re developing were made fully open sourced.
+ We welcome contributors, and would love your help.</p><p/>
+ <p/><p>Some of the repositories include:</p><p/>
+ <ul>
+ <li><a href="https://github.com/brave/browser-laptop">Brave OSX and Windows x64 browsers</a>: Prototyped as a Gecko based browser, but now replaced with a powerful new browser built on top of the electron framework. The electron framework is the same one in use by Slack and the Atom editor. It uses the latest libchromiumcontent and Node.</li>
+ <li><a href="https://github.com/brave/link-bubble">Brave for Android</a>: Formerly Link Bubble, working as a background service so you can use other apps as your pages load.</li>
+ <li><a href="https://github.com/brave/browser-ios">Brave for iOS</a>: Originally forked from Firefox for iOS but with all of the built-in greatness described above.</li>
+ <li>And many others: Website, updater code, vault, electron fork, and others.</li>
+ </ul></div>
+ </summary>
+ <updated>2016-01-20T00:00:00Z</updated>
+ <category term="brave"/>
+ <category term="electron"/>
+ <category term="node"/>
+ <category term="firefox"/>
+ <category term="firefox-ios"/>
+ <category term="mozilla"/>
+ <category term="gecko"/>
+ <author>
+ <name>Brian R. Bondy</name>
+ </author>
+ <source>
+ <id>http://www.brianbondy.com/blog/tagged/mozilla</id>
+ <logo>http://www.brianbondy.com/img/logo.png</logo>
+ <link href="http://www.brianbondy.com/blog/tagged/mozilla" rel="alternate" type="text/html"/>
+ <link href="http://www.brianbondy.com/feeds/rss/mozilla" rel="self" type="application/rss+xml"/>
+ <subtitle>Blog posts tagged mozilla by Brian R. Bondy</subtitle>
+ <title>Brian R. Bondy's feed for tag mozilla</title>
+ <updated>2016-01-26T19:01:09Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://coffeeonthekeyboard.com/rss/0388d8a6-fc86-477e-a161-1b356e01fe77</id>
+ <link href="http://coffeeonthekeyboard.com/piefection-slides-up/" rel="alternate" type="text/html"/>
+ <title>PIEfection Slides Up</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I put <a href="https://github.com/jsocol/talks/tree/master/2016-01-13-manhattanjs-pie">the slides for my ManhattanJS talk, "PIEfection"</a> up on GitHub the other day (sans images, but there are links in the source for all of those).</p>
+
+ <p>I completely neglected to talk about the <a href="https://en.wikipedia.org/wiki/Maillard_reaction">Maillard reaction</a>, which is responsible for food tasting good, and specifically for browning pie crusts.</p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I put <a href="https://github.com/jsocol/talks/tree/master/2016-01-13-manhattanjs-pie">the slides for my ManhattanJS talk, "PIEfection"</a> up on GitHub the other day (sans images, but there are links in the source for all of those).</p>
+
+ <p>I completely neglected to talk about the <a href="https://en.wikipedia.org/wiki/Maillard_reaction">Maillard reaction</a>, which is responsible for food tasting good, and specifically for browning pie crusts. tl;dr: Amino acid (protein) + sugar + ~300°F (~150°C) = delicious. There are innumerable and poorly understood combinations of amino acids and sugars, but this class of reaction is responsible for everything from searing stakes to browning crusts to toasting marshmallows.</p>
+
+ <p>Above ~330°F, you get caramelization, which is also a delicious part of the pie and crust, but you don't want to overdo it. Starting around ~400°F, you get pyrolysis (burning, charring, carbonization) and below 285°F the reaction won't occur (at least not quickly) so you won't get the delicious compounds.</p>
+
+ <p>(All of these are, of course, temperatures measured in the material, not in the air of the oven.)</p>
+
+ <p>So, instead of an egg wash on your top crust, try whole milk, which has more sugar to react with the gluten in the crust.</p>
+
+ <p>I also didn't get a chance to mention a rolling technique I use, that I learned from a <a href="https://www.facebook.com/ellenspirerstaffing">cousin of mine</a>, in whose baking shadow I happily live.</p>
+
+ <p>When rolling out a crust after it's been in the fridge, first roll it out in a long stretch, then fold it in thirds; do it again; then start rolling it out into a round. Not only do you add more layer structure (mmm, flaky, delicious layers) but it'll fill in the cracks that often form if you try to roll it out directly, resulting in a stronger crust.</p>
+
+ <p>Those <a href="http://www.amazon.com/Cheese-Shaker-Pepper-Perforated-Stainless/dp/B007T40P28/ref=sr_1_1?ie=UTF8&amp;qid=1453236391&amp;sr=8-1&amp;keywords=pizza+shaker">pepper flake shakers</a>, filled with flour, are a great way to keep adding flour to the workspace without worrying about your buttery hands.</p>
+
+ <p>For transferring the crust to the pie plate, try rolling it up onto your rolling pin and unrolling it on the plate. <a href="http://www.amazon.com/Ateco-20-Inch-Length-French-Rolling/dp/B000KESQ1G">Tapered (or "French") rolling pins</a> (or wine bottle) are particularly good at this since they don't have moving parts.</p>
+
+ <p>Finally, thanks again to <a href="https://twitter.com/renrutnnej">Jenn</a> for helping me get pies from one island to another. It would not have been possible without her!</p></div>
+ </content>
+ <updated>2016-01-19T20:45:34Z</updated>
+ <author>
+ <name>James Socol</name>
+ </author>
+ <source>
+ <id>http://coffeeonthekeyboard.com/</id>
+ <link href="http://coffeeonthekeyboard.com/" rel="alternate" type="text/html"/>
+ <link href="http://coffeeonthekeyboard.com/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>Coffee on the Keyboard</subtitle>
+ <title>Coffee on the Keyboard</title>
+ <updated>2016-01-25T18:00:43Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/</id>
+ <link href="https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/" rel="alternate" type="text/html"/>
+ <title>Reprendre le contrôle de sa vie privée sur Internet</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Reprendre le contr&#xF4;le de sa vie priv&#xE9;e sur Internet" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/be/f6/bef62897fb87e08dc8392fe61d10bcfa.png" width="160"/>
+ L'omniprésence des réseaux sociaux, des moteurs de recherches et de la publicité est-elle compatible avec notre droit à la vie privée ?
+ </p></div>
+ </summary>
+ <updated>2016-01-19T18:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://mykzilla.org/?p=245</id>
+ <link href="https://mykzilla.org/2016/01/19/new-year-new-blogware/" rel="alternate" type="text/html"/>
+ <title>New Year, New Blogware</title>
+ <summary>Four score and many moons ago, I decided to move this blog from Blogger to WordPress. The transition took longer than expected, but it’s finally done. If you’ve been following along at the old address, https://mykzilla.blogspot.com/, now’s the time to update your address book! If you’ve been going to https://mykzilla.org/, however, or you read the […]</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Four score and many moons ago, I decided to move this blog from Blogger to WordPress. The transition took longer than expected, but it’s finally done.</p>
+ <p>If you’ve been following along at the old address, <a href="https://mykzilla.blogspot.com/">https://mykzilla.blogspot.com/</a>, now’s the time to update your address book! If you’ve been going to <a href="https://mykzilla.org/">https://mykzilla.org/</a>, however, or you read the blog on <a href="http://planet.mozilla.org/">Planet Mozilla</a>, then there’s nothing to do, as that’s the new address, and Planet Mozilla has been updated to syndicate posts from it.</p></div>
+ </content>
+ <updated>2016-01-19T16:56:05Z</updated>
+ <category term="Mozilla"/>
+ <author>
+ <name>Myk Melez</name>
+ </author>
+ <source>
+ <id>https://mykzilla.org</id>
+ <logo>https://mykzilla.org/wp-content/uploads/2016/01/cropped-headshot-2014-32x32.jpg</logo>
+ <link href="https://mykzilla.org/category/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://mykzilla.org" rel="alternate" type="text/html"/>
+ <title>Mozilla – Mykzilla</title>
+ <updated>2016-01-19T17:30:17Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://michaelkohler.info/?p=348</id>
+ <link href="https://michaelkohler.info/2016/mozillas-strategische-leitlinien-fur-2016-und-danach" rel="alternate" type="text/html"/>
+ <title>Mozillas strategische Leitlinien für 2016 und danach</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Dieser Beitrag wurde zuerst im Blog auf https://blog.mozilla.org/community veröffentlicht. Herzlichen Dank an Aryx und Coce für die Übersetzung! Auf der ganzen Welt arbeiten leidenschaftliche Mozillianer am Fortschritt für Mozillas Mission. Aber fragt man fünf verschiedene Mozillianer, was die Mission ist, erhält man womöglich sieben verschiedene Antworten. Am Ende des letzten Jahres legte Mozillas CEO Chris Beard klare Vorstellungen über Mozillas Mission, Vision und Rolle dar und zeigte auf, wie unsere Produkte uns diesem Ziel in den nächsten fünf Jahren näher bringen. Das Ziel dieser strategischen Leitlinien besteht darin, für Mozilla...<a class="read-more" href="https://michaelkohler.info/2016/mozillas-strategische-leitlinien-fur-2016-und-danach">read more</a><img alt="" height="0" src="http://piwik.michaelkohler.info/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fmichaelkohler.info%2F2016%2Fmozillas-strategische-leitlinien-fur-2016-und-danach&amp;action_name=Mozillas+strategische+Leitlinien+f%C3%BCr+2016+und+danach&amp;urlref=https%3A%2F%2Fmichaelkohler.info%2Ffeed" style="border: 0; width: 0; height: 0;" width="0"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Dieser Beitrag wurde zuerst im Blog auf<a href="https://blog.mozilla.org/community"> https://blog.mozilla.org/community</a> veröffentlicht. Herzlichen Dank an Aryx und Coce für die Übersetzung!</p>
+ <p>Auf der ganzen Welt arbeiten leidenschaftliche Mozillianer am Fortschritt für Mozillas Mission. Aber fragt man fünf verschiedene Mozillianer, was die Mission ist, erhält man womöglich sieben verschiedene Antworten.</p>
+ <p>Am Ende des letzten Jahres legte Mozillas CEO Chris Beard klare Vorstellungen über Mozillas Mission, Vision und Rolle dar und zeigte auf, wie unsere Produkte uns diesem Ziel in den nächsten fünf Jahren näher bringen. Das Ziel dieser strategischen Leitlinien besteht darin, für Mozilla insgesamt ein prägnantes, gemeinsames Verständnis unserer Ziele zu entwickeln, die uns als Individuen das Treffen von Entscheidungen und Erkennen von Möglichkeiten erleichtert, mit denen wir Mozilla voranbringen.</p>
+ <p>Mozillas Mission können wir nicht alleine erreichen. Die Tausenden von Mozillianern auf der ganzen Welt müssen dahinter stehen, damit wir zügig und mit lauterer Stimme als je zuvor Unglaubliches erreichen können.</p>
+ <p>Deswegen ist eine der sechs<a href="https://docs.google.com/presentation/d/1A3Ma9gNawAYYGbYC2bUW0wUwcpHuvyMiZvHNiMLriw0/edit#slide=id.gdaa7a0bd0_1_0"> strategischen Initiativen</a> des Participation Teams für die erste Jahreshälfte, möglichst viele Mozillianer über diese Leitlinien aufzuklären, damit wir 2016 den bisher wesentlichsten Einfluss erzielen können. Wir werden einen weiteren Beitrag veröffentlichen, der sich näher mit der Strategie des Participation Teams für das Jahr 2016 befassen wird.</p>
+ <p><img alt="" class="alignnone" height="335" src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/community/files/2016/01/Screen-Shot-2015-12-18-at-2.02.07-PM-600x335.png" width="600"/></p>
+ <p>Das Verstehen dieser Strategie wird unabdingbar sein für jeden, der bei Mozilla in diesem Jahr etwas bewirken möchte, denn sie wird bestimmen, wofür wir eintreten, wo wir unsere Ressourcen einsetzen und auf welche Projekte wir uns 2016 konzentrieren werden.</p>
+ <p>Zu Jahresbeginn werden wir näher auf diese Strategie eingehen und weitere Details dazu bekanntgeben, wie die diversen Teams und Projekte bei Mozilla auf diese Ziele hinarbeiten.</p>
+ <p>Der aktuelle Aufruf zum Handeln besteht darin, im Kontext Ihrer Arbeit über diese Ziele nachzudenken und darüber, wie Sie im kommenden Jahr bei Mozilla mitwirken möchten. Dies hilft, Ihre Innovationen, Ambitionen und Ihren Einfluss im Jahr 2016 zu gestalten.</p>
+ <p>Wir hoffen, dass Sie mitdiskutieren und Ihre Fragen, Kommentare und Pläne für das Vorantreiben der strategischen Leitlinien im Jahr 2016<a href="https://discourse.mozilla-community.org/t/mozillas-strategic-narrative-2016/6397"> hier</a> auf Discourse teilen und Ihre Gedanken auf Twitter mit dem Hashtag <a href="https://twitter.com/search?q=%23mozilla2016strategy&amp;src=typd">#Mozilla2016Strategy</a> mitteilen.</p>
+ <p> </p>
+ <h3>Mission, Vision &amp; Strategie</h3>
+ <p><b>Unsere Mission</b></p>
+ <p>Dafür zu sorgen, dass das Internet eine weltweite öffentliche Ressource ist, die allen zugänglich ist.</p>
+ <p><b>Unsere Vision</b></p>
+ <p>Ein Internet, für das Menschen tatsächlich an erster Stelle stehen. Ein Internet, in dem Menschen ihr eigenes Erlebnis gestalten können. Ein Internet, in dem die Menschen selbst entscheiden können sowie sicher und unabhängig sind.</p>
+ <p><b>Unsere Rolle</b></p>
+ <p>Mozilla setzt sich im wahrsten Sinne des Wortes in Ihrem Online-Leben für Sie ein. Wir setzen uns für Sie ein, sowohl in Ihrem Online-Erlebnis als auch für Ihre Interessen beim Zustand des Internets.</p>
+ <p><b>Unsere Arbeit</b></p>
+ <p>Unsere Säulen</p>
+ <ol>
+ <li><b>Produkte:</b> Wir entwickeln Produkte mit Menschen im Mittelpunkt sowie Bildungsprogramme, mit deren Hilfe Menschen online ihr gesamtes Potential ausschöpfen können.</li>
+ <li><b>Technologie:</b> Wir entwickeln robuste technische Lösungen, die das Internet über verschiedene Plattformen hinweg zum Leben erwecken.</li>
+ <li><b>Menschen:</b> Wir entwickeln Führungspersonen und Mitwirkende in der Gemeinschaft, die das Internet erfinden, gestalten und verteidigen.</li>
+ </ol>
+ <p>Wir wir positive Veränderungen in Zukunft anpacken wollen</p>
+ <p>Die Arbeitsweise ist ebensowichtig wie das Ziel. Unsere Gesundheit und bleibender Einfluss hängen davon ab, wie sehr unsere Produkte und Aktivitäten:</p>
+ <ol>
+ <li>Interoperabilität, Open Source und offene Standards fördern,</li>
+ <li>Gemeinschaften aufbauen und fördern,</li>
+ <li>Für politische Veränderungen und rechtlichen Schutz eintreten sowie</li>
+ <li>Netzbürger bilden und einbeziehen.</li>
+ </ol>
+ <p> </p>
+ <img alt="" height="0" src="http://piwik.michaelkohler.info/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fmichaelkohler.info%2F2016%2Fmozillas-strategische-leitlinien-fur-2016-und-danach&amp;action_name=Mozillas+strategische+Leitlinien+f%C3%BCr+2016+und+danach&amp;urlref=https%3A%2F%2Fmichaelkohler.info%2Ffeed" style="border: 0; width: 0; height: 0;" width="0"/></div>
+ </content>
+ <updated>2016-01-19T15:27:24Z</updated>
+ <category term="Mozilla"/>
+ <category term="MozillaDeutsch"/>
+ <author>
+ <name>Michael Kohler</name>
+ </author>
+ <source>
+ <id>https://michaelkohler.info</id>
+ <link href="https://michaelkohler.info/category/mozilla/feed" rel="self" type="application/rss+xml"/>
+ <link href="https://michaelkohler.info" rel="alternate" type="text/html"/>
+ <title>Mozilla – Michael Kohler</title>
+ <updated>2016-01-19T15:31:45Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://dlawrence.wordpress.com/?p=27</id>
+ <link href="https://dlawrence.wordpress.com/2016/01/19/happy-bmo-push-day-3/" rel="alternate" type="text/html"/>
+ <title>happy bmo push day!</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">the following changes have been pushed to bugzilla.mozilla.org: [1238573] Change label of “New Bug” menu to “New/Clone Bug” [1239065] Project Kickoff Form: Adjustments needed to Mozilla Infosec review portion [1240157] Fix a typo in bug.rst [1236461] Mass update mozilla-reps group discuss these changes on mozilla.tools.bmo.<img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;blog=58816&amp;post=27&amp;subd=dlawrence&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>the following changes have been pushed to bugzilla.mozilla.org:</p>
+ <ul>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1238573" target="_blank">1238573</a>] Change label of “New Bug” menu to “New/Clone Bug”</li>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1239065" target="_blank">1239065</a>] Project Kickoff Form: Adjustments needed to Mozilla Infosec review portion</li>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1240157" target="_blank">1240157</a>] Fix a typo in bug.rst</li>
+ <li>[<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1236461" target="_blank">1236461</a>] Mass update mozilla-reps group</li>
+ </ul>
+ <p>discuss these changes on <a href="https://lists.mozilla.org/listinfo/tools-bmo" target="_blank">mozilla.tools.bmo</a>.</p><br/> <a href="http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/27/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/27/"/></a> <img alt="" border="0" height="1" src="https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;blog=58816&amp;post=27&amp;subd=dlawrence&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-19T14:49:59Z</updated>
+ <category term="Uncategorized"/>
+ <author>
+ <name>dlawrence</name>
+ </author>
+ <source>
+ <id>https://dlawrence.wordpress.com</id>
+ <logo>https://s2.wp.com/i/buttonw-com.png</logo>
+ <link href="https://dlawrence.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://dlawrence.wordpress.com" rel="alternate" type="text/html"/>
+ <link href="https://dlawrence.wordpress.com/osd.xml" rel="search" title="Dave's Ramblings" type="application/opensearchdescription+xml"/>
+ <link href="https://dlawrence.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
+ <subtitle>Thoughts somehow related to web, linux, mobile and other things I am interested in</subtitle>
+ <title>Dave's Ramblings</title>
+ <updated>2016-01-26T14:31:39Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://soledadpenades.com/?p=6335</id>
+ <link href="http://soledadpenades.com/2016/01/19/hardware-hack-day-mozldn-1/" rel="alternate" type="text/html"/>
+ <link href="https://flattr.com/submit/auto?user_id=8399&amp;popout=1&amp;url=http%3A%2F%2Fsoledadpenades.com%2F2016%2F01%2F19%2Fhardware-hack-day-mozldn-1%2F&amp;language=en_GB&amp;category=text&amp;title=Hardware+Hack+Day+%40+MozLDN%2C+1&amp;description=Last+week+we+ran+an+internal+%26%238220%3Bhack+day%26%238221%3B+here+at+the+Mozilla+space+in+London.+It+was+just+a+bunch+of+software+engineers+looking+at+various+hardware+boards+and+things...&amp;tags=arduino%2Clinux%2Cmdns%2Cmozilla%2Craspberry+pi%2Cwi-fi%2Cblog" rel="payment" title="Flattr this!" type="text/html"/>
+ <title>Hardware Hack Day @ MozLDN, 1</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last week we ran an internal “hack day” here at the Mozilla space in London. It was just a bunch of software engineers looking at various hardware boards and things and learning about them Here’s what we did! Sole I essentially kind of bricked my Arduino Duemilanove trying to get it working with Johnny Five, … <a class="more-link" href="http://soledadpenades.com/2016/01/19/hardware-hack-day-mozldn-1/">Continue reading <span class="screen-reader-text">Hardware Hack Day @ MozLDN, 1</span> <span class="meta-nav">→</span></a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Last week we ran an internal “hack day” here at the Mozilla space in London. It was just a bunch of <em>software</em> engineers looking at various <em>hardware</em> boards and things and learning about them <img alt=":-)" class="wp-smiley" src="http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png" style="height: 1em;"/></p>
+ <p>Here’s what we did!</p>
+ <h3><a href="http://soledadpenades.com/">Sole</a></h3>
+ <p>I essentially <a href="http://soledadpenades.com/2016/01/19/kind-of-bricking-an-arduino-duemilanove-by-exhausting-its-memory/">kind of bricked my Arduino Duemilanove</a> trying to get it working with Johnny Five, but it was fine–apparently there’s a way to recover it using another Arduino, and someone offered to help with that in the next <a href="http://www.meetup.com/NodeBots-of-London/events/227890374/">NodeBots</a> London, which I’m going to attend.</p>
+ <h3><a href="http://ardeenelinfierno.com/">Francisco</a></h3>
+ <p>Thinks he’s having issues with cables. It seems like the boards are not reset automatically by the Arduino IDE nowadays? He found the button in the board actually resets the board when pressed i.e. it’s the RESET button.</p>
+ <p>On the Raspberry Pi side of things, he was very happy to put all his old-school Linux skills in action configuring network interfaces without GUIs!</p>
+ <h3><a href="http://gu.illau.me/">Guillaume</a></h3>
+ <p>Played with mDNS advertising and listening to services on Raspberry Pi.</p>
+ <p>(He was very quiet)</p>
+ <p>(He also built a very nice LEGO case for the Raspberry Pi, but I do not have a picture, so just imagine it).</p>
+ <h3><a href="http://wilsonpage.co.uk/">Wilson</a></h3>
+ <blockquote><p>
+ Wilson: “I got my Raspberry Pi on the Wi-Fi”</p>
+ <p>Francisco: “Sorry?”</p>
+ <p>Wilson: “I mean, you got my Raspberry Pi on the network. And now I’m trying to build a web app on the Pi…”</p></blockquote>
+ <h3><a href="http://chrislord.net/">Chris</a></h3>
+ <p>Exploring the Pebble with Linux. There’s a libpebble, and he managed to connect…</p>
+ <p><del datetime="2016-01-20T11:22:33+00:00"><em><small>(sorry, I had to leave early so I do not know what else did Chris do!)</small></em></del></p>
+ <p>Updated, 20 January: Chris told me he just managed to successfully connect to the Pebble watch using the bluetooth WebAPI. It requires two Gecko patches (one regression patch and one obvious logic error that he hasn’t filed yet). PROGRESS!</p>
+ <p>~~~</p>
+ <p>So as you can see we didn’t really get super far in just a day, and I even ended up with unusable hardware. BUT! we all learned something, and next time we know what NOT to do (or at least I DO KNOW what NOT to do!).</p>
+ <p><a href="http://soledadpenades.com/?flattrss_redirect&amp;id=6335&amp;md5=40427d69faa3b9c2d1530732fd78e66d" target="_blank" title="Flattr"><img alt="flattr this!" src="http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png"/></a></p></div>
+ </content>
+ <updated>2016-01-19T13:31:55Z</updated>
+ <category term="Events"/>
+ <category term="Hardware"/>
+ <category term="arduino"/>
+ <category term="linux"/>
+ <category term="mdns"/>
+ <category term="mozilla"/>
+ <category term="raspberry pi"/>
+ <category term="wi-fi"/>
+ <author>
+ <name>sole</name>
+ </author>
+ <source>
+ <id>http://soledadpenades.com</id>
+ <link href="http://soledadpenades.com/tag/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://soledadpenades.com" rel="alternate" type="text/html"/>
+ <subtitle>repeat 4[fd 100 rt 90]</subtitle>
+ <title>mozilla – soledad penadés</title>
+ <updated>2016-01-26T02:46:29Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://daniel.haxx.se/blog/?p=8544</id>
+ <link href="http://daniel.haxx.se/blog/2016/01/19/subject-urgent-warning/" rel="alternate" type="text/html"/>
+ <title>“Subject: Urgent Warning”</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Back in December I got a desperate email from this person. A woman who said her Instagram had been hacked and since she found my contact info in the app she mailed me and asked for help. I of course replied and said that I have nothing to do with her being hacked but I … <a class="more-link" href="http://daniel.haxx.se/blog/2016/01/19/subject-urgent-warning/">Continue reading <span class="screen-reader-text">“Subject: Urgent Warning”</span> <span class="meta-nav">→</span></a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Back in December I got a desperate email from this person. A woman who said her Instagram had been hacked and since she found my contact info in the app she mailed me and asked for help. I of course replied and said that I have nothing to do with her being hacked but I also have nothing to do with Instagram other than that they use software I’ve written.</p>
+ <p>Today she writes back. Clearly not convinced I told the truth before, and now she strikes back with more “evidence” of my wrongdoings.</p>
+ <p><em>Dear Daniel,</em></p>
+ <p><em>I had emailed you a couple months ago about my “screen dumps” aka screenshots and asked for your help with restoring my Instagram account since it had been hacked, my photos changed, and your name was included in the coding. You claimed to have no involvement whatsoever in developing a third party app for Instagram and could not help me salvage my original Instagram photos, pre-hacked, despite Instagram serving as my Photography portfolio and my career is a Photographer.</em></p>
+ <p><em>Since you weren’t aware that your name was attached to Instagram related hacking code, I thought you might want to know, in case you weren’t already aware, that your name is also included in Spotify terms and conditions. I came across this information using my Spotify which has also been hacked into and would love your help hacking out of Spotify. Also, I have yet to figure out how to unhack the hackers from my Instagram so if you change your mind and want to restore my Instagram to its original form as well as help me secure my account from future privacy breaches, I’d be extremely grateful. As you know, changing my passwords did nothing to resolve the problem. Please keep in mind that Facebook owns Instagram and these are big companies that you likely don’t want to have a trail of evidence that you are a part of an Instagram and Spotify hacking ring. Also, Spotify is a major partner of Spotify so you are likely familiar with the coding for all of these illegally developed third party apps. I’d be grateful for your help fixing this error immediately.</em></p>
+ <p><em>Thank you,</em></p>
+ <p>[name redacted]</p>
+ <p><em>P.S. Please see attached screen dump for a screen shot of your contact info included in Spotify (or what more likely seems to be a hacked Spotify developed illegally by a third party).</em></p>
+ <p><a href="http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393.png" rel="attachment wp-att-8545"><img alt="Spotify credits screenshot" class="aligncenter size-medium wp-image-8545" height="450" src="http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393-253x450.png" width="253"/></a></p>
+ <p>Here’s the Instagram screenshot she sent me in a previous email:</p>
+ <p><a href="http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156.jpg" rel="attachment wp-att-8546"><img alt="Instagram credits screenshot" class="aligncenter size-medium wp-image-8546" height="450" src="http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156-253x450.jpg" width="253"/></a></p>
+ <p>I’ve tried to respond with calm and clear reasonable logic and technical details on why she’s seeing my name there. That clearly failed. What do I try next?</p></div>
+ </content>
+ <updated>2016-01-19T08:37:32Z</updated>
+ <category term="cURL and libcurl"/>
+ <category term="Open Source"/>
+ <category term="Technology"/>
+ <category term="hacking"/>
+ <category term="Mail"/>
+ <author>
+ <name>Daniel Stenberg</name>
+ </author>
+ <source>
+ <id>http://daniel.haxx.se/blog</id>
+ <logo>http://daniel.haxx.se/blog/wp-content/uploads/2015/08/cropped-Daniel-head-greenshirt-32x32.jpg</logo>
+ <link href="http://daniel.haxx.se/blog/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://daniel.haxx.se/blog" rel="alternate" type="text/html"/>
+ <subtitle>tech, open source and networking</subtitle>
+ <title>daniel.haxx.se</title>
+ <updated>2016-01-26T07:16:26Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-us">
+ <id>http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html</id>
+ <link href="http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html" rel="alternate" type="text/html"/>
+ <title>How much knowledge do you need to give a conference talk?</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h3>How much knowledge do you need to give a conference talk?</h3>
+ <p>I was recently asked an excellent question when I promoted the <a class="reference external" href="http://www.linuxfestnorthwest.org/2016/present">LFNW CFP</a> on
+ IRC:</p>
+ <blockquote>
+ <div>As someone who has never done a talk, but wants to, what kind of knowledge
+ do you need about a subject to give a talk on it?</div></blockquote>
+ <p>If you answer “yes” to any of the following questions, you know enough to
+ propose a talk:</p>
+ <ul class="simple">
+ <li>Do you have a <strong>hobby</strong> that most tech people aren’t experts on? Talk
+ about applying a lesson or skill from that hobby to tech! For instance, I
+ turned a habit of reading about psychology into my <a class="reference external" href="http://talks.edunham.net/scale13x/#1">Human Hacking</a> talk.</li>
+ <li>Have you ever spent a bunch of hours forcing two tools to work with each
+ other, because the documentation wasn’t very helpful and Googling didn’t get
+ you very far, and built something useful? “How to build ___ with ___” makes
+ a catchy talk title, if the <strong>thing you built</strong> solves a common problem.</li>
+ <li>Have you ever had a mentor sit down with you and explain a tool or
+ technique, and the new understanding improved the quality of your work or
+ code? Passing along useful <strong>lessons from your mentors</strong> is a valuable talk,
+ because it allows others to benefit from the knowledge without taking as
+ much of your mentor’s time.</li>
+ <li>Have you seen a dozen newbies ask the same question over the course of a few
+ months? When your <strong>answer to a common question</strong> starts to feel like a
+ broken record, it’s time to compose it into a talk then link the newbies to
+ your slides or recording!</li>
+ <li>Have you taken a really <strong>interesting class</strong> lately? Can you distill part of it
+ into a 1-hour lesson that would appeal to nerds who don’t have the time or
+ resources to take the class themselves? (thanks <a class="reference external" href="http://lucywyman.me/">lucyw</a> for adding this to
+ the list!)</li>
+ <li>Have you built a cool thing that over a dozen other people use? A <strong>tutorial
+ talk</strong> can not only expand your community, but its recording can augment your
+ documentation and make the project more accessible for those who prefer to
+ learn directly from humans!</li>
+ <li>Did you benefit from a really great introductory talk when you were learning
+ a tool? Consider doing your own tutorial! Any conference with beginners in
+ their target audience needs at least one Git lesson, an IRC talk, and some
+ discussions of how to use basic Unix utilities. These <strong>introductory talks</strong>
+ are actually better when given by someone who learned the technology
+ relatively recently, because newer users remember what it’s like not to know
+ how to use it. Just remember to have a more expert user look over your slides
+ before you present, in case you made an incorrect assumption about the tool’s
+ more advanced functionality.</li>
+ </ul>
+ <p>I personally try to propose talks I want to hear, because the dealine of a
+ CFP or conference is great motivation to prioritize a cool project over
+ ordinary chores.</p></div>
+ </summary>
+ <updated>2016-01-19T08:00:00Z</updated>
+ <source>
+ <id>http://edunham.net/</id>
+ <author>
+ <name>Emily Dunham</name>
+ </author>
+ <link href="http://edunham.net/" rel="alternate" type="text/html"/>
+ <link href="http://edunham.net/rss.html?tag=planetmozilla" rel="self" type="application/rss+xml"/>
+ <subtitle>is a "DevOps" Engineer at Mozilla Research</subtitle>
+ <title>edunham</title>
+ <updated>2016-01-19T08:00:00Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://quality.mozilla.org/?p=49441</id>
+ <link href="https://quality.mozilla.org/2016/01/aurora-45-0-testday-results/" rel="alternate" type="text/html"/>
+ <title>Aurora 45.0 Testday Results</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Howdy mozillians! Last week – on Friday, January 15th – we held Aurora 45.0 Testday; and, of course, it was another outstanding event! Thank you all – Mahmoudi Dris, Iryna Thompson, Chandrakant Dhutadmal, Preethi Dhinesh, Moin Shaikh, Ilse Macías, Hossain Al Ikram, Rezaul Huque Nayeem, Tahsan Chowdhury Akash, Kazi Nuzhat Tasnem, Fahmida … <a class="go" href="https://quality.mozilla.org/2016/01/aurora-45-0-testday-results/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Howdy mozillians!</p>
+ <p>Last week – on <em>Friday, January 15th</em> – we held <a href="https://quality.mozilla.org/2016/01/firefox-45-0-aurora-testday-january-15th/">Aurora 45.0 Testday</a>; and, of course, it was another outstanding event!</p>
+ <p><strong>Thank you</strong> all – <span class="author-a-oz90z4z89zz89za7qfz70zda5z87zxz85z i"><i>Mahmoudi Dris, Iryna Thompson, Chandrakant Dhutadmal, Preethi Dhinesh, Moin Shaikh, Ilse Macías, Hossain Al Ikram, Rezaul Huque Nayeem, Tahsan Chowdhury Akash, Kazi Nuzhat Tasnem, Fahmida Noor, Tazin Ahmed, Md. Ehsanul Hassan, Mohammad Maruf Islam, Kazi Sakib Ahmad, Khalid Syfullah Zaman, Asiful Kabir, Tabassum Mehnaz, Hasibul Hasan, Saddam Hossain, Mohammad Kamran Hossain, Amlan Biswas, Fazle Rabbi, Mohammed Jawad Ibne Ishaque, Asif Mahmud Shuvo, Nazir Ahmed Sabbir, Md. Raihan Ali, Md. Almas Hossain, Sadik Khan, Md. Faysal Alam Riyad, Faisal Mahmud, Md. Oliullah Sizan, Asif Mahmud Rony, Forhad Hossain </i>and<i> Tanvir Rahman </i></span>– for the participation!</p>
+ <p>A big <strong>thank you</strong> to all our active moderators too!</p>
+ <p><span style="color: #333333;"><span style="font-family: 'Open Sans', sans-serif;"><span style="font-size: medium;"><u>Results:</u></span></span></span></p>
+ <ul>
+ <li><span style="color: #333333;"><span style="font-family: 'Open Sans', sans-serif;"><span style="font-size: medium;"><strong>15</strong> issues were verified: </span></span></span><span style="color: #333333;"><span style="font-family: 'Open Sans', sans-serif;"><span style="font-size: medium;"> <span style="font-weight: 400;"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1235821">1235821</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1228518">1228518</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1165637">1165637</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1232647">1232647</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1235379">1235379</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=842356">842356</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1222971">1222971</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=915962">915962</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1180761">1180761</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1218455">1218455</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1222747">1222747</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1210752">1210752</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1198450">1198450</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1222820">1222820</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1225514">1225514</a></span></span></span></span></li>
+ <li><strong>1</strong> bug was triaged: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1230789"><span style="font-weight: 400;">1230789</span></a></li>
+ <li>some failures were mentioned for <i>Search Refactoring </i>feature in the etherpads (<a href="https://public.etherpad-mozilla.org/p/testday-20160115">link 1</a> and <a href="https://public.etherpad-mozilla.org/p/bangladesh.testday-15012016">link 2</a>); please feel free to add the requested details in the etherpads or, even better, join us on <a href="http://widget01.mibbit.com/?server=irc.mozilla.org&amp;channel=%23qa" target="_blank">#qa IRC channel</a> and let’s figure them out</li>
+ </ul>
+ <p>I <strong>strongly</strong> advise everyone of you to reach out to us, the moderators, via <a href="http://widget01.mibbit.com/?server=irc.mozilla.org&amp;channel=%23qa">#qa</a> during the events when you encountered any kind of failures. Keep up the great work! \o/</p>
+ <p>And keep an eye on QMO for upcoming events! <img alt="&#x1F609;" class="wp-smiley" src="https://s.w.org/images/core/emoji/72x72/1f609.png" style="height: 1em;"/></p></div>
+ </content>
+ <updated>2016-01-19T07:51:57Z</updated>
+ <category term="Community"/>
+ <category term="Events"/>
+ <category term="QMO News"/>
+ <author>
+ <name>Alexandra Lucinet</name>
+ </author>
+ <source>
+ <id>https://quality.mozilla.org</id>
+ <link href="https://quality.mozilla.org/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://quality.mozilla.org" rel="alternate" type="text/html"/>
+ <subtitle>Driving quality across Mozilla with data, metrics and a strong community focus</subtitle>
+ <title>Mozilla Quality Assurance</title>
+ <updated>2016-01-26T14:46:39Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://blog.monotonous.org/?p=678</id>
+ <link href="http://blog.monotonous.org/2016/01/18/its-mlk-day-and-its-not-too-late-to-do-something-about-it/" rel="alternate" type="text/html"/>
+ <link href="http://blog.monotonous.org/2016/01/18/its-mlk-day-and-its-not-too-late-to-do-something-about-it/#comments" rel="replies" type="text/html"/>
+ <link href="http://blog.monotonous.org/2016/01/18/its-mlk-day-and-its-not-too-late-to-do-something-about-it/feed/atom/" rel="replies" type="application/atom+xml"/>
+ <title xml:lang="en">It’s MLK Day and It’s Not Too Late to Do Something About It</title>
+ <summary type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">For the last three years I have had the opportunity to send out a reminder to Mozilla staff that Martin Luther King Jr. Day is coming up, and that U.S. employees get the day off. It has turned into my MLK Day eve ritual. I read his letters, listen to speeches, and then I compose […]<img alt="" border="0" height="1" src="http://pixel.wp.com/b.gif?host=blog.monotonous.org&amp;blog=34885741&amp;post=678&amp;subd=blogdotmonotonousdotorg&amp;ref=&amp;feed=1" width="1"/></div>
+ </summary>
+ <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>For the last three years I have had the opportunity to send out a reminder to Mozilla staff that Martin Luther King Jr. Day is coming up, and that U.S. employees get the day off. It has turned into my MLK Day eve ritual. I read his letters, listen to speeches, and then I compose a belabored paragraph about Dr. King with some choice quotes.</p>
+ <p>If you didn’t get a chance to celebrate Dr. King’s legacy and the movements he was a part of, you still have a chance:</p>
+ <ul>
+ <li>Watch <a href="http://www.imdb.com/title/tt1020072/" target="_blank">Selma.</a></li>
+ <li>Watch <a href="http://www.imdb.com/title/tt1592527/" target="_blank">The Black Power Mixtape</a> (it’s on Netflix).</li>
+ <li>Read <a href="http://www.africa.upenn.edu/Articles_Gen/Letter_Birmingham.html" target="_blank">A Letter from a Birmingham Jail</a> (it’s really really good).</li>
+ <li>Listen to his speech <a href="https://www.youtube.com/watch?v=3Qf6x9_MLD0" target="_blank">Beyond Vietnam</a>.</li>
+ <li>Listen to his last speech <a href="https://www.youtube.com/watch?v=IDl84vusXos" target="_blank">I Have Been To The Mountaintop</a>.</li>
+ </ul><br/> <a href="http://feeds.wordpress.com/1.0/gocomments/blogdotmonotonousdotorg.wordpress.com/678/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogdotmonotonousdotorg.wordpress.com/678/"/></a> <img alt="" border="0" height="1" src="http://pixel.wp.com/b.gif?host=blog.monotonous.org&amp;blog=34885741&amp;post=678&amp;subd=blogdotmonotonousdotorg&amp;ref=&amp;feed=1" width="1"/></div>
+ </content>
+ <updated>2016-01-18T23:35:19Z</updated>
+ <published>2016-01-18T23:34:26Z</published>
+ <category scheme="http://blog.monotonous.org" term="Personal"/>
+ <category scheme="http://blog.monotonous.org" term="Software"/>
+ <category scheme="http://blog.monotonous.org" term="World Affairs"/>
+ <author>
+ <name>Eitan</name>
+ <uri>http://mememe82.wordpress.com/</uri>
+ </author>
+ <source>
+ <id>http://blog.monotonous.org/feed/atom/</id>
+ <link href="http://blog.monotonous.org" rel="alternate" type="text/html"/>
+ <link href="http://blog.monotonous.org/feed/atom/" rel="self" type="application/atom+xml"/>
+ <link href="http://blog.monotonous.org/osd.xml" rel="search" title="Monotonous.org" type="application/opensearchdescription+xml"/>
+ <link href="https://s1.wp.com/opensearch.xml" rel="search" title="WordPress.com" type="application/opensearchdescription+xml"/>
+ <link href="http://blog.monotonous.org/?pushpress=hub" rel="hub" type="text/html"/>
+ <subtitle xml:lang="en">Eitan's Pitch</subtitle>
+ <title xml:lang="en">Monotonous.org</title>
+ <updated>2016-01-18T23:45:54Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://www.ncameron.org/blog/rss/0e4d587c-380c-40ce-954a-7206f69bc1dd</id>
+ <link href="http://www.ncameron.org/blog/libmacro/" rel="alternate" type="text/html"/>
+ <title>Libmacro</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As I outlined in an <a href="http://ncameron.org/blog/procedural-macros-framework/">earlier post</a>, libmacro is a new crate designed to be used by procedural macro authors. It provides the basic API for procedural macros to interact with the compiler. I expect higher level functionality to be provided by library crates. In this post I'll go into</p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As I outlined in an <a href="http://ncameron.org/blog/procedural-macros-framework/">earlier post</a>, libmacro is a new crate designed to be used by procedural macro authors. It provides the basic API for procedural macros to interact with the compiler. I expect higher level functionality to be provided by library crates. In this post I'll go into a bit more detail about the API I think should be exposed here.</p>
+
+ <p>This is a lot of stuff. I've probably missed something. If you use syntax extensions today and do something with libsyntax that would not be possible with libmacro, please let me know!</p>
+
+ <p>I previously introduced <code>MacroContext</code> as one of the gateways to libmacro. All procedural macros will have access to a <code>&amp;mut MacroContext</code>.</p>
+
+ <h3>Tokens</h3>
+
+ <p>I described the <code>tokens</code> module in the last post, I won't repeat that here.</p>
+
+ <p>There are a few more things I thought of. I mentioned a <code>TokenStream</code> which is a sequence of tokens. We should also have <code>TokenSlice</code> which is a borrowed slice of tokens (the slice to <code>TokenStream</code>'s <code>Vec</code>). These should implement the standard methods for sequences, in particular they support iteration, so can be <code>map</code>ed, etc.</p>
+
+ <p>In the earlier blog post, I talked about a token kind called <code>Delimited</code> which contains a delimited sequence of tokens. I would like to rename that to <code>Sequence</code> and add a <code>None</code> variant to the <code>Delimiter</code> enum. The <code>None</code> option is so that we can have blocks of tokens without using delimiters. It will be used for noting unsafety and other properties of tokens. Furthermore, it is useful for macro expansion (replacing the interpolated AST tokens currently present). Although <code>None</code> blocks do not affect scoping, they do affect precedence and parsing.</p>
+
+ <p>We should provide API for creating tokens. By default these have no hygiene information and come with a span which has no place in the source code, but shows the source of the token to be the procedural macro itself (see below for how this interacts with expansion of the current macro). I expect a <code>make_</code> function for each kind of token. We should also have API for creating macros in a given scope (which do the same thing but with provided hygiene information). This could be considered an over-rich API, since the hygiene information could be set after construction. However, since hygiene is fiddly and annoying to get right, we should make it as easy as possible to work with.</p>
+
+ <p>There should also be a function for creating a token which is just a fresh name. This is useful for creating new identifiers. Although this can be done by interning a string and then creating a token around it, it is used frequently enough to deserve a helper function.</p>
+
+ <h3>Emitting errors and warnings</h3>
+
+ <p>Procedural macros should report errors, warnings, etc. via the <code>MacroContext</code>. They should avoid panicking as much as possible since this will crash the compiler (once <code>catch_panic</code> is available, we should use it to catch such panics and exit gracefully, however, they will certainly still meaning aborting compilation).</p>
+
+ <p>Libmacro will 're-export' <code>DiagnosticBuilder</code> from <a href="https://dxr.mozilla.org/rust/source/src/libsyntax/errors/mod.rs">syntax::errors</a>. I don't actually expect this to be a literal re-export. We will use libmacro's version of <code>Span</code>, for example.</p>
+
+ <pre><code>impl MacroContext {
+ pub fn struct_error(&amp;self, &amp;str) -&gt; DiagnosticBuilder;
+ pub fn error(&amp;self, Option&lt;Span&gt;, &amp;str);
+ }
+
+ pub mod errors {
+ pub struct DiagnosticBuilder { ... }
+ impl DiagnosticBuilder { ... }
+ pub enum ErrorLevel { ... }
+ }
+ </code></pre>
+
+ <p>There should be a macro <code>try_emit!</code>, which reduces a <code>Result&lt;T, ErrStruct&gt;</code> to a T or calls <code>emit()</code> and then calls <code>unreachable!()</code> (if the error is not fatal, then it should be upgraded to a fatal error).</p>
+
+ <h3>Tokenising and quasi-quoting</h3>
+
+ <p>The simplest function here is <code>tokenize</code> which takes a string (<code>&amp;str</code>) and returns a <code>Result&lt;TokenStream, ErrStruct&gt;</code>. The string is treated like source text. The success option is the tokenised version of the string. I expect this function must take a <code>MacroContext</code> argument.</p>
+
+ <p>We will offer a quasi-quoting macro. This will return a <code>TokenStream</code> (in contrast to today's quasi-quoting which returns AST nodes), to be precise a <code>Result&lt;TokenStream, ErrStruct&gt;</code>. The string which is quoted may include metavariables (<code>$x</code>), and these are filled in with variables from the environment. The type of the variables should be either a <code>TokenStream</code>, a <code>TokenTree</code>, or a <code>Result&lt;TokenStream, ErrStruct&gt;</code> (in this last case, if the variable is an error, then it is just returned by the macro). For example,</p>
+
+ <pre><code>fn foo(cx: &amp;mut MacroContext, tokens: TokenStream) -&gt; TokenStream {
+ quote!(cx, fn foo() { $tokens }).unwrap()
+ }
+ </code></pre>
+
+ <p>The <code>quote!</code> macro can also handle multiple tokens when the variable corresponding with the metavariable has type <code>[TokenStream]</code> (or is dereferencable to it). In this case, the same syntax as used in macros-by-example can be used. For example, if <code>x: Vec&lt;TokenStream&gt;</code> then <code>quote!(cx, ($x),*)</code> will produce a <code>TokenStream</code> of a comma-separated list of tokens from the elements of <code>x</code>.</p>
+
+ <p>Since the <code>tokenize</code> function is a degenerate case of quasi-quoting, an alternative would be to always use <code>quote!</code> and remove <code>tokenize</code>. I believe there is utility in the simple function, and it must be used internally in any case.</p>
+
+ <p>These functions and macros should create tokens with spans and hygiene information set as described above for making new tokens. We might also offer versions which takes a scope and uses that as the context for tokenising.</p>
+
+ <h3>Parsing helper functions</h3>
+
+ <p>There are some common patterns for tokens to follow in macros. In particular those used as arguments for attribute-like macros. We will offer some functions which attempt to parse tokens into these patterns. I expect there will be more of these in time; to start with:</p>
+
+ <pre><code>pub mod parsing {
+ // Expects `(foo = "bar"),*`
+ pub fn parse_keyed_values(&amp;TokenSlice, &amp;mut MacroContext) -&gt; Result&lt;Vec&lt;(InternedString, String)&gt;, ErrStruct&gt;;
+ // Expects `"bar"`
+ pub fn parse_string(&amp;TokenSlice, &amp;mut MacroContext) -&gt; Result&lt;String, ErrStruct&gt;;
+ }
+ </code></pre>
+
+ <p>To be honest, given the token design in the last post, I think <code>parse_string</code> is unnecessary, but I wanted to give more than one example of this kind of function. If <code>parse_keyed_values</code> is the only one we end up with, then that is fine.</p>
+
+ <h3>Pattern matching</h3>
+
+ <p>The goal with the pattern matching API is to allow procedural macros to operate on tokens in the same way as macros-by-example. The pattern language is thus the same as that for macros-by-example.</p>
+
+ <p>There is a single macro, which I propose calling <code>matches</code>. Its first argument is the name of a <code>MacroContext</code>. Its second argument is the input, which must be a <code>TokenSlice</code> (or dereferencable to one). The third argument is a pattern definition. The macro produces a <code>Result&lt;T, ErrStruct&gt;</code> where <code>T</code> is the type produced by the pattern arms. If the pattern has multiple arms, then each arm must have the same type. An error is produced if none of the arms in the pattern are matched.</p>
+
+ <p>The pattern language follows the language for defining macros-by-example (but is slightly stricter). There are two forms, a single pattern form and a multiple pattern form. If the first character is a <code>{</code> then the pattern is treated as a multiple pattern form, if it starts with <code>(</code> then as a single pattern form, otherwise an error (causes a panic with a <code>Bug</code> error, as opposed to returning an <code>Err</code>).</p>
+
+ <p>The single pattern form is <code>(pattern) =&gt; { code }</code>. The multiple pattern form is <code>{(pattern) =&gt; { code } (pattern) =&gt; { code } ... (pattern) =&gt; { code }}</code>. <code>code</code> is any old Rust code which is executed when the corresponding pattern is matched. The pattern follows from macros-by-example - it is a series of characters treated as literals, meta-variables indicated with <code>$</code>, and the syntax for matching multiple variables. Any meta-variables are available as variables in the righthand side, e.g., <code>$x</code> becomes available as <code>x</code>. These variables have type <code>TokenStream</code> if they appear singly or <code>Vec&lt;TokenStream&gt;</code> if they appear multiply (or <code>Vec&lt;Vec&lt;TokenStream&gt;&gt;</code> and so forth).</p>
+
+ <p>Examples:</p>
+
+ <pre><code>matches!(cx, input, (foo($x:expr) bar) =&gt; {quote(cx, foo_bar($x).unwrap()}).unwrap()
+
+ matches!(cx, input, {
+ () =&gt; {
+ cx.err("No input?");
+ }
+ (foo($($x:ident),+ bar) =&gt; {
+ println!("found {} idents", x.len());
+ quote!(($x);*).unwrap()
+ }
+ }
+ })
+ </code></pre>
+
+ <p>Note that since we match AST items here, our backwards compatibility story is a bit complicated (though hopefully not much more so than with current macros).</p>
+
+ <h3>Hygiene</h3>
+
+ <p>The intention of the design is that the actual hygiene algorithm applied is irrelevant. Procedural macros should be able to use the same API if the hygiene algorithm changes (of course the result of applying the API might change). To this end, all hygiene objects are opaque and cannot be directly manipulated by macros.</p>
+
+ <p>I propose one module (<code>hygiene</code>) and two types: <code>Context</code> and <code>Scope</code>.</p>
+
+ <p>A <code>Context</code> is attached to each token and contains all hygiene information about that token. If two tokens have the same <code>Context</code>, then they may be compared syntactically. The reverse is not true - two tokens can have different <code>Context</code>s and still be equal. <code>Context</code>s can only be created by applying the hygiene algorithm and cannot be manipulated, only moved and stored.</p>
+
+ <p><code>MacroContext</code> has a method <code>fresh_hygiene_context</code> for creating a new, fresh <code>Context</code> (i.e., a <code>Context</code> not shared with any other tokens).</p>
+
+ <p><code>MacroContext</code> has a method <code>expansion_hygiene_context</code> for getting the <code>Context</code> where the macro is defined. This is equivalent to <code>.expansion_scope().direct_context()</code>, but might be more efficient (and I expect it to be used a lot).</p>
+
+ <p>A <code>Scope</code> provides information about a position within an AST at a certain point during macro expansion. For example,</p>
+
+ <pre><code>fn foo() {
+ a
+ {
+ b
+ c
+ }
+ }
+ </code></pre>
+
+ <p><code>a</code> and <code>b</code> will have different <code>Scope</code>s. <code>b</code> and <code>c</code> will have the same <code>Scope</code>s, even if <code>b</code> was written in this position and <code>c</code> is due to macro expansion. However, a <code>Scope</code> may contain more information than just the syntactic scopes, for example, it may contain information about pending scopes yet to be applied by the hygiene algorithm (i.e., information about <code>let</code> expressions which are in scope).</p>
+
+ <p>Note that a <code>Scope</code> means a scope in the macro hygiene sense, not the commonly used sense of a scope declared with <code>{}</code>. In particular, each <code>let</code> statement starts a new scope and the items and statements in a function body are in different scopes.</p>
+
+ <p>The functions <code>lookup_item_scope</code> and <code>lookup_statement_scope</code> take a <code>MacroContext</code> and a path, represented as a <code>TokenSlice</code>, and return the <code>Scope</code> which that item defines or an error if the path does not refer to an item, or the item does not define a scope of the right kind.</p>
+
+ <p>The function <code>lookup_scope_for</code> is similar, but returns the <code>Scope</code> in which an item is declared.</p>
+
+ <p><code>MacroContext</code> has a method <code>expansion_scope</code> for getting the scope in which the current macro is being expanded.</p>
+
+ <p><code>Scope</code> has a method <code>direct_context</code> which returns a <code>Context</code> for items declared directly (c.f., via macro expansion) in that <code>Scope</code>.</p>
+
+ <p><code>Scope</code> has a method <code>nested</code> which creates a fresh <code>Scope</code> nested within the receiver scope.</p>
+
+ <p><code>Scope</code> has a static method <code>empty</code> for creating an empty scope, that is one with no scope information at all (note that this is different from a top-level scope).</p>
+
+ <p>I expect the exact API around <code>Scope</code>s and <code>Context</code>s will need some work. <code>Scope</code> seems halfway between an intuitive, algorithm-neutral abstraction, and the scopes from the sets of scopes hygiene algorithm. I would prefer a <code>Scope</code> should be more abstract, on the other hand, macro authors may want fine-grained control over hygiene application.</p>
+
+ <h4>Manipulating hygiene information on tokens,</h4>
+
+ <pre><code>pub mod hygiene {
+ pub fn add(cx: &amp;mut MacroContext, t: &amp;Token, scope: &amp;Scope) -&gt; Token;
+ // Maybe unnecessary if we have direct access to Tokens.
+ pub fn set(t: &amp;Token, cx: &amp;Context) -&gt; Token;
+ // Maybe unnecessary - can use set with cx.expansion_hygiene_context().
+ // Also, bad name.
+ pub fn current(cx: &amp;MacroContext, t: &amp;Token) -&gt; Token;
+ }
+ </code></pre>
+
+ <p><code>add</code> adds <code>scope</code> to any context already on <code>t</code> (<code>Context</code> should have a similar method). Note that the implementation is a bit complex - the nature of the <code>Scope</code> might mean we replace the old context completely, or add to it.</p>
+
+ <h4>Applying hygiene when expanding the current macro</h4>
+
+ <p>By default, the current macro will be expanded in the standard way, having hygiene applied as expected. Mechanically, hygiene information is added to tokens when the macro is expanded. Assuming the sets of scopes algorithm, scopes (for example, for the macro's definition, and for the introduction) are added to any scopes already present on the token. A token with no hygiene information will thus behave like a token in a macro-by-example macro. Hygiene due to nested scopes created by the macro do not need to be taken into account by the macro author, this is handled at expansion time.</p>
+
+ <p>Procedural macro authors may want to customise hygiene application (it is common in Racket), for example, to introduce items that can be referred to by code in the call-site scope.</p>
+
+ <p>We must provide an option to expand the current macro without applying hygiene; the macro author must then handle hygiene. For this to work, the macro must be able to access information about the scope in which it is applied (see <code>MacroContext::expansion_scope</code>, above) and to supply a <code>Scope</code> indicating scopes that should be added to tokens following the macro expansion.</p>
+
+ <pre><code>pub mod hygiene {
+ pub enum ExpansionMode {
+ Automatic,
+ Manual(Scope),
+ }
+ }
+
+ impl MacroContext {
+ pub fn set_hygienic_expansion(hygiene::ExpansionMode);
+ }
+ </code></pre>
+
+ <p>We may wish to offer other modes for expansion which allow for tweaking hygiene application without requiring full manual application. One possible mode is where the author provides a <code>Scope</code> for the macro definition (rather than using the scope where the macro is actually defined), but hygiene is otherwise applied automatically. We might wish to give the author the option of applying scopes due to the macro definition, but not the introduction scopes.</p>
+
+ <p>On a related note, might we want to affect how spans are applied when the current macro is expanded? I can't think of a use case right now, but it seems like something that might be wanted.</p>
+
+ <p>Blocks of tokens (that is a <code>Sequence</code> token) may be marked (not sure how, exactly, perhaps using a distinguished context) such that it is expanded without any hygiene being applied or spans changed. There should be a function for creating such a <code>Sequence</code> from a <code>TokenSlice</code> in the <code>tokens</code> module. The primary motivation for this is to handle the tokens representing the body on which an annotation-like macro is present. For a 'decorator' macro, these tokens will be untouched (passed through by the macro), and since they are not touched by the macro, they should appear untouched by it (in terms of hygiene and spans).</p>
+
+ <h3>Applying macros</h3>
+
+ <p>We provide functionality to expand a provided macro or to lookup and expand a macro.</p>
+
+ <pre><code>pub mod apply {
+ pub fn expand_macro(cx: &amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;TokenSlice,
+ macro_scope: Scope,
+ input: &amp;TokenSlice)
+ -&gt; Result&lt;(TokenStream, Scope), ErrStruct&gt;;
+ pub fn lookup_and_expand_macro(cx: &amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;TokenSlice,
+ input: &amp;TokenSlice)
+ -&gt; Result&lt;(TokenStream, Scope), ErrStruct&gt;;
+ }
+ </code></pre>
+
+ <p>These functions apply macro hygiene in the usual way, with <code>expansion_scope</code> dictating the scope into which the macro is expanded. Other spans and hygiene information is taken from the tokens. <code>expand_macro</code> takes pending scopes from <code>macro_scope</code>, <code>lookup_and_expand_macro</code> uses the proper pending scopes. In order to apply the hygiene algorithm, the result of the macro must be parsable. The returned scope will contain pending scopes that can be applied by the macro to subsequent tokens.</p>
+
+ <p>We could provide versions that don't take an <code>expansion_scope</code> and use <code>cx.expansion_scope()</code>. Probably unnecessary.</p>
+
+ <pre><code>pub mod apply {
+ pub fn expand_macro_unhygienic(cx: &amp;mut MacroContext,
+ macro: &amp;TokenSlice,
+ input: &amp;TokenSlice)
+ -&gt; Result&lt;TokenStream, ErrStruct&gt;;
+ pub fn lookup_and_expand_macro_unhygienic(cx: &amp;mut MacroContext,
+ macro: &amp;TokenSlice,
+ input: &amp;TokenSlice)
+ -&gt; Result&lt;TokenStream, ErrStruct&gt;;
+ }
+ </code></pre>
+
+ <p>The <code>_unhygienic</code> variants expand a macro as in the first functions, but do not apply the hygiene algorithm or change any hygiene information. Any hygiene information on tokens is preserved. I'm not sure if <code>_unhygienic</code> are the right names - using these is not necessarily unhygienic, just that we are automatically applying the hygiene algorithm.</p>
+
+ <p>Note that all these functions are doing an eager expansion of macros, or in Scheme terms they are <code>local-expand</code> functions. </p>
+
+ <h3>Looking up items</h3>
+
+ <p>The function <code>lookup_item</code> takes a <code>MacroContext</code> and a path represented as a <code>TokenSlice</code> and returns a <code>TokenStream</code> for the item referred to by the path, or an error if name resolution failed. I'm not sure where this function should live.</p>
+
+ <h3>Interned strings</h3>
+
+ <pre><code>pub mod strings {
+ pub struct InternedString;
+
+ impl InternedString {
+ pub fn get(&amp;self) -&gt; String;
+ }
+
+ pub fn intern(cx: &amp;mut MacroContext, s: &amp;str) -&gt; Result&lt;InternedString, ErrStruct&gt;;
+ pub fn find(cx: &amp;mut MacroContext, s: &amp;str) -&gt; Result&lt;InternedString, ErrStruct&gt;;
+ pub fn find_or_intern(cx: &amp;mut MacroContext, s: &amp;str) -&gt; Result&lt;InternedString, ErrStruct&gt;;
+ }
+ </code></pre>
+
+ <p><code>intern</code> interns a string and returns a fresh <code>InternedString</code>. <code>find</code> tries to find <em>an</em> existing <code>InternedString</code>.</p>
+
+ <h3>Spans</h3>
+
+ <p>A span gives information about where in the source code a token is defined. It also gives information about where the token came from (how it was generated, if it was generated code).</p>
+
+ <p>There should be a <code>spans</code> module in libmacro, which will include a <code>Span</code> type which can be easily inter-converted with the <code>Span</code> defined in libsyntax. Libsyntax spans currently include information about stability, this will not be present in libmacro spans.</p>
+
+ <p>If the programmer does nothing special with spans, then they will be 'correct' by default. There are two important cases: tokens passed to the macro and tokens made fresh by the macro. The former will have the source span indicating where they were written and will include their history. The latter will have no source span and indicate they were created by the current macro. All tokens will have the history relating to expansion of the current macro added when the macro is expanded. At macro expansion, tokens with no source span will be given the macro use-site as their source.</p>
+
+ <p><code>Span</code>s can be freely copied between tokens.</p>
+
+ <p>It will probably useful to make it easy to manipulate spans. For example, rather than point at the macro's defining function, point at a helper function where the token is made. Or to set the origin to the current macro when the token was produced by another which should an implementation detail. I'm not sure what such an interface should look like (and is probably not necessary in an initial library).</p>
+
+ <h3>Feature gates</h3>
+
+ <pre><code>pub mod features {
+ pub enum FeatureStatus {
+ // The feature gate is allowed.
+ Allowed,
+ // The feature gate has not been enabled.
+ Disallowed,
+ // Use of the feature is forbidden by the compiler.
+ Forbidden,
+ }
+
+ pub fn query_feature(cx: &amp;MacroContext, feature: Token) -&gt; Result&lt;FeatureStatus, ErrStruct&gt;;
+ pub fn query_feature_by_str(cx: &amp;MacroContext, feature: &amp;str) -&gt; Result&lt;FeatureStatus, ErrStruct&gt;;
+ pub fn query_feature_unused(cx: &amp;MacroContext, feature: Token) -&gt; Result&lt;FeatureStatus, ErrStruct&gt;;
+ pub fn query_feature_by_str_unused(cx: &amp;MacroContext, feature: &amp;str) -&gt; Result&lt;FeatureStatus, ErrStruct&gt;;
+
+ pub fn used_feature_gate(cx: &amp;MacroContext, feature: Token) -&gt; Result&lt;(), ErrStruct&gt;;
+ pub fn used_feature_by_str(cx: &amp;MacroContext, feature: &amp;str) -&gt; Result&lt;(), ErrStruct&gt;;
+
+ pub fn allow_feature_gate(cx: &amp;MacroContext, feature: Token) -&gt; Result&lt;(), ErrStruct&gt;;
+ pub fn allow_feature_by_str(cx: &amp;MacroContext, feature: &amp;str) -&gt; Result&lt;(), ErrStruct&gt;;
+ pub fn disallow_feature_gate(cx: &amp;MacroContext, feature: Token) -&gt; Result&lt;(), ErrStruct&gt;;
+ pub fn disallow_feature_by_str(cx: &amp;MacroContext, feature: &amp;str) -&gt; Result&lt;(), ErrStruct&gt;;
+ }
+ </code></pre>
+
+ <p>The <code>query_*</code> functions query if a feature gate has been set. They return an error if the feature gate does not exist. The <code>_unused</code> variants do not mark the feature gate as used. The <code>used_</code> functions mark a feature gate as used, or return an error if it does not exist.</p>
+
+ <p>The <code>allow_</code> and <code>disallow_</code> functions set a feature gate as allowed or disallowed for the current crate. These functions will only affect feature gates which take affect after parsing and expansion are complete. They do not affect feature gates which are checked during parsing or expansion.</p>
+
+ <p>Question: do we need the <code>used_</code> functions? Could just call <code>query_</code> and ignore the result.</p>
+
+ <h3>Attributes</h3>
+
+ <p>We need some mechanism for setting attributes as used. I don't actually know how the unused attribute checking in the compiler works, so I can't spec this area. But, I expect <code>MacroContext</code> to make available some interface for reading attributes on a macro use and marking them as used.</p></div>
+ </content>
+ <updated>2016-01-18T21:40:42Z</updated>
+ <category term="Mozilla"/>
+ <category term="Rust"/>
+ <author>
+ <name>Nick Cameron</name>
+ </author>
+ <source>
+ <id>http://www.ncameron.org/blog/</id>
+ <link href="http://www.ncameron.org/blog/" rel="alternate" type="text/html"/>
+ <link href="http://www.ncameron.org/blog/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>I'm a research engineer at Mozilla working on Rust: the language, compiler, and tools. @nick_r_cameron</subtitle>
+ <title>featherweight musings</title>
+ <updated>2016-01-21T08:46:18Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://geekyogre.com/rss/63eb682d-66b4-447d-8fb6-f4ed448019df</id>
+ <link href="http://geekyogre.com/skizze-progress-and-repl/" rel="alternate" type="text/html"/>
+ <title>Skizze progress and REPL</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img align="center" height="190" src="http://i.imgur.com/9z47NdA.png" width="600"/> <br/>
+ <br/> <br/>
+ Over the last 3 weeks, based on feedback we proceeded fledging out the concepts and the code behind <a href="https://github.com/skizzehq/skizze">Skizze</a>. <br/>
+ <a href="https://medium.com/@njpatel/">Neil Patel</a> suggested the following:</p>
+
+ <hr/>
+
+ <p><em>So I've been thinking about the server API. I think we want to choose one thing and do it as well as possible, instead of having</em></p></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img align="center" height="190" src="http://i.imgur.com/9z47NdA.png" width="600"/> <br/>
+ <br/> <br/>
+ Over the last 3 weeks, based on feedback we proceeded fledging out the concepts and the code behind <a href="https://github.com/skizzehq/skizze">Skizze</a>. <br/>
+ <a href="https://medium.com/@njpatel/">Neil Patel</a> suggested the following:</p>
+
+ <hr/>
+
+ <p><em>So I've been thinking about the server API. I think we want to choose one thing and do it as well as possible, instead of having six ways to talk to the server. I think that helps to keep things sane and simple overall.</em></p>
+
+ <p><em>Thinking about usage, I can only really imagine Skizze in an environment like <a href="https://xamarin.com/insights">ours</a>, which is high-throughput. I think that is it's 'home' and we should be optimising for that all day long.</em></p>
+
+ <p><em>Taking that into account, I believe we have two options:</em></p>
+
+ <ol>
+ <li><p><em>We go the gRPC route, provide .proto files and let people use the existing gRPC tooling to build support for their favourite language. That means we can happily give Ruby/Node/C#/etc devs a real way to get started up with Skizze almost immediately, piggy-backing on the gRPC docs etc.</em></p></li>
+ <li><p><em>We absorb the Redis Protocol. It does everything we need, is very lean, and we can (mostly) easily adapt it for what we need to do. The downside is that to get support from other libs, there will have to be actual libraries for every language. This could slow adoption, or it might be easy enough if people can reuse existing REDIS code. It's hard to tell how that would end up.</em></p></li>
+ </ol>
+
+ <p><em>gRPC is interesting because it's built already for distributed systems, across bad networks, and obviously is bi-directional etc. Without us having to spend time on the protocol, gRPC let's us easily add features that require streaming. Like, imagine a client being able to listen for changes in count/size and be notified instantly. That's something that gRPC is built for right now.</em></p>
+
+ <p><em>I think gRPC is a bit verbose, but I think it'll pay off for ease of third-party lib support and as things grow.</em></p>
+
+ <p><em>The CLI could easily be built to work with gRPC, including adding support for streaming stuff etc. Which could be pretty exciting.</em></p>
+
+ <hr/>
+
+ <p>That being said, we gave Skizze <a href="https://github.com/skizzehq/">a new home</a>, where based on feedback we developed .proto files and started rewriting big chunks of the code.</p>
+
+ <p>We added a new wrapper called "domain" which represents a stream. It wraps around Count-Min-Log, Bloom Filter, Top-K and HyperLogLog++, so when feeding it values it feeds all the sketches. Later we intend to allow attaching and detaching sketches from "domains" (We need a better name).</p>
+
+ <p>We also implemented a gRPC API which should allow easy wrapper creation in other languages.</p>
+
+ <p>Special thanks go to <a href="https://twitter.com/martinpintob">Martin Pinto</a> for helping out with unit tests and <a href="http://dopeness.org">Soren Macbeth</a> for thorough feedback and ideas about the "domain" concept. <br/>
+ Take a look at our initial REPL work there:</p>
+
+ <p><a href="http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif"><img alt="Link to this page" border="0" src="http://geekyogre.com/content/images/2016/01/skizze-1.png"/></a> <br/>
+ <a href="http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif">click for GIF</a></p></div>
+ </content>
+ <updated>2016-01-18T17:41:43Z</updated>
+ <category term="Big Data"/>
+ <category term="Data Science"/>
+ <author>
+ <name>Seif Lotfy</name>
+ </author>
+ <source>
+ <id>http://geekyogre.com/</id>
+ <link href="http://geekyogre.com/" rel="alternate" type="text/html"/>
+ <link href="http://geekyogre.com/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>The geekiest ogre alive</subtitle>
+ <title>Geeky Ogre</title>
+ <updated>2016-01-18T18:16:25Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://dougbelshaw.com/blog/?p=39986</id>
+ <link href="http://dougbelshaw.com/blog/2016/01/18/open-badges-persona/" rel="alternate" type="text/html"/>
+ <title>What a post-Persona landscape means for Open Badges</title>
+ <summary>Why you shouldn't worry about Mozilla's recent announcement.</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em><strong>Note:</strong> I don’t work for Mozilla any more, so (like <a href="https://www.youtube.com/watch?v=YQHsXMglC9A">Adele</a>) these are my thoughts ‘from the outside’…</em></p>
+ <hr/>
+ <h3>Introduction</h3>
+ <p><a href="http://openbadges.org">Open Badges</a> is no longer a <a href="http://mozilla.org">Mozilla</a> project. In fact, it hasn’t been for a while — the <a href="http://badgealliance.org">Badge Alliance</a> was set up a couple of years ago to promote the specification on a both a technical and community basis. As I stated in a recent post, this is a <strong>good</strong> thing and means that <a href="http://dougbelshaw.com/blog/2015/11/08/bright-future-badges/">the future is bright for Open Badges</a>.</p>
+ <p>However, Mozilla <em>is</em> still involved with the Open Badges project: Mark Surman, Executive Director of the Mozilla Foundation, sits on the board of the Badge Alliance. Mozilla also pays for contractors to work on the <a href="http://backpack.openbadges.org">Open Badges backpack</a> and there were badges earned at the <a href="http://mozillafestival.org">Mozilla Festival</a> a few months ago.</p>
+ <p>Although it may seem strange for those used to corporates interested purely in profit, Mozilla creates what the open web needs at any given time. Like any organisation, sometimes it gets these wrong, either because the concept was flawed, or because the execution was poor. Other times, I’d argue, Mozilla doesn’t give ideas and concepts enough time to gain traction.</p>
+ <h3>The end of Persona at Mozilla</h3>
+ <p>Open Badges, at its very essence, is a technical specification. It allows credentials with metadata hard-coded into them to be issued, exchanged, and displayed. This is done in a secure, standardised manner.</p>
+ <p><img alt="OBI diagram" class="alignnone wp-image-39987 size-full" src="http://i1.wp.com/dougbelshaw.com/blog/wp-content/uploads/2016/01/obi-diagram.png?w=100%25"/></p>
+ <p>For users to be able to access their ‘backpack’ (i.e. the place they store badges) they needed a secure login system.Back in 2011 at the start of the Open Badges project it made sense to make use of Mozilla’s nascent <a href="https://www.mozilla.org/en-US/persona/">Persona</a> project. This aimed to provide a way for users to easily sign into sites around the web without using their Facebook/Google logins. These ‘social’ sign-in methods mean that users are tracked around the web — something that Mozilla was obviously against.</p>
+ <p>By 2014, Persona wasn’t seen to be having the kind of ‘growth trajectory’ that Mozilla wanted. The project was transferred to <a href="http://identity.mozilla.com/post/78873831485/transitioning-persona-to-community-ownership">community ownership</a> and most of the team left Mozilla in 2015. It was <a href="https://groups.google.com/forum/#!msg/mozilla.dev.identity/mibOQrD6K0c/kt0NdMWbEQAJ">announced</a> that Persona would be shutting down as a Mozilla service in November 2016. While Persona will exist as an open source project, it won’t be hosted by Mozilla.</p>
+ <h3>What this means for Open Badges</h3>
+ <p>Although I’m not aware of an official announcement from the Badge Alliance, I think it’s worth making three points here.</p>
+ <h5>1. You can still use Persona</h5>
+ <p>If you’re a developer, you can still use Persona. It’s open source. It works.</p>
+ <h5>2. Persona is not central to the Open Badges Infrastructure</h5>
+ <p>The Open Badges backpack is <em>one</em> place where users can store their badges. There are others, including the <a href="https://openbadgepassport.com/">Open Badge Passport</a> and <a href="https://www.openbadgeacademy.com/">Open Badge Academy</a>. MacArthur, who seed-funded the Open Badges ecosystem, have a new platform launching through <a href="https://www.lrng.org/">LRNG</a>.</p>
+ <p>It is up to the organisations behind these various solutions as to how they allow users to authenticate. They may choose to allow social logins. They may force users to create logins based on their email address. They may decide to use an open source version of Persona. It’s entirely up to them.</p>
+ <h5>3. A post-Persona badges system has its advantages</h5>
+ <p>The Persona authentication system runs off email addresses. This means that transitioning <em>from</em> Persona to another system is relatively straightforward. It has, however, meant that for the past few years we’ve had a recurrent problem: what do you do with people being issued badges to multiple email addresses?</p>
+ <p>Tying badges to emails seemed like the easiest and fastest way to get to a critical mass in terms of Open Badge adoption. Now that’s worked, we need to think in a more nuanced way about allowing users to tie multiple identities to a single badge.</p>
+ <h4>Conclusion</h4>
+ <p>Persona was always a slightly awkward fit for Open Badges. Although, for a time, it made sense to use Persona for authentication to the Open Badges backpack, we’re now in a post-Persona landscape. This brings with it certain advantages.</p>
+ <p>As Nate Otto wrote in his post <a href="https://medium.com/badge-alliance/open-badges-in-2016-a-look-ahead-3cfe5c3c9878#.l5mhiztwx">Open Badges in 2016: A Look Ahead</a>, the project is growing up. It’s time to move beyond what was expedient at the dawn of Open Badges and look to the future. I’m sad to see the decline of Persona, but I’m excited what the future holds!</p>
+ <p style="text-align: right;"><em>Header image CC BY-NC-SA <a href="https://www.flickr.com/photos/blmiers2/6904758951/">Barbara</a></em></p></div>
+ </content>
+ <updated>2016-01-18T11:34:19Z</updated>
+ <category term="Open Badges"/>
+ <category term="Badge Alliance"/>
+ <category term="future"/>
+ <category term="Mozilla"/>
+ <category term="Persona"/>
+ <author>
+ <name>Doug Belshaw</name>
+ </author>
+ <source>
+ <id>http://dougbelshaw.com/blog</id>
+ <logo>http://dougbelshaw.com/blog/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg</logo>
+ <category scheme="http://www.itunes.com/" term="education,"/>
+ <category scheme="http://www.itunes.com/" term="technology,"/>
+ <category scheme="http://www.itunes.com/" term="productivity,"/>
+ <category scheme="http://www.itunes.com/" term="leadership,"/>
+ <category scheme="http://www.itunes.com/" term="Mozilla"/>
+ <category scheme="http://www.itunes.com/" term="Education"/>
+ <category scheme="http://www.itunes.com/" term="Education Technology"/>
+ <category scheme="http://www.itunes.com/" term="Technology"/>
+ <category scheme="http://www.itunes.com/" term="Society &amp; Culture"/>
+ <category scheme="http://www.itunes.com/" term="Philosophy"/>
+ <author>
+ <name>Doug Belshaw</name>
+ <email>dajbelshaw@gmail.com</email>
+ </author>
+ <link href="http://dougbelshaw.com/blog/tag/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://dougbelshaw.com/blog" rel="alternate" type="text/html"/>
+ <rights>Copyright © Open Educational Thinkering 2013</rights>
+ <subtitle>Doug Belshaw's blog</subtitle>
+ <title>Mozilla – Doug Belshaw’s blog</title>
+ <updated>2016-01-23T07:46:17Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>tag:this-week-in-rust.org,2016-01-18:blog/2016/01/18/this-week-in-rust-114/</id>
+ <link href="http://this-week-in-rust.org/blog/2016/01/18/this-week-in-rust-114/" rel="alternate" type="text/html"/>
+ <title>This Week in Rust 114</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hello and welcome to another issue of <em>This Week in Rust</em>!
+ <a href="http://rust-lang.org">Rust</a> is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> or <a href="mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion">send us an
+ email</a>!
+ Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love
+ contributions</a>.</p>
+ <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/cmr/this-week-in-rust">on GitHub</a>.
+ If you find any errors in this week's issue, <a href="https://github.com/cmr/this-week-in-rust/pulls">please submit a PR</a>.</p>
+ <p>This week's edition was edited by: <a href="https://github.com/nasa42">nasa42</a>, <a href="https://github.com/brson">brson</a>, and <a href="https://github.com/llogiq">llogiq</a>.</p>
+ <h3>Updates from Rust Community</h3>
+ <h4>News &amp; Blog Posts</h4>
+ <ul>
+ <li><a href="http://gregchapple.com/contributing-to-the-rust-compiler/">Guide: Contributing to the Rust compiler</a>.</li>
+ <li><a href="http://www.ncameron.org/blog/a-type-safe-and-zero-allocation-library-for-reading-and-navigating-elf-files/">A type-safe and zero-allocation library for reading and navigating ELF files</a>.</li>
+ <li>[podcast] <a href="http://www.newrustacean.com/show_notes/e009/">New Rustacean podcast episode 09</a>. Getting into the nitty-gritty with Rust's traits.</li>
+ <li><a href="https://jadpole.github.io/arcaders/arcaders-1-12/">ArcadeRS 1.12: Brawl, at last</a>! Part of the series <a href="https://jadpole.github.io/arcaders/arcaders-1-0/">ArcadeRS 1.0: The project</a> - a series whose objective is to explore the Rust programming language and ecosystem through the development of a simple, old-school shooter.</li>
+ <li><a href="https://blog.thiago.me/raspberry-pi-bare-metal-programming-with-rust/">Raspberry Pi bare metal programming with Rust</a>.</li>
+ <li><a href="http://blog.servo.org/2016/01/11/twis-47/">This week in Servo 47</a>.</li>
+ <li><a href="http://www.redox-os.org/news/this-week-in-redox-10/">This week in Redox OS 10</a>.</li>
+ </ul>
+ <h4>Notable New Crates &amp; Project Updates</h4>
+ <ul>
+ <li><a href="https://github.com/ebkalderon/amethyst">Amethyst</a>. Data-oriented game engine written in Rust.</li>
+ <li><a href="https://www.rust-lang.org/">Rust website</a> has received some <a href="https://www.reddit.com/r/rust/comments/40zxey/major_website_updates/">major updates</a>.</li>
+ <li><a href="https://packages.debian.org/stretch/rustc">Rust</a> and <a href="https://packages.debian.org/stretch/cargo">Cargo</a> are now available in Debian stretch.</li>
+ <li><a href="https://community.particle.io/t/rust-on-particle-call-for-contributors/19090">Rust on Particle: Call for contributors</a>.</li>
+ <li><a href="https://dwrensha.github.io/capnproto-rust/2016/01/11/async-rpc.html">capnp-rpc-rust rewritten to use async I/O</a>.</li>
+ <li><a href="https://github.com/Ogeon/palette">Palette</a>. A Rust library for linear color calculations and conversion.</li>
+ </ul>
+ <h3>Updates from Rust Core</h3>
+ <p>164 pull requests were <a href="https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-11..2016-01-18">merged in the last week</a>.</p>
+ <p>See the <a href="https://internals.rust-lang.org/t/triage-digest-tue-jan-05-2016/3052">triage digest</a> and <a href="https://internals.rust-lang.org/t/subteam-reports-2016-01-08/3067">subteam reports</a> for more details.</p>
+ <h4>Notable changes</h4>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rust/pull/30943">std: Stabilize APIs for the 1.7 release</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/27807">Refactor and improve: Arena, TypedArena</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/29498">Let <code>str::replace</code> take a pattern</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30295">rustc_resolve: Fix bug in duplicate checking for extern crates</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30426">Rewrite BTreeMap to use parent pointers</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30446">Support generic associated consts</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30509">Add an <code>impl</code> for <code>Box&lt;Error&gt;</code> from String</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30533">Introduce "obligation forest" data structure into fulfillment to track backtraces</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30538">Remove negate_unsigned feature gate</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30567">llvm: Add support for vectorcall (X86_VectorCall) convention</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30676">Make coherence more tolerant of error types</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30740">Add fast path for ASCII in UTF-8 validation</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30753">Downgrade unit struct match via S(..) warnings to errors</a>.</li>
+ <li><a href="https://github.com/rust-lang/rust/pull/30930">Move const block checks before lowering step</a>.</li>
+ </ul>
+ <h4>New Contributors</h4>
+ <ul>
+ <li>Anton Blanchard</li>
+ <li>Jonas Tepe</li>
+ <li>Jörg Krause</li>
+ <li>Joshua Olson</li>
+ <li>kalita.alexey</li>
+ <li>Pierre Krieger</li>
+ <li>Sergey Veselkov</li>
+ <li>Simon Martin</li>
+ <li>Steffen</li>
+ <li>tomaka</li>
+ </ul>
+ <h4>Approved RFCs</h4>
+ <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments)
+ process</a>. These
+ are the RFCs that were approved for implementation this week:</p>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1331">RFC 1331: <code>src/grammar</code> for the canonical grammar of the Rust language</a>.</li>
+ </ul>
+ <h4>Final Comment Period</h4>
+ <p>Every week <a href="https://rust-lang.org/team.html">the team</a> announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. <a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">This week's FCPs</a> are:</p>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1462">Add <code>[</code> to the FOLLOW(ty) in macro future-proofing rules</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1457">Rewrite <code>for</code> loop desugaring to use language items</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1320">Amend 1192 (RangeInclusive) to use an enum</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/243">Trait-based exception handling</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1361">Improve Cargo target-specific dependencies</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1129">Add a <code>IndexAssign</code> trait that allows overloading "indexed assignment" expressions like <code>a[b] = c</code></a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1196">Allow eliding more type parameters</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1296">Add an <code>alias</code> attribute to <code>#[link]</code> and <code>-l</code></a>.</li>
+ </ul>
+ <h4>New RFCs</h4>
+ <ul>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1459">Add a used attribute to prevent symbols from being discarded</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1461">Move some net2 functionality into libstd</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1465">Add <code>some!</code> macro for unwrapping Option more safely</a>.</li>
+ <li><a href="https://github.com/rust-lang/rfcs/pull/1467">Stabilize the <code>volatile_load</code> and <code>volatile_store</code> intrinsics as <code>ptr::volatile_read</code> and <code>ptr::volatile_write</code></a>.</li>
+ </ul>
+ <h3>Upcoming Events</h3>
+ <ul>
+ <li><a href="http://www.meetup.com/Rust-Meetup-Hamburg/events/227838367/">1/19. Rust Hack and Learn Hamburg @ Ponton</a>.</li>
+ <li><a href="http://www.meetup.com/Rust-Bay-Area/events/227841778/">1/21. SF Bay Area: Rust Concurrency and Parallelism</a>.</li>
+ <li><a href="http://www.meetup.com/opentechschool-berlin/">1/27. OpenTechSchool Berlin: Rust Hack and Learn</a>.</li>
+ </ul>
+ <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
+ it mentioned here. Email <a href="mailto:erick.tryzelaar@gmail.com">Erick Tryzelaar</a> or <a href="mailto:banderson@mozilla.com">Brian
+ Anderson</a> for access.</p>
+ <h3>fn work(on: RustProject) -&gt; Money</h3>
+ <ul>
+ <li><a href="http://maidsafe.net/rust_engineer.html">Rust Engineer</a> at MaidSafe.</li>
+ <li><a href="https://careers.mozilla.org/en-US/position/ozy21fwU">Research Engineer - Servo</a> at Mozilla.</li>
+ <li><a href="https://careers.mozilla.org/en-US/position/o0H41fww">Senior Research Engineer - Rust</a> at Mozilla.</li>
+ <li><a href="http://plv.mpi-sws.org/rustbelt/">PhD and postdoc positions</a> at MPI-SWS.</li>
+ </ul>
+ <p><em>Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> to get your job offers listed here!</em></p>
+ <h3>Crate of the Week</h3>
+ <p>This week's Crate of the Week is <a href="https://github.com/alexcrichton/toml-rs">toml</a>, a crate for all our configuration needs, simple yet effective.</p>
+ <p>Thanks to <a href="https://users.rust-lang.org/users/stebalien">Steven Allen</a> for the suggestion.</p>
+ <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Submit your suggestions for next week</a>!</p>
+ <h3>Quote of the Week</h3>
+ <blockquote>
+ <p>Borrow/lifetime errors are usually Rust compiler bugs.
+ Typically, I will spend 20 minutes detailing the precise conditions of
+ the bug, using language that understates my immense knowledge, while
+ demonstrating sympathetic understanding of the pressures placed on a
+ Rust compiler developer, who is also probably studying for several exams
+ at the moment. The developer reading my bug report may not understand
+ this stuff as well as I do, so I will carefully trace the lifetimes of
+ each variable, where memory is allocated on the stack vs the heap, which
+ struct or function owns a value at any point in time, where borrows
+ begin and where they... oh yeah, actually that variable really doesn't
+ live long enough.</p>
+ </blockquote>
+ <p>— <a href="https://www.reddit.com/r/rust/comments/4084yx/my_trick_when_i_get_stuck_as_a_beginner/cysqz3s">peterjoel on /r/rust</a>.</p>
+ <p>Thanks to <a href="https://users.rust-lang.org/users/WaDelma">Wa Delma</a> for the suggestion.</p>
+ <p><a href="http://users.rust-lang.org/t/twir-quote-of-the-week/328">Submit your quotes for next week</a>!</p></div>
+ </summary>
+ <updated>2016-01-18T05:00:00Z</updated>
+ <author>
+ <name>Corey Richardson</name>
+ </author>
+ <source>
+ <id>http://this-week-in-rust.org/</id>
+ <link href="http://this-week-in-rust.org/" rel="alternate" type="text/html"/>
+ <link href="http://this-week-in-rust.org/atom.xml" rel="self" type="application/atom+xml"/>
+ <title>This Week in Rust</title>
+ <updated>2016-01-25T05:00:00Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html</id>
+ <link href="http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html" rel="alternate" type="text/html"/>
+ <title>Okay, But What Does Your Work Actually Mean, Nikki? Part 2: The Fetch Standard and Servo</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In my previous post, I started discussing in more detail what my internship entails, by talking about my first contribution to Servo. As a refresher, my first contribution was as part of my application to Outreachy, which I later revisited during my internship after a change I introduced to the HTML Standard it relied on. I’m going to expand on that last point today- specifically, how easy it is to introduce changes in <a href="https://wiki.whatwg.org/wiki/FAQ#What_is_the_WHATWG.3F">WHATWG</a>’s various standards. I’m also going to talk about how this accessibility to changing web standards affects how I can understand it, how I can help improve it, and my work on Servo.</p>
+
+ <h3>Two Ways To Change</h3>
+
+ <p>There are many ways to <a href="https://wiki.whatwg.org/wiki/What_you_can_do">get involved with WHATWG</a>, but there are two that I’ve become the most familiar with: firstly, by opening a discussion about a perceived issue and asking how it should be resolved; secondly, by taking on an issue approved as needing change and making the desired change. I’ve almost entirely only done the former, and the latter only for some minor typos. Any changes that relate directly to my work, however minor, are significant for me though! Like I discussed in my previous post, I brought attention to <a href="https://github.com/whatwg/html/issues/296">an inconsistency</a> that was resolved, giving me a new task of updating my first contribution to Servo to reflect the change in the HTML Standard. I’ve done that several times since, for the Fetch Standard.</p>
+
+ <h3>Understanding Fetch</h3>
+
+ <p>My first two weeks of my internship were spent on reading through the majority of the <a href="https://fetch.spec.whatwg.org/">Fetch Standard</a>, primarily the various Fetch functions. I took many notes describing the steps to myself, annotated with questions I had and the answers I got from either other people on the Servo team who had worked with Fetch (including my internship mentor, of course!) or people from WHATWG who were involved in the Fetch Standard. Getting so familiar with Fetch meant a few things: I would notice minor errors (such as an out of date link) that I could submit a <a href="https://github.com/whatwg/fetch/pull/173">simple fix for</a>, or a bigger issue that I couldn’t resolve myself.</p>
+
+ <h3>Discussions &amp; Resolutions</h3>
+
+ <p>I’m going to go into more detail about some of those bigger issues. From my perspective, when I start a discussion about a piece of documentation (such as the Fetch Standard, or reading about a programming library Servo uses), I go into it thinking “Either this documentation is incorrect, or my understanding is incorrect”. Whichever the answer is, it doesn’t mean that the documentation is bad, or that I’m bad at reading comprehension. I understand best by building up a model of something in my head, putting that to practice, and asking a lot of questions along the way. I learn by getting things wrong and figuring out why I was wrong, and sometimes in the process I uncover a point that could be made more clear, or an inconsistency! I have good examples of both of the different outcomes I listed, which I’ll cover over the next two sections.</p>
+
+ <h5>Looking For The Big Picture</h5>
+
+ <p>Early on in my initial review of the Fetch Standard’s several protocols, I found a major step that seemed to have no use. I understood that since I was learning Fetch on a step-by-step basis, I did not have a view of the bigger picture, so I asked around what I was missing that would help me understand this. One of the people I work with on implementing Fetch agreed with me that the step seemed to have no purpose, and so we decided to <a href="https://github.com/whatwg/fetch/issues/174">open an issue</a> asking about removing it from the standard. It turned out that I had actually missed the meaning of it, as we learned. However, instead of leaving it there, I shifted the issue into asking for some explanatory notes on why this step is needed, which was fulfilled. This meant that I would have a reference to go back to should I forget the significance of the step, and that people reading the Fetch Standard in the future would be much less likely to come to the same incorrect conclusion I had.</p>
+
+ <h5>A Confusing Order</h5>
+
+ <p>Shortly after I had first discovered that apparent issue, I found myself struggling to comprehend a sequence of actions in another Fetch protocol. The specification seemed to say that part of an early step was meant to only be done after the final step. I unfortunately don’t remember details of the discussion I had about this- if there was a reason for why it was organized like this, I forget what it was. Regardless, it was agreed that <a href="https://github.com/whatwg/fetch/issues/176">moving those sub-steps</a> to be actually listed after the step they’re supposed to run after would be a good change. This meant that I would need to re-organize my notes to reflect the re-arranged sequence of actions, as well as have an easier time being able to follow this part of the Fetch Standard.</p>
+
+ <h3>A Living Standard</h3>
+
+ <p>Like I said at the start of this post, I’m going to talk about how changes in the Fetch Standard affects my work on Servo itself. What I’ve covered so far has mostly been how changes affect my understanding of the standard itself. A key aspect in understanding the Fetch protocols is reviewing them for updates that impact me. WHATWG labels every standard they author as a “<a href="https://wiki.whatwg.org/wiki/FAQ#What_does_.22Living_Standard.22_mean.3F">Living Standard</a>” for good reason. It was one thing for me to learn how easy it is to introduce changes, while knowing exactly what’s going on, but it’s another for me to understand that anybody else can, and often does, make changes to the Fetch Standard!</p>
+
+ <h5>Changes Over Time</h5>
+
+ <p>When an update is made to the Fetch Standard, it’s not so difficult to deal with as one might imagine. The Fetch Standard always notes the last day it was updated at the top of the document, I follow a Twitter account that <a href="https://twitter.com/fetchstandard">posts about updates</a>, and all the history can be <a href="https://github.com/whatwg/fetch/commits">seen on GitHub</a> which will show me exactly what has been changed as well as some discussion on what the change does. All of these together alert me to the fact that the Fetch Standard has been modified, and I can quickly see what was revised. If it’s relevant to what I’m going to be implementing, I update my notes to match it. Occasionally, I need to change existing code to reflect the new Standard, which is also easily done by comparing my new notes to the Fetch implementation in Servo!</p>
+
+ <h5>Snapshots</h5>
+
+ <p>From all of this, it might sound like the Fetch Standard is unfinished, or unreliable/inconsistent. I don’t mean to misrepresent it- the many small improvements help make the Fetch Standard, like all of WHATWG’s standards, better and more reliable. You can think of the status of the Fetch Standard at any point in time as a single, working snapshot. If somebody implemented all of Fetch as it is now, they’d have something that works by itself correctly. A different snapshot of Fetch is just that- different. It will have an improvement or two, but that doesn’t obsolete anybody who implemented it previously. It just means if they revisit the implementation, they’ll have things to update.</p>
+
+ <p>Third post over.</p></div>
+ </summary>
+ <updated>2016-01-17T20:20:27Z</updated>
+ <category term="outreachy,"/>
+ <category term="planet"/>
+ <source>
+ <id>http://nikkisquared.github.io/</id>
+ <author>
+ <name>Nikki Bee</name>
+ </author>
+ <link href="http://nikkisquared.github.io/" rel="alternate" type="text/html"/>
+ <link href="http://nikkisquared.github.io/feed.xml" rel="self" type="application/rss+xml"/>
+ <subtitle>Hi! I'm currently doing an internship for Outreachy. Wow!</subtitle>
+ <title>Nikki Bee Blog</title>
+ <updated>2016-01-18T05:28:11Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-us">
+ <id>http://ngokevin.com/blog/aframe-component/</id>
+ <link href="http://ngokevin.com/blog/aframe-component/" rel="alternate" type="text/html"/>
+ <title>How to Write an A-Frame VR Component</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img align="left" hspace="5" src="http://thevrjump.com/assets/img/articles/aframe-system/aframe-example.jpg" width="320"/>Abstract representation of components by @rubenmueller of thevrjump.com.
+
+ <p><a href="http://ngokevin.com/blog/aframe">A-Frame</a> is a WebVR framework that introduces the
+ <a href="http://ngokevin.com/blog/aframe-vs-3dml">entity-component system</a> (<a href="http://ngokevin.com/rss/docs">docs</a>) to the DOM. The
+ entity-component system treats every <strong>entity</strong> in the scene as a placeholder
+ object which we apply and mix <strong>components</strong> to in order to add appearance,
+ behavior, and functionality. A-Frame comes with some standard components out of
+ the box like camera, geometry, material, light, or sound. However, people can
+ write, publish, and register their own components to do <strong>whatever</strong> they want
+ like have entities <a href="https://github.com/dmarcos/a-invaders/tree/master/js/components">collide/explode/spawn</a>, be controlled by
+ <a href="https://github.com/ngokevin/aframe-physics-components">physics</a>, or <a href="https://jsbin.com/dasefeh/edit?html,output">follow a path</a>. Today, we'll be going through
+ how we can write our own A-Frame components.</p>
+ <blockquote>
+ <p>Note that this tutorial will be covering the upcoming release of <a href="https://github.com/aframevr/aframe/blob/dev/CHANGELOG.md#dev">A-Frame
+ 0.2.0</a> which vastly improves the component API.</p>
+ </blockquote>
+ <h3>Table of Contents</h3>
+ <ul>
+ <li><a href="http://ngokevin.com/rss/index.xml#what-a-component-looks-like">What a Component Looks Like</a><ul>
+ <li><a href="http://ngokevin.com/rss/index.xml#from-the-dom">From the DOM</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#under-the-hood">Under the Hood</a></li>
+ </ul>
+ </li>
+ <li><a href="http://ngokevin.com/rss/index.xml#defining-the-schema">Defining the Schema</a><ul>
+ <li><a href="http://ngokevin.com/rss/index.xml#property-types">Property Types</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#single-property-schemas">Single-Property Schemas</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#multiple-property-schemas">Multiple-Property Schemas</a></li>
+ </ul>
+ </li>
+ <li><a href="http://ngokevin.com/rss/index.xml#defining-the-lifecycle-methods">Defining the Lifecycle Methods</a><ul>
+ <li><a href="http://ngokevin.com/rss/index.xml#component-init-set-up">Component.init() - Set Up</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#component-update-olddata-do-the-magic">Component.update(oldData) - Do the Magic</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#component-remove-tear-down">Component.remove() - Tear Down</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#component-tick-time-background-behavior">Component.tick() - Background Behavior</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#component-pause-and-component-play-stop-and-go">Component.pause() and Component.play() - Stop and Go</a></li>
+ </ul>
+ </li>
+ <li><a href="http://ngokevin.com/rss/index.xml#boilerplate">Boilerplate</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#examples">Examples</a><ul>
+ <li><a href="http://ngokevin.com/rss/index.xml#text-component">Text Component</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#physics-components">Physics Components</a></li>
+ <li><a href="http://ngokevin.com/rss/index.xml#layout-component">Layout Component</a></li>
+ </ul>
+ </li>
+ </ul>
+ <h3>What a Component Looks Like</h3>
+ <p>A component contains a bucket of data in the form of component properties. This
+ data is used to modify the entity. For example, we might have an <em>engine</em>
+ component. Possible properties might be <em>horsepower</em> or <em>cylinders</em>.</p>
+ <p><img alt="" src="http://thevrjump.com/assets/img/articles/aframe-system/aframe-system.jpg"/>
+ </p><div class="page-caption"><span>
+ Abstract representation of a component by @rubenmueller of thevrjump.com.
+ </span></div><p/>
+ <h4>From the DOM</h4>
+ <p>Let's first see what a component looks like from the DOM.</p>
+ <p>For example, the <a href="https://aframe.io/docs/components/light.html">light component</a> has properties such as type, color,
+ and intensity. In A-Frame, we register and configure a component to an entity
+ using an HTML attribute and a style-like syntax:</p>
+ <div class="highlight"><pre><span class="p">&lt;</span><span class="nt">a-entity</span> <span class="na">light</span><span class="o">=</span><span class="s">"type: point; color: crimson; intensity: 2.5"</span><span class="p">&gt;&lt;/</span><span class="nt">a-entity</span><span class="p">&gt;</span>
+ </pre></div>
+
+
+ <p>This would give us a light in the scene. To demonstrate composability, we could
+ give the light a spherical representation by mixing in the <a href="https://aframe.io/docs/components/geometry.html">geometry
+ component</a>.</p>
+ <div class="highlight"><pre><span class="p">&lt;</span><span class="nt">a-entity</span> <span class="na">geometry</span><span class="o">=</span><span class="s">"primitive: sphere; radius: 5"</span>
+ <span class="na">light</span><span class="o">=</span><span class="s">"type: point; color: crimson; intensity: 2.5"</span><span class="p">&gt;&lt;/</span><span class="nt">a-entity</span><span class="p">&gt;</span>
+ </pre></div>
+
+
+ <p>Or we can configure the position component to move the light sphere a bit to the right.</p>
+ <div class="highlight"><pre><span class="p">&lt;</span><span class="nt">a-entity</span> <span class="na">geometry</span><span class="o">=</span><span class="s">"primitive: sphere; radius: 5"</span>
+ <span class="na">light</span><span class="o">=</span><span class="s">"type: point; color: crimson; intensity: 2.5"</span>
+ <span class="na">position</span><span class="o">=</span><span class="s">"5 0 0"</span><span class="p">&gt;&lt;/</span><span class="nt">a-entity</span><span class="p">&gt;</span>
+ </pre></div>
+
+
+ <p>Given the style-like syntax and that it modifies the appearance and behavior of
+ DOM nodes, component properties can be thought of as a rough analog to CSS. In
+ the near future, I can imagine component property stylesheets.</p>
+ <h4>Under the Hood</h4>
+ <p>Now let's see what a component looks like <strong>under the hood</strong>. A-Frame's most
+ basic component is the <a href="https://aframe.io/docs/components/position.html">position component</a>:</p>
+ <div class="highlight"><pre><span class="nx">AFRAME</span><span class="p">.</span><span class="nx">registerComponent</span><span class="p">(</span><span class="s1">'position'</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">schema</span><span class="o">:</span> <span class="p">{</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">'vec3'</span> <span class="p">},</span>
+
+ <span class="nx">update</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="kd">var</span> <span class="nx">object3D</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">.</span><span class="nx">object3D</span><span class="p">;</span>
+ <span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
+ <span class="nx">object3D</span><span class="p">.</span><span class="nx">position</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">x</span><span class="p">,</span> <span class="nx">data</span><span class="p">.</span><span class="nx">y</span><span class="p">,</span> <span class="nx">data</span><span class="p">.</span><span class="nx">z</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">});</span>
+ </pre></div>
+
+
+ <p>The position component uses only a tiny subset of the component API, but what
+ this does is register the component with the name "position", define a <code>schema</code>
+ where the component's value with be parsed to an <code>{x, y, z}</code> object, and when
+ the component initializes or the component's data updates, set the position of
+ the entity with the <code>update</code> callback. <code>this.el</code> is a reference from the
+ component to the DOM element, or entity, and <code>object3D</code> is the entity's
+ <a href="http://threejs.org/">three.js</a>. Note that A-Frame is built on top of three.js so many
+ components will be using the three.js API.</p>
+ <p>So we see that components consist of a name and a definition, and then they can
+ be registered to A-Frame. We saw the the position component definition defined
+ a <code>schema</code> and an <code>update</code> handler. Components simply consist of the <code>schema</code>,
+ which defines the shape of the data, and several handlers for the component to
+ modify the entity in reaction to different types of events.</p>
+ <p>Here is the current list of properties and methods of a component definition:</p>
+ <table class="pure-table-striped">
+ <tbody><tr>
+ <th>Property</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>data</td>
+ <td>Data of the component derived from the schema default values, mixins, and the entity's attributes.</td>
+ </tr>
+ <tr>
+ <td>el</td>
+ <td>Reference to the <a href="https://aframe.io/docs/core/entity.html">entity</a> element.</td>
+ </tr>
+ <tr>
+ <td>schema</td>
+ <td>Names, types, and default values of the component property value(s)</td>
+ </tr>
+ </tbody></table>
+
+ <table class="pure-table-striped">
+ <tbody><tr><th>Method</th><th>Description</th></tr>
+ <tr>
+ <td>init</td>
+ <td>Called once when the component is initialized.</td>
+ </tr>
+ <tr>
+ <td>update</td>
+ <td>Called both when the component is initialized and whenever the component's data changes (e.g, via <i>setAttribute</i>).</td>
+ </tr>
+ <tr>
+ <td>remove</td>
+ <td>Called when the component detaches from the element (e.g., via <i>removeAttribute</i>).</td>
+ </tr>
+ <tr>
+ <td>tick</td>
+ <td>Called on each render loop or tick of the scene.</td>
+ </tr>
+ <tr>
+ <td>play</td>
+ <td>Called whenever the scene or entity plays to add any background or dynamic behavior.</td>
+ </tr>
+ <tr>
+ <td>pause</td>
+ <td>Called whenever the scene or entity pauses to remove any background or dynamic behavior.</td>
+ </tr>
+ </tbody></table>
+
+ <h3>Defining the Schema</h3>
+ <p>The component's schema defines what type of data it takes. A component can
+ either be single-property or consist of multiple properties. And properties
+ have <em>property types</em>. Note that single-property schemas and property types are
+ being released in A-Frame <code>v0.2.0</code>.</p>
+ <p>A property might look like:</p>
+ <div class="highlight"><pre><span class="p">{</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">'int'</span><span class="p">,</span> <span class="k">default</span><span class="o">:</span> <span class="mi">5</span> <span class="p">}</span>
+ </pre></div>
+
+
+ <p>And a schema consisting of multiple properties might look like:</p>
+ <div class="highlight"><pre><span class="p">{</span>
+ <span class="nx">color</span><span class="o">:</span> <span class="p">{</span> <span class="k">default</span><span class="o">:</span> <span class="s1">'#FFF'</span> <span class="p">},</span>
+ <span class="nx">target</span><span class="o">:</span> <span class="p">{</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">'selector'</span> <span class="p">},</span>
+ <span class="nx">uv</span><span class="o">:</span> <span class="p">{</span>
+ <span class="k">default</span><span class="o">:</span> <span class="s1">'1 1'</span><span class="p">,</span>
+ <span class="nx">parse</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="nx">value</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">).</span><span class="nx">map</span><span class="p">(</span><span class="nb">parseFloat</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">},</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <p>Since components in the entity-component system are just buckets of data that
+ are used to affect the appearance or behavior of the entity, the schema plays a
+ crucial role in the definition of the component.</p>
+ <h4>Property Types</h4>
+ <p>A-Frame comes with several built-in property types such as <code>boolean</code>, <code>int</code>,
+ <code>number</code>, <code>selector</code>, <code>string</code>, or <code>vec3</code>. Every single property is assigned a
+ type, whether explicitly through the <code>type</code> key or implictly via inferring the
+ value. And each type is used to assign <code>parse</code> and <code>stringify</code> functions. The
+ parser deserializes the incoming string value from the DOM to be put into the
+ component's data object. The stringifier is used when using <code>setAttribute</code> to
+ serialize back to the DOM.</p>
+ <p>We can actually define and register our own property types:</p>
+ <div class="highlight"><pre><span class="nx">AFRAME</span><span class="p">.</span><span class="nx">registerPropertyType</span><span class="p">(</span><span class="s1">'radians'</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">parse</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+
+ <span class="p">}</span>
+
+ <span class="c1">// Default stringify is .toString().</span>
+ <span class="p">});</span>
+ </pre></div>
+
+
+ <h4>Single-Property Schemas</h4>
+ <p>If a component has only one property, then it must either have a <code>type</code> or a
+ <code>default</code> value. If the type is defined, then the type is used to parse and
+ coerce the string retrieved from the DOM (e.g., <code>getAttribute</code>). Or if the
+ default value is defined, the default value is used to infer the type.</p>
+ <p>Take for instance the <a href="https://aframe.io/docs/components/visible.html">visible component</a>. The schema property
+ definition implicitly defines it as a boolean:</p>
+ <div class="highlight"><pre><span class="nx">AFRAME</span><span class="p">.</span><span class="nx">registerComponent</span><span class="p">(</span><span class="s1">'visible'</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">schema</span><span class="o">:</span> <span class="p">{</span>
+ <span class="c1">// Type will be inferred to be boolean.</span>
+ <span class="k">default</span><span class="o">:</span> <span class="kc">true</span>
+ <span class="p">},</span>
+
+ <span class="c1">// ...</span>
+ <span class="p">});</span>
+ </pre></div>
+
+
+ <p>Or the <a href="https://aframe.io/docs/components/rotation.html">rotation component</a> which explicitly defines the value as a <code>vec3</code>:</p>
+ <div class="highlight"><pre><span class="nx">AFRAME</span><span class="p">.</span><span class="nx">registerComponent</span><span class="p">(</span><span class="s1">'rotation'</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">schema</span><span class="o">:</span> <span class="p">{</span>
+ <span class="c1">// Default value will be 0, 0, 0 as defined by the vec3 property type.</span>
+ <span class="nx">type</span><span class="o">:</span> <span class="s1">'vec3'</span>
+ <span class="p">}</span>
+
+ <span class="c1">// ...</span>
+ <span class="p">});</span>
+ </pre></div>
+
+
+ <p>Using these defined property types, schemas are processed by
+ <code>registerComponent</code> to inject default values, parsers, and stringifiers for
+ each property. So if a default value is not defined, the default value will be
+ whatever the property type defines as the "default default value".</p>
+ <h4>Multiple-Property Schemas</h4>
+ <p>If a component has multiple properties (or one named property), then it consists of
+ one or more property definitions, in the form described above, in an object keyed by
+ property name. For instance, a physics body component might define a schema:</p>
+ <div class="highlight"><pre><span class="nx">AFRAME</span><span class="p">.</span><span class="nx">registerComponent</span><span class="p">(</span><span class="s1">'physics-body'</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">schema</span><span class="o">:</span> <span class="p">{</span>
+ <span class="nx">boundingBox</span><span class="o">:</span> <span class="p">{</span>
+ <span class="nx">type</span><span class="o">:</span> <span class="s1">'vec3'</span><span class="p">,</span>
+ <span class="k">default</span><span class="o">:</span> <span class="p">{</span> <span class="nx">x</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">z</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span>
+ <span class="p">},</span>
+ <span class="nx">mass</span><span class="o">:</span> <span class="p">{</span>
+ <span class="k">default</span><span class="o">:</span> <span class="mi">0</span>
+ <span class="p">},</span>
+ <span class="nx">velocity</span><span class="o">:</span> <span class="p">{</span>
+ <span class="nx">type</span><span class="o">:</span> <span class="s1">'vec3'</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <p>Having multiple properties is what makes the component take the syntax in the
+ form of <code>physics="mass: 2; velocity: 1 1 1"</code>.</p>
+ <p>With the schema defined, all data coming into the component will be passed
+ through the schema for parsing. Then in the lifecycle methods, the component
+ has access to <code>this.data</code> which in a single-property schema is a value and in a
+ multiple-propery schema is an object.</p>
+ <h3>Defining the Lifecycle Methods</h3>
+ <h4>Component.init() - Set Up</h4>
+ <p><code>init</code> is called once in the component's lifecycle when it is mounted to the
+ entity. <code>init</code> is generally used to set up variables or members that may used
+ throughout the component or to set up state. Though not every component will
+ need to define an <code>init</code> handler. Sort of like the component-equivalent method
+ to <code>createdCallback</code> or <code>React.ComponentDidMount</code>.</p>
+ <p>For example, the <code>look-at</code> component's <code>init</code> handler sets up some variables:</p>
+ <div class="highlight"><pre><span class="nx">init</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">target3D</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">vector</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">THREE</span><span class="p">.</span><span class="nx">Vector3</span><span class="p">();</span>
+ <span class="p">},</span>
+
+ <span class="c1">// ...</span>
+ </pre></div>
+
+
+ <h4>Component.update(oldData) - Do the Magic</h4>
+ <p>The <code>update</code> handler is called both at the beginning of the component's
+ lifecycle with the initial <code>this.data</code> <em>and</em> every time the component's data
+ changes (generally during the entity's <code>attributeChangedCallback</code> like with a
+ <code>setAttribute</code>). The update handler gets access to the previous state of the
+ component data passed in through <code>oldData</code>. The previous state of the component
+ can be used to tell exactly which properties changed to do more granular
+ updates.</p>
+ <p>The update handler uses <code>this.data</code> to modify the entity, usually interacting
+ with three.js APIs. One of the simplest update handlers is the
+ <a href="https://aframe.io/docs/components/visible.html">visible</a> component's:</p>
+ <div class="highlight"><pre><span class="nx">update</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">.</span><span class="nx">object3D</span><span class="p">.</span><span class="nx">visible</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <p>A slightly more complex update handler might be the <a href="https://aframe.io/docs/components/light.html">light</a> component's,
+ which we'll show via abbreviated code:</p>
+ <div class="highlight"><pre><span class="nx">update</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">oldData</span><span class="p">)</span> <span class="p">{</span>
+ <span class="kd">var</span> <span class="nx">diffData</span> <span class="o">=</span> <span class="nx">diff</span><span class="p">(</span><span class="nx">data</span><span class="p">,</span> <span class="nx">oldData</span> <span class="o">||</span> <span class="p">{});</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">light</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="p">(</span><span class="s1">'type'</span> <span class="k">in</span> <span class="nx">diffData</span><span class="p">))</span> <span class="p">{</span>
+ <span class="c1">// If there is an existing light and the type hasn't changed, update light.</span>
+ <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">diffData</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">property</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">light</span><span class="p">[</span><span class="nx">property</span><span class="p">]</span> <span class="o">=</span> <span class="nx">diffData</span><span class="p">[</span><span class="nx">property</span><span class="p">];</span>
+ <span class="p">});</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// No light exists yet or the type of light has changed, create a new light.</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">light</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getLight</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">data</span><span class="p">));</span>
+
+ <span class="c1">// Register the object3D of type `light` to the entity.</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">.</span><span class="nx">setObject3D</span><span class="p">(</span><span class="s1">'light'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">light</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <p>The entity's <code>object3D</code> is a plain THREE.Object3D. Other three.js object types
+ such as meshes, lights, and cameras can be set with <code>setObject3D</code> where they
+ will be appeneded to the entity's <code>object3D</code>.</p>
+ <h4>Component.remove() - Tear Down</h4>
+ <p>The <code>remove</code> handler is called when the component detaches from the entity such
+ as with <code>removeAttribute</code>. This is generally used to remove all modifications,
+ listeners, and behaviors to the entity that the component added.</p>
+ <p>For example, when the <a href="https://aframe.io/docs/components/light.html">light component</a> detaches, it removes the light
+ it previously attached from the entity and thus the scene:</p>
+ <div class="highlight"><pre><span class="nx">remove</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">.</span><span class="nx">removeObject3D</span><span class="p">(</span><span class="s1">'light'</span><span class="p">);</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <h4>Component.tick(time) - Background Behavior</h4>
+ <p>The <code>tick</code> handler is called on every single tick or render loop of the scene.
+ So expect it to run on the order of 60-120 times for second. The global uptime of
+ the scene in seconds is passed into the tick handler.</p>
+ <p>For example, the <a href="https://aframe.io/docs/components/look-at.html">look-at</a> component, which instructs an entity to
+ look at another target entity, uses the tick handler to update the rotation in
+ case the target entity changes its position:</p>
+ <div class="highlight"><pre><span class="nx">tick</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">t</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// target3D and vector are set from the update handler.</span>
+ <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">target3D</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">.</span><span class="nx">object3D</span><span class="p">.</span><span class="nx">lookAt</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">vector</span><span class="p">.</span><span class="nx">setFromMatrixPosition</span><span class="p">(</span><span class="nx">target3D</span><span class="p">.</span><span class="nx">matrixWorld</span><span class="p">));</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <h4>Component.pause() and Component.play() - Stop and Go</h4>
+ <p>To support pause and play, just as with a video game or to toggle entities for
+ performance, components can implement <code>play</code> and <code>pause</code> handlers. These are
+ invoked when the component's entity runs its <code>play</code> or <code>pause</code> method. When an
+ entity plays or pauses, all of its child entities are also played or paused.</p>
+ <p>Components should implement play or pause handlers if they register any
+ dynamic, asynchronous, or background behavior such as animations, event
+ listeners, or tick handlers.</p>
+ <p>For example, the <code>look-controls</code> component simply removes its event listeners
+ such that the camera does not move when the scene is paused, and it adds its
+ event listeners when the scene starts playing or is resumed:</p>
+ <div class="highlight"><pre><span class="nx">pause</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">removeEventListeners</span><span class="p">()</span>
+ <span class="p">},</span>
+
+ <span class="nx">play</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
+ <span class="k">this</span><span class="p">.</span><span class="nx">addEventListeners</span><span class="p">()</span>
+ <span class="p">}</span>
+ </pre></div>
+
+
+ <h3>Boilerplate</h3>
+ <p>I suggest that people start off with my <a href="https://github.com/ngokevin/aframe-component-boilerplate">component boilerplate</a>,
+ even hardcore tool junkies. This will get you straight into building a
+ component and comes with everything you will need to publish your component
+ into the wild. The boilerplate handles creating a stubbed component, build
+ steps for both NPM and browser distribution files, and publishing to Github
+ Pages.</p>
+ <p>Generally with boilerplates, it is better to start from scratch and build your
+ own boilerplate, but the A-Frame component boilerplate contains a lot of tribal
+ inside knowledge about A-Frame and is updated frequently to reflect new things
+ landing on A-Frame. The only possibly opinionated pieces about the boilerplate
+ is the development tools it internally uses that are hidden away by NPM
+ scripts.</p>
+ <h3>Examples</h3>
+ <p>Under construction. Stay tuned!</p>
+ <h4>Text Component</h4>
+ <p><a href="https://github.com/ngokevin/aframe-text-component">Text component</a></p>
+ <h4>Physics Components</h4>
+ <p><a href="https://github.com/ngokevin/aframe-physics-components">Physics components</a></p>
+ <h4>Layout Component</h4>
+ <p><a href="https://github.com/ngokevin/aframe-layout-component">Layout component</a></p></div>
+ </summary>
+ <updated>2016-01-17T00:00:00Z</updated>
+ <source>
+ <id>http://ngokevin.com/rss</id>
+ <author>
+ <name>Kevin Ngo</name>
+ </author>
+ <link href="http://ngokevin.com/rss" rel="self" type="application/rss+xml"/>
+ <link href="http://ngokevin.com/rss" rel="alternate" type="text/html"/>
+ <updated>2016-01-26T18:09:34Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.gerv.net/?p=3527</id>
+ <link href="http://feedproxy.google.com/~r/HackingForChrist/~3/DN054t04_dE/" rel="alternate" type="text/html"/>
+ <link href="http://blog.gerv.net/2016/01/convenient-and-creepy/#comments" rel="replies" type="text/html"/>
+ <link href="http://blog.gerv.net/2016/01/convenient-and-creepy/feed/atom/" rel="replies" type="application/atom+xml"/>
+ <title xml:lang="en-US">Convenient… and Creepy</title>
+ <summary type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml">The last Mozilla All-Hands was at one of the hotels in the Walt Disney World Resort in Florida. Every attendee was issued with one of these (although their use was optional): It’s called a “Magic Band”. You register it online … <a href="http://blog.gerv.net/2016/01/convenient-and-creepy/">Continue reading <span class="meta-nav">→</span></a></div>
+ </summary>
+ <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>The last Mozilla All-Hands was at one of the hotels in the Walt Disney World Resort in Florida. Every attendee was issued with one of these (although their use was optional):<br/>
+ <a href="http://blog.gerv.net/files/2016/01/Disneys_MagicBand.jpg"><img class="alignnone size-large wp-image-3530" src="http://blog.gerv.net/files/2016/01/Disneys_MagicBand-1024x832.jpg" width="292"/></a></p>
+ <p>It’s called a “Magic Band”. You register it online and connect it to your Disney account, and then it can be used for park entry, entry to pre-booked rides so you don’t have to queue (called “FastPass+”), payment, picking up photos, as your room key, and all sorts of other convenient features. Note that it has no UI whatsoever – no lights, no buttons. Not even a battery compartment. (It does contain a battery, but it’s not replaceable.) These are specific design decisions – the aim is for ultra-simple convenience.</p>
+ <p>One of the talks we had at the All Hands was from one of the Magic Band team. The audience reactions to some of the things he said was really interesting. He gave the example of Cinderella wishing you a Happy Birthday as you walk round the park. “Cinderella just knows”, he said. Of course, in fact, her costume’s tech prompts her when it silently reads your Magic Band from a distance. This got some initial impressed applause, but it was noticeable that after a few moments, it wavered – people were thinking “Cool… er, but creepy?”</p>
+ <p>The Magic Band also has range sufficient that Disney can track you around the park. This enables some features which are good for both customers and Disney – for example, they can use it for load balancing. If one area of the park seems to be getting overcrowded, have some characters pop up in a neighbouring area to try and draw people away. But it means that they always know where you are and where you’ve been.</p>
+ <p>My take-away from learning about the Magic Band is that it’s really hard to have a technical solution to this kind of requirement which allows all the Convenient features but not the Creepy features. Disney does offer an RFID-card-based solution for the privacy-conscious which does some of these things, but not all of them. And it’s easier to lose. It seems to me that the only way to distinguish the two types of feature, and get one and not the other, is policy – either the policy of the organization, or external restrictions on them (e.g. from a watchdog body’s code of conduct they sign up to, or from law). And it’s often not in the organization’s interest to limit themselves in this way.</p>
+ <img alt="" height="1" src="http://feeds.feedburner.com/~r/HackingForChrist/~4/DN054t04_dE" width="1"/></div>
+ </content>
+ <updated>2016-01-16T12:18:38Z</updated>
+ <published>2016-01-16T12:18:38Z</published>
+ <category scheme="http://blog.gerv.net" term="Mozilla"/>
+ <category scheme="http://blog.gerv.net" term="Syndicate"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.gerv.net/2016/01/convenient-and-creepy/</feedburner:origLink>
+ <author>
+ <name>gerv</name>
+ </author>
+ <source>
+ <id>http://blog.gerv.net/feed/atom/</id>
+ <link href="http://blog.gerv.net" rel="alternate" type="text/html"/>
+ <link href="http://feeds.feedburner.com/HackingForChrist" rel="self" type="application/atom+xml"/>
+ <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
+ <subtitle xml:lang="en-US">Gervase Markham</subtitle>
+ <title xml:lang="en-US">Syndicate – Hacking for Christ</title>
+ <updated>2016-01-16T12:18:38Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://www.christianheilmann.com/?p=4957</id>
+ <link href="https://www.christianheilmann.com/2016/01/16/dont-tell-me-what-my-browser-cant-do/" rel="alternate" type="text/html"/>
+ <title>Don’t tell me what my browser can’t do!</title>
+ <summary>Chances are, your guess is wrong! Arrogance towards possible customers never pays out – as shown in “Pretty Woman” There is nothing more frustrating than being capable of something and not getting a chance to do it. The same goes for being blocked out from something although you are capable of consuming it. Or you’re […]</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em class="markup--em markup--p-em">Chances are, your guess is wrong!</em></p>
+
+ <p/><figure><img alt="you are obviously in the wrong place" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*l9jPbOyAl00kjPhyNYA-IQ.jpeg" width="100%"/>Arrogance towards possible customers never pays out – as shown in “Pretty Woman”</figure><p/>
+
+ <p>There is nothing more frustrating than being capable of something and not getting a chance to do it. The same goes for being blocked out from something although you are capable of consuming it. Or you’re even willing to put some extra effort or even money in and you still don’t get to consume it.</p>
+
+ <p>For example, I’d happily pay $50 a month to get access to Netflix’s world-wide library from any country I’m in. But the companies Netflix get their content from won’t go for that. Movies and TV show are budgeted by predicted revenue in different geographical markets with month-long breaks in between the releases. A world-wide network capable of delivering content in real time? Preposterous — let’s shut that down.</p>
+
+ <p>On a less “let’s break a 100 year old monopoly” scale of annoyance, <a href="https://twitter.com/codepo8/status/687616620529844224">I tweeted yesterday something glib and apparently cruel</a>:</p>
+
+ <p/><blockquote>“Sorry, but your browser does not support WebGL!” – sorry, you are a shit coder.</blockquote><p/>
+
+ <p><strong>And I stand by this</strong>. I went to a web site that promised me some cute, pointless animation and technological demo. I was using Firefox Nightly — a WebGL capable browser. I also went there with Microsoft Edge — another WebGL capable browser. Finally, using Chrome, I was able to delight in seeing an animation.</p>
+
+ <p><strong>I’m not saying the creators of that thing lack in development capabilities</strong>. The demo was slick, beautiful and well coded. They still do lack in two things developers of <em>web products </em>(and I count apps into that) should have: empathy for the end user and an understanding that they are not in control.</p>
+
+ <p>Now, I am a pretty capable technical person. When you tell me that I might be lacking WebGL, I know what you mean. I don’t lack WebGL. I was blocked out because the web site did browser sniffing instead of capability testing. But I know what could be the problem.</p>
+
+ <p>A normal user of the web has no idea what WebGL is and — if you’re lucky — will try to find it on an app store. If you’re not lucky all you did is confuse a person. A person who went through the effort to click a link, open a browser and wait for your thing to load. A person that feels stupid for using your product as they have no clue what WebGL is and won’t ask. Humans hate feeling stupid and we do anything not to appear it or show it.</p>
+
+ <p>This is what I mean by empathy for the end user. Our problems should never become theirs.</p>
+
+ <p/><blockquote>A cryptic error message telling the user that they lack some technology helps nobody and is sloppy development at best, sheer arrogance at worst.</blockquote><p/>
+
+ <p>The web is, sadly enough, littered with unhelpful error messages and assumptions that it is the user’s fault when they can’t consume the thing we built.</p>
+
+ <p>Here’s a reality check — this is what our users should have to do to consume the things we build:</p>
+
+ <p><img alt="" height="600" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*DXtRIWTu-UzRb0YB-h8SmA.png" width="10"/></p>
+
+ <p><strong>That’s right. Nothing</strong>. This is the web. Everybody is invited to consume, contribute and create. This is what made it the success it is. This is what will make it outlive whatever other platform threatens it with shiny impressive interactions. Interactions at that time impossible to achieve with web technologies.</p>
+
+ <p>Whenever I mention this, the knee-jerk reaction is the same:</p>
+
+ <p/><blockquote class="graf--blockquote graf-after--p" id="79d6" name="79d6">How can you expect us to build delightful experiences close to magic (and whatever other soundbites were in the last Apple keynote) if we keep having to support old browsers and users with terrible setups?</blockquote><p/>
+
+ <p>You don’t have to support old browsers and terrible setups. But you are not allowed to block them out. It is a simple matter of giving a usable interface to end users. A button that does nothing when you click it is not a good experience. Test if the functionality is available, then create or show the button. <strong class="markup--strong markup--p-strong">This is as simple as it is.</strong></p>
+
+ <p>If you really have to rely on some technology then show people what they are missing out on and tell them how to upgrade. A screenshot or a video of a WebGL animation is still lovely to see. A message telling me I have no WebGL less so.</p>
+
+ <p>Even more on the black and white scale, what the discussion boils down to is in essence:</p>
+
+ <p/><blockquote class="graf--blockquote graf-after--p" id="a775" name="a775">But it is 2016 — surely we can expect people to have JavaScript enabled — it is after all “the assembly language of the web”</blockquote><p/>
+
+ <p>Despite the cringe-worthy <a href="http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageForTheWebSematicMarkupIsDeadCleanVsMachinecodedHTML.aspx">misquote of the assembly language</a> thing, here is a harsh truth:</p>
+
+ <p/><blockquote>You can absolutely expect JavaScript to be available on your end users computers in 2016. At the same time it is painfully <strong>naive</strong> to expect it to work under all circumstances.</blockquote><p/>
+
+ <p><strong>JavaScript is brittle</strong>. <span class="caps">HTML</span> and <span class="caps">CSS</span> both are <em>fault tolerant</em>. If something goes wrong in <span class="caps">HTML</span>, browsers either display the content of the element or try to fix minor issues like unclosed elements for you. <span class="caps">CSS</span> skips lines of code it can’t understand and merrily goes on its way to show the rest of it. JavaScript breaks on errors and tells you that something went wrong. It will not execute the rest of the script, but throws in the towel and tells you to get your house in order first.</p>
+
+ <p>There <a href="http://kryogenix.org/code/browser/everyonehasjs.html">are many outside influences</a> that will interfere with the execution of your JavaScript. That’s why a non-naive and non-arrogant — a dedicated and seasoned web developer — will never rely on it. Instead, you treat it as an enhancement and in an almost paranoid fashion test for the availability of everything before you access it.</p>
+
+ <p><strong>Sorry (not sorry) — this will never go away</strong>. This is the nature of JavaScript. And it is a good thing. It means we can access new features of the language as they come along instead of getting stuck in a certain state. It means we have to think about using it every time instead of relying on libraries to do the work for us. It means that we need to keep evolving with the web — a living and constantly changing medium, and not a software platform. That’s just part of it.</p>
+
+ <p>This is why the whole discussion about JavaScript enabled or disabled is a massive waste of time. It is not the availability of JavaScript we need to worry about. It is our products breaking in perfectly capable environments because we rely on perfect execution instead of writing defensive code. A tumblr like <a class="markup--anchor markup--p-anchor" href="http://sighjavascript.tumblr.com/" rel="nofollow">Sigh, JavaScript</a> is fun, but is pithy finger-pointing.</p>
+
+ <p/><blockquote>There is nothing wrong with using JavaScript to build things. Just be aware that the error handling is your responsibility.</blockquote><p/>
+
+ <p>Any message telling the user that they have to turn on JavaScript to use a certain product is a proof that you care more about your developer convenience than your users.</p>
+
+ <p/><blockquote>It is damn hard these days to turn off JavaScript – you are complaining about a almost non-existent issue and tell the confused user to do something they don’t know how to.</blockquote><p/>
+
+ <p>The chance that something in the JavaScript execution of any of your dozens of dependencies went wrong is much higher – and this is your job to fix. This is why advice like <a href="http://webdesign.tutsplus.com/tutorials/quick-tip-dont-forget-the-noscript-element--cms-25498">using noscript to provide alternative content</a> is terrible. It means you double your workload instead of enhancing what works. Who knows? If you start with something not JavaScript dependent (or running it server side) you might find that you don’t need the complex solution you started with in the first place. Faster, smaller, easier. Sounds good, right?</p>
+
+ <p>So, please, stop sniffing my browser, you will fail and tell me lies. Stop pretending that working with a brittle technology is the user’s fault when something goes wrong.</p>
+
+ <p/><blockquote>As web developers we work in the service industry. We deliver products to people. And keeping these people happy and non-worried is our job. Nothing more, nothing less.</blockquote><p/>
+
+ <p>Without users, your product is nothing. Sure, we are better paid and well educated and we are not flipping burgers. But we have no right whatsoever to be arrogant and not understanding that our mistakes are not the fault of our end users.</p>
+
+ <p>Our demeanor when complaining about how stupid our end users and their terrible setups are reminds me of <a href="https://www.youtube.com/watch?v=CSj5stmFkQ0">this Mitchell and Webb sketch</a>.</p>
+
+ <p/>
+
+ <p><strong class="markup--strong markup--p-strong">Don’t be that person. </strong>Our job is to enable people to consume, participate and create the web. This is magic. This is beautiful. This is incredibly rewarding. The next markets we should care about are ready to be as excited about the web as we were when we first encountered it. Browsers are good these days. Use what they offer after testing for it and enjoy what you can achieve. Don’t tell the user when things go wrong – they can not fix what you messed up.</p>
+
+
+ <img alt="" height="1" src="http://feeds.feedburner.com/~r/chrisheilmann/~4/vqtqgcNQXy8" width="1"/></div>
+ </content>
+ <updated>2016-01-16T11:28:10Z</updated>
+ <category term="General"/>
+ <author>
+ <name>Chris Heilmann</name>
+ </author>
+ <source>
+ <id>https://www.christianheilmann.com</id>
+ <link href="https://www.christianheilmann.com" rel="alternate" type="text/html"/>
+ <link href="http://feeds.feedburner.com/chrisheilmann" rel="self" type="application/rss+xml"/>
+ <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
+ <subtitle>For a better web with more professional jobs - can talk, will travel</subtitle>
+ <title>Christian Heilmann</title>
+ <updated>2016-01-16T11:46:15Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://glandium.org/blog/?p=3510</id>
+ <link href="http://glandium.org/blog/?p=3510" rel="alternate" type="text/html"/>
+ <title>Announcing git-cinnabar 0.3.1</title>
+ <summary>This is a brown paper bag release. It turns out I managed to break the upgrade path only 10 commits before the release. What’s new since 0.3.0? git cinnabar fsck doesn’t fail to upgrade metadata. The remote.$remote.cinnabar-draft config works again. Don’t fail to clone an empty repository. Allow to specify mercurial configuration items in a […]</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is a brown paper bag release. It turns out I managed to break the upgrade<br/>
+ path only 10 commits before the release.</p>
+ <h3>What’s new since 0.3.0?</h3>
+ <ul>
+ <li><code>git cinnabar fsck</code> doesn’t fail to upgrade metadata.</li>
+ <li>The <code>remote.$remote.cinnabar-draft</code> config works again.</li>
+ <li>Don’t fail to clone an empty repository.</li>
+ <li>Allow to specify mercurial configuration items in a .git/hgrc file.</li>
+ </ul></div>
+ </content>
+ <updated>2016-01-16T11:26:45Z</updated>
+ <category term="cinnabar"/>
+ <category term="p.m.o"/>
+ <category term="en"/>
+ <author>
+ <name>glandium</name>
+ </author>
+ <source>
+ <id>http://glandium.org/blog</id>
+ <link href="http://glandium.org/blog/?feed=rss2&amp;cat=25&amp;tag=en" rel="self" type="application/rss+xml"/>
+ <link href="http://glandium.org/blog" rel="alternate" type="text/html"/>
+ <subtitle>glandium.org</subtitle>
+ <title>p.m.o – glandium.org</title>
+ <updated>2016-01-16T11:30:43Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-us">
+ <id>http://edunham.net/2016/01/16/buildbot_and_eoferror.html</id>
+ <link href="http://edunham.net/2016/01/16/buildbot_and_eoferror.html" rel="alternate" type="text/html"/>
+ <title>Buildbot and EOFError</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h3>Buildbot and EOFError</h3>
+ <p>More SEO-bait, after tracking down an poorly documented problem:</p>
+ <div class="highlight-python"><div class="highlight"><pre># buildbot start master
+ Following twistd.log until startup finished..
+ 2016-01-17 04:35:49+0000 [-] Log opened.
+ 2016-01-17 04:35:49+0000 [-] twistd 14.0.2 (/usr/bin/python 2.7.6) starting up.
+ 2016-01-17 04:35:49+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
+ 2016-01-17 04:35:49+0000 [-] Starting BuildMaster -- buildbot.version: 0.8.12
+ 2016-01-17 04:35:49+0000 [-] Loading configuration from '/home/user/buildbot/master/master.cfg'
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file:
+ Traceback (most recent call last):
+ File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 577, in _runCallbacks
+ current.result = callback(current.result, *args, **kw)
+ File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1155, in gotResult
+ _inlineCallbacks(r, g, deferred)
+ File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1099, in _inlineCallbacks
+ result = g.send(result)
+ File "/usr/local/lib/python2.7/dist-packages/buildbot/master.py", line 189, in startService
+ self.configFileName)
+ --- &lt;exception caught here&gt; ---
+ File "/usr/local/lib/python2.7/dist-packages/buildbot/config.py", line 156, in loadConfig
+ exec f in localDict
+ File "/home/user/buildbot/master/master.cfg", line 415, in &lt;module&gt;
+ extra_post_params={'secret': HOMU_BUILDBOT_SECRET},
+ File "/usr/local/lib/python2.7/dist-packages/buildbot/status/status_push.py", line 404, in __init__
+ secondaryQueue=DiskQueue(path, maxItems=maxDiskItems))
+ File "/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py", line 286, in __init__
+ self.secondaryQueue.popChunk(self.primaryQueue.maxItems()))
+ File "/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py", line 208, in popChunk
+ ret.append(self.unpickleFn(ReadFile(path)))
+ exceptions.EOFError:
+
+ 2016-01-17 04:35:53+0000 [-] Configuration Errors:
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file: (traceback in logfile)
+ 2016-01-17 04:35:53+0000 [-] Halting master.
+ 2016-01-17 04:35:53+0000 [-] Main loop terminated.
+ 2016-01-17 04:35:53+0000 [-] Server Shut Down.
+ </pre></div>
+ </div>
+ <p>This happened after the buildmaster’s disk filled up and a bunch of stuff was
+ manually deleted. There were no changes to master.cfg since it worked
+ perfectly.</p>
+ <p>The fix was to examine <span class="docutils literal"><span class="pre">master.cfg</span></span> to see <a class="reference external" href="https://github.com/servo/saltfs/blob/master/buildbot/master/master.cfg#L413">where the HttpStatusPush was
+ created</a>,
+ of the form:</p>
+ <div class="highlight-python"><div class="highlight"><pre><span class="n">c</span><span class="p">[</span><span class="s">'status'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">HttpStatusPush</span><span class="p">(</span>
+ <span class="n">serverUrl</span><span class="o">=</span><span class="s">'http://build.servo.org:54856/buildbot'</span><span class="p">,</span>
+ <span class="n">extra_post_params</span><span class="o">=</span><span class="p">{</span><span class="s">'secret'</span><span class="p">:</span> <span class="n">HOMU_BUILDBOT_SECRET</span><span class="p">},</span>
+ <span class="p">))</span>
+ </pre></div>
+ </div>
+ <p>Digging in the Buildbot source reveals that <span class="docutils literal"><span class="pre">persistent_queue.py</span></span> wants to
+ unpickle a cache file from <span class="docutils literal"><span class="pre">/events_build.servo.org/-1</span></span> if there was nothing
+ in <span class="docutils literal"><span class="pre">/events_build.servo.org/</span></span>. To fix this the right way, create that file
+ and make sure Buildbot has <span class="docutils literal"><span class="pre">+rwx</span></span> on it.</p>
+ <p>Alternately, you can give up on writing your status push cache to disk
+ entirely by adding the line <span class="docutils literal"><span class="pre">maxDiskItems=0</span></span> to the creation of the
+ HttpStatusPush, giving you:</p>
+ <div class="highlight-python"><div class="highlight"><pre><span class="n">c</span><span class="p">[</span><span class="s">'status'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">HttpStatusPush</span><span class="p">(</span>
+ <span class="n">serverUrl</span><span class="o">=</span><span class="s">'http://build.servo.org:54856/buildbot'</span><span class="p">,</span>
+ <span class="n">maxDiskItems</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">extra_post_params</span><span class="o">=</span><span class="p">{</span><span class="s">'secret'</span><span class="p">:</span> <span class="n">HOMU_BUILDBOT_SECRET</span><span class="p">},</span>
+ <span class="p">))</span>
+ </pre></div>
+ </div>
+ <p>The real moral of the story is “remember to use <a class="reference external" href="http://www.linuxcommand.org/man_pages/logrotate8.html">logrotate</a>.</p></div>
+ </summary>
+ <updated>2016-01-16T08:00:00Z</updated>
+ <source>
+ <id>http://edunham.net/</id>
+ <author>
+ <name>Emily Dunham</name>
+ </author>
+ <link href="http://edunham.net/" rel="alternate" type="text/html"/>
+ <link href="http://edunham.net/rss.html?tag=planetmozilla" rel="self" type="application/rss+xml"/>
+ <subtitle>is a "DevOps" Engineer at Mozilla Research</subtitle>
+ <title>edunham</title>
+ <updated>2016-01-19T08:00:00Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>urn:md5:41d039bb28fb15c761578cba0b1454fa</id>
+ <link href="http://www.glazman.org/weblog/dotclear/index.php?post/2016/01/16/Ebook-pagination-and-CSS" rel="alternate" type="text/html"/>
+ <title>Ebook pagination and CSS</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Let's suppose you have a rather long document, for instance a book chapter, and you want to render it in your browser <em>à la</em> iBooks/Kindle. That's rather easy with just a dash of CSS:</p>
+ <pre>body {
+ height: calc(100vh - 24px);
+ column-width: 45vw;
+ overflow: hidden;
+ margin-left: calc(-50vw * attr(currentpage integer));
+ }</pre>
+ <p>Yes, yes, I know that no browser implements that <code>attr()</code>extended syntax. So put an inline style on your body for <code>margin-left: calc(-50vw * <em>&lt;n&gt;</em>)</code> where <em><code>&lt;n&gt;</code></em> is the page number you want minus 1.</p>
+ <p>Then add the fixed positioned controls you need to let user change page, plus gesture detection. Add a transition on margin-left to make it nicer. Done. Works perfectly in Firefox, Safari, Chrome and Opera. I don't have a Windows box handy so I can't test on Edge.</p></div>
+ </summary>
+ <updated>2016-01-16T03:43:00Z</updated>
+ <category term="CSS and style"/>
+ <author>
+ <name>glazou</name>
+ </author>
+ <source>
+ <id>http://www.glazman.org/weblog/dotclear/index.php</id>
+ <link href="http://www.glazman.org/weblog/dotclear/index.php" rel="alternate" type="text/html"/>
+ <link href="http://glazman.org/weblog/dotclear/?feed/planetmoz" rel="self" type="application/rss+xml"/>
+ <subtitle>Un Glazman, un blog, un Glazblog</subtitle>
+ <title>&lt;Glazblog/&gt;</title>
+ <updated>2016-01-25T16:34:47Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="fr-FR">
+ <id>https://repeer.org/?p=48</id>
+ <link href="https://repeer.org/2016/01/16/mozilla-cultural-revolution-from-radical-participation-to-radical-user-centric/" rel="alternate" type="text/html"/>
+ <title>Mozilla cultural revolution: from ‘radical participation’ to ‘radical user-centric’</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This post has been written about the Mozilla Foundation (MoFo) 2020 strategy. The ideas developed in this post are in different levels: some are global, some focus on particular points of the proposed draft. But in my point of view, they all carry a transversal meaning: articulation (as piece connected to a structure allowing movement) <a class="read-more" href="https://repeer.org/2016/01/16/mozilla-cultural-revolution-from-radical-participation-to-radical-user-centric/">[…]</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This post has been written about the <a href="http://marksurman.commons.ca/2015/12/21/mofo2020/">Mozilla Foundation (MoFo) 2020 strategy</a>.</p>
+ <p>The ideas developed in this post are in different levels: some are global, some focus on particular points of the proposed draft. But in my point of view, they all carry a transversal meaning: articulation (as piece connected to a structure allowing movement) with others and consistency with our mission.</p>
+ <h3>Summary</h3>
+ <p>On the way to <a href="http://marksurman.commons.ca/2015/01/09/what-is-radical-participation/">radical participation</a>, Mozilla should be radical <sup class="footnote"><a href="https://repeer.org/tag/mozilla/feed/#fn-48-1" id="fnref-48-1">1</a></sup> user-centric. Mozilla should not go against the social understanding of the (tech and whole society) situation because it’s what is massively shared and what polarizes the prism of understanding of the society. <strong>We should built solutions for it and transform (develop and change) it on the way. Our responsibility is to build <em>inclusivity</em> (inclusion strengths) everywhere, to gather for multiplying our impact.</strong> We must build (progressive) victories instead of battles (of static positions and postures).<br/>
+ If we don’t do it, we go against users self-perceived need: use. We value our differences more than our commonalities and <strong>consider ethic more as an absolute objective than a concrete process</strong>: we divide, separate, compete. Our solutions get irrelevant, we get rejected and marginalized, we reject compromises that improve the current situation for the ideal, we loose influence and therefore impact on the definition of the present and future. We already done it for the good and the bad in the past (H.264+Daala, pocket integration, Hello login, no Firefox for iOS, Google fishing vs Disconnect, FxOS Notes app which sync is evernote only, …).<br/>
+ To get a consistent and impactful ability to integrate and transform the social understanding, there are four domains where we can take and articulate (connected structure allowing movement) action:</p>
+ <ul>
+ <li><strong>People</strong>: identity is the key to grow consciousness, understanding, skills, voice, representation and to articulate global/local, personal/common. <strong>[Activate]</strong></li>
+ <li><strong>Technology</strong>: universality is key for a platform (for resilience) with interfaces (for modularity) where services, features and front-ends can plug-in and communicate to provide (inter)active support ; Decouple conditions of fulfillment with execution (content/appearance/policy ; material/immaterial) to support remix (policy continuity, consistency thought providers, …). <strong>[Unlock]</strong></li>
+ <li><strong>Product</strong>: persona and (current and emerging) use via user-agents are the keys. Be on all major platforms depending on use, ethical alignment and opportunities, emerging newness to provide continuity (task, device) to users and leading on new practices. Features should be about products parity and opening new possibilities carrying our values to the action at a massive scale. <strong>[Build]</strong></li>
+ <li><strong>Organizations/institutions</strong>: sociological innovation for participation is the key. Research on historical (evolution) and sociological (human organizations, social institutions and social behaviors) analysis based on social networks (link as social interactions), in the perspective of producing commons. <strong>[Drive]</strong></li>
+ </ul>
+ <p>Our front has two sides: <strong>propose and protect</strong>. But each of them are connected and can have different strategic expressions, if our actions generate improving (progressive) curves:</p>
+ <ul>
+ <li>For the <strong>action taking</strong>: consciousness, understanding, symbolic actions, behavior change, behavior advocacy (evangelism)</li>
+ <li>For the <strong>action mode</strong>: promotion (spreading the idea), incitement (giving a competitive advantage to people involved), collaboration (open interactions to make a win-win exchange; process-centric), contractualization (formalize domains where a win-win exchange is made; object-centric), coercion (giving a competitive disadvantage to people not involved).</li>
+ </ul>
+ <p>Social history is a history of social values.<strong> The way we understand and tell the problem determine the solution we can create</strong>: we need, all the way long, a shared understanding. Tools and technologies are not tied, bound forever to their social value, which depends on people’s social representations that evolve over time.</p>
+ <ul>
+ <li><strong>The social behavior</strong> is a first key. It is the narrative, and therefore its <strong>inclusion in the social history that we make, which converges the product with the values that it stands for</strong>. Here is the articulation of product with people and technology, of product with leadership network and advocacy engine (it could be less persistent and inclusive: marketing).</li>
+ <li><strong>The social organization</strong> is a second key. It is about how the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla (org) and Mozillians (people). <strong>Here comes the question of being open</strong>. It is not enough because it is about availability (passive) and not inclusivity (active). The high level of automation coming is a challenge. We should level-up the meaning to differentiate from others: <strong>Mozilla should activate and unlock societal progress to build fair technical progress</strong>. Mozilla need to <strong>identify its resilient backbone</strong> (not only a technology, the web, but something that articulate people, technology and products) and make it more universal (through people and products). But our goals can’t be absolutely achieved because they have to be considered in a dynamic context. However, the brand engagement is persistent, if it’s included in the product, visible, and centered on easing the user’s action.<br/>
+ Linked to the ‘being open’ question, the advocacy engine could be a thing to unlock societal progress. People are satisfied of narrow hills of choice until they understand it’s not socially neutral. It’s the case with technology: they accept things about technology to be build top-down. <strong>A successful advocacy, even one about technology, is always built bottom-up</strong>, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric and administrative content centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. <strong>If we want to have an impact, we should listen to people needs, not tell them to listen to ours</strong>. People want (first) to be empowered, not to empower an org. We need to have content and user centric (not org and it’s process) tools/platform for advocates and leaders: let’s build the technology advocacy plan together. Yes it’s slower, but much more massive, inclusive and persistent. The impact will be higher because it will carry a meaning for people and it wont be too org centric. So it will be qualitatively better: not just an amount, <strong>accumulation is not our goal, but impact, that comes from articulation</strong>. Likewise we should be careful to not use best practice as absolute solutions, but as solutions in a context, if we want to transpose them massively: when we unify we should avoid to homogenize. On the narrative side, our preoccupation should be about building short, medium and long term narrative to get action.</li>
+ <li><strong>The social institutions</strong> are the third key. Here is the articulation of the leadership network with the advocacy engine. <strong>Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.</strong> Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved in creating (different) representations (institutions) and organizations (foundation/firms) but <strong>with a different DNA (values) processing</strong>: from public good to personal benefit or from personal interest to public benefit. If Mozilla cares about public good resilience, <strong>the articulation of their domains of values is critical</strong>. So, on the social organization side, their articulation’s expression and the revision process must be said and clear: from hierarchy or contract or different autonomy levels (internal incubation and external advocacy), or … to criteria to start a revision. About the narrative, and hence about the social behavior side, leaders carry a lot of legitimacy and avoid the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact. But this legitimacy is already present if we<strong> make clear that our actions are about commons</strong>. We should name them creators (compositors or managers) to make it clear that the creative process is a collaboration, made by a team and that the public good do not have the same role in the process and outcome. Full circle.</li>
+ <li><strong>The social networks</strong> are the keystone. Let’s shortly take an example based on social networks (link as social interactions) with the perspective of producing people, technological and product commons. <strong>We need better tools for collaboration and participation</strong>: tools that merge discussion channels, capitalize on the discussion and preview the results to build a plan. From evolving the wiki discussion page to feature document production into peer-to-peer discussion.</li>
+ </ul>
+ <p>An analysis of the creation process is another way to the articulation of product with people and technology.<br/>
+ Platforms move closer to strict ‘walled garden’ ecosystems. We need bridges from lab to home that carry different mix of customization and reliability to support the emancipation curve. We need to build pathways thought audiences and thought IT layers (content, software, hardware, distant service). <strong>We should find a convergence between customization</strong> (dev code patch to users add-ons) <strong>and reliability</strong> (self made to mass product), <strong>between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways</strong>. Mozilla should find ways to <strong>integrate learning</strong> in its products, in-content, as we have code comment on code: on-boarding levels, progression from simple to high level techniques, reproducible/universal next task/skill building.</p>
+ <h3>Detailed discussion content</h3>
+ <p>Here are the developed ideas, with more reference to our allies and detractors’ products.</p>
+ <h4>People, the sociological side</h4>
+ <h5>From focused to systemic action</h5>
+ <p>First of all, I think <strong>the strategy move Mozilla is doing is the right one</strong> as it embraces more our real life. People are not defined by one characteristic, we are complex: ex. we can be pedestrian, car driver, biker, Public Transport user… we think and do simultaneously. So why Mozilla should restrict its strategy by targeting people on skills, through education, thought better material only (the Mozilla Academy program). Education, even popular education, can’t do everything for the people to build change. <strong>We need a plan that balance intellectual and practical (abstraction/action, think/do) integrating progressive paths to massively scale so we get an impact: build change.</strong></p>
+ <h5>Real life: Social history, individuals and institutions as an articulation founding the action.</h5>
+ <p>Let’s start by some definitions based on my understanding of some <a href="https://fr.wikipedia.org/wiki/Sociologie">Wikipedia articles</a>. Sociology is the study of the evolution of societies: human organizations and social institutions. It is about <strong>the impact of the social dimension on humans representations (ways of thinking) and behaviors (ways of acting)</strong>. It allows to study the conceptions of social relations according to fundamental criteria (structuralism, functionalism, conventionalism, etc.) and the hooks to reality (interactionism, institutionalism, regulationisme, actionism, etc.), to think and shape the modernity. Currently (and this is key for Mozilla’s positioning), the combination of models replace the models’ unity, which aims to assume the multidimensionality. There are three major sociological paradigms, including one emerging:</p>
+ <ul>
+ <li><strong>The holistic paradigm</strong>: Society is a whole that is greater than the sum of its parts, it exists before the individual and individuals are governed by it. In this context, the Society includes the individual and the individual consciousness is seen only as a fragment of the collective consciousness. The emphasis is on the social fact, whose cause must be sought in earlier social facts. The social fact is part of a system of interlocking institutions that govern individuals. It is external to the individual and constraint it. Sociology is then the science of institutional invariants in which are the observable phenomenas.</li>
+ <li><strong>The atomistic paradigm</strong>: each individual is a social atom. The atoms act according to self motives, interests, emotions and are linked to other atoms. A system of constant interaction between atoms produces and reproduces Society. The emphasis is on the cause of social actions and the meaning given by individuals to their actions. A horizon of meanings serve as reference instead of the arrangements of institutions. The institution is there but it serves the motives and interests of agents. Sociology is then the study of the social action.</li>
+ <li>The recent emergence of a sociological analysis based on <strong>social networks</strong> (which are a collection of individuals or organizations connected by regular social interactions) suggest lines of research <strong>beyond the opposition between the holistic and the atomistic approaches</strong>. The theory of social networks conceives social relationships in terms of nodes and links. The nodes are usually social actors in the network but can also represent institutions, and links are the relationships between these nodes. There may be several kinds of links between nodes and their analysis determines social capital of the social actors.</li>
+ </ul>
+ <p>Consequently, Mozilla should build its strategy on <strong>historical</strong> (evolution) and <strong>sociological</strong> (human organizations, social institutions and social behaviors) analysis based on <strong>social networks</strong> (links as social interactions), in the perspective of producing <strong>commons</strong>. That is to say as an <strong>engine of transition from a model of value</strong> on its last leg (rarity capitalism) to the emerging one (new articulation of the individual and the collective: commons).<br/>
+ It is important and strategic to propose a sociological articulation supporting our mission and its purpose (commons) since <strong>the sociological concept (the paradigm) reveals an ideological characteristic</strong>: because it participates in societal movements made in the Society, it serves an ideal. The societal domain, what’s making society, a political object, should be a stake for Mozilla.</p>
+ <h5>Build on a basement: current tech challenge articulated with current social meaning/perception</h5>
+ <p><strong>We should articulate ‘our real life’ with the nowadays tech challenge</strong>: how to get back control over our data at the time of IoT, cloud, big data, convergence (multi-devices/form factor)? From a user point of view, we have devices and want them convenient, easy and nice. The big moves in the tech industry (IoT, cloud, big data, convergence) free us for somethings and lock us for others. The lock key is that our devices don’t compute anymore our data that are in silos. From a developer point of view, the innovation is going very fast and it’s hard to have a complete open source toolbox that we can share, mostly because we don’t lead: Open has turn to be more open-releasing.<br/>
+ We should articulate our new strategy with the tech industry moves: for example, <strong>as a user, how can I get (email) encryption on all my devices?</strong> Should I follow (fragmented) different kind of howtos/tools/apps to achieve that? How do I know these are consistent together? How can I be sure it won’t brake my continuous workflow? (app silo? social silo? level of trust and reliability?)<br/>
+ Mozilla have the skills to answer this as we already faced and solved some of these issues on particular points: like how to ease the installation of Firefox for Android for Firefox desktop users, open and discoverable choice of search engines, synchronization across devices, …<br/>
+ <strong>Mozilla’s challenge is to not be marginalized by the change of practices. Having an impact is embracing the new practice and give it an alternative.</strong> Mozilla already made that move by saying « <em>Firefox will go where users are</em>« , by trying to balance the advertisement practice between adds companies and users, by integrating H.264 and developing Daala. But <strong>Mozilla never stated that clearly as a strategy</strong>.</p>
+ <h5>A backbone to make our mission resilient in it expressions</h5>
+ <p>If we think about the <strong>Facebook’s strategy, they first built a network of people whiling to share</strong> (no matter what they share) and then use this <strong>transversal backbone to power vertical business segments</strong> (search, donation, local market selling, …). Google with its search engine and its open source policy have a similar (in a way) strategy. The difference here is that the backbone is people’s data and control over digital formats. In both cases, the level of use (of the social network, search engine, mobile OS, …) is the key (with fast innovation) to have an impact. And that’s a major obstacle to build successful alternatives.<br/>
+ The proposed Mozilla’s strategy is built in the opposite way, and that’s questioning. <strong>We try to build people network depending on some shared matters</strong>. Then, is our strategy able to scale enough to compete against GAFAM, or are we trying to build a third way ?<br/>
+ For the products, the Mozilla’s strategy is still (and has always been) inclusive: everybody can use the product and then benefit of its open web values. A good product that answer people needs, plus giving people back/new power (allow new use) build a big community. For the network, should we build our global force of people based on concentric circles (of shared matters) or based on a (Mozilla own) transversal backbone (matter agnostic)? It seems to me the actual presentation of the strategy do not answer clearly enough this big question: <strong>which <em>inclusivity</em> (inclusion strengths) mechanism in the strategy?</strong><br/>
+ And that <strong>call back to our product strategy</strong>: build a community that shares values, that is used to spread outcomes (product) OR build a community that shares a product, that is used to spread values. This is not a question on what matters more (product VS values) but on the strategy to get to a point, an objective (many web citizens). Shouldn’t we use our product to built a people network backbone ? Back to GAFAM: what can we learn from the Google try with Google+?<br/>
+ If our core is not enough transversal (the backbone), more new web/tech market there will be, more we will be marginalized, because focused on our circles center not taking in account that the war front (the context) have changed. <strong>Mozilla have to be resilient: mutability of the means, stability in the objectives.</strong><br/>
+ The document is the MoFo strategy, and so it doesn’t say anything about ‘build Firefox’ (aka the product strategy) and so don’t articulate our main product (Firefox) with our main people network building effort and values sharing engine. We should do it: at a strategic scale and a particular scale (articulating the agenda-setting with main product features).</p>
+ <h5>Brand engagement, a psychological backbone on the user side ?</h5>
+ <p>It seems that our GAFAM challengers get big and have impact by not educating (that much) people, and that’s what makes them not involved in the web citizenship. Or only when they are pushed by their customers. At the opposite, making people aware about web citizenship at first, makes it hard to have that much people involved and so to have impact. However, there is <strong>an other prism that drive people: the brand perceived values</strong>. Google is seen as a tech pioneer innovator and doing the good because of its open policy, free model, fast innovation… Facebook is seen as really cool firm trying to help people by connecting them…<br/>
+ Is the increase of marketing of Mozilla doing good enough to gains back users ? Is this resilient compared to the next-tech-thing coming ?<br/>
+ Most of the time when I meet Goggle Chrome users and ask then why they use it and don’t switch to Firefox, they answer about use allowed (sync thought devices, apps everywhere that run only on GC, …). Sometimes, they argue that they make effort on other areas, and that they want to keep they digital life simple. They <strong>experience is not centered in a product/brand, but more on the person</strong>: on that Google Chrome with its Person (with one click ‘auto-login’ to all Google services) is far superior than Firefox.</p>
+ <h5>User-agent or products ?</h5>
+ <p>A user-agent is an intermediary acting on behalf of a supplier. As a representative, it is the contact point with customers; It’s role is to manage, to administer the affairs; it is entrusted with a mission by one or more persons; it both acts and produce an effect.<br/>
+ So, the user-agent can be describe with three criteria. It is: an intermediate (user/technology) ; a tool (used to manage and administrate depending on the user’s skills) ; a representative (mission bearer, values vector, for a group of people). It exceeds partly the contradiction between being active and passive.<br/>
+ A <strong>user-agent articulate personal-identity with technology-identity</strong> and give informations about available skills over these domains. It’s much more universal than a product that is about featuring a user-agent. <strong>If we target resilience, user-agent should be the target</strong>.</p>
+ <h4>Social history, marketing: how we understand things to make choices</h4>
+ <h5>History of the social value</h5>
+ <p>The way we look at the past and current facts shape our understanding and determine if we open new ways to solve the issues identified. That’s the way to understand the challenges that come on the way and to agree on an adaptation of the strategy instead of splitting things. The way we understand and tell the problem determine the solution we can create: we need, all the way long, <strong>a shared understanding.</strong><br/>
+ <strong>Tools and technologies are not necessarily tied to their social value, which depends on social representations. The social value can be built upstream and evolve downstream.</strong> It also depends on the perspective in which we look at it, on the understanding of the action and therefore on past or current history. Example: the social value of a weapon can be a potential danger or defense, creative (liberating) or destructive. The nuclear bomb is a weapon of mass destruction (negative), whose social value was (ingeniously built as) freedom (positive).</p>
+ <h5>Impact in our strategy: a missing root</h5>
+ <p>To engage the public, before to « <em>Focus on creative campaigns that use media + software to engage the public.</em> » we need to step back, in our speeding world, for understanding together the big picture and the big movement.<br/>
+ Mozilla want to fuel a movement and propose a strong and consistent strategy. However, I think <strong>this plan miss a key point, a root point: build a common (hi)story.</strong> This should be an objective, not just an action.<br/>
+ Also, that’s maybe a missing root for the State of the web report: how do we understand what we want to evaluate? But it’s not only a missing root for an (annual?) report (a ‘Reporters without borders’ Press-Freedom like?), it’s a missing root for a new grow of our products’ market share.<br/>
+ For example, I do think that most users don’t know and understand that Mozilla is a foundation, Firefox build by a community as a product to keep the web healthy: <strong>they don’t imagine any meaning about technology</strong>, because they see it as a neutral tool at its root, so as a tool that should just fit they producing needs.<br/>
+ Firefox, its technologies and its features are not bound for ever. It is the narrative, and therefore their inclusion in the social history that we make, which converges Firefox with the values that it stand for. <strong>Stoping or changing the deep narrative means cutting the source of common understanding and making stronger other consistencies captured by other objects, turning as centrifugal forces for Firefox.</strong><br/>
+ Marketing is a way to change what we socially say about things: that’s why Google Chrome marketing campaign (and consistent features maturity) has been the decreasing starting point of Firefox. <strong>Our message has been scrambled.</strong></p>
+ <h4>From participation to emancipation: values, people and org relationships</h4>
+ <p>How to emancipate people in the digital world ?</p>
+ <h5>Keeping the open open</h5>
+ <p>Being open is not a thing we can achieve, it’s a constant process. « <em>Mozilla needs to engage on both fronts, tackling the big problems but also fuelling the next wave of open.</em> » Yes, but <strong>Mozilla should say too how the next wave of open can stay under people’s control and rally new people</strong>. Not only open code, but open participation, open governance, open organization. Being open is not a releasing policy about objects, it’s a mutation to participation process: a metamorphosis. It’s not reached by expanding, but by shifting. It’s not only about an amount, but about values: it’s qualitative.<br/>
+ Maybe <strong>open is not enough</strong>, because it doesn’t say enough about who control and how, about the governance, and says too much about <strong>availability (passive)</strong> and not enough <strong>about <em>inclusivity</em> (active ; inclusion strengths)</strong>. It doesn’t say how the power is organized and articulated to the people (ex. think about how closed is the open Android). We may need to change the wording: indie web, the web that fuel autonomy, is a try, but it doesn’t say enough about <em>inclusivity</em> compared to openness &amp; opportunity. Emancipation is the concept. It’s strategic because it says what is aligned to what, especially how to articulate values and uses. It’s important because it tells what are the sufficient conditions of realization to ‘open/indie’. That’s key to get ‘open/indie at small and large scales, from Internet people to Internet institutions, thought all ‘open/indie’ detractors in the always-current situation: a resilient ecosystem.<br/>
+ My intuition is that <strong>the leadership network and advocacy engine promoting open will be efficient if we clarify ‘open’ while keeping it universal</strong>. We can do it by looking back at the raw material that we have worked for years, our DNA in action. Because after all, we are experts about it and wish others to become experts too. It does not mean to essentialize it (opposing its nature and its culture), <strong>but to define its conditions of continuous achievement in our social context</strong>.</p>
+ <h5>Starting point: exemplary projects that tell a lot about the evolution of our DNA in action</h5>
+ <p>Clarifying the idea of ‘open’ is strategic to our action because it outlines the constitution of ‘open’, its high ‘rules’, like with laws in political regimes. It clarifies for all, if you are part of it or not, and it tells you what to change to get in. It can reinforce the brand by differentiating from the big players that are the GAFAM: <strong>it’s a way to drive, not to be driven by others lowering the meaning to catch the social impact. We should say that ‘open’ at Mozilla means more than ‘open’ at GAFAM</strong>. I wish Mozilla to speak about its openness, not as an ‘equal in opportunity’ but as an ‘equal in participation’, because it fits openness not only for a moment (on boarding) or for a person, but during the whole process of people’s interaction.<br/>
+ <a href="https://www.rust-lang.org/">Rust</a> and <a href="https://servo.org/">Servo</a> or <a href="https://firefoxos.mozilla.community/">Firefox OS</a> (since the Mozilla’s shift to radical participation) seem to be very good examples of projects with participation &amp; impact centric rules, tools, process (RFC, new team and owners, …). Think about how Rust and <a href="http://arc.applause.com/2015/03/27/google-dart-virtual-machine-chrome/">Dart emerged and are evolving</a>. Think about how stronger has been the locked-open Android with partnership than the open-locked FxOS. We should tell those stories, not as recipes that can be reproduced, but as process based on a Constitution (inclusive rules) that make a political regime (open) and define a mode of government (participation). That’s key to social understanding and therefore to transpose and advocate for it.<br/>
+ As projects<strong> compared to ‘original Mozilla’, Rust, Servo and FxOS could say a lot</strong> about how different they implemented learning/interaction/participation at the roots of the project. How the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla and participants. This could definitely help to setup our curriculum resources, database and workshop at a personal (e.g., “How to teach / facilitate / organize / lead in the open like Mozilla.”) and orgs levels, with personal and orgs policies.</p>
+ <h5>Spreading the high meanings in our strategy to consolidate it consistency</h5>
+ <p>Clarifying the constitution of ‘open’ calls to clarify other related wordings.<br/>
+ I’m satisfied to read back (social) ‘movement’ instead of ‘community’, because it means that our goal can’t be achieve forever (is static), but we should protect it by acting. And it seems more inclusive, less ‘folds on itself’ and less ‘build the alternative beside’ than ‘community’: the alternative can be everywhere the actual system is. It can make a system. It can get global, convergent, continuous, … all at the same time. Because it’s roots are decentralized _and_ consistent, collaborating, …</p>
+ <p>About participation, we should think too (again) about engagement VS contribute VS participate: how much am I engaged ? Free about defining and receiving cost/gains? What is the impact of my actions ? … <strong>These different words carry different ideas about how we connect the ‘open’</strong>: spread is not enough because it diffuses, _be_ everywhere is more permanent. Applied to Mozilla’s own actions, <strong>funding open projects and leaders, is maybe not enough and there should be others areas where we can connect</strong> inside products, technology, people and organizations that build emancipation. So that say something about getting control (who, how, …).</p>
+ <h5>IA: a challenge for ‘open’</h5>
+ <p>IA is first developed to help us by improving our interactions. However, this seems to start to shift into taking decisions instead of us. This is problematic because these are indirect and direct ways for us to loose control, to be locked. And that can be as far as computers smarter than humans. The problem is that technical progress is made without any consideration of the societal progress it should made.<br/>
+ That’s an other point, why open is not enough: automation should be build-in with superior humanization. <strong>Mozilla should activate and unlock societal progress to build fair technical progress.</strong></p>
+ <h5>Digital integration &amp; democracy</h5>
+ <p>The digital (&amp; virtual) world is gaining control over the physical world in many domains of our society (economy to finance, mail to email, automatic car, voting machine, …). It’s getting more and more integrated to our lives without getting back our (imperfect) democracy integrated into them. Public benefit and public good are turning ‘self benefit’ and ‘own sake’ because citizens don’t have control over private companies. <strong>We should build a digital democracy if we don’t want to loose at all the democratic governing of society.</strong> We must overcome the poses and postures battles about private and public. We need to build.</p>
+ <h4>‘Leader’ &amp; ‘Leadership’ need a clarification</h4>
+ <h5>Why a clarification?</h5>
+ <p>At some level, I’m not the only one to ask this question:</p>
+ <blockquote><p>How do CRM requirements for Leadership and Advocacy overlap / differ? What’s our email management / communications platform for Leadership?</p></blockquote>
+ <p>Connect leaders to lead what ? How ? To whose benefit ? Do we want to connect leaders or initiatives (people or orgs) ? Will the leaders be emerging ones (building new networks) or established ones (use they influence to rally more people)? Are Leaders leaders of something part of Mozilla (like can be Reps) or outside of Mozilla (leaders of project, companies, newspaper: tech leaders, news leaders, …) ? This is especially important depending on what is the desire for the leaders to become in the future. <strong>The MoFo’s document should be more precise</strong> about this and go forward than « <em>Mozilla must attract, develop, and support a global network of diverse leaders who use their expertise to collaboratively advance points-of-view, policies and practices that maintain the overall health of the Internet.</em> »<br/>
+ We should do it because <strong>the confusion about the leadership impact the advocacy engine</strong>: « <em>The shared themes also provide explicit opportunities for our Leadership and Advocacy efforts to work together.</em> » Regarding Mozilla, is the leaders role to be advocacy leaders ? It seems as they share themes and key initiatives (even if not worded the same sometimes). Or in other words, who Drives the Advocacy engine?</p>
+ <h5>Iterations with the actual definition: creators</h5>
+ <p>Here are my iterations on the definition of ‘Leaders’:</p>
+ <ul>
+ <li>The Leaders could be the people platform (the community) and the advocacy engine the tool/themes/actions platform (the product).</li>
+ <li>Leaders could build at the end new solutions (products) and Advocates new voices (rallying), that could be translated in a learning area divided like Leadership=learn+create and advocacy=teach+spread.</li>
+ <li>Leadership: personal development to produce (turn into) new commons or add new facets to commons. Advocacy: personal development to protect established/identified commons.</li>
+ </ul>
+ <p>With these definitions, then Leaders are maybe more a Lab, R&amp;D place, incubation tool (if we think about start-up incubators, then it shows a tool-set that we will need to inspire for the future). But if we want to keep the emphasis on people, <strong>we could name them ‘creators’</strong> (compositors or managers ; not commoners, because leaders and advocates are commoners ; yes, traditionally creators are craftspersons and intellectual designers). This make sens with the examples given in the MoFo 2020 strategy 0.8 document, where all persona are involved in a building-something-new process.</p>
+ <p>However, it’s interesting to understand why we choose at first ‘Leaders’. <strong>Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.</strong> Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved to create (different) representation (institutions) and organization (foundation/firms) but <strong>with a different DNA (values) processing</strong>: from public good to personal interest or the opposite. If Mozilla cares about public good resilience, <strong>the articulation of they domains of values is critical. So their articulation’s expression and the revision process must be said and clear</strong>: from hierarchy vs contract vs different autonomy levels (internal incubation and external advocacy), vs … to criteria to start a revision.</p>
+ <h5>The network effect</h5>
+ <p>Another argument for the switch from Leader to Creator is that the Leader word it too much tight to a single-person-made innovation. <strong>Creator make more clear that the innovation is possible not because of one genius, but because of a team</strong>, a group, a collective: personS (where there could also be genius). The value is made by the collaboration of people (especially in an open project, especially in a network).<br/>
+ That’s important because that could impact how well we do the convening part: not self-promoting, not-advertising, but sharing skills and knowledge for people and catalysing projects.<br/>
+ <strong>The same for the wording ‘talent’</strong>: alone, a talent can do nothing that has an impact. At least, we need two talents, a team (plus some assistants at some point).</p>
+ <h5>The cultural prism</h5>
+ <p>Again, this seems to be an open question:</p>
+ <blockquote><p>Define and articulate “leadership.” Hone our story, ethos and definition for what we mean by “leadership development” (including cultural / localization aspects).</p></blockquote>
+ <p>In my culture, Leader carry positive (take action) and negative (dominate) meanings. That’s another reason why I prefer another naming.<br/>
+ I understand too that it carries a lot of legitimacy (ex. market leader) in our societies and it avoids the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact.<br/>
+ But the way Mozilla has an impact thought all cultures, its <strong>legitimacy, is by creating or expanding a common</strong>. To do this, depending on the maturity, Mozilla could follow the market proposing an alternative with superior usability OR opening a new market by adding a vertical segment.</p>
+ <h5>Existing tool-set opportunities</h5>
+ <p>If Leadership is « <em>a year-round MozFest + Lab</em>« , so it’s a social network + an incubation place. Then, we already have a social network for people involved with Mozilla: Which kind of link should have the leadership network with <strong>mozillians.org</strong> ? What can we learn from this project and other specialized social network projects (linkedin, viadeo, …) to build the leadership network ?</p>
+ <h4>Advocacy engine: make it clear</h4>
+ <h5>What it is &amp; how it works</h5>
+ <p>Mozilla is doing a great effort to build its advocacy engine on collaboration (« <em>Develop new partnerships and build on current partnerships</em>« , « <em>begin collaboration</em>« , « <em>build alliances with similar orgs</em>« ) but at the same time affirms that Mozilla should be « <em>Part of a broader movement, be the boldest, loudest and most effective advocates</em> » that could be seen as too centralized, too exclusive.<br/>
+ While this can be consistent (or contradictory), <strong>the consistency has to be explained</strong> looking at orgs and people, global and local, abstract and real, with a complementarity/competitive grid.<br/>
+ First, <strong>the articulation with other orgs has to be explained</strong>. What about others orgs doing things global (<a href="https://eff.org/">EFF</a>, <a href="https://fsf.org/">FSF</a>, …) and local (<a href="http://www.laquadrature.net/">Quadrature du net</a>, CCC, …) ? What about the value they give and that Mozilla doesn’t have (juridic expertise for example) ? What about other advocate engines (<a href="https://change.org/">change.org</a>, <a href="https://secure.avaaz.org/">Avaaz</a>…) ? That should not be at an administrative level only like « <em>Develop an affiliate policy. Defining what MoFo does / does not offer to effectively govern relationships w. affiliated partners and networks (e.g., for issues like branding, fundraising, incentives, participation guidelines, in-kind resources.)</em> »<br/>
+ Second, this is key for users to understand and <strong>articulate the global level of the brand engagement and their local preoccupations and engagement</strong>. How the engine will be used for local (non-US) battles ? In the past Mozilla totally involved against PIPA, SOPA by taking action, and hesitate a lot to take position and just published a blog post (and too late to gain traction and get impact) against French spying law for example.<br/>
+ Third, <strong>the articulation ‘action(own agenda)/reaction’ should be clarified</strong> in the objectives and functioning of the advocacy engine. Especially because other orgs, allies or detractors, try to to setup the social agenda. It’s important because it can change the social perception of our narrative (alternative promotion/issue fighting) and therefore people’s contributions.<br/>
+ People think the technology is socially neutral. People are satisfied of narrow hills of choice (not the meaning, the aim, but only the ability to show your favorite avatar). <strong>People don’t want to feel guilty or oppressed</strong>, they don’t want new constraints, they are looking for solution only: they want to use, not to do more, they want they things to be done. Part of the problem is about understanding (literacy, education), part of it is about the personal/common duality, part of it is about being hopeless about having an impact, part of it is about expressing change as a positive goal and a new possible way (alternative), not a fight against an issue. About the advocacy engine, I think <strong>our preoccupation should be people-centric and the aim to give them a short, medium and long term narrative to get action without being individuals-centric</strong>.</p>
+ <h5>How we build it ?</h5>
+ <p>How to build a social movement ? How it has been built in the past ? Is it the same today ? Can it be transposed to the digital domain from others social domains ? How strong are the cultural differences between nations? These are the main questions we should answer, and our pivot era gives us many examples in diverse domains (climate change advocates, Syriza &amp; Podemos, NSA &amp; surveillance services in Europe, empowered syndicates in Venezuela, <a href="http://blogs.valvesoftware.com/economics/why-valve-or-what-do-we-need-corporations-for-and-how-does-valves-management-structure-fit-into-todays-corporate-world/#more-252">Valve corp. internal organization</a>…) to set a search terrain. However, I will go strait to my intuitive understanding below.<br/>
+ I’m kind of worried that it’s imagined to build the advocacy engine themes by a top-down method. <strong>I think a successful advocacy is always built bottom-up</strong>, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. If we want to have impact, <strong>we should listen to people needs, not tell them to listen to ours. People want (first) to be empowered, not to empower an org</strong>. So let’s organize the infrastructure, set the agenda and draw the horizon (strategic understanding) participative: make people fill them with content of their experience. It seems to me it is the only way, the only successful method, if we want to build a movement, and not just a shifting moment (that could be built by the top, with a good press campaign locally relayed for example ; that’s what happen in old style politics: the aim is short term, to cleave).<br/>
+ <strong>Isn’t the advocacy engine a new Drumbeat ?</strong> We shifted from Drumbeat to Webmaker+web literacy to Mozilla Academy and now to Leadership plus advocacy: it could be good to tell that story now that we are shifting again and learn from it.<br/>
+ <strong>Mozilla should support, behave as a platform</strong>, not define, not focus. Letting the people set the agenda makes them more involved and is a good way to build a network of shared aims with other orgs, that is not invasive or alienating, but a support relationship in a win-win move. The strength comes from the all agendas sewed. So at an org level, let’s on-board allies organizations as soon as plan building-time (now), to build it together. Yes it’s slower, but much more massive, inclusive and persistent.</p>
+ <h5>How we evaluate it: cultural bias &amp; qualitative analysis</h5>
+ <p>First, about the agenda-setting KPI for 2016, should these KPI be an evaluation of the inclusion and rank in others strategic agendas, governance systems and productions (outcome/products) ? Others org could be from different domains: political, social, economy orgs.<br/>
+ Then, as a wide size audience KPI, Mozilla wants « <em>celebration of our campaigns with ‘headline KPIs’ including number of actions, and number of advocates.</em>« . While doing this could be the right thing to do for some cultures, it could be the worst for others. I think that these KPI don’t carry a meaning for people and are too org centric. In a way, they are to generic: it’s just an amount. <strong>Accumulation is not our goal: we want impact that is the grow of articulated actions</strong> made by diverse people toward the same aim. <strong>We need our massive KPI to be more qualitative</strong>, or at least find a way to present them in a more qualitative way: interactive map ? a global to local prism that engages people for the next step ?</p>
+ <h5>Best practices &amp; massive impact</h5>
+ <p>Selecting best practices are an appealing method when we want to have a fast and strong impact in a wide area. However, <strong>when we unify we should avoid to homogenize</strong>. The gain in area by scaling-up is always at the cost of loosing local impact because it is not corresponding to local specificities, hence to local expectations. Federating instead of scaling-up is a way to solve this challenge. So we should be careful to not <strong>use best practice as absolute solutions, but as solutions in a context</strong> if we want to transpose them massively.</p>
+ <h5>Tools &amp; platform balanced between user-centric and org-centric outcomes</h5>
+ <p>It’s good to hear that we will build a advocacy platform. As we ‘had’ bugzilla+svn then mercurial (hg)+… and are going to the <strong>integrated</strong>, <strong>pluggable</strong> and <strong>content-centric</strong> (but non-free; admin tools are closed source) github (targeting more coder than users, but with a lower entry price for users still), we need to be able to have the same kind of tool for advocates and leaders. Something inspired maybe at some levels by the remixing tools we built in Webmakers for web users.</p>
+ <h4>From experiment to production: support (self made to mass product) + modularity (dev code patch to users add-ons).</h4>
+ <p><strong>We need pathways from lab to home that carry different mix of customization and reliability to support the emancipation curve.</strong><br/>
+ Users want things to work, because they want to use it. Geeks want to be able to modify a lot and accept to put their hands in the engine to build growing reliability. Advanced users want to customize their experience and keep control and understanding on working status. They want to be able to fix the reliability at a medium/low technical cost. They are OK to gain more control at these prices. Users want to use things to do what they need and want to trust a reliability maintained for them. They are OK to gain control at a no technical cost. Depending on the matter we all have different skill levels, so we are all geeks, advanced users and users depending on our position or on the moment. And depending on our aspirations, we all want to be able to move from one category to an other. That’s what we need to build: we don’t just need to « <em>better articulate the value to our audiences</em>« , <strong>we need to build pathways thought audiences and thought IT layers</strong> (content, software, hardware, distant service). <strong>We should find a convergence between customization and reliability, between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways</strong>. So, « <em>better articulate the value to our audiences</em> » should not be restrained in our minds to the Mozilla Leadership Network.<br/>
+ <strong>Part of this is being done in other projects outside of Mozilla in the commons movement.</strong> There are many, but let’s take just one example, the <a href="https://www.fairphone.com/">Fairphone</a> project: modularity, howtos, … all this help to break the product-to-use walls and drive appropriation/emancipation. <strong>Products are less product and brand centric and more people/user centric</strong>.<br/>
+ Part of this has been done inside Mozilla, like integrating learning in our products, in-content, as we have code comment on code. I think <strong>the <a href="https://wiki.mozilla.org/Firefox_OS/Spark">Spark</a> project on Firefox OS is on a promising path</strong>, even if maybe immature: it maybe has not been released mainstream because it misses bridges/pathways (on-boarding levels, progression from simple to high level techniques, and no or not enough reproducible/universal next task/skill building).<br/>
+ So some solutions start to emerge, the direction is here, but has never been conceived and implemented that globally, as there isn’t integrated pathways with choice and opportunity and a strategy embracing all products and technologies (platform, tools, …).</p>
+ <h4>Better tools for collaboration and participation: task-centric to process-centric (use) infrastructure</h4>
+ <p><strong>The open community should definitely improve the collaboration tools and infrastructure to ease participation.</strong><br/>
+ <strong><a href="http://www.discourse.org">Discourse</a> ‘merged’ discussion channels</strong>: email+forum(+instant, messaging, … and others peer-to-peer discussion?). <strong><a href="http://stackexchange.com">Stack exchange</a> merged the questioning/solving process</strong> and added a vote mechanism to rank answers: it eased the collaboration on editing the statement and the results while staying synchronous with the discussion and keeping the discussion history. We need such kind of possibilities with discourse: <strong>capitalize on the discussion and preview the results to build a plan.</strong><br/>
+ This exist in document oriented software (that added collaboration editing tools), but not that much in collaboration software (that don’t produce documents). For example, while discussing the future plan for Fx/FxOS be supported to keep track on a doc about the proposals plans + criteria &amp; dependencies. In action, it is from <a href="https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003063.html">this</a> plus all the discussion taking place to <a href="https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003119.html">that</a>.<br/>
+ This is maybe something like integrating Discourse+Wiki, maybe with the need to have competing and ranked (both for content and underlaying meaning of content=strategy?) plan/page proposals. <strong>From evolving the wiki discussion page to featuring document production into peer-to-peer discussion.</strong></p>
+ <h4>A recovering strategy: from fail to win</h4>
+ <p>There is maybe one thing that is in the shadow in this plan: <strong>what do we do when/if we (partially) fail ?</strong><br/>
+ I think at least we should say that <strong>we document</strong> (keep research going on) to be able to outline and spread the outcomes of what we tried to fight against. So we still try to built consciousness to be ready for the next round.</p>
+ <p> </p>
+ <p><em>If you see some contradiction in my thoughts, let’s say it’s my state of thinking right now: please voice them so we can go forward.</em><br/>
+ <em> The same for thoughts that are voiced definitive (like users are): take it as a first attempt with my bias: let’s state these bias to go forward.</em></p>
+ <div class="footnotes" id="footnotes-48">
+ <div class="footnotedivider"/>
+ <ol>
+ <li id="fn-48-1"> ‘<em>Radical</em>‘ can be in some cultures an euphemism to ‘<em>violent</em>‘. Let’s be clear that the change by increasing violence is done to make a popular uprising of some part against others. While it does not help the majority to magically understand that the minority is right, it stigmatize the radical-violent-changers and in the way it discredits the alternative proposed. <span class="footnotereverse"><a href="https://repeer.org/tag/mozilla/feed/#fnref-48-1">↩</a></span></li>
+ </ol>
+ </div></div>
+ </content>
+ <updated>2016-01-16T00:27:13Z</updated>
+ <category term="Mozilla"/>
+ <category term="Technologie"/>
+ <category term="[EN]"/>
+ <category term="Firefox"/>
+ <category term="Firefox OS"/>
+ <category term="Rust"/>
+ <category term="Servo"/>
+ <category term="Social networks"/>
+ <author>
+ <name>Nicolas</name>
+ </author>
+ <source>
+ <id>https://repeer.org</id>
+ <link href="https://repeer.org/tag/mozilla/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://repeer.org" rel="alternate" type="text/html"/>
+ <subtitle>Reprenez le pouvoir !</subtitle>
+ <title>Repeer » Mozilla</title>
+ <updated>2016-01-16T00:46:46Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en">
+ <id>http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html</id>
+ <link href="http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html" rel="alternate" type="text/html"/>
+ <title>pyvideo status: January 15th, 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="section" id="what-is-pyvideo-org">
+ <h3>What is pyvideo.org</h3>
+ <p><a class="reference external" href="http://pyvideo.org/">pyvideo.org</a> is an index of Python-related conference and user-group videos on
+ the Internet. Saw a session you liked and want to share it? It's likely you can
+ find it, watch it, and share it with pyvideo.org.</p>
+ <p>This is the latest status report for all things happening on the site.</p>
+ <p>It's also an announcement about the end.</p>
+ <p><a href="http://bluesock.org/~willkg/blog/pyvideo/status_20160115.html">Read more…</a> (5 mins to read)</p></div></div>
+ </summary>
+ <updated>2016-01-15T23:30:00Z</updated>
+ <category term="dev"/>
+ <category term="python"/>
+ <category term="pyvideo"/>
+ <category term="richard"/>
+ <author>
+ <name>Will Kahn-Greene</name>
+ </author>
+ <source>
+ <id>http://bluesock.org/%7Ewillkg/blog/</id>
+ <link href="http://bluesock.org/%7Ewillkg/blog/" rel="alternate" type="text/html"/>
+ <link href="http://bluesock.org/~willkg/blog/rss.xml" rel="self" type="application/rss+xml"/>
+ <subtitle>Will Kahn-Greene's blog of Python, Mozilla, GNU/Linux, random content, dennis, Input, SUMO, and other projects mixed in there ad hoc, half-baked and with a twist of lemon</subtitle>
+ <title>Will's blog</title>
+ <updated>2016-01-16T16:31:16Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>http://coopcoopbware.tumblr.com/post/137371863755</id>
+ <link href="http://coopcoopbware.tumblr.com/post/137371863755" rel="alternate" type="text/html"/>
+ <title>RelEng &amp; RelOps Weekly Highlights - January 15, 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of releng’s big goals for Q1 is to deliver a beta via <a href="https://bugzil.la/release-promotion" target="_blank">build promotion</a>. It was great to have some tangible progress there this week with bouncer submission.</p>
+
+ <p>Lots of other stuff in-flight, more details below!
+ </p><p><b>Modernize infrastructure</b>:</p>
+
+ <p>Dustin worked with Armen and Joel Maher to run Firefox tests in TaskCluster on an older EC2 instance type where the tests seem to fail less often, perhaps because they are single-CPU or slower.</p>
+
+ <p><b>Improve CI pipeline</b>:</p>
+
+ <p>We turned off automation for b2g 2.2 builds this week, which allowed us to remove some code, reduce some complexity, and regain some small amount of capacity. Thanks to Vlad and Alin on buildduty for helping to land those patches. (<a href="https://bugzil.la/1236835" target="_blank">https://bugzil.la/1236835</a> and <a href="https://bugzil.la/1237985" target="_blank">https://bugzil.la/1237985</a>)</p>
+
+ <p>In a similar vein, Callek landed code to disable all b2g desktop builds and tests on all trees. Another win for increased capacity and reduced complexity! (<a href="https://bugzil.la/1236835" target="_blank">https://bugzil.la/1236835</a>)</p>
+
+ <p><b>Release</b>:</p>
+
+ <p>Kim finished integrating bouncer submission with our release promotion project. That’s one more blocker out of the way! (<a href="https://bugzil.la/1215204" target="_blank">https://bugzil.la/1215204</a>)</p>
+
+ <p>Ben landed several enhancements to our update server: adding aliases to update rules (<a href="https://bugzil.la/1067402" target="_blank">https://bugzil.la/1067402</a>), and allowing fallbacks for rules with whitelists (<a href="https://bugzil.la/1235073" target="_blank">https://bugzil.la/1235073</a>).</p>
+
+ <p><b>Operational</b>:</p>
+ <p>There was some excitement last Sunday when all the trees were closed due to timeouts connectivity issues between our SCL3 datacentre and AWS. (<a href="https://bugzil.la/238369" target="_blank">https://bugzil.la/238369</a>)</p>
+
+ <p><b>Build config</b>:</p>
+
+ <p>Mike released v0.7.4 of <a href="http://gittup.org/tup/" target="_blank">tup</a>, and is working on generating the tup backend from moz.build. We hope to offer tup as an alternative build backend sometime soon.</p>
+
+ <p>See you all next week!</p></div>
+ </summary>
+ <updated>2016-01-15T22:44:13Z</updated>
+ <category term="Mozilla"/>
+ <category term="releng"/>
+ <category term="highlights"/>
+ <source>
+ <id>http://coopcoopbware.tumblr.com/</id>
+ <author>
+ <name>Chris Cooper</name>
+ </author>
+ <link href="http://coopcoopbware.tumblr.com/" rel="alternate" type="text/html"/>
+ <link href="http://coopcoopbware.tumblr.com/tagged/Mozilla/rss" rel="self" type="application/rss+xml"/>
+ <title>Five different types of fried cheese</title>
+ <updated>2016-01-22T21:00:12Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/webdev-beer-and-tell-january-2016/</id>
+ <link href="https://air.mozilla.org/webdev-beer-and-tell-january-2016/" rel="alternate" type="text/html"/>
+ <title>Webdev Beer and Tell: January 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Webdev Beer and Tell: January 2016" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/35/0f/350f246037ead3bab95fdbd4c2b77484.png" width="160"/>
+ Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on in...
+ </p></div>
+ </summary>
+ <updated>2016-01-15T22:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/sumo/?p=3665</id>
+ <link href="https://blog.mozilla.org/sumo/2016/01/15/whats-up-with-sumo-15th-january/" rel="alternate" type="text/html"/>
+ <title>What’s up with SUMO – 15th January</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hello, SUMO Nation! The second post of the year is here. Have you had a good time in 2016 so far? Let us know in the comments! Now, let’s get going with the updates and activity summaries. It will be … <a class="go" href="https://blog.mozilla.org/sumo/2016/01/15/whats-up-with-sumo-15th-january/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Hello, SUMO Nation!</strong></p>
+ <p>The second post of the year is here. Have you had a good time in 2016 so far? Let us know in the comments!</p>
+ <p>Now, let’s get going with the updates and activity summaries. It will be brief today, I promise.</p>
+ <h3><strong class="author-name">Welcome, new contributors!<br/>
+ </strong></h3>
+ <ul>
+ <li class="author">
+ <div class="author"><a class="username" href="https://support.mozilla.org/en-US/user/Andy.Yang">Andy.Yang</a></div>
+ </li>
+ </ul>
+ <div class="author">After the massive influx over the last few weeks, we only had Andy introducing himself recently – the warmer the welcome for him!</div>
+ <div class="author"/>
+ <div class="author">If you just joined us, don’t hesitate – come over and <a href="https://support.mozilla.org/forums/buddies" target="_blank">say “hi” in the forums!</a></div>
+ <div class="author"/>
+ <div class="author">
+ <h3><strong>Contributors of the week<br/>
+ </strong></h3>
+ <ul>
+ <li><a href="https://blog.mozilla.org/sumo/2016/01/08/whats-up-with-sumo-8th-january/" target="_blank">All the people who joined us in the winter season so far!</a></li>
+ </ul>
+ <div class="" id="magicdomid64">
+ <p><strong><span style="text-decoration: underline;">We salute you!</span></strong></p>
+ </div>
+ <div class="author">Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can <a href="https://support.mozilla.org/forums/buddies/711364?last=65670" target="_blank">nominate them for the Buddy of the Month!</a></div>
+ <div class="author"/>
+ </div>
+ <h3><strong>Most recent SUMO Community meeting</strong></h3>
+ <ul>
+ <li><a href="https://public.etherpad-mozilla.org/p/sumo-2016-01-11" target="_blank">You can read the notes here</a> and see the video on our <a href="https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos" target="_blank">YouTube channel</a> and <a href="https://air.mozilla.org/search/?q=sumo" target="_blank">at AirMozilla</a>.<del> </del><del><br/>
+ </del></li>
+ <li><strong>IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: <a href="https://support.mozilla.org/en-US/forums/contributors/711752?last=67873">(Monday) Community Meetings in 2016</a>.</strong></li>
+ </ul>
+ <h3><strong>The next SUMO Community meeting… </strong></h3>
+ <ul>
+ <li style="text-align: left;">is happening on <a href="https://public.etherpad-mozilla.org/p/sumo-2016-01-18" target="_blank">Monday the 18th – join us</a>!</li>
+ <li style="text-align: left;"><strong>Reminder: if you want to add a discussion topic to the upcoming meeting agenda:</strong>
+ <ul>
+ <li style="text-align: left;">Start a thread in the <a href="https://support.mozilla.org/forums/contributors" target="_blank">Community Forums</a>, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).</li>
+ <li style="text-align: left;">Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).</li>
+ <li style="text-align: left;">If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.</li>
+ </ul>
+ </li>
+ </ul>
+ <h3><strong class="author-g-ivsra51ph44x461i">Developers</strong></h3>
+ <ul>
+ <li>The new version of the Ask A Question page is here!</li>
+ <li>The 2.0 version of the KPI dashboard is in the works.</li>
+ <li><a href="http://edwin.mozilla.io/t/sumo" target="_blank">You can see the current state of the backlog our developers are working on here</a>.</li>
+ <li><a href="https://public.etherpad-mozilla.org/p/sumo-p-2016-01-14" target="_blank">The latest SUMO Platform meeting notes can be found here</a>.</li>
+ <li>Interested in learning how Kitsune (the engine behind SUMO) works? <a href="http://kitsune.readthedocs.org/" target="_blank">Read more about it here</a> and <a href="https://github.com/mozilla/kitsune/" target="_blank">fork it on GitHub</a>!</li>
+ </ul>
+ <h3><strong>Community</strong></h3>
+ <ul>
+ <li>Our awesome Bangladesh SUMO Warriors are on the road again! Follow their adventures on Twitter under this tag: <a href="https://twitter.com/search?q=%23sumotourctg" target="_blank">#sumotourctg</a></li>
+ <li>
+ <div class="title"><a href="https://support.mozilla.org/forums/contributors/711729?last=67763">Reminder: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.</a></div>
+ </li>
+ <li>
+ <div class="title">Ongoing reminder: if you think you can benefit from getting <a href="https://wiki.mozilla.org/Community_Hardware" target="_blank">a second-hand device</a> to help you with contributing to SUMO, you know where to find us.</div>
+ </li>
+ </ul>
+ <h3><strong class="user-chip" title="adriel0415">Support Forum</strong></h3>
+ <ul>
+ <li>Say hello to the new people on the forums!
+ <ul>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/Tomi55" target="_blank">Tomi55</a> (Hungarian)</span></li>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/jdc20181" target="_blank">jdc20181</a> (English)</span></li>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/andexi" target="_blank">andexi</a> (Spanish)</span></li>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/Qantas94Heavy" target="_blank">Qantas94Heavy</a> (English)</span></li>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/samuelms79" target="_blank">samuelms79</a> (Brazilian-PT)</span></li>
+ <li><span class="author-a-z87zkz70z39yz83zw7ykz89z3gz82zt"><a href="https://support.mozilla.org/user/jorgecomun" target="_blank">jorgecomun</a> (Spanish)</span></li>
+ </ul>
+ </li>
+ </ul>
+ <div class="">
+ <h3><strong class="author-g-ivsra51ph44x461i">Knowledge Base</strong></h3>
+ <div class="" id="magicdomid90">
+ <div class="" id="magicdomid82">
+ <ul class="list-bullet1">
+ <li><span class="author-a-z87zjz80zxwjz85z4z65zytdpz68zoz69z"><a href="https://support.mozilla.org/forums/knowledge-base-articles/711304#post-65289" target="_blank">Thanks to everyone who took part in the most recent KB Day!</a></span></li>
+ <li>Version 44 updates should be live now.</li>
+ <li><span class="author-a-w2dz70zaz70z7z89zqz78ziz69zz78zz85zz90zj"><a href="https://docs.google.com/spreadsheets/d/1lkpRPJp9P1P5MRU-c9dwbDC0w5bMmrMdu-BNMp1xe8w/edit#gid=6" target="_blank">Ongoing reminder: learn more about upcoming English article updates by clicking here</a></span>.</li>
+ <li><span style="text-decoration: underline;">Ongoing reminder #2:<a href="https://support.mozilla.org/forums/knowledge-base-articles/" target="_blank"> do you have ideas about improving the KB guidelines and training materials? Let us know in the forums</a>!</span></li>
+ </ul>
+ </div>
+ <div class="" id="magicdomid83">
+ <h3><strong class="author-g-ivsra51ph44x461i">Localization</strong></h3>
+ </div>
+ </div>
+ </div>
+ <div class="" id="magicdomid95">
+ <ul>
+ <li>Thanks to everyone writing in with problems, ideas, reports of bugs – all your feedback matters!</li>
+ </ul>
+ </div>
+ <div class="" id="magicdomid75">
+ <h3><strong>Firefox<br/>
+ </strong></h3>
+ <ul>
+ <li><strong>for Android</strong>
+ <ul>
+ <li><a href="https://support.mozilla.org/forums/contributors/711712?last=67653">Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions</a>.</li>
+ <li>
+ <div class="title"><a href="https://support.mozilla.org/forums/contributors/711718?last=67822">Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions</a> with everyone in the forum.</div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li><strong>for Desktop</strong>
+ <ul>
+ <li>The <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1238620" target="_blank">uploading issues reported by many users are being tracked here.</a></li>
+ <li><a href="https://support.mozilla.org/questions/firefox?tagged=bug1208145&amp;show=all" target="_blank">The “show passwords” button has been removed from the password manager for the Beta of Version 44</a>. The developers are looking into <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208145" target="_blank">last minute fixes for that in this bug</a>.</li>
+ <li>Also in Version 44, the <span class="author-a-kz88zz80zhz89z6hlz81znytez70zz66zz68z"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=606655" target="_blank">“ask me everytime” option for cookies will be removed from the privacy panel.</a></span></li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li><strong>for iOS</strong>
+ <div class="" id="magicdomid85">
+ <ul class="list-bullet1">
+ <li><span class="author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj"><a href="https://www.mozilla.org/en-US/firefox/ios/1.4/releasenotes/" target="_blank">Firefox for iOS 1.4 primarily with features for China is here</a>.<br/>
+ </span></li>
+ </ul>
+ </div>
+ <div class="" id="magicdomid86">
+ <ul class="list-bullet1">
+ <li><span class="author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj">Firefox for iOS 2.0 is after 1.4 and hopefully sometime this quarter!</span></li>
+ </ul>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <p>Not that many updates this week, since we’re coming out of our winter slumber (even though winter will be here for a while, still) and plotting an awesome 2016 with you and for you. Take it easy, have a great weekend and see you around SUMO.</p></div>
+ </content>
+ <updated>2016-01-15T19:38:51Z</updated>
+ <category term="General"/>
+ <author>
+ <name>Michał</name>
+ </author>
+ <source>
+ <id>https://blog.mozilla.org/sumo</id>
+ <link href="https://blog.mozilla.org/sumo/feed/" rel="self" type="application/rss+xml"/>
+ <link href="https://blog.mozilla.org/sumo" rel="alternate" type="text/html"/>
+ <subtitle>SUpport MOzilla's official blog - rocking the helpful web since 2008!</subtitle>
+ <title>SUMO Blog</title>
+ <updated>2016-01-25T09:31:47Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/paris-firefox-os-hackathon-presentations/</id>
+ <link href="https://air.mozilla.org/paris-firefox-os-hackathon-presentations/" rel="alternate" type="text/html"/>
+ <title>Paris Firefox OS Hackathon Presentations</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Paris Firefox OS Hackathon Presentations" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/35/83/358305bfa246fff07d707061082134aa.png" width="160"/>
+ As an introduction to this weekend's Firefox OS Hackathon in Paris we'll have two presentations: - Guillaume Marty will talk about the current state of...
+ </p></div>
+ </summary>
+ <updated>2016-01-15T18:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:49Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>https://tacticalsecret.com/tag/mozilla/rss/db7fec0c-34d3-4633-9904-79b98aab34e7</id>
+ <link href="https://tacticalsecret.com/renewing-lets-encrypt-certs-nginx/" rel="alternate" type="text/html"/>
+ <title>Renewing Let's Encrypt Certs (Nginx)</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>All the first <a href="https://crt.sh/?id=10172479">Let's Encrypt certs for my websites</a> from the LE private beta began expiring last week, so it was time to work through the renewal tooling. I wanted a script that:</p>
+
+ <ol>
+ <li>Would be okay to run daily, so there'd be plenty of retries if something went wrong, </li>
+ <li>Wouldn't</li></ol></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>All the first <a href="https://crt.sh/?id=10172479">Let's Encrypt certs for my websites</a> from the LE private beta began expiring last week, so it was time to work through the renewal tooling. I wanted a script that:</p>
+
+ <ol>
+ <li>Would be okay to run daily, so there'd be plenty of retries if something went wrong, </li>
+ <li>Wouldn't require extra config for me to forget about if I add a new site, </li>
+ <li>Would only renew certificates expiring in the next few weeks.</li>
+ </ol>
+
+ <p>The official Let's Encrypt client team is hard at work producing a great renew tool to handle all this, but it's not released yet. Of course I could use <a href="https://caddyserver.com/">Caddy Server</a> that <a href="https://www.youtube.com/watch?v=nk4EWHvvZtI">just handles all this</a>, but I have a lot invested in Nginx here.</p>
+
+ <p>So I wrote a short script and <a href="https://gist.github.com/jcjones/432eeaa6a2bf25e2c746">put it up in a Gist</a>. </p>
+
+ <p>The script is designed to run daily, with a random start between 00:00 and 02:00 to protect against load spikes at Let's Encrypt's infrastructure. It doesn't do any real reporting, though, except to maintain <code>/var/log/letsencrypt/renew.log</code> as the most-recent failure if one fails.</p>
+
+ <p>It's written to handle Nginx with Upstart's <code>service</code> command. It's pretty modular though; you could make this operate any webserver, or use the webroot method quite easily. Feel free to use the OpenSSL SubjectAlternativeName processing code for whatever purposes you have.</p>
+
+ <p>Happy renewing!</p></div>
+ </content>
+ <updated>2016-01-15T16:01:19Z</updated>
+ <category term="letsencrypt"/>
+ <category term="mozilla"/>
+ <author>
+ <name>James 'J.C.' Jones</name>
+ </author>
+ <source>
+ <id>https://tacticalsecret.com/</id>
+ <link href="https://tacticalsecret.com/" rel="alternate" type="text/html"/>
+ <link href="https://tacticalsecret.com/tag/mozilla/rss/" rel="self" type="application/rss+xml"/>
+ <subtitle>On a mission to solve information security issues for the whole Internet. That, and whatever else comes up.</subtitle>
+ <title>mozilla - The Internet of Secure Things</title>
+ <updated>2016-01-21T17:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="es-ES">
+ <id>http://firefoxmania.uci.cu/?p=15521</id>
+ <link href="http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/" rel="alternate" type="text/html"/>
+ <title>Conoce los complementos destacados para enero</title>
+ <summary>Comenzó un nuevo año y con él, te traemos nuevos e interesantes complementos para tu navegador preferido que mejoran con creces tu experiencia de navegación. Durante los próximos 6 meses estará trabajando nuevos miembros en el Add-ons Board Team, en la próxima selección desde Firefoxmanía te avisaremos.</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p style="text-align: left;">Comenzó un nuevo año y con él, te traemos nuevos e interesantes complementos para tu navegador preferido que mejoran con creces tu experiencia de navegación. Durante los próximos 6 meses estará trabajando nuevos miembros en el Add-ons Board Team, en la próxima selección desde Firefoxmanía te avisaremos.</p>
+ <h3 style="text-align: left;">Elección del mes: uMatrix</h3>
+ <p>uMatrix es muy parecido a un <em>firewall</em> y desde una ventana fácilmente podrás controlar todos los lugares a donde tu navegador tiene permitido conectarse, qué tipo de datos pueden descargarse y cual puede ejecutar.</p>
+ <blockquote><p>Esta puede ser la extensión perfecta para el control avanzado de los usuarios.</p></blockquote>
+ <p><span id="more-15521"/></p>
+
+ <a href="http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix/"><img alt="Interfaz principal de uMatrix" class="attachment-thumbnail size-thumbnail" height="160" src="http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix-160x160.png" width="160"/></a>
+ <a href="http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix2/"><img alt="Opciones de configuraci&#xF3;n de uMatrix" class="attachment-thumbnail size-thumbnail" height="160" src="http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix2-160x160.png" width="160"/></a>
+
+ <p><em><a href="http://addons.firefoxmania.uci.cu/umatrix/" target="_blank">Instalar uMatrix »</a></em></p>
+ <h3>También te recomendamos</h3>
+ <p style="text-align: left;"><a href="http://addons.firefoxmania.uci.cu/https-everywhere/" target="_blank">⇒ HTTPS Everywhere</a> por <a href="https://addons.mozilla.org/en-US/firefox/user/eff-technologists/" title="EFF Technologists">EFF Technologists</a></p>
+ <p style="text-align: left;">Protege tus comunicaciones habilitando la encriptación HTTPS automáticamente en los sitios conocidos que la soportan, incluso cuando navegas mediante sitios que no incluyen el prefijo “https” en la URL.</p>
+ <p style="text-align: left;"><a href="http://addons.firefoxmania.uci.cu/add-to-search-bar/" target="_blank">⇒ Add to Search Bar</a> por <a href="https://addons.mozilla.org/firefox/user/dr-evil/" target="_blank" title="AdblockLite">Dr. Evil</a></p>
+ <p style="text-align: left;">Hace posible que cualquier página con un formulario de búsqueda disponible pueda ser añadido fácilmente a la barra de búsqueda de Firefox.</p>
+ <div class="wp-caption aligncenter" id="attachment_15528" style="width: 262px;"><a href="http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar.png" rel="attachment wp-att-15528"><img alt="add_to_search_bar" class="wp-image-15528 size-medium" height="226" src="http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar-252x226.png" width="252"/></a><p class="wp-caption-text">Añadiendo la búsqueda de un sitio web a la barra de búsqueda</p></div>
+ <p style="text-align: left;"><a href="http://addons.firefoxmania.uci.cu/duplicate-tabs-closer/" target="_blank">⇒ Duplicate Tabs Closer</a> por <a href="https://addons.mozilla.org/firefox/user/peuj/" target="_blank" title="The 1-Click YouTube Video Download Team">Peuj</a></p>
+ <p style="text-align: left;">Detecta las pestañas duplicadas en tu navegador y automáticamente las cierra.</p>
+ <h3 style="text-align: left;">Nomina tus complementos favoritos</h3>
+ <p style="text-align: left;">A nosotros nos encantaría que <strong>fueras parte del proceso</strong> de seleccionar los mejores complementos para Firefox y nos gustaría escucharte. <em>¿No sabes cómo?</em> Sólo tienes que <em>enviar un correo electrónico</em> a la dirección <strong>amo-featured@mozilla.org</strong> con el nombre del complemento o el archivo de instalación y los miembros evaluarán tu recomendación.</p>
+ <p style="text-align: left;"><strong>Fuente:</strong> <a href="https://blog.mozilla.org/addons/2016/01/01/january-2016-featured-add-ons/" target="_blank">Mozilla Add-ons Blog</a></p></div>
+ </content>
+ <updated>2016-01-15T15:10:26Z</updated>
+ <category term="Addons"/>
+ <category term="firefox"/>
+ <category term="complementos"/>
+ <author>
+ <name>Yunier J</name>
+ </author>
+ <source>
+ <id>http://firefoxmania.uci.cu</id>
+ <link href="http://firefoxmania.uci.cu/author/sosa/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://firefoxmania.uci.cu" rel="alternate" type="text/html"/>
+ <subtitle>Comunidad Mozilla Firefox de Cuba</subtitle>
+ <title>Yunier J – Firefoxmanía</title>
+ <updated>2016-01-23T12:16:22Z</updated>
+ </source>
+ </entry>
+
+ <entry>
+ <id>https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop</id>
+ <link href="https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop/" rel="alternate" type="text/html"/>
+ <title>Build Your Own Signal Desktop</title>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The Signal Private Messenger is great. <strong>Use it.</strong> It’s probably the best secure
+ messenger on the market. When recently a desktop app was announced people were
+ eager to join the beta and even happier when an invite finally showed up in
+ their inbox. So was I, it’s a great app and works surprisingly well for an early
+ version.</p>
+
+ <p>The only problem is that it’s a Chrome App. Apart from excluding folks with
+ other browsers it’s also a shitty user experience. If you too want your
+ messaging app not tied to a browser then let’s just build our own standalone
+ variant of Signal Desktop.</p>
+
+ <h3>NW.js beta with Chrome App support</h3>
+
+ <p>Signal Desktop is a Chrome App, so the easiest way to turn it into a standalone
+ app is to use <a href="http://nwjs.io/">NW.js</a>. Conveniently, their next release v0.13
+ will ship with Chrome App support and is available for download as a beta
+ version.</p>
+
+ <p>First, make sure you have <code>git</code> and <code>npm</code> installed. Then open a terminal and
+ prepare a temporary build directory to which we can download a few things and
+ where we can build the app:</p>
+
+ <figure class="code"><div class="highlight"><pre>$ mkdir signal-build
+ $ cd signal-build
+ </pre></div></figure>
+
+
+ <h3>[OS X] Packaging Signal and NW.js</h3>
+
+ <p>Download the latest beta of NW.js and <code>unzip</code> it. We’ll extract the application
+ and use it as a template for our Signal clone. The NW.js project does
+ unfortunately not seem to provide a secure source (or at least hashes)
+ for their downloads.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ unzip nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ cp -r nwjs-sdk-v0.13.0-beta3-osx-x64/nwjs.app SignalPrivateMessenger.app
+ </pre></div></figure>
+
+
+ <p>Next, clone the Signal repository and use NPM to install the necessary modules.
+ Run the <code>grunt</code> automation tool to build the application.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ </pre></div></figure>
+
+
+ <p>Finally, simply to copy the <code>dist</code> folder containing all the juicy Signal files
+ into the application template we created a few moments ago.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ cp -r dist ../SignalPrivateMessenger.app/Contents/Resources/app.nw
+ $ open ..
+ </pre></div></figure>
+
+
+ <p>The last command opens a Finder window. Move <code>SignalPrivateMessenger.app</code> to
+ your Applications folder and launch it as usual. You should now see a welcome
+ page!</p>
+
+ <h3>[Linux] Packaging Signal and NW.js</h3>
+
+ <p>The build instructions for Linux aren’t too different but I’ll write them down,
+ if just for convenience. Start by cloning the Signal Desktop repository and
+ build.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ </pre></div></figure>
+
+
+ <p>The <code>dist</code> folder contains the app, ready to be launched. <code>zip</code> it and place
+ the resulting package somewhere handy.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ cd dist
+ $ zip -r ../../package.nw *
+ </pre></div></figure>
+
+
+ <p>Back to the top. Download the NW.js binary, extract it, and change into the
+ newly created directory. Move the <code>package.nw</code> file we created earlier next to
+ the <code>nw</code> binary and we’re done. The <code>nwjs-sdk-v0.13.0-beta3-linux-x64</code> folder
+ does now contain the standalone Signal app.</p>
+
+ <figure class="code"><div class="highlight"><pre>$ cd ../..
+ $ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ tar xfz nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ cd nwjs-sdk-v0.13.0-beta3-linux-x64
+ $ mv ../package.nw .
+ </pre></div></figure>
+
+
+ <p>Finally, launch NW.js. You should see a welcome page!</p>
+
+ <figure class="code"><div class="highlight"><pre>$ ./nw
+ </pre></div></figure>
+
+
+ <h3>If you see something, file something</h3>
+
+ <p>Our standalone Signal clone mostly works, but it’s far from perfect. We’re
+ pulling from master and that might bring breaking changes that weren’t
+ sufficiently tested.</p>
+
+ <p>We don’t have the right icons. The app crashes when you click a media message.
+ It opens a blank popup when you click a link. It’s quite big because also NW.js
+ has bugs and so we have to use the SDK build for now. In the future it would be
+ great to have automatic updates, and maybe even signed builds.</p>
+
+ <p>Remember, Signal Desktop is beta, and completely untested with NW.js. If you
+ want to help file bugs, but only after checking that those affect the Chrome
+ App too. If you want to fix a bug only occurring in the standalone version
+ it’s probably best to file a pull request and cross fingers.</p>
+
+ <h3>Is this secure?</h3>
+
+ <p>Great question! I don’t know. I would love to get some more insights from people
+ that know more about the NW.js security model and whether it comes with all the
+ protections Chromium can offer. Another interesting question is whether bundling
+ Signal Desktop with NW.js is in any way worse (from a security perspective) than
+ installing it as a Chrome extension. If you happen to have an opinion about
+ that, I would love to hear it.</p>
+
+ <p>Another important thing to keep in mind is that when building Signal on your
+ own you will possibly miss automatic and signed security updates from the
+ Chrome Web Store. Keep an eye on the repository and rebuild your app from
+ time to time to not fall behind too much.</p></div>
+ </content>
+ <updated>2016-01-15T14:00:00Z</updated>
+ <source>
+ <id>https://timtaubert.de/</id>
+ <author>
+ <name>Tim Taubert</name>
+ </author>
+ <link href="https://timtaubert.de/atom.xml" rel="self" type="application/atom+xml"/>
+ <link href="https://timtaubert.de/" rel="alternate" type="text/html"/>
+ <title>Tim Taubert</title>
+ <updated>2016-01-15T15:04:09Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://glandium.org/blog/?p=3579</id>
+ <link href="http://glandium.org/blog/?p=3579" rel="alternate" type="text/html"/>
+ <title>Announcing git-cinnabar 0.3.0</title>
+ <summary>Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git. Get it on github. These release notes are also available on the git-cinnabar wiki. Development had been stalled for a few months, with many improvements in the next branch without any […]</summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git.</p>
+ <p><a href="https://github.com/glandium/git-cinnabar">Get it on github</a>.</p>
+ <p>These release notes are also <a href="https://github.com/glandium/git-cinnabar/wiki/Release-Notes:-0.3.0">available on the git-cinnabar wiki</a>.</p>
+ <p>Development had been stalled for a few months, with many improvements in the<br/>
+ <code>next</code> branch without any new release. I used some time during the new year<br/>
+ break and after in order to straighten things up in order to create a new<br/>
+ release, delaying many of the originally planned changes to a future 0.4.0<br/>
+ release.</p>
+ <h3>What’s new since 0.2.2?</h3>
+ <ul>
+ <li>Speed and memory usage were improved when doing <code>git push</code>.</li>
+ <li>Now works on Windows, at least to some extent. See <a href="http://glandium.org/blog/Windows-Support">details</a>.</li>
+ <li>Support for pre-0.1.0 git-cinnabar repositories was removed. You must first<br/>
+ use a git-cinnabar version between 0.1.0 and 0.2.2 to upgrade its metadata.</li>
+ <li>It is now possible to attach/graft git-cinnabar metadata to existing commits<br/>
+ matching mercurial changesets. This allows to migrate from some other<br/>
+ hg-to-git tool to git-cinnabar while preserving the existing git commits.<br/>
+ See <a href="http://glandium.org/blog/Mozilla%3A-Using-a-git-clone-of-gecko%E2%80%90dev-to-push-to-mercurial">an example of how this works with the git clone of the Gecko mercurial<br/>
+ repository</a>
+ </li>
+ <li>Avoid mercurial printing its progress bar, messing up with git-cinnabar’s<br/>
+ output.</li>
+ <li>It is now possible to fetch from an incremental mercurial bundle (without<br/>
+ a root changeset).</li>
+ <li>It is now possible to push to a new mercurial repository without <code>-f</code>.</li>
+ <li>By default, reject pushing a new root to a mercurial repository.</li>
+ <li>Make the connection to a mercurial repository through ssh respect the<br/>
+ <code>GIT_SSH</code> and <code>GIT_SSH_COMMAND</code> environment variables.</li>
+ <li>
+ <code>git cinnabar</code> now has a proper argument parser for all its subcommands.</li>
+ <li>
+ </li>
+ <li>A new <code>git cinnabar python</code> command allows to run python scripts or open a<br/>
+ python shell with the right sys.path to import the cinnabar module.</li>
+ <li>All git-cinnabar metadata is now kept under a single ref (although for<br/>
+ convenience, other refs are created, but they can be derived if necessary).</li>
+ <li>Consequently, a new <code>git cinnabar rollback</code> command allows to roll back to<br/>
+ previous metadata states.</li>
+ <li>git-cinnabar metadata now tracks the manifests DAG.</li>
+ <li>A new <code>git cinnabar bundle</code> command allows to create mercurial bundles,<br/>
+ mostly for debugging purposes, without requiring to hit a mercurial server.</li>
+ <li>Updated git to 2.7.0 for the native helper.</li>
+ </ul>
+ <h3>Development process changes</h3>
+ <p>Up to before this release closing in, the <code>master</code> branch was dedicated to<br/>
+ releases, and development was happening on the <code>next</code> branch, until a new<br/>
+ release happens.</p>
+ <p>From now on, the <code>release</code> branch will take dot-release fixes and new<br/>
+ releases, while the <code>master</code> branch will receive all changes that are<br/>
+ validated through testing (currently semi-automatically tested with<br/>
+ out-of-tree tests based on four real-life mercurial repositories, with<br/>
+ some automated CI based on in-tree tests used in the future).</p>
+ <p>The <code>next</code> branch will receive changes to be tested in CI when things<br/>
+ will be hooked up, and may have rewritten history as a consequence of<br/>
+ wanting passing tests on every commit on <code>master</code>.</p></div>
+ </content>
+ <updated>2016-01-15T08:56:40Z</updated>
+ <category term="cinnabar"/>
+ <category term="p.m.o"/>
+ <category term="en"/>
+ <author>
+ <name>glandium</name>
+ </author>
+ <source>
+ <id>http://glandium.org/blog</id>
+ <link href="http://glandium.org/blog/?feed=rss2&amp;cat=25&amp;tag=en" rel="self" type="application/rss+xml"/>
+ <link href="http://glandium.org/blog" rel="alternate" type="text/html"/>
+ <subtitle>glandium.org</subtitle>
+ <title>p.m.o – glandium.org</title>
+ <updated>2016-01-16T11:30:44Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/web-qa-weekly-meeting-20160114/</id>
+ <link href="https://air.mozilla.org/web-qa-weekly-meeting-20160114/" rel="alternate" type="text/html"/>
+ <title>Web QA Weekly Meeting, 14 Jan 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Web QA Weekly Meeting" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png" width="160"/>
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ </p></div>
+ </summary>
+ <updated>2016-01-14T17:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:49Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>https://air.mozilla.org/reps-weekly-20160114/</id>
+ <link href="https://air.mozilla.org/reps-weekly-20160114/" rel="alternate" type="text/html"/>
+ <title>Reps weekly, 14 Jan 2016</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
+ <img alt="Reps weekly" class="wp-post-image" height="90" src="https://air.cdn.mozilla.net/media/cache/ea/95/ea959e7cca319261380787a7d8f66a94.png" width="160"/>
+ This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.
+ </p></div>
+ </summary>
+ <updated>2016-01-14T16:00:00Z</updated>
+ <author>
+ <name>Air Mozilla</name>
+ </author>
+ <source>
+ <id>https://air.mozilla.org/</id>
+ <link href="https://air.mozilla.org/" rel="alternate" type="text/html"/>
+ <link href="https://air.mozilla.org/" rel="self" type="application/rss+xml"/>
+ <rights>Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.</rights>
+ <subtitle>Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.</subtitle>
+ <title>Air Mozilla</title>
+ <updated>2016-01-25T20:31:50Z</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <id>http://blog.mozilla.org/community/?p=2281</id>
+ <link href="http://blog.mozilla.org/community/2016/01/13/32c3-report-chaos-time-zone/" rel="alternate" type="text/html"/>
+ <title>32C3 Report – Chaos Time Zone</title>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Written by Valentin Schmitt. Entering the CCH (Congress Center Hamburg) between Christmas and new year brings you somewhere else than Hamburg on Central European Time. Most people you’ll meet will say they are from Internet (or the Internets, if they … <a class="go" href="http://blog.mozilla.org/community/2016/01/13/32c3-report-chaos-time-zone/">Continue reading</a></div>
+ </summary>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Written by <a href="https://mozillians.org/en-US/u/Valentin/">Valentin Schmitt</a>.</p>
+ <p>Entering the CCH (Congress Center Hamburg) between Christmas and new year brings you somewhere else than Hamburg on Central European Time.</p>
+ <p>Most people you’ll meet will say they are from Internet (or the Internets, if they are funny), and for a few days you’ll live in -what a friend of mine called- Chaos Time Zone: a blurry mix of everyone’s time difference. Days are pretty shorts anyway and you’ll probably spend a lot of time under artificial light, so it won’t help your internal clock keeping on track. The organizers will gently remind you the 6,2,1 rule: 6 hours of sleep, 2 meals and 1 shower per day, that should keep you safe. You’ll probably meet a lot of great people, and will often have a hard time to decide which talk or workshop to go to.<br/>
+ This is the <a href="https://events.ccc.de/congress/2015/wiki/Static:Main_Page">32nd Chaos Communication Congress</a>. Welcome, and have fun!</p>
+ <div class="wp-caption aligncenter" id="attachment_2282" style="width: 610px;"><a href="https://www.flickr.com/photos/mariobehling/23398995803/"><img alt="32C3 Chaos Communication Congress" class="size-large wp-image-2282" height="400" src="https://blog.mozilla.org/community/files/2016/01/CCCPost1-600x400.jpg" width="600"/></a><p class="wp-caption-text">32C3 Chaos Communication Congress – Photo: Mario Behling</p></div>
+ <h3>FxOS is not dead.</h3>
+ <p>I looked for a screen printer, or anything to do myself a t-shirt with the message “Firefox OS is not dead!” on it, but very surprisingly regarding the variety of machines there, I couldn’t find any on site. I really wanted to do that, because most of the people I talked to about<br/>
+ Firefox OS answered me “But isn’t Firefox OS dead?”. I bet it won’t come as a surprise for you, as there was a lot of feedback from the community regarding what some might call “a PR disaster”. It just made it very clear to me that we (still) have to communicate a lot on this topic, and very loudly, because the tech news websites will be less likely to spread the word this time.</p>
+ <p>Once this detail (<b>*cough*</b>) was clarified, almost everybody I had the chance to talk to showed a lot of interested for the project, the only ones who didn’t were the hardcore Free Software enthusiasts, whom have been disappointed by Mozilla recent policy choices (like the tiles with<br/>
+ advertisement, or the DRM support in Firefox desktop), or the people who care less about software freedom and prefer an iPhone to a free (as in freedom) mobile OS.</p>
+ <div class="wp-caption aligncenter" id="attachment_2283" style="width: 610px;"><a href="https://www.flickr.com/photos/mariobehling/23943014701"><img alt="Mozilla and Firefox at 32C3 with friends" class="size-large wp-image-2283" height="400" src="https://blog.mozilla.org/community/files/2016/01/CCCPost2-600x400.jpg" width="600"/></a><p class="wp-caption-text">Mozilla and Firefox at 32C3 with friends – Photo: Mario Behling</p></div>
+ <h3>“Well, it’s Mozilla.”</h3>
+ <p>Mozilla has a pretty good image in the Free Software community, and the main reason why people never tried a Firefox OS device is only because they never had the chance to do so (not many devices marketed in Europe or the US, not many ports on mainstream phones). Fortunately enough, I had some foxfooding devices to hand out. The <a href="https://firefoxos.mozilla.community/foxfooding-faq/">foxfooding program</a> had a very positive reception, most people were happy to have the chance to try the OS, participate in sending data to Mozilla, file bugs, some were eager to develop apps, and try port the OS on their favorite phone or device (the RasPi got a bunch of them very excited).</p>
+ <p>More importantly, they really asked me how to flash a device, where to find the documentation to get started, how to file a bug. The people I handed a device to planned to show it to their colleagues, friends and fellow hacktivists, and were very excited to have phone with a hardware good enough to provide a responsive experience.</p>
+ <h3>Questions?</h3>
+ <p>“Is there a Signal app or any secure messaging app?”<br/>
+ “Can I use Tor?”<br/>
+ “Can I keep OSM maps in cache?”<br/>
+ “Is there an app for WhatsApp?”<br/>
+ These were the questions I was asked the most. It’s pretty expected that the hackers community is looking for reliable privacy tools, but I was a bit surprised by the last question that still came up several times. <img alt=":)" class="wp-smiley" src="http://blog.mozilla.org/community/wp-includes/images/smilies/simple-smile.png" style="height: 1em;"/></p>
+ <h3>Mozillians, assemble!</h3>
+ <p>An <a href="https://events.ccc.de/congress/2015/wiki/Static:Assemblies">assembly</a> is the name the Chaos Communication Congress gives to the physical place (typically a bunch of tables with a power outlet) within the CCH where people can gather to hack, share ideas and have self organized-sessions on a particular topic, or around a particular project, there were 277 registered this year.</p>
+ <div class="wp-caption aligncenter" id="attachment_2284" style="width: 610px;"><a href="https://www.flickr.com/photos/fossasia/23742587859"><img alt="Assembling Under The Lights" class="size-large wp-image-2284" height="450" src="https://blog.mozilla.org/community/files/2016/01/CCCPost3-600x450.jpg" width="600"/></a><p class="wp-caption-text">Assembling Under The Lights – Photo: Hong Phuc FOSSASIA</p></div>
+ <p>With the Mozilla Assembly, we had several sessions (directly at the Assembly or in dedicated rooms) over these 4 days:</p>
+ <ul>
+ <li>Several Nightly Firefox OS workshops, combining more than 50 participants;</li>
+ <li>The Mozilla community meetup that gathered 20 participants;</li>
+ <li>a Thunderbird session with 42 participants;</li>
+ <li>an IoT and Firefox OS workshop, in a dedicated room that was <a href="https://www.flickr.com/photos/fossasia/23485427703/">packed with 90 participants</a>;</li>
+ </ul>
+ <p>On average, there were around 15 Mozillians at the Assembly and a continuous flow of people from different community.</p>
+ <p>Other projects where Mozilla is involved were represented, <a href="https://media.ccc.de/v/32c3-7528-let_s_encrypt_--_what_launching_a_free_ca_looks_like">like Let’s Encrypt</a>, with a talk so successful that the conference room was full, and New Palmyra, for which Mozillians organized a session for 25 participants.</p>
+ <p>The hackers and makers communities have a real ethical and practical interest in a mobile or embedded OS that’s trustworthy and hackable, we bear similar values and Firefox OS is a great opportunity to strengthen the ties between us.</p></div>
+ </content>
+ <updated>2016-01-13T22:55:23Z</updated>
+ <category term="Events"/>
+ <category term="Participation"/>
+ <category term="Privacy"/>
+ <category term="32c3"/>
+ <category term="CCC"/>
+ <category term="contributor"/>
+ <category term="firefox os"/>
+ <category term="Moz32c3"/>
+ <category term="MozParticipation"/>
+ <category term="Participation Team"/>
+ <category term="privacy"/>
+ <author>
+ <name>Brian King</name>
+ </author>
+ <source>
+ <id>http://blog.mozilla.org/community</id>
+ <link href="http://blog.mozilla.org/community/feed/" rel="self" type="application/rss+xml"/>
+ <link href="http://blog.mozilla.org/community" rel="alternate" type="text/html"/>
+ <subtitle>News and notes from and for the Mozilla community.</subtitle>
+ <title>about:community</title>
+ <updated>2016-01-25T16:31:43Z</updated>
+ </source>
+ </entry>
+</feed>
diff --git a/mobile/android/tests/background/junit4/resources/feed_atom_wikipedia.xml b/mobile/android/tests/background/junit4/resources/feed_atom_wikipedia.xml
new file mode 100644
index 000000000..8b0344c59
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_atom_wikipedia.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ https://en.wikipedia.org/wiki/Atom_%28standard%29#Example_of_an_Atom_1.0_feed
+-->
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title>Example Feed</title>
+ <subtitle>A subtitle.</subtitle>
+ <link href="http://example.org/feed/" rel="self" />
+ <link href="http://example.org/" />
+ <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+
+
+ <entry>
+ <title>Atom-Powered Robots Run Amok</title>
+ <link href="http://example.org/2003/12/13/atom03" />
+ <link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
+ <link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+ <summary>Some text.</summary>
+ <content type="xhtml">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <p>This is the entry content.</p>
+ </div>
+ </content>
+ <author>
+ <name>John Doe</name>
+ <email>johndoe@example.com</email>
+ </author>
+ </entry>
+
+</feed> \ No newline at end of file
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss10_planetmozilla.xml b/mobile/android/tests/background/junit4/resources/feed_rss10_planetmozilla.xml
new file mode 100644
index 000000000..2cfd93d3c
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss10_planetmozilla.xml
@@ -0,0 +1,3860 @@
+<?xml version="1.0"?>
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns="http://purl.org/rss/1.0/"
+ >
+ <channel rdf:about="http://planet.mozilla.org/">
+ <title>Planet Mozilla</title>
+ <link>http://planet.mozilla.org/</link>
+ <description>Planet Mozilla - http://planet.mozilla.org/</description>
+ <atom:link rel="self" href="http://planet.mozilla.org/rss10.xml" type="application/rss+xml"/>
+
+ <items>
+ <rdf:Seq>
+ <rdf:li rdf:resource="http://dblohm7.ca/blog/2016/01/26/announcing-mozdbgext" />
+ <rdf:li rdf:resource="http://firefoxmania.uci.cu/?p=15548" />
+ <rdf:li rdf:resource="https://quality.mozilla.org/?p=49454" />
+ <rdf:li rdf:resource="http://dlawrence.wordpress.com/?p=29" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/tanvi/?p=198" />
+ <rdf:li rdf:resource="https://blog.mozilla.org/?p=9166" />
+ <rdf:li rdf:resource="http://benoitgirard.wordpress.com/?p=651" />
+ <rdf:li rdf:resource="http://blog.servo.org/2016/01/25/twis-48/" />
+ <rdf:li rdf:resource="https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/community/?p=2292" />
+ <rdf:li rdf:resource="tag:literaci.es,2014:Post/digital-skills-curriculum" />
+ <rdf:li rdf:resource="https://fundraising.mozilla.org/?p=800" />
+ <rdf:li rdf:resource="http://www.agmweb.ca/robbie-burns" />
+ <rdf:li rdf:resource="tag:this-week-in-rust.org,2016-01-25:blog/2016/01/25/this-week-in-rust-115/" />
+ <rdf:li rdf:resource="tag:blogger.com,1999:blog-1015214236289077798.post-7056349209464984020" />
+ <rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=907" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/addons/?p=7640" />
+ <rdf:li rdf:resource="http://coopcoopbware.tumblr.com/post/137832199980" />
+ <rdf:li rdf:resource="https://air.mozilla.org/foundation-demos-january-22-2016/" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/sumo/?p=3667" />
+ <rdf:li rdf:resource="https://air.mozilla.org/bay-area-rust-meetup-january-2016/" />
+ <rdf:li rdf:resource="https://blog.lizardwrangler.com/?p=3953" />
+ <rdf:li rdf:resource="https://blog.mozilla.org/webdev/?p=4082" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/community/?p=2287" />
+ <rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=912" />
+ <rdf:li rdf:resource="https://tacticalsecret.com/tag/mozilla/rss/9c39ad13-14ae-4456-a84e-13612637d832" />
+ <rdf:li rdf:resource="https://air.mozilla.org/web-qa-weekly-meeting-20160121/" />
+ <rdf:li rdf:resource="http://soledadpenades.com/?p=6379" />
+ <rdf:li rdf:resource="http://pierros.papadeas.gr/?p=447" />
+ <rdf:li rdf:resource="http://adamlofting.com/?p=1396" />
+ <rdf:li rdf:resource="http://blog.ziade.org/2016/01/21/a-pelican-web-editor/" />
+ <rdf:li rdf:resource="http://www.ncameron.org/blog/rss/631106eb-e7b1-47d5-82f9-cb6ad210ea89" />
+ <rdf:li rdf:resource="http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace" />
+ <rdf:li rdf:resource="https://rail.merail.ca/posts/rebooting-productivity.html" />
+ <rdf:li rdf:resource="http://blog.rust-lang.org/2016/01/21/Rust-1.6.html" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/addons/?p=7644" />
+ <rdf:li rdf:resource="https://air.mozilla.org/the-joy-of-coding-episode-41/" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/nfroyd/?p=452" />
+ <rdf:li rdf:resource="http://andreasgal.com/?p=573" />
+ <rdf:li rdf:resource="https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html" />
+ <rdf:li rdf:resource="http://globau.wordpress.com/?p=881" />
+ <rdf:li rdf:resource="https://www.alex-johnson.net/tag/mozilla/rss/85d84c54-ed0c-4ee5-beb3-8823edb3c074" />
+ <rdf:li rdf:resource="http://www.brianbondy.com/blog/id/172" />
+ <rdf:li rdf:resource="http://coffeeonthekeyboard.com/rss/0388d8a6-fc86-477e-a161-1b356e01fe77" />
+ <rdf:li rdf:resource="https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/" />
+ <rdf:li rdf:resource="https://mykzilla.org/?p=245" />
+ <rdf:li rdf:resource="http://michaelkohler.info/?p=348" />
+ <rdf:li rdf:resource="http://dlawrence.wordpress.com/?p=27" />
+ <rdf:li rdf:resource="http://soledadpenades.com/?p=6335" />
+ <rdf:li rdf:resource="http://daniel.haxx.se/blog/?p=8544" />
+ <rdf:li rdf:resource="http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html" />
+ <rdf:li rdf:resource="https://quality.mozilla.org/?p=49441" />
+ <rdf:li rdf:resource="http://blog.monotonous.org/?p=678" />
+ <rdf:li rdf:resource="http://www.ncameron.org/blog/rss/0e4d587c-380c-40ce-954a-7206f69bc1dd" />
+ <rdf:li rdf:resource="http://geekyogre.com/rss/63eb682d-66b4-447d-8fb6-f4ed448019df" />
+ <rdf:li rdf:resource="http://dougbelshaw.com/blog/?p=39986" />
+ <rdf:li rdf:resource="tag:this-week-in-rust.org,2016-01-18:blog/2016/01/18/this-week-in-rust-114/" />
+ <rdf:li rdf:resource="http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html" />
+ <rdf:li rdf:resource="http://ngokevin.com/blog/aframe-component/" />
+ <rdf:li rdf:resource="http://blog.gerv.net/?p=3527" />
+ <rdf:li rdf:resource="https://www.christianheilmann.com/?p=4957" />
+ <rdf:li rdf:resource="http://glandium.org/blog/?p=3510" />
+ <rdf:li rdf:resource="http://edunham.net/2016/01/16/buildbot_and_eoferror.html" />
+ <rdf:li rdf:resource="urn:md5:41d039bb28fb15c761578cba0b1454fa" />
+ <rdf:li rdf:resource="https://repeer.org/?p=48" />
+ <rdf:li rdf:resource="http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html" />
+ <rdf:li rdf:resource="http://coopcoopbware.tumblr.com/post/137371863755" />
+ <rdf:li rdf:resource="https://air.mozilla.org/webdev-beer-and-tell-january-2016/" />
+ <rdf:li rdf:resource="http://blog.mozilla.org/sumo/?p=3665" />
+ <rdf:li rdf:resource="https://air.mozilla.org/paris-firefox-os-hackathon-presentations/" />
+ <rdf:li rdf:resource="https://tacticalsecret.com/tag/mozilla/rss/db7fec0c-34d3-4633-9904-79b98aab34e7" />
+ <rdf:li rdf:resource="http://firefoxmania.uci.cu/?p=15521" />
+ <rdf:li rdf:resource="https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop" />
+ <rdf:li rdf:resource="http://glandium.org/blog/?p=3579" />
+ <rdf:li rdf:resource="https://air.mozilla.org/web-qa-weekly-meeting-20160114/" />
+ </rdf:Seq>
+ </items>
+ </channel>
+
+ <item rdf:about="http://dblohm7.ca/blog/2016/01/26/announcing-mozdbgext">
+ <title>Aaron Klotz: Announcing Mozdbgext</title>
+ <link>http://dblohm7.ca/blog/2016/01/26/announcing-mozdbgext/</link>
+ <content:encoded>&lt;p&gt;A well-known problem at Mozilla is that, while most of our desktop users run
+ Windows, most of Mozilla’s developers do not. There are a lot of problems that
+ result from that, but one of the most frustrating to me is that sometimes
+ those of us that actually use Windows for development find ourselves at a
+ disadvantage when it comes to tooling or other productivity enhancers.&lt;/p&gt;
+
+ &lt;p&gt;In many ways this problem is also a Catch-22: People don’t want to use Windows
+ for many reasons, but tooling is big part of the problem. OTOH, nobody is
+ motivated to improve the tooling situation if nobody is actually going to
+ use them.&lt;/p&gt;
+
+ &lt;p&gt;A couple of weeks ago my frustrations with the situation boiled over when I
+ learned that our &lt;code&gt;Cpp&lt;/code&gt; unit test suite could not log symbolicated call stacks,
+ resulting in my filing of &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238305&quot; title=&quot;cppunittests do not look up breakpad symbols for logged stack traces&quot;&gt;bug 1238305&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240605&quot; title=&quot;Set _NT_SYMBOL_PATH on Windows test machines&quot;&gt;bug 1240605&lt;/a&gt;. Not only could we
+ not log those stacks, in many situations we could not view them in a debugger
+ either.&lt;/p&gt;
+
+ &lt;p&gt;Due to the fact that PDB files consume a large amount of disk space, we don’t
+ keep those when building from integration or try repositories. Unfortunately
+ they are be quite useful to have when there is a build failure. Most of our
+ integration builds, however, do include breakpad symbols. Developers may also
+ explicitly &lt;a href=&quot;https://wiki.mozilla.org/ReleaseEngineering/TryServer#Getting_debug_symbols&quot;&gt;request symbols&lt;/a&gt;
+ for their try builds.&lt;/p&gt;
+
+ &lt;p&gt;A couple of years ago I had begun working on a WinDbg debugger extension that
+ was tailored to Mozilla development. It had mostly bitrotted over time, but I
+ decided to resurrect it for a new purpose: to help WinDbg&lt;sup&gt;&lt;a href=&quot;http://dblohm7.ca/atom.xml#fn1&quot; id=&quot;r1&quot;&gt;*&lt;/a&gt;&lt;/sup&gt;
+ grok breakpad.&lt;/p&gt;
+
+ &lt;h3&gt;Enter mozdbgext&lt;/h3&gt;
+
+ &lt;p&gt;&lt;a href=&quot;https://github.com/dblohm7/mozdbgext&quot;&gt;&lt;code&gt;mozdbgext&lt;/code&gt;&lt;/a&gt; is the result. This extension
+ adds a few commands that makes Win32 debugging with breakpad a little bit easier.&lt;/p&gt;
+
+ &lt;p&gt;The original plan was that I wanted &lt;code&gt;mozdbgext&lt;/code&gt; to load breakpad symbols and then
+ insert them into the debugger’s symbol table via the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/hardware/ff537943%28v=vs.85%29.aspx&quot;&gt;&lt;code&gt;IDebugSymbols3::AddSyntheticSymbol&lt;/code&gt;&lt;/a&gt;
+ API. Unfortunately the design of this API is not well equipped for bulk loading
+ of synthetic symbols: each individual symbol insertion causes the debugger to
+ re-sort its entire symbol table. Since &lt;code&gt;xul.dll&lt;/code&gt;’s quantity of symbols is in the
+ six-figure range, using this API to load that quantity of symbols is
+ prohibitively expensive. I tweeted a Microsoft PM who works on Debugging Tools
+ for Windows, asking if there would be any improvements there, but it sounds like
+ this is not going to be happening any time soon.&lt;/p&gt;
+
+ &lt;p&gt;My original plan would have been ideal from a UX perspective: the breakpad
+ symbols would look just like any other symbols in the debugger and could be
+ accessed and manipulated using the same set of commands. Since synthetic symbols
+ would not work for me in this case, I went for “Plan B:” Extension commands that
+ are separate from, but analagous to, regular WinDbg commands.&lt;/p&gt;
+
+ &lt;p&gt;I plan to continuously improve the commands that are available. Until I have a
+ proper README checked in, I’ll introduce the commands here.&lt;/p&gt;
+
+ &lt;h4&gt;Loading the Extension&lt;/h4&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Use the &lt;code&gt;.load&lt;/code&gt; command: &lt;code&gt;.load &amp;lt;path_to_mozdbgext_dll&amp;gt;&lt;/code&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+
+
+ &lt;h4&gt;Loading the Breakpad Symbols&lt;/h4&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Extract the breakpad symbols into a directory.&lt;/li&gt;
+ &lt;li&gt;In the debugger, enter &lt;code&gt;!bploadsyms &amp;lt;path_to_breakpad_symbol_directory&amp;gt;&lt;/code&gt;&lt;/li&gt;
+ &lt;li&gt;Note that this command will take some time to load all the relevant symbols.&lt;/li&gt;
+ &lt;/ol&gt;
+
+
+ &lt;h4&gt;Working with Breakpad Symbols&lt;/h4&gt;
+
+ &lt;p&gt;&lt;strong&gt;Note: You must have successfully run the &lt;code&gt;!bploadsyms&lt;/code&gt; command first!&lt;/strong&gt;&lt;/p&gt;
+
+ &lt;p&gt;As a general guide, I am attempting to name each breakpad command similarly to
+ the native WinDbg command, except that the command name is prefixed by &lt;code&gt;!bp&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;Stack trace: &lt;code&gt;!bpk&lt;/code&gt;&lt;/li&gt;
+ &lt;li&gt;Find nearest symbol to address: &lt;code&gt;!bpln &amp;lt;address&amp;gt;&lt;/code&gt; where &lt;em&gt;address&lt;/em&gt; is specified
+ as a hexadecimal value.&lt;/li&gt;
+ &lt;/ul&gt;
+
+
+ &lt;h4&gt;Downloading windbgext&lt;/h4&gt;
+
+ &lt;p&gt;I have pre-built a &lt;a href=&quot;https://github.com/dblohm7/mozdbgext/blob/master/bin/mozdbgext.dll?raw=true&quot;&gt;32-bit binary&lt;/a&gt;
+ (which obviously requires 32-bit WinDbg). I have not built a 64-bit binary yet,
+ but the code should be source compatible.&lt;/p&gt;
+
+ &lt;p&gt;Note that there are several other commands that are “roughed-in” at this point
+ and do not work correctly yet. Please stick to the documented commands at this
+ time.&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;sup&gt;&lt;a href=&quot;http://dblohm7.ca/atom.xml#r1&quot; id=&quot;fn1&quot;&gt;*&lt;/a&gt;&lt;/sup&gt; When I write “WinDbg”, I am really
+ referring to any debugger in the &lt;em&gt;Debugging Tools for Windows&lt;/em&gt; package,
+ including &lt;code&gt;cdb&lt;/code&gt;.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-26T19:45:00+00:00</dc:date>
+ </item>
+ <item rdf:about="http://firefoxmania.uci.cu/?p=15548">
+ <title>Yunier José Sosa Vázquez: Soporte para WebM/VP9, más seguridad y nuevas herramientas para desarrolladores en el nuevo Firefox</title>
+ <link>http://firefoxmania.uci.cu/soporte-para-webmvp9-mas-seguridad-y-nuevas-herramientas-para-desarrolladores-en-el-nuevo-firefox/</link>
+ <content:encoded>&lt;p style=&quot;text-align: left;&quot;&gt;¡Como pasa el tiempo amigos! Casi sin darnos cuenta han transcurrido 6 semanas y hasta hemos comenzado un año nuevo, un año en el que Mozilla prepara nuevas funcionalidades que harán de Firefox un mejor como por ejemplo: la &lt;a href=&quot;http://firefoxmania.uci.cu/como-se-hace-activar-electrolysis-en-firefox/&quot; target=&quot;_blank&quot;&gt;separación de procesos&lt;/a&gt;, el uso de vías alternas para &lt;a href=&quot;http://firefoxmania.uci.cu/el-futuro-de-los-plugins-npapi-en-firefox/&quot; target=&quot;_blank&quot;&gt;ejecutar plugins&lt;/a&gt; y la nueva API para desarrollar &lt;a href=&quot;http://firefoxmania.uci.cu/el-futuro-de-los-complementos-en-firefox/&quot; target=&quot;_blank&quot;&gt;complementos “multi navegador”&lt;/a&gt;.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Desde el anuncio en 2010 del formato de video WebM, &lt;a href=&quot;https://blog.mozilla.org/blog/2010/05/19/open-web-open-video-and-webm/&quot; target=&quot;_blank&quot;&gt;Mozilla ha mostrado un especial interés&lt;/a&gt; al ser una alternativa potente frente a los formatos propietarios del mercado que existían en aquel momento y de esta forma mejorar la experiencia de los usuarios al reproducir videos en la web. Con esta liberación se ha habilitado el &lt;strong&gt;soporte para WebM/VP9 en aquellos sistemas que no soportan MP4/H.264&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Desde algunas versiones atrás, Firefox incluye el plugin &lt;a href=&quot;http://andreasgal.com/2014/10/14/openh264-now-in-firefox/&quot; target=&quot;_blank&quot;&gt;OpenH264 proveído por Cisco&lt;/a&gt; para cumplir las especificaciones de WebRTC y habilitar las llamadas con dispositivos que lo requieran. Ahora, si el &lt;strong&gt;decodificador de H.264 está disponible&lt;/strong&gt; en el sistema, entonces se habilita este codec de video.&lt;span id=&quot;more-15548&quot;&gt;&lt;/span&gt;&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;em&gt;Novedades para desarrolladores&lt;/em&gt;&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;En esta oportunidad, los desarrolladores podrán contar con herramientas de animación y filtros CSS, informes sobre consumo de memoria, depuración de WebSocket y más. Todo esto puedes leerlo en &lt;a href=&quot;https://www.mozilla-hispano.org/edicion-para-desarrolladores-44-editor-visual-manejo-de-memoria/&quot; target=&quot;_blank&quot;&gt;el blog de Labs&lt;/a&gt; de Mozilla Hispano.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;em&gt;Novedades en Android&lt;/em&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Los usuarios pueden elegir la página de inicio a mostrar, en vez de los sitios más visitados.&lt;/li&gt;
+ &lt;li&gt;El servicio de impresión de Android permite activar la impresión en la nube.&lt;/li&gt;
+ &lt;li&gt;Al &lt;a href=&quot;https://developer.chrome.com/multidevice/android/intents&quot; target=&quot;_blank&quot;&gt;intentar abrir una URIs&lt;/a&gt;, se le pregunta al usuario si desea abrirla en una pestaña privada.&lt;/li&gt;
+ &lt;li&gt;Adicionado el soporte para ejecutar URIs con el protocolo mms.&lt;/li&gt;
+ &lt;li&gt;Fácil acceso a la configuración de la búsqueda mientras buscamos en Internet.&lt;/li&gt;
+ &lt;li&gt;Ahora se muestran las sugerencias del historial de búsqueda.&lt;/li&gt;
+ &lt;li&gt;La página Cuentas Firefox ahora está basada en la web.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;em&gt;Otras novedades&lt;/em&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;El soporte para el algoritmo criptográfico RC4 ha sido removido.&lt;/li&gt;
+ &lt;li&gt;Soporte para el formato de compresión brotli cuando se usa HTTPS.&lt;/li&gt;
+ &lt;li&gt;Uso de un certificado de firmado SHA256 para las versiones de Windows en aras de adaptarse a los nuevos requerimientos.&lt;/li&gt;
+ &lt;li&gt;Para soportar el descriptor unicode-range de las fuentes web, el algoritmo de concordancia en Linux usa el mismo código como en las demás plataformas.&lt;/li&gt;
+ &lt;li&gt;Firefox no confiará más en la autoridad de certificación Equifax Secure Certificate Authority 1024-bit root o UTN – DATACorp SGC para validar &lt;a href=&quot;https://support.mozilla.org/ta/kb/secure-website-certificate&quot; target=&quot;_blank&quot;&gt;certificados web seguros&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;El soporte para el teclado en pantalla ha sido temporalmente desactivado en Windows 8 y 8.1.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Si deseas conocer más, puedes leer las &lt;a href=&quot;http://www.mozilla.org/en-US/firefox/44.0/releasenotes/&quot; target=&quot;_blank&quot;&gt;notas de lanzamiento&lt;/a&gt; (en inglés) para conocer más novedades.&lt;/p&gt;
+ &lt;p&gt;&lt;strong&gt;Aclaración para la versión móvil.&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;En las descargas se pueden encontrar 3 versiones para Android. El archivo que contiene &lt;strong&gt;i386&lt;/strong&gt; es para los dispositivos que tengan la &lt;strong&gt;arquitectura de Intel&lt;/strong&gt;. Mientras que en los nombrados &lt;strong&gt;arm&lt;/strong&gt;, el que dice &lt;strong&gt;api11 funciona con Honeycomb (3.0) o superior&lt;/strong&gt; y el de &lt;strong&gt;api9 es para Gingerbread (2.3)&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;Puedes obtener esta versión desde nuestra &lt;a href=&quot;http://firefoxmania.uci.cu/download/&quot; target=&quot;_blank&quot;&gt;zona de Descargas&lt;/a&gt; en español e inglés para Linux, Mac, Windows y Android. Recuerda que para navegar a través de servidores proxy debes modificar la preferencia &lt;strong&gt;network.auth.force-generic-ntlm&lt;/strong&gt; a &lt;code&gt;true&lt;/code&gt; desde &lt;a target=&quot;_blank&quot;&gt;about:config&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Si te ha gustado, por favor comparte con tus amigos esta noticia en las redes sociales. No dudes en dejarnos un comentario.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-26T18:56:54+00:00</dc:date>
+ <dc:creator>Yunier J</dc:creator>
+ </item>
+ <item rdf:about="https://quality.mozilla.org/?p=49454">
+ <title>QMO: Firefox 45.0 Beta 3 Testday, February 5th</title>
+ <link>https://quality.mozilla.org/2016/01/firefox-45-0-beta-3-testday-february-5th/</link>
+ <content:encoded>&lt;p&gt;Hello Mozillians,&lt;/p&gt;
+ &lt;p&gt;We are happy to announce that &lt;strong&gt;Friday, February 5th&lt;/strong&gt;, we are organizing &lt;strong&gt;Firefox 45.0 Beta 3 Testday&lt;/strong&gt;. We will be focusing our testing on the following features: &lt;em&gt;Search Refactoring, Synced Tabs Menu, Text to Speech and Grouped Tabs Migration&lt;/em&gt;. Check out the detailed instructions via &lt;a href=&quot;https://public.etherpad-mozilla.org/p/testday-20160205&quot; target=&quot;_blank&quot;&gt;this etherpad&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;No previous testing experience is required, so feel free to join us on &lt;strong&gt;&lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot;&gt;#qa IRC channel&lt;/a&gt;&lt;/strong&gt; where our moderators will offer you guidance and answer your questions.&lt;/p&gt;
+ &lt;p&gt;Join us and help us make Firefox better! See you on &lt;strong&gt;Friday&lt;/strong&gt;!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-26T14:40:55+00:00</dc:date>
+ <dc:creator>vasilica.mihasca</dc:creator>
+ </item>
+ <item rdf:about="http://dlawrence.wordpress.com/?p=29">
+ <title>David Lawrence: Happy BMO Push Day!</title>
+ <link>https://dlawrence.wordpress.com/2016/01/26/happy-bmo-push-day-4/</link>
+ <content:encoded>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240575&quot; target=&quot;_blank&quot;&gt;1240575&lt;/a&gt;] Update form.reps.budget&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1226028&quot; target=&quot;_blank&quot;&gt;1226028&lt;/a&gt;] API for batching MozReview requests&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;amp;blog=58816&amp;amp;post=29&amp;amp;subd=dlawrence&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-26T14:27:50+00:00</dc:date>
+ <dc:creator>dlawrence</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/tanvi/?p=198">
+ <title>Tanvi Vyas: Updated Firefox Security Indicators</title>
+ <link>https://blog.mozilla.org/tanvi/2016/01/26/updated-firefox-security-indicators/</link>
+ <content:encoded>&lt;p&gt;&lt;em&gt;This article has been coauthored by Aislinn Grigas, Senior Interaction Designer, Firefox Desktop&lt;/em&gt;&lt;br /&gt;
+ &lt;em&gt;Cross posting with &lt;a href=&quot;https://blog.mozilla.org/security/2015/11/03/updated-firefox-security-indicators-2/&quot;&gt;Mozilla’s Security Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;November 3, 2015&lt;/p&gt;
+ &lt;p&gt;Over the past few months, Mozilla has been improving the user experience of our privacy and security features in Firefox. One specific initiative has focused on the feedback shown in our address bar around a site’s security. The major changes are highlighted below along with the rationale behind each change.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/combo-graph21.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-2045 size-full&quot; height=&quot;914&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/combo-graph21.png&quot; width=&quot;1518&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;Change to DV Certificate treatment in the address bar&lt;/h3&gt;
+ &lt;p&gt;Color and iconography is commonly used today to communicate to users when a site is secure. The most widely used patterns are coloring a lock icon and parts of the address bar green. This treatment has a straightforward rationale given green = good in most cultures. Firefox has historically used two different color treatments for the lock icon – a gray lock for &lt;a href=&quot;https://en.wikipedia.org/wiki/Domain-validated_certificate&quot;&gt;Domain-validated (DV) certificates&lt;/a&gt; and a green lock for &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Validation_Certificate&quot;&gt;Extended Validation (EV) certificates&lt;/a&gt;. The average user is likely not going to understand this color distinction between EV and DV certificates. The overarching message we want users to take from both certificate states is that their connection to the site is secure. We’re therefore updating the color of the lock when a DV certificate is used to match that of an EV certificate.&lt;/p&gt;
+ &lt;p&gt;Although the same green icon will be used, the UI for a site using EV certificates will continue to differ from a site using a DV certificate. Specifically, EV certificates are used when &lt;a href=&quot;https://en.wikipedia.org/wiki/Certificate_authority&quot;&gt;Certificate Authorities (CA)&lt;/a&gt; verify the owner of a domain. Hence, we will continue to include the organization name verified by the CA in the address bar.&lt;/p&gt;
+ &lt;h3&gt;Changes to Mixed Content Blocker UI on HTTPS sites&lt;/h3&gt;
+ &lt;p&gt;A second change we’re introducing addresses what happens when a page served over a secure connection contains &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent&quot;&gt;Mixed Content&lt;/a&gt;. Firefox’s Mixed Content Blocker proactively blocks &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_active_content&quot;&gt;Mixed Active Content&lt;/a&gt; by default. Users historically saw a &lt;a href=&quot;https://people.mozilla.org/~tvyas/FigureA.jpg&quot;&gt;shield icon&lt;/a&gt; when Mixed Active Content was blocked and were given the option to disable the protection.&lt;/p&gt;
+ &lt;p&gt;Since the Mixed Content state is closely tied to site security, the information should be communicated in one place instead of having two separate icons. Moreover, we have seen that the &lt;a href=&quot;https://telemetry.mozilla.org/new-pipeline/dist.html#!cumulative=0&amp;amp;end_date=2015-09-17&amp;amp;keys=__none__!__none__!__none__&amp;amp;max_channel_version=beta%252F41&amp;amp;measure=MIXED_CONTENT_UNBLOCK_COUNTER&amp;amp;min_channel_version=null&amp;amp;product=Firefox&amp;amp;sanitize=1&amp;amp;sort_keys=submissions&amp;amp;start_date=2015-08-11&amp;amp;table=0&amp;amp;trim=1&amp;amp;use_submission_date=0&quot;&gt;number of times users override mixed content protection&lt;/a&gt; is slim, and hence the need for dedicated mixed content iconography is diminishing. Firefox is also using the shield icon for another feature in &lt;a href=&quot;https://support.mozilla.org/en-US/kb/private-browsing-use-firefox-without-history&quot;&gt;Private Browsing Mode&lt;/a&gt; and we want to avoid making the iconography ambiguous.&lt;/p&gt;
+ &lt;p&gt;The updated design that ships with Firefox 42 combines the lock icon with a warning sign which represents Mixed Content. When Firefox blocks Mixed Active Content, we retain the green lock since the HTTP content is blocked and hence the site remains secure.&lt;/p&gt;
+ &lt;p&gt;For users who want to learn more about a site’s security state, we have added an informational panel to further explain differences in page security. This panel appears anytime a user clicks on the lock icon in the address bar.&lt;/p&gt;
+ &lt;p&gt;Previously users could &lt;a href=&quot;https://people.mozilla.org/~tvyas/FigureB.jpg&quot;&gt;click on the shield icon&lt;/a&gt; in the rare case they needed to override mixed content protection. With this new UI, users can still do this by clicking the arrow icon to expose more information about the site security, along with a disable protection button.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_2034&quot; style=&quot;width: 557px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png&quot;&gt;&lt;img alt=&quot;mixed active content click and subpanel&quot; class=&quot;wp-image-2034 &quot; height=&quot;176&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png&quot; width=&quot;547&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Users can click the lock with warning icon and proceed to disable Mixed Content Protection.&lt;/p&gt;&lt;/div&gt;
+ &lt;h3&gt;&lt;/h3&gt;
+ &lt;h3&gt;Loading Mixed Passive Content on HTTPS sites&lt;/h3&gt;
+ &lt;p&gt;There is a second category of Mixed Content called &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_passivedisplay_content&quot;&gt;Mixed Passive Content&lt;/a&gt;. Firefox does not block Mixed Passive Content by default. However, when it is loaded on an HTTPS page, we let the user know with iconography and text. In previous versions of Firefox, we used a gray warning sign to reflect this case.&lt;/p&gt;
+ &lt;p&gt;We have updated this iconography in Firefox 42 to a gray lock with a yellow warning sign. We degrade the lock from green to gray to emphasize that the site is no longer completely secure. In addition, we use a vibrant color for the warning icon to amplify that there is something wrong with the security state of the page.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-2042 &quot; height=&quot;100&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1-600x221.png&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;We also use this iconography when the certificate or TLS connection used by the website relies on deprecated cryptographic algorithms.&lt;/p&gt;
+ &lt;p&gt;The above changes will be rolled out in Firefox 42. Overall, the design improvements make it simpler for our users to understand whether or not their interactions with a site are secure.&lt;/p&gt;
+ &lt;h3&gt;Firefox Mobile&lt;/h3&gt;
+ &lt;p&gt;We have made similar changes to the site security indicators in Firefox for Android, which you can learn more about &lt;a href=&quot;https://support.mozilla.org/en-US/kb/mixed-content-blocker-firefox-android#w_how-do-i-know-if-a-page-has-mixed-content&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-26T05:58:29+00:00</dc:date>
+ <dc:creator>Tanvi Vyas</dc:creator>
+ </item>
+ <item rdf:about="https://blog.mozilla.org/?p=9166">
+ <title>The Mozilla Blog: Firefox Can Now Get Push Notifications From Your Favorite Sites</title>
+ <link>https://blog.mozilla.org/blog/2016/01/25/firefox-can-now-get-push-notifications-from-your-favorite-sites/</link>
+ <content:encoded>&lt;p&gt;UPDATED TO CLARIFY HOW TO MANAGE PUSH NOTIFICATIONS&lt;/p&gt;
+ &lt;p&gt;Firefox for Windows, Mac and Linux now lets you choose to receive push notifications from websites if you give them permission. This is similar to Web notifications, except now you can receive notifications for websites even when they’re not loaded in a tab. This is super useful for websites like email, weather, social networks and shopping, which you might check frequently for updates.&lt;/p&gt;
+ &lt;p&gt;You can manage your notifications in the Control Center by clicking the green lock icon on the left side of the address bar. You can learn more about how to manage push notifications&lt;a href=&quot;https://support.mozilla.org/en-US/kb/push-notifications-firefox?as=u&amp;amp;utm_source=inproduct#w_upgraded-notifications&quot;&gt; here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Push Notifications for Web Developers&lt;/b&gt;&lt;br /&gt;
+ To make this functionality possible, Mozilla helped establish the Web Push W3C standard that’s gaining momentum across the Web. We also continue to explore the new design pattern known as&lt;a href=&quot;https://blog.mozilla.org/futurereleases/2015/11/17/extending-the-webs-capabilities-in-firefox-and-beyond/&quot;&gt; Progressive Web Apps&lt;/a&gt;. If you’re a developer who wants to implement push notifications on your site, you can learn more in this&lt;a href=&quot;https://hacks.mozilla.org/2016/01/web-push-arrives-in-firefox-44/&quot;&gt; Hacks blog post&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;More information:&lt;/b&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Download&lt;a href=&quot;https://www.mozilla.org/firefox/new/&quot;&gt; Firefox for Windows, Mac, Linux&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Release Notes for&lt;a href=&quot;https://www.mozilla.org/firefox/44.0/releasenotes/&quot;&gt; Firefox for Windows, Mac, Linux&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Download&lt;a href=&quot;https://play.google.com/store/apps/details?id=org.mozilla.firefox&amp;amp;referrer=utm_source%3Dmozilla%26utm_medium&quot;&gt; Firefox for Android&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Release Notes for&lt;a href=&quot;https://www.mozilla.org/firefox/android/44.0/releasenotes/&quot;&gt; Firefox for Android&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;</content:encoded>
+ <dc:date>2016-01-26T01:56:50+00:00</dc:date>
+ <dc:creator>Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://benoitgirard.wordpress.com/?p=651">
+ <title>Benoit Girard: Using RecordReplay to investigate intermittent oranges</title>
+ <link>https://benoitgirard.wordpress.com/2016/01/25/using-recordreplay-to-investigate-intermittent-oranges/</link>
+ <content:encoded>&lt;p&gt;This is a quick write up to summarize my, and Jeff’s, experience, using RR to debug a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1226748&quot;&gt;fairly rare intermittent reftest failure&lt;/a&gt;. There’s still a lot of be learned about how to use RR effectively so I’m hoping sharing this will help others.&lt;/p&gt;
+ &lt;h3&gt;Finding the root of the bad pixel&lt;/h3&gt;
+ &lt;p&gt;First given a offending pixel I was able to set a breakpoint on it using &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Hacking_Tips#rr_with_reftest&quot;&gt;these instructions&lt;/a&gt;. Next using &lt;a href=&quot;https://github.com/jrmuizel/rr-dataflow&quot;&gt;rr-dataflow&lt;/a&gt; I was able to step from the offending bad pixel to the display item responsible for this pixel. Let me emphasize this for a second since it’s incredibly impressive. rr + rr-dataflow allows you to go from a buffer, through an intermediate surface, to the compositor on another thread, through another intermediate surface, back to the main thread and eventually back to the relevant display item. All of this was automated except for when the two pixels are blended together which is logically ambiguous. The speed at which rr was able to reverse continue through this execution was very impressive!&lt;/p&gt;
+ &lt;p&gt;Here’s the trace of this part: &lt;a href=&quot;https://gist.github.com/bgirard/e707e9b97556b500d9ae&quot;&gt;rr-trace-reftest-pixel-origin&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;Understanding the decoding step&lt;/h3&gt;
+ &lt;p&gt;From here I started comparing a replay of a failing test and a non failing step and it was clear that the DisplayList was different. In one we have a nsDisplayBackgroundColor in the other we don’t. From here I was able to step through the decoder and compare the sequence. This was very useful in ruling out possible theories. It was easy to step forward and backwards in the good and bad replay debugging sessions to test out various theories about race conditions and understanding at which part of the decode process the image was rejected. It turned out that we sent two decodes, one for the metadata that is used to sized the frame tree and the other one for the image data itself.&lt;/p&gt;
+ &lt;h3&gt;Comparing the frame tree&lt;/h3&gt;
+ &lt;p&gt;In hindsight, it would have been more effective to start debugging this test by looking at the frame tree (and I imagine for other tests looking at the display list and layer tree) first would have been a quicker start. It works even better if you have a good and a bad trace to compare the difference in the frame tree. From here, I found that the difference in the layer tree came from a change hint that wasn’t guaranteed to come in before the draw.&lt;/p&gt;
+ &lt;p&gt;The problem is now well understood: When we do a sync decode on reftest draw, if there’s an image error we wont flush the style hints since we’re already too deep in the painting pipeline.&lt;/p&gt;
+ &lt;h3&gt;Take away&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Finding the root cause of a bad pixel is very easy, and fast, to do using rr-dataflow.&lt;/li&gt;
+ &lt;li&gt;However it might be better to look for obvious frame tree/display list/layer tree difference(s) first.&lt;/li&gt;
+ &lt;li&gt;Debugging a replay is a lot simpler then debugging against non-determinist re-runs and a lot less frustrating too.&lt;/li&gt;
+ &lt;li&gt;rr is really useful for race conditions, especially rare ones.&lt;/li&gt;
+ &lt;/ul&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/651/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/651/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=651&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-25T22:16:01+00:00</dc:date>
+ <dc:creator>benoitgirard</dc:creator>
+ </item>
+ <item rdf:about="http://blog.servo.org/2016/01/25/twis-48/">
+ <title>The Servo Blog: These Weeks In Servo 48</title>
+ <link>http://blog.servo.org/2016/01/25/twis-48/</link>
+ <content:encoded>&lt;p&gt;In the &lt;a href=&quot;https://github.com/pulls?page=1&amp;amp;q=is%3Apr+is%3Amerged+closed%3A2016-01-11..2016-01-25+user%3Aservo&quot;&gt;last two weeks&lt;/a&gt;, we landed 130 PRs in the Servo organization’s repositories.&lt;/p&gt;
+
+ &lt;p&gt;After months of work by vlad and many others, Windows support &lt;a href=&quot;https://github.com/servo/servo/pull/9385&quot;&gt;landed&lt;/a&gt;! Thanks to everyone who contributed fixes, tests, reviews, and even encouragement (or impatience!) to help us make this happen.&lt;/p&gt;
+
+ &lt;h3 id=&quot;notable-additions&quot;&gt;Notable Additions&lt;/h3&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;nikki &lt;a href=&quot;https://github.com/servo/servo/pull/9391&quot;&gt;added&lt;/a&gt; tests and support for checking the Fetch redirect count&lt;/li&gt;
+ &lt;li&gt;glennw &lt;a href=&quot;https://github.com/servo/servo/pull/9359&quot;&gt;implemented&lt;/a&gt; horizontal scrolling with arrow keys&lt;/li&gt;
+ &lt;li&gt;simon &lt;a href=&quot;https://github.com/servo/servo/pull/9333&quot;&gt;created&lt;/a&gt; a script that parses all of the CSS properties parsed by Servo&lt;/li&gt;
+ &lt;li&gt;ms2ger &lt;a href=&quot;https://github.com/servo/servo/pull/9293&quot;&gt;removed&lt;/a&gt; the legacy reftest framework&lt;/li&gt;
+ &lt;li&gt;fernando &lt;a href=&quot;https://github.com/servo/crowbot/pull/33&quot;&gt;made&lt;/a&gt; crowbot able to rejoin IRC after it accidentally floods the channel&lt;/li&gt;
+ &lt;li&gt;jack &lt;a href=&quot;https://github.com/servo/saltfs/pull/193&quot;&gt;added&lt;/a&gt; testing the &lt;code&gt;geckolib&lt;/code&gt; target to our CI&lt;/li&gt;
+ &lt;li&gt;antrik &lt;a href=&quot;https://github.com/servo/ipc-channel/pull/25&quot;&gt;fixed&lt;/a&gt; transfer corruption in ipc-channel on 32-bit&lt;/li&gt;
+ &lt;li&gt;valentin &lt;a href=&quot;https://github.com/servo/rust-url/pull/119&quot;&gt;added&lt;/a&gt; and simon &lt;a href=&quot;https://github.com/servo/rust-url/pull/152&quot;&gt;extended&lt;/a&gt; IDNA support in rust-url, which is required for both web and Gecko compatibility&lt;/li&gt;
+ &lt;/ul&gt;
+
+ &lt;h3 id=&quot;new-contributors&quot;&gt;New Contributors&lt;/h3&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/Chandler&quot;&gt;Chandler Abraham&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/DarinM223&quot;&gt;Darin Minamoto&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/coder543&quot;&gt;Josh Leverette&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/shssoichiro&quot;&gt;Joshua Holmer&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/therealkbhat&quot;&gt;Kishor Bhat&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/MonsieurLanza&quot;&gt;Lanza&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/mattkuo&quot;&gt;Matthew Kuo&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/waterlink&quot;&gt;Oleksii Fedorov&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/stspyder&quot;&gt;St.Spyder&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/vvuk&quot;&gt;Vladimir Vukicevic&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/apopiak&quot;&gt;apopiak&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/askalski&quot;&gt;askalski&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+
+ &lt;h3 id=&quot;screenshot&quot;&gt;Screenshot&lt;/h3&gt;
+
+ &lt;p&gt;Screencast of this post being upvoted on reddit… from Windows!&lt;/p&gt;
+
+ &lt;p&gt;&lt;img alt=&quot;(screencast)&quot; src=&quot;http://blog.servo.org/images/upvote-windows.gif&quot; title=&quot;Screencast of upvoting on Reddit on Windows.&quot; /&gt;&lt;/p&gt;
+
+ &lt;h3 id=&quot;meetings&quot;&gt;Meetings&lt;/h3&gt;
+
+ &lt;p&gt;We had a &lt;a href=&quot;https://github.com/servo/servo/wiki/Meeting-2016-01-11&quot;&gt;meeting&lt;/a&gt; on some CI-related woes, documenting tags and mentoring, and dependencies for the style subsystem.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-25T20:30:00+00:00</dc:date>
+ </item>
+ <item rdf:about="https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/">
+ <title>Air Mozilla: Mozilla Weekly Project Meeting, 25 Jan 2016</title>
+ <link>https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Mozilla Weekly Project Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/e9/4f/e94fbd7f8df916c75a60e63a85b9168c.png&quot; width=&quot;160&quot; /&gt;
+ The Monday Project Meeting
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-25T19:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/community/?p=2292">
+ <title>About:Community: Firefox 44 new contributors</title>
+ <link>http://blog.mozilla.org/community/2016/01/25/firefox-44-new-contributors/</link>
+ <content:encoded>&lt;p&gt;With the release of Firefox 44, we are pleased to welcome the &lt;strong&gt;28 developers&lt;/strong&gt; who contributed their first code change to Firefox in this release, &lt;strong&gt;23&lt;/strong&gt; of whom were brand new volunteers! Please join us in thanking each of these diligent and enthusiastic individuals, and take a look at their contributions:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;mkm: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208124&quot;&gt;1208124&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Aditya Motwani: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209087&quot;&gt;1209087&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Aniket Vyas: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1197309&quot;&gt;1197309&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1197315&quot;&gt;1197315&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Chirath R: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1216941&quot;&gt;1216941&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Christiane Ruetten: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209091&quot;&gt;1209091&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Fernando Campo: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1199815&quot;&gt;1199815&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Grisha Pushkov: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=994555&quot;&gt;994555&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Guang-De Lin: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1150305&quot;&gt;1150305&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Hassen ben tanfous: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1074804&quot;&gt;1074804&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Helen V. Holmes: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205046&quot;&gt;1205046&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Henrik Tjäder: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1161698&quot;&gt;1161698&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209912&quot;&gt;1209912&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Johann Hofmann: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1192432&quot;&gt;1192432&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1198405&quot;&gt;1198405&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1204072&quot;&gt;1204072&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Kapeel Sable: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212171&quot;&gt;1212171&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Manav Batra: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1202618&quot;&gt;1202618&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212280&quot;&gt;1212280&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1214626&quot;&gt;1214626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Manuel Casas Barrado: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1172662&quot;&gt;1172662&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1193674&quot;&gt;1193674&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1200693&quot;&gt;1200693&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1203298&quot;&gt;1203298&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205684&quot;&gt;1205684&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212331&quot;&gt;1212331&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212338&quot;&gt;1212338&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1214582&quot;&gt;1214582&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Matt Howell: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208626&quot;&gt;1208626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Matthew Turnbull: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213620&quot;&gt;1213620&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Olivier Yiptong: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210936&quot;&gt;1210936&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210940&quot;&gt;1210940&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213078&quot;&gt;1213078&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Piotr Tworek: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209446&quot;&gt;1209446&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Rocik: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1070719&quot;&gt;1070719&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Roland Sako: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1207733&quot;&gt;1207733&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Ronald Claveau: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1207266&quot;&gt;1207266&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Sanchit Nevgi: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205181&quot;&gt;1205181&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Shaif Chowdhury: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1185606&quot;&gt;1185606&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208121&quot;&gt;1208121&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Shubham Jain: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208470&quot;&gt;1208470&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208705&quot;&gt;1208705&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Stanislas Daniel Claude Dolcini: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1147197&quot;&gt;1147197&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Stephanie Ouillon: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1178533&quot;&gt;1178533&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1201626&quot;&gt;1201626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Tim Huang: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1181489&quot;&gt;1181489&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;simplyblue24: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1218204&quot;&gt;1218204&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;</content:encoded>
+ <dc:date>2016-01-25T16:21:33+00:00</dc:date>
+ <dc:creator>Josh Matthews</dc:creator>
+ </item>
+ <item rdf:about="tag:literaci.es,2014:Post/digital-skills-curriculum">
+ <title>Doug Belshaw: 3 things to consider when designing a digital skills framework</title>
+ <link>http://literaci.es/digital-skills-curriculum</link>
+ <content:encoded>&lt;p&gt;&lt;img alt=&quot;Learning to credential&quot; src=&quot;http://bryanmmathers.com/wp-content/uploads/2016/01/learning-to-credential.png&quot; /&gt;&lt;/p&gt;
+
+ &lt;p&gt;The image above was created by &lt;a href=&quot;http://bryanmmathers.com/learning-to-credential&quot; rel=&quot;nofollow&quot;&gt;Bryan Mathers&lt;/a&gt; for our &lt;a href=&quot;https://goo.gl/QqwUKP&quot; rel=&quot;nofollow&quot;&gt;presentation&lt;/a&gt; at &lt;a href=&quot;http://bettshow.com&quot; rel=&quot;nofollow&quot;&gt;BETT&lt;/a&gt; last week. It shows the way that, in broad brushstrokes, learning design &lt;em&gt;should&lt;/em&gt; happen. Before microcredentials such as &lt;a href=&quot;http://openbadges.org&quot; rel=&quot;nofollow&quot;&gt;Open Badges&lt;/a&gt; this was a difficult thing to do as both the credential and the assessment are usually given to educators. The flow tends to go &lt;em&gt;backwards&lt;/em&gt; from credentials instead of forwards from what we want people to learn.&lt;/p&gt;
+
+ &lt;p&gt;But what if you really &lt;em&gt;were&lt;/em&gt; starting from scratch? How could you design a digital skills framework that contains knowledge, skills, and behaviours worth learning? Having written my &lt;a href=&quot;http://neverendingthesis.com&quot; rel=&quot;nofollow&quot;&gt;thesis&lt;/a&gt; on digital literacies and led Mozilla’s &lt;a href=&quot;https://teach.mozilla.org/activities/web-literacy/&quot; rel=&quot;nofollow&quot;&gt;Web Literacy Map&lt;/a&gt; for a couple of years, I’ve got some suggestions. &lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#1-define-your-audience&quot; name=&quot;1-define-your-audience&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;1. Define your audience&lt;/h3&gt;
+ &lt;p&gt;One of the most important things to define is who your audience is for your digital skills framework. Is it for learners to read? Who are they? How old are they? Are you excluding anyone on purpose? Why / why not?&lt;/p&gt;
+
+ &lt;p&gt;You might want to do some research and work around &lt;a href=&quot;https://en.wikipedia.org/wiki/Persona_(user_experience)&quot; rel=&quot;nofollow&quot;&gt;user personas&lt;/a&gt; as part of a user-centred design approach. This ensures you’re designing for real people instead of figments of your imagination (or, worse still, in line with your prejudices).&lt;/p&gt;
+
+ &lt;p&gt;It’s also good practice to make the language used in the skills framework as precise as possible. Jargon is technical language used for the sake of it. There may be times when it’s impossible not to use a word (e.g. ’&lt;a href=&quot;https://en.wikipedia.org/wiki/Meme&quot; rel=&quot;nofollow&quot;&gt;meme&lt;/a&gt;’). If you do this then link to a definition or include a glossary. It’s also useful to check the ‘reading level’ of your framework and, if you really want a challenge, try using &lt;a href=&quot;http://splasho.com/upgoer5/&quot; rel=&quot;nofollow&quot;&gt;Up-Goer Five&lt;/a&gt; language.&lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#2-focus-on-verbs&quot; name=&quot;2-focus-on-verbs&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;2. Focus on verbs&lt;/h3&gt;
+ &lt;p&gt;It’s extremely easy, when creating a framework for learning, to fall into the 'knowledge trap’. Our aim when creating the raw materials from which someone can build a curriculum is to focus on &lt;em&gt;action&lt;/em&gt;. Knowledge should make a difference in practice.&lt;/p&gt;
+
+ &lt;p&gt;One straightforward way to ensure that you’re focusing on action rather than head knowledge is to use &lt;strong&gt;verbs&lt;/strong&gt; when constructing your digital skills framework. If you’re familiar with &lt;a href=&quot;https://en.wikipedia.org/wiki/Bloom%27s_taxonomy&quot; rel=&quot;nofollow&quot;&gt;Bloom’s Taxonomy&lt;/a&gt;, then you may find &lt;a href=&quot;http://byrdseed.com/differentiator/&quot; rel=&quot;nofollow&quot;&gt;The Differentiator&lt;/a&gt; useful. This pairs verbs with the various levels of Bloom’s.&lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#3-add-version-numbers&quot; name=&quot;3-add-version-numbers&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;3. Add version numbers&lt;/h3&gt;
+ &lt;p&gt;A framework needs to be a living, breathing thing. It should be subject to revision and updated often. For this reason, you should add version numbers to your documentation. Ideally, the latest version should be at a canonical URL and you should archive previous versions to static URLs. &lt;/p&gt;
+
+ &lt;p&gt;I would also advise releasing the first version of your framework not as 'version 1.0’ but as 'v0.1’. This shows that you’re willing for others to provide input, that there will be further versions, and that you know you haven’t got it right first time (and forevermore). &lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;strong&gt;Questions? Comments?&lt;/strong&gt; Ask me on Twitter (&lt;a href=&quot;http://twitter.com/dajbelshaw&quot; rel=&quot;nofollow&quot;&gt;@dajbelshaw&lt;/a&gt;). I also consult around this kind of thing, so hit me up on &lt;a href=&quot;http://literaci.es/hello@dynamicskillset.com&quot; rel=&quot;nofollow&quot;&gt;hello@dynamicskillset.com&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-25T14:46:34+00:00</dc:date>
+ </item>
+ <item rdf:about="https://fundraising.mozilla.org/?p=800">
+ <title>Mozilla Fundraising: Why did you decide to donate today?</title>
+ <link>https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/</link>
+ <content:encoded>This year, we asked some of our donors why they decided to donate to our end of year fundraising campaign. The Survey The Audience The survey was shown to a random sample of donors whose browser language was set to … &lt;a class=&quot;go&quot; href=&quot;https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/&quot;&gt;Continue reading&lt;/a&gt;</content:encoded>
+ <dc:date>2016-01-25T13:31:34+00:00</dc:date>
+ <dc:creator>Adam Lofting</dc:creator>
+ </item>
+ <item rdf:about="http://www.agmweb.ca/robbie-burns">
+ <title>Andy McKay: Robbie Burns</title>
+ <link>http://www.agmweb.ca/2016-01-25-robbie-burns/</link>
+ <content:encoded>&lt;p&gt;Tonight is Robbie Burns night, in honour of that great Scottish poet. But tonight had me thinking about another night in my past.&lt;/p&gt;
+
+ &lt;p&gt;It was about 5 years ago, maybe less, I struggle to remember now. I was in the UK visiting family and my Dad was sick. Cancer and it's treatment is tough, you have good weeks, you have bad weeks and you have really fucking bad weeks. This was a good week and for some reason I was in the UK.&lt;/p&gt;
+
+ &lt;p&gt;Myself, my brother and my sister-in-law went down to see him that night. It was Robbie Burns night and that meant an excuse for haggis, really, truly terrible scotch, Scottish dancing and all that. There are many times when I look back at time with my Dad in those last few years. This was definitely one of those times. He was my Dad at his best, cracking jokes and having fun. Living life to the absolute fullest, while you still have that chance.&lt;/p&gt;
+
+ &lt;p&gt;We had a great night. That ended way too soon.&lt;/p&gt;
+
+ &lt;p&gt;Not long after that the cancer came back and that was that.&lt;/p&gt;
+
+ &lt;p&gt;But suddenly tonight, in a bar in Portland I had these memories of my Dad in a waistcoat cracking jokes and having fun on Robbie Burns night. No-one else in the bar seemed to know what night it was. You'd think Robbie Burns night might get a little bit more appreciation, but hey.&lt;/p&gt;
+
+ &lt;p&gt;In the many years I've been running this blog I've never written about my Dad passing away. Here's the first time. I miss him.&lt;/p&gt;
+
+ &lt;p&gt;Hey Robbie Burns? Thanks for making me remember that night.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-25T08:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="tag:this-week-in-rust.org,2016-01-25:blog/2016/01/25/this-week-in-rust-115/">
+ <title>This Week In Rust: This Week in Rust 115</title>
+ <link>http://this-week-in-rust.org/blog/2016/01/25/this-week-in-rust-115/</link>
+ <content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
+ &lt;a href=&quot;http://rust-lang.org&quot;&gt;Rust&lt;/a&gt; is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; or &lt;a href=&quot;mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion&quot;&gt;send us an
+ email&lt;/a&gt;!
+ Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love
+ contributions&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/cmr/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt;.
+ If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/cmr/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;This week's edition was edited by: &lt;a href=&quot;https://github.com/nasa42&quot;&gt;nasa42&lt;/a&gt;, &lt;a href=&quot;https://github.com/brson&quot;&gt;brson&lt;/a&gt;, and &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;Updates from Rust Community&lt;/h3&gt;
+ &lt;h4&gt;News &amp;amp; Blog Posts&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;img alt=&quot;balloon&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0&quot; title=&quot;:balloon:&quot; /&gt;&lt;img alt=&quot;tada&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0&quot; title=&quot;:tada:&quot; /&gt; &lt;a href=&quot;http://blog.rust-lang.org/2016/01/21/Rust-1.6.html&quot;&gt;Announcing Rust 1.6&lt;/a&gt;. &lt;img alt=&quot;tada&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0&quot; title=&quot;:tada:&quot; /&gt;&lt;img alt=&quot;balloon&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0&quot; title=&quot;:balloon:&quot; /&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.poumeyrol.fr/2016/01/15/Awkward-zone/&quot;&gt;Rust, BigData and my laptop&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[pdf]&lt;a href=&quot;https://cdn.rawgit.com/Gankro/thesis/master/thesis.pdf&quot;&gt;You can't spell trust without Rust&lt;/a&gt;. Analysis of the semantics and expressiveness of Rust’s type system.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.ncameron.org/blog/libmacro/&quot;&gt;Libmacro - an API for procedural macros to interact with the compiler&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.jonathanturner.org/2016/01/rust-and-blub-paradox.html&quot;&gt;Rust and the Blub Paradox&lt;/a&gt;. And the &lt;a href=&quot;http://www.jonathanturner.org/2016/01/rethinking-the-blub-paradox.html&quot;&gt;follow-up&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/channel/UC4mpLlHn0FOekNg05yCnkzQ/videos&quot;&gt;Ferris Makes Emulators&lt;/a&gt;. Live stream of Ferris developing a N64 emulator in Rust (also on &lt;a href=&quot;http://www.twitch.tv/ferrisstreamsstuff/profile&quot;&gt;Twitch&lt;/a&gt;).&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Notable New Crates &amp;amp; Project Updates&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://areweconcurrentyet.com/&quot;&gt;Are we concurrent yet&lt;/a&gt;?&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/gfx-rs/gfx&quot;&gt;GFX&lt;/a&gt; epic rewrite for the Pipeline State Objects paradigm has &lt;a href=&quot;https://github.com/gfx-rs/gfx/pull/828&quot;&gt;landed&lt;/a&gt;, described &lt;a href=&quot;http://gfx-rs.github.io/2016/01/22/pso.html&quot;&gt;on the blog&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/mcarton/rust-herbie-lint&quot;&gt;Herbie&lt;/a&gt;. A rustc plugin to check for numerical instability.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://blog.piston.rs/2016/01/23/dynamo/&quot;&gt;Dynamo&lt;/a&gt;. A rusty dynamically typed scripting language.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/whitequark/rust-vnc&quot;&gt;rust-vnc&lt;/a&gt;. An implementation of VNC protocol, client state machine and a client.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Updates from Rust Core&lt;/h3&gt;
+ &lt;p&gt;129 pull requests were &lt;a href=&quot;https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-18..2016-01-25&quot;&gt;merged in the last week&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;See the &lt;a href=&quot;https://internals.rust-lang.org/t/triage-digest-mon-jan-25-2016/3111&quot;&gt;triage digest&lt;/a&gt; and &lt;a href=&quot;https://internals.rust-lang.org/t/subteam-reports-2016-01-22/3106&quot;&gt;subteam reports&lt;/a&gt; for more details.&lt;/p&gt;
+ &lt;h4&gt;Notable changes&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30872&quot;&gt;Implement RFC 1252 expanding the OpenOptions structure&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/book/pull/58&quot;&gt;Book: First draft of 'ownership'&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2205&quot;&gt;Cargo: Add convenience syntax to install current crate&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2196&quot;&gt;Cargo: Introduce cargo metadata subcommand&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2081&quot;&gt;Cargo: Implement &lt;code&gt;cargo init&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2270&quot;&gt;Cargo: Emit a warning when manifest specifies empty dependency constraints&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/29520&quot;&gt;Change name when outputting staticlibs on Windows&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30998&quot;&gt;Make &lt;code&gt;btree_set::{IntoIter, Iter, Range}&lt;/code&gt; covariant&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30917&quot;&gt;Avoid bounds checking at &lt;code&gt;slice::binary_search&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30894&quot;&gt;&lt;code&gt;std::sync::mpsc&lt;/code&gt;: Add &lt;code&gt;fmt::Debug&lt;/code&gt; stubs&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30882&quot;&gt;resolve: Fix variant namespacing&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New Contributors&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Adrian Heine&lt;/li&gt;
+ &lt;li&gt;Andrea Bedini&lt;/li&gt;
+ &lt;li&gt;Guillaume Bonnet&lt;/li&gt;
+ &lt;li&gt;Kamal Marhubi&lt;/li&gt;
+ &lt;li&gt;Keith Yeung&lt;/li&gt;
+ &lt;li&gt;Marc Bowes&lt;/li&gt;
+ &lt;li&gt;Martin&lt;/li&gt;
+ &lt;li&gt;mopp&lt;/li&gt;
+ &lt;li&gt;Olaf Buddenhagen&lt;/li&gt;
+ &lt;li&gt;Paul Dicker&lt;/li&gt;
+ &lt;li&gt;Peter Kolloch&lt;/li&gt;
+ &lt;li&gt;Stephen (Ziyun) Li&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Approved RFCs&lt;/h4&gt;
+ &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments)
+ process&lt;/a&gt;. These
+ are the RFCs that were approved for implementation this week:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1462&quot;&gt;Amendment to RFC 550: Add &lt;code&gt;[&lt;/code&gt; to the FOLLOW(ty) in macro future-proofing rules&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1320&quot;&gt;Amendment to RFC 1192: Amend &lt;code&gt;RangeInclusive&lt;/code&gt; to use an enum&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Final Comment Period&lt;/h4&gt;
+ &lt;p&gt;Every week &lt;a href=&quot;https://rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. &lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;This week's FCPs&lt;/a&gt; are:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/243&quot;&gt;Trait-based exception handling&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1361&quot;&gt;Improve Cargo target-specific dependencies&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1129&quot;&gt;Add a &lt;code&gt;IndexAssign&lt;/code&gt; trait that allows overloading &quot;indexed assignment&quot; expressions like &lt;code&gt;a[b] = c&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1196&quot;&gt;Allow eliding more type parameters&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1296&quot;&gt;Add an &lt;code&gt;alias&lt;/code&gt; attribute to &lt;code&gt;#[link]&lt;/code&gt; and &lt;code&gt;-l&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New RFCs&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1477&quot;&gt;Add compiler support for generic atomic operations&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1478&quot;&gt;Translate undefined generic intrinsics to an LLVM &lt;code&gt;unreachable&lt;/code&gt; and a lint&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Upcoming Events&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/opentechschool-berlin/&quot;&gt;1/27. OpenTechSchool Berlin: Rust Hack and Learn&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Tokyo-Rust-Meetup/events/227871840/&quot;&gt;1/28. Tokyo Rust Meetup #2&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Berlin/events/227321071/&quot;&gt;2/3. Rust Berlin: Leaf and Collenchyma&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/de/Rust-Cologne-Bonn/events/227534456/&quot;&gt;2/3. Rust Meetup in Cologne / Germany&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg&quot;&gt;2/8. Seattle Rust Meetup&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/de-DE/Rust-Rhein-Main/events/228170051/&quot;&gt;2/12. Embedded Rust Workshop Frankfurt&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
+ it mentioned here. Email &lt;a href=&quot;mailto:erick.tryzelaar@gmail.com&quot;&gt;Erick Tryzelaar&lt;/a&gt; or &lt;a href=&quot;mailto:banderson@mozilla.com&quot;&gt;Brian
+ Anderson&lt;/a&gt; for access.&lt;/p&gt;
+ &lt;h3&gt;fn work(on: RustProject) -&amp;gt; Money&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://maidsafe.net/rust_engineer.html&quot;&gt;Rust Engineer&lt;/a&gt; at MaidSafe.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/ozy21fwU&quot;&gt;Research Engineer - Servo&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/o0H41fww&quot;&gt;Senior Research Engineer - Rust&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://plv.mpi-sws.org/rustbelt/&quot;&gt;PhD and postdoc positions&lt;/a&gt; at MPI-SWS.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;em&gt;Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; to get your job offers listed here!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;Crate of the Week&lt;/h3&gt;
+ &lt;p&gt;This week's Crate of the Week is &lt;a href=&quot;https://github.com/phildawes/racer&quot;&gt;racer&lt;/a&gt; which powers code completion in all Rust development environments.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/stebalien&quot;&gt;Steven Allen&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Submit your suggestions for next week&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;Quote of the Week&lt;/h3&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Memory errors are fundamentally state errors, and Rust's move semantics, borrowing, and aliasing XOR mutating help enormously for me to reason about how my program changes state as it executes, to avoid accidental shared state and side effects at a distance. Rust more than any other language I know enables me to do compiler driven design. And internalizing its rules has helped me design better systems, even in other languages.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;p&gt;— &lt;a href=&quot;https://www.reddit.com/r/rust/comments/4275gz/rust_and_the_blub_paradox/cz8akv9&quot;&gt;desiringmachines on /r/rust&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/dikaiosune&quot;&gt;dikaiosune&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Submit your quotes for next week&lt;/a&gt;!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-25T05:00:00+00:00</dc:date>
+ <dc:creator>Corey Richardson</dc:creator>
+ </item>
+ <item rdf:about="tag:blogger.com,1999:blog-1015214236289077798.post-7056349209464984020">
+ <title>Cameron Kaiser: 38.6.0 available</title>
+ <link>http://tenfourfox.blogspot.com/2016/01/3860-available.html</link>
+ <content:encoded>TenFourFox 38.6.0 is available for testing (&lt;a href=&quot;https://sourceforge.net/projects/tenfourfox/files/38.6.0/&quot;&gt;downloads&lt;/a&gt;, &lt;a href=&quot;https://github.com/classilla/tenfourfox/wiki/Hashes&quot;&gt;hashes&lt;/a&gt;, &lt;a href=&quot;https://github.com/classilla/tenfourfox/wiki/ZZReleaseNotes3860&quot;&gt;release notes&lt;/a&gt;). I'm sorry it's been so quiet around here; I'm in the middle of a backbreaking Master's course, my last one before I'm finally done with the lousy thing, and I haven't had any time to start on 45 so far. 38.6 does have some other fixes in it, though: I think I found the last place where bookmark backups were being mistakenly saved in LZ4 based on Chris Trusch's report, and the problematic fonts on the iCloud login page are now blacklisted, so you should be able to login again. I can't do much more testing than that, however, since I don't use iCloud personally, so other lapses in font functionality will require the font URL and I'll add them to the blacklist in 38.7. The browser will go live Monday Pacific time as usual. (The temporary workaround is to set &lt;tt&gt;gfx.downloadable_fonts.enabled&lt;/tt&gt; to &lt;tt&gt;false&lt;/tt&gt;, and switch the setting back when you don't need it anymore.) &lt;p&gt;Speaking of, downloadable fonts were exactly the same problem on the Sun Ultra-3 laptop I've been refurbishing; Oracle still provides a free Solaris 10 build of 38ESR, but it crashes on web fonts for reasons I have yet to diagnose, so I just have them turned off. Yes, it really is a SPARC laptop, a rebranded Tadpole Viper, and I think the fastest one ever made in this form factor (a 1.2GHz UltraSPARC IIIi). It's pretty much what I expected the PowerBook G5 would have been -- hot, overthrottled and power-hungry -- but Tadpole actually built the thing and it's not a disaster, relatively speaking. There's no JIT in this Firefox build, the brand new battery gets only 70 minutes of runtime even with the CPU clock-skewed to hell, it stands a very good chance of rendering me sterile and/or medium rare if I actually use it in my lap and it had at least one sudden overtemp shutdown and pooped all over the filesystem, but between Firefox, Star Office and &lt;tt&gt;pkgsrc&lt;/tt&gt; I can actually use it. More on that for laughs in a future post. &lt;/p&gt;&lt;p&gt;It has been pointed out to me that Leopard Webkit has not made an update in over three months, so hopefully Tobias is still doing okay with his port.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-23T06:02:00+00:00</dc:date>
+ <dc:creator>ClassicHasClass</dc:creator>
+ </item>
+ <item rdf:about="https://blog.mozilla.org/netpolicy/?p=907">
+ <title>Mozilla Privacy Blog: Addressing the Chilling Effect of Patent Damages</title>
+ <link>https://blog.mozilla.org/netpolicy/2016/01/22/addressing-the-chilling-effect-of-patent-damages/</link>
+ <content:encoded>&lt;p&gt;Last year, we unveiled the &lt;a href=&quot;https://www.mozilla.org/about/patents/license/&quot;&gt;Mozilla Open Software Patent License&lt;/a&gt; as part of our &lt;a href=&quot;https://www.mozilla.org/about/patents/&quot;&gt;Initiative&lt;/a&gt; to help limit the negative impacts that patents have on open source software. While those were an important first step for us, we continue to do more. This past Wednesday, Mozilla joined several other tech and software companies in filing an &lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2016/01/Halo-Stryker-Internet-Companies-brief.pdf&quot;&gt;amicus brief&lt;/a&gt; with the Supreme Court of the United States in the &lt;i&gt;Halo&lt;/i&gt; and &lt;i&gt;Stryker&lt;/i&gt; cases.&lt;/p&gt;
+ &lt;p&gt;In the brief, we urge the Court to limit the availability of treble damages. Treble damages are significant because they greatly increase the amount of money owed if a defendant is found to “willfully infringe” a patent. As a result, many open source projects and technology companies will refuse to look into or engage in discussions about patents, in order to avoid even a remote possibility of willful infringement. This makes it very hard to address the chilling effects that patents can have on open source software development, open innovation, and collaborative efforts.&lt;/p&gt;
+ &lt;p&gt;We hope that our brief will help the Court see how this legal standard has affected technology companies and persuade the Court to limit treble damages.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-23T00:17:34+00:00</dc:date>
+ <dc:creator>Elvin Lee</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/addons/?p=7640">
+ <title>Mozilla Addons Blog: Add-on Signing Update</title>
+ <link>https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/</link>
+ <content:encoded>&lt;p&gt;In Firefox 43, we made it a default requirement for add-ons to be signed. This requirement can be disabled by &lt;a href=&quot;https://wiki.mozilla.org/Addons/Extension_Signing#FAQ&quot;&gt;toggling a preference&lt;/a&gt; that was originally scheduled to be removed in Firefox 44 for release and beta versions (this preference will continue to be available in the Nightly, Developer, and ESR Editions of Firefox for the foreseeable future). &lt;/p&gt;
+ &lt;p&gt;We are delaying the removal of this preference to Firefox 46 for a couple of reasons: We’re adding a feature in Firefox 45 that allows &lt;a href=&quot;https://blog.mozilla.org/addons/2015/12/23/loading-temporary-add-ons/&quot;&gt;temporarily loading unsigned restartless add-ons&lt;/a&gt; in release, which will allow developers of those add-ons to use Firefox for testing, and we’d like this option to be available when we remove the preference. We also want to ensure that developers have adequate time to finish the transition to signed add-ons. &lt;/p&gt;
+ &lt;p&gt;The &lt;a href=&quot;https://wiki.mozilla.org/Addons/Extension_Signing#Timeline&quot;&gt;updated timeline&lt;/a&gt; is available on the signing wiki, and you can look up &lt;a href=&quot;https://wiki.mozilla.org/RapidRelease/Calendar&quot;&gt;release dates for Firefox versions&lt;/a&gt; on the releases wiki. Signing will be mandatory in the beta and release versions of Firefox from 46 onwards, at which point unbranded builds based on beta and release will be provided for testing.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-22T22:40:59+00:00</dc:date>
+ <dc:creator>Kev Needham</dc:creator>
+ </item>
+ <item rdf:about="http://coopcoopbware.tumblr.com/post/137832199980">
+ <title>Chris Cooper: RelEng &amp; RelOps Weekly Highlights - January 22, 2016</title>
+ <link>http://coopcoopbware.tumblr.com/post/137832199980</link>
+ <content:encoded>&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;alignright&quot;&gt;&lt;a href=&quot;https://www.flickr.com/photos/proud2bcan8dn/1150097247/in/faves-19934681@N00/&quot; target=&quot;_blank&quot; title=&quot;wine-and-pies&quot;&gt;&lt;img alt=&quot;wine-and-pies&quot; src=&quot;https://farm2.staticflickr.com/1216/1150097247_2f11cb4c2d_z.jpg?zz=1&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt;Releng: drinkin’ wine and makin’ pies.&lt;/figure&gt;It’s encouraging to see more progress this week on both the build/release promotion and TaskCluster migration fronts, our two major efforts for this quarter.&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Modernize infrastructure:&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;In a continuing effort to enable faster, more reliable, and more easily-run tests for TaskCluster components, Dustin landed support for an in-memory, credential-free mock of Azure Table Storage in the &lt;a href=&quot;https://www.npmjs.com/package/azure-entities&quot; target=&quot;_blank&quot;&gt;azure-entities&lt;/a&gt; package. Together with the fake mock support he added to &lt;a href=&quot;https://github.com/djmitche/taskcluster-lib-testing&quot; target=&quot;_blank&quot;&gt;taskcluster-lib-testing&lt;/a&gt;, this allows tests for components like taskcluster-hooks to run without network access and without the need for any credentials, substantially decreasing the barrier to external contributions.&lt;/p&gt;
+
+ &lt;p&gt;All release promotion tasks are now signed by default. Thanks to Rail for his work here to help improve verifiability and chain-of-custody in our upcoming release process. (&lt;a href=&quot;https://bugzil.la/1239682&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239682&lt;/a&gt;)
+ Beetmover has been spotted in the wild! Jordan has been working on this new tool as part of our release promotion project. Beetmover helps move build artifacts from one place to another (generally between S3 buckets these days), but can also be extended to perform validation actions inline, e.g. checksums and anti-virus. (&lt;a href=&quot;https://bugzil.la/1225899&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1225899&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;Dustin configured the “desktop-test” and “desktop-build” docker images to build automatically on push. That means that you can modify the Dockerfile under `testing/docker`, push to try, and have the try job run in the resulting image, all without pushing any images. This should enable much quicker iteration on tweaks to the docker images. Note, however, that updates to the base OS images (ubuntu1204-build and centos6-build) still require manual pushes.&lt;/p&gt;
+
+ &lt;p&gt;Mark landed Puppet code for base windows 10 support including secrets and ssh keys management.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Improve CI pipeline:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Vlad and Amy repurposed 10 Windows XP machines as Windows 7 to improve the wait times in that test pool (&lt;a href=&quot;https://bugzil.la/1239785&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239785&lt;/a&gt;)
+ Armen and Joel have been working on porting the Gecko tests to run under TaskCluster, and have narrowed the failures down to the single digits. This puts us on-track to enable Linux debug builds and tests in TaskCluster as the canonical build/test process.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Release:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Ben finished up work on enhanced Release Blob validation in Balrog (&lt;a href=&quot;https://bugzil.la/703040&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/703040&lt;/a&gt;), which makes it much more difficult to enter bad data into our update server.&lt;/p&gt;
+
+ &lt;p&gt;You may recall Mihai, our former intern who &lt;a href=&quot;http://coopcoopbware.tumblr.com/post/133490693210/welcome-back-mihai&quot; target=&quot;_blank&quot;&gt;we just hired back in November&lt;/a&gt;. Shortly after joining the team, he jumped into the &lt;a href=&quot;https://wiki.mozilla.org/ReleaseEngineering/Releaseduty&quot; target=&quot;_blank&quot;&gt;releaseduty&lt;/a&gt; rotation to provide much-needed extra bandwidth. The learning curve here is steep, but over the course of the Firefox 44 release cycle, he’s taken on more and more responsibility. He’s even volunteered to do releaseduty for the Firefox 45 release cycle as well. Perhaps the most impressive thing is that he’s also taken the time to update (or write) the releaseduty docs so that the next person who joins the rotation will be that much further ahead of the game. Thanks for your hard work here, Mihai!&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Operational:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Hal did some cleanup work to remove unused mozharness configs and directories from the build mercurial repos. These resources have long-since moved into the main mozilla-central tree. Hopefully this will make it easier for contributors to find the canonical copy! (&lt;a href=&quot;https://bugzil.la/1239003&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239003&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Hiring:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;We’re still hiring for a full-time &lt;a href=&quot;https://careers.mozilla.org/position/oi8b2fwn&quot; target=&quot;_blank&quot;&gt;Build &amp;amp; Release Engineer&lt;/a&gt;, and we are still accepting applications for &lt;a href=&quot;https://careers.mozilla.org/position/ofA51fwF&quot; target=&quot;_blank&quot;&gt;interns for 2016&lt;/a&gt;. Come join us!&lt;/p&gt;
+
+ &lt;p&gt;Well, I don’t know about you, but all that hard work makes me hungry for pie. See you next week!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-22T20:49:38+00:00</dc:date>
+ </item>
+ <item rdf:about="https://air.mozilla.org/foundation-demos-january-22-2016/">
+ <title>Air Mozilla: Foundation Demos January 22 2016</title>
+ <link>https://air.mozilla.org/foundation-demos-january-22-2016/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Foundation Demos January 22 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/1c/a0/1ca0b9b2609cdd4e6e3577a8c3df8cfc.jpg&quot; width=&quot;160&quot; /&gt;
+ Mozilla Foundation Demos January 22 2016
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-22T18:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/sumo/?p=3667">
+ <title>Support.Mozilla.Org: What’s up with SUMO – 22nd January</title>
+ <link>https://blog.mozilla.org/sumo/2016/01/22/whats-up-with-sumo-22nd-january/</link>
+ <content:encoded>&lt;p&gt;&lt;strong&gt;Hello, SUMO Nation!&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png&quot;&gt;&lt;img alt=&quot;sumo_logo&quot; class=&quot;aligncenter size-full wp-image-3670&quot; height=&quot;387&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png&quot; width=&quot;383&quot; /&gt;&lt;/a&gt;The third week of the new year is already behind us. Time flies when you’re not paying attention… What are you going to do this weekend? Let us know in the comments, if you feel like sharing :-) I hope to be in the mountains, getting some fresh (bracing) air, and enjoying nature.&lt;/p&gt;
+ &lt;h3&gt;&lt;strong class=&quot;username&quot;&gt;Welcome, new contributors!&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li class=&quot;author&quot;&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;a class=&quot;username&quot; href=&quot;https://support.mozilla.org/user/johnmwc2&quot; target=&quot;_blank&quot;&gt;johnmwc2&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/myanesp&quot; target=&quot;_blank&quot;&gt;myanesp&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/Harish.A&quot; target=&quot;_blank&quot;&gt;Harish.A&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/hoolibob&quot; target=&quot;_blank&quot;&gt;hoolibob&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/Meteoro890&quot; target=&quot;_blank&quot;&gt;Meteoro890&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;author&quot;&gt;If you just joined us, don’t hesitate – come over and &lt;a href=&quot;https://support.mozilla.org/forums/buddies&quot; target=&quot;_blank&quot;&gt;say “hi” in the forums!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Contributors of the week&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z74z1rz89z69z76zbz72zz69zz67z9z82zniz71z&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/safwan.rahman&quot; target=&quot;_blank&quot;&gt;Safwan&lt;/a&gt; for his work on the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=619284&quot; target=&quot;_blank&quot;&gt;draft feature for l10n / KB editing&lt;/a&gt; – rock on!&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/artist&quot; target=&quot;_blank&quot;&gt;Artist&lt;/a&gt; and &lt;a href=&quot;https://support.mozilla.org/user/pollti&quot; target=&quot;_blank&quot;&gt;Pollti&lt;/a&gt; for their the work on updating important articles for Focus with limited time – woot!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid64&quot;&gt;
+ &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;We salute you!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can &lt;a href=&quot;https://support.mozilla.org/forums/buddies/711364?last=65670&quot; target=&quot;_blank&quot;&gt;nominate them for the Buddy of the Month!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;h3&gt;&lt;strong&gt;Most recent SUMO Community meeting&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-18&quot; target=&quot;_blank&quot;&gt;You can read the notes here&lt;/a&gt; (most of the staff members were AFK due to MLK Day in the US) and see the video on our &lt;a href=&quot;https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos&quot; target=&quot;_blank&quot;&gt;YouTube channel&lt;/a&gt; and &lt;a href=&quot;https://air.mozilla.org/search/?q=sumo&quot; target=&quot;_blank&quot;&gt;at AirMozilla&lt;/a&gt;.&lt;del&gt; &lt;/del&gt;&lt;del&gt;&lt;br /&gt;
+ &lt;/del&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/711752?last=67873&quot;&gt;(Monday) Community Meetings in 2016&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;The next SUMO Community meeting… &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;is happening on &lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-25&quot; target=&quot;_blank&quot;&gt;Monday the 25th – join us&lt;/a&gt;!&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Reminder: if you want to add a discussion topic to the upcoming meeting agenda:&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Start a thread in the &lt;a href=&quot;https://support.mozilla.org/forums/contributors&quot; target=&quot;_blank&quot;&gt;Community Forums&lt;/a&gt;, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Developers&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://edwin.mozilla.io/t/sumo&quot; target=&quot;_blank&quot;&gt;You can see the current state of the backlog our developers are working on here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-p-2016-01-21&quot; target=&quot;_blank&quot;&gt;The latest SUMO Platform meeting notes can be found here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Interested in learning how Kitsune (the engine behind SUMO) works? &lt;a href=&quot;http://kitsune.readthedocs.org/&quot; target=&quot;_blank&quot;&gt;Read more about it here&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/kitsune/&quot; target=&quot;_blank&quot;&gt;fork it on GitHub&lt;/a&gt;!&lt;/li&gt;
+ &lt;li&gt;We have a new link for promoting contributions to Kitsune’s code. Please use &lt;strong&gt;http://mzl.la/SUMOdev&lt;/strong&gt; whenever you want to show interested people to see what Kitsune is all about – thanks!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png&quot;&gt;&lt;img alt=&quot;mission_developers&quot; class=&quot;aligncenter size-full wp-image-3668&quot; height=&quot;406&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png&quot; width=&quot;437&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;&lt;strong&gt;Social&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Next week, there will be a kick-off meeting for the rethinking of Mozilla’s general support strategy through social networks. &lt;a href=&quot;https://support.mozilla.org/user/Madasan&quot; target=&quot;_blank&quot;&gt;Are you interested in taking part? Let Madalina know!&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The NDA process and list is currently being reworked under the leadership of the Participation Team. Expect to see messaging on this subject in the coming days.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711729?last=67763&quot;&gt;IMPORTANT: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li&gt;Are you going to FOSDEM next week? Would you like to have a small SUMO-meetup? &lt;a href=&quot;https://support.mozilla.org/user/vesper&quot; target=&quot;_blank&quot;&gt;Let me know&lt;/a&gt;!&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;Ongoing reminder: if you think you can benefit from getting &lt;a href=&quot;https://wiki.mozilla.org/Community_Hardware&quot; target=&quot;_blank&quot;&gt;a second-hand device&lt;/a&gt; to help you with contributing to SUMO, you know where to find us.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/hero_support.png&quot;&gt;&lt;img alt=&quot;hero_support&quot; class=&quot;aligncenter size-full wp-image-3669&quot; height=&quot;383&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/hero_support.png&quot; width=&quot;367&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;div class=&quot;&quot;&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid83&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Localization&lt;/strong&gt;&lt;/h3&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid95&quot;&gt;
+ &lt;ul&gt;
+ &lt;li&gt;You can &lt;a href=&quot;https://support.mozilla.org/forums/l10n-forum/711781&quot; target=&quot;_blank&quot;&gt;read more about the recent “infrequent contributor survey” in this thread&lt;/a&gt;. In short: the good news is that we’re doing a good job at making it easy enough for everyone to contribute. The bad news – we’re not doing enough to make sure they know what to do after their first contribution. Expect some changes in the messaging for first-time contributors to the KB :-)&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1012384&quot; target=&quot;_blank&quot;&gt;Our magical l10n dashboards keep being magical&lt;/a&gt; ;-) Thank you for your patience. If you see any discrepancies between the number of localized articles and the percentage shown in the bar, file a bug!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid75&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Firefox&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Android&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711712?last=67653&quot;&gt;Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711718?last=67822&quot;&gt;Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions&lt;/a&gt; with everyone in the forum.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Desktop&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Heads up – next week should be release week! Keep your eyes peeled ;-)&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for iOS&lt;/strong&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid85&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;No news from the world of Firefox for iOS this week.&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Thank you for reading all the way down here… More to come next week! You know where to find us, so see you around – keep rocking the open &amp;amp; helpful web!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-22T17:43:56+00:00</dc:date>
+ <dc:creator>Michał</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/bay-area-rust-meetup-january-2016/">
+ <title>Air Mozilla: Bay Area Rust Meetup January 2016</title>
+ <link>https://air.mozilla.org/bay-area-rust-meetup-january-2016/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Bay Area Rust Meetup January 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/87/4f/874f4abef76f55213d50e43d6417ed99.png&quot; width=&quot;160&quot; /&gt;
+ Bay Area Rust meetup for January 2016. Topics TBD.
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-22T03:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="https://blog.lizardwrangler.com/?p=3953">
+ <title>Mitchell Baker: Honored to Participate in New UN Panel on Women’s Economic Empowerment</title>
+ <link>http://blog.lizardwrangler.com/2016/01/22/honored-to-participate-in-new-un-panel-on-womens-economic-empowerment/</link>
+ <content:encoded>Women’s economic empowerment is necessary for many reasons. It is necessary to bring health, safety and opportunity to half of humanity. It is necessary to bring investment and health to families and communities. It is necessary to unlock economic growth and build more stable societies. Today the UN Secretary General Ban Ki-moon launched the first […]</content:encoded>
+ <dc:date>2016-01-22T02:45:58+00:00</dc:date>
+ <dc:creator>Mitchell Baker</dc:creator>
+ </item>
+ <item rdf:about="https://blog.mozilla.org/webdev/?p=4082">
+ <title>Mozilla WebDev Community: Beer and Tell – January 2016</title>
+ <link>https://blog.mozilla.org/webdev/2016/01/21/beer-and-tell-january-2016/</link>
+ <content:encoded>&lt;p&gt;Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call “Beer and Tell”.&lt;/p&gt;
+ &lt;p&gt;There’s a &lt;a href=&quot;https://wiki.mozilla.org/Webdev/Beer_And_Tell/January_2016&quot;&gt;wiki page available&lt;/a&gt; with a list of the presenters, as well as links to their presentation materials. There’s also a &lt;a href=&quot;https://air.mozilla.org/webdev-beer-and-tell-january-2016/&quot;&gt;recording available&lt;/a&gt; courtesy of Air Mozilla.&lt;/p&gt;
+ &lt;h3&gt;shobson: CSS-Only Disco Ball&lt;/h3&gt;
+ &lt;p&gt;First up was &lt;a href=&quot;https://mozillians.org/en-US/u/stephaniehobson/&quot;&gt;shobson&lt;/a&gt; with a cool demo of an &lt;a href=&quot;http://codepen.io/stephaniehobson/pen/ZGZBVW?editors=110&quot;&gt;animated disco ball made entirely with CSS&lt;/a&gt;. The demo uses a repeated radial gradient for the background, and linear gradients plus a border radius for the disco ball itself. The demo was made for use in shobson’s &lt;a href=&quot;https://www.youtube.com/watch?v=7poVasAQjos&quot;&gt;WordCamp talk&lt;/a&gt; about debugging CSS. A &lt;a href=&quot;http://stephaniehobson.ca/wordpress/2015/08/15/how-to-debug-css/&quot;&gt;blog post&lt;/a&gt; with notes from the talk is available as well.&lt;/p&gt;
+ &lt;h3&gt;craigcook: Proton – A CSS Framework for Prototyping&lt;/h3&gt;
+ &lt;p&gt;Next was &lt;a href=&quot;https://mozillians.org/en-US/u/craigcook/&quot;&gt;craigcook&lt;/a&gt;, who presented &lt;a href=&quot;http://craigcook.github.io/proton/&quot;&gt;Proton&lt;/a&gt;. It’s a CSS framework that is intentionally ugly to encourage use for prototypes only. Unlike other CSS frameworks, the temptation to reuse the classes from the framework in your final page doesn’t occur, which helps avoid the presentational classes that plague sites built using a framework normally.&lt;/p&gt;
+ &lt;p&gt;Proton’s website includes an overview of the layout and components provided, as well as examples of prototypes made using the framework.&lt;/p&gt;
+ &lt;hr /&gt;
+ &lt;p&gt;If you’re interested in attending the next Beer and Tell, sign up for the &lt;a href=&quot;https://lists.mozilla.org/listinfo/dev-webdev&quot;&gt;dev-webdev@lists.mozilla.org mailing list&lt;/a&gt;. An email is sent out a week beforehand with connection details. You could even add yourself to the wiki and show off your side-project!&lt;/p&gt;
+ &lt;p&gt;See you next month!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T18:56:46+00:00</dc:date>
+ <dc:creator>Michael Kelly</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/community/?p=2287">
+ <title>About:Community: This Month at Mozilla</title>
+ <link>http://blog.mozilla.org/community/2016/01/21/this-month-at-mozilla/</link>
+ <content:encoded>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;A lot of exciting things are happening with Participation at Mozilla this month. Here’s a quick round-up of some of the things that are going on!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;Mozillians Profiles Got a Facelift: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;Since the start of this year, the Participation Infrastructure team has had a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs.&lt;/p&gt;
+ &lt;p&gt;Their first target for 2016 was to improve the UX on the profile edit interface.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/community/files/2016/01/new-profile-768x548.png&quot;&gt;&lt;img alt=&quot;new-profile-768x548&quot; class=&quot;aligncenter wp-image-2288 size-large&quot; height=&quot;428&quot; src=&quot;https://blog.mozilla.org/community/files/2016/01/new-profile-768x548-600x428.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
+ ”We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.”&lt;/p&gt;
+ &lt;p&gt;Read the full blog &lt;a href=&quot;http://pierros.papadeas.gr/?p=447&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;There are New Ways to Bring Your Design Skills to Mozilla: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;Are you a passionate designer looking to contribute to Mozilla? You’ll be happy to hear there is a new way to contribute to the many design projects around Mozilla! Submit issues, find collaborators, and work on open source projects by getting involved!&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;You can check out the projects looking for help, or submit your own on the &lt;a href=&quot;https://github.com/mozilla/Community-Design/issues&quot;&gt;GitHub Repo&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://docs.google.com/a/mozilla.com/forms/d/1Tw3Mw_CMiqcIQrJF7TB1yIETGYec__NiVhaSz0CAaE8/viewform&quot;&gt;Sign-up to the mailing list&lt;/a&gt; to be added as a contributor to the Repo, added to the regular meeting list, and to get emails about GitHub trainings and more!&lt;/li&gt;
+ &lt;li&gt;And read&lt;a href=&quot;http://elioqoshi.me/en/2016/01/mozilla-community-design-kickoff/&quot;&gt; a blogpost&lt;/a&gt; about the project and its first meeting.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Learn more &lt;a href=&quot;https://discourse.mozilla-community.org/c/community-design&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;136 Volunteers Are Going to Singapore: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;This weekend 136 participation leaders from all over the world are&lt;a href=&quot;https://twitter.com/thephoenixbird/status/690181985222926336&quot;&gt; heading to Singapore&lt;/a&gt; to undergo two days of&lt;a href=&quot;https://wiki.mozilla.org/Participation/Global_Gatherings_2015&quot;&gt; leadership training&lt;/a&gt; to develop the skills, knowledge and attitude to lead Participation in 2016.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_2289&quot; style=&quot;width: 609px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg&quot;&gt;&lt;img alt=&quot;Photo credit @thephoenixbird on Twitter&quot; class=&quot;wp-image-2289 size-full&quot; height=&quot;337&quot; src=&quot;https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg&quot; width=&quot;599&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Photo credit @&lt;a href=&quot;https://twitter.com/thephoenixbird/status/690181985222926336&quot; target=&quot;_blank&quot;&gt;thephoenixbird&lt;/a&gt; on Twitter&lt;/p&gt;&lt;/div&gt;
+ &lt;p&gt;If you know someone attending don’t forget to share your questions and goals with them, and follow along over the weekend by watching the hashtag&lt;a href=&quot;https://twitter.com/search?q=%23mozsummit&quot;&gt; #MozSummit&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Stay tuned after the event for a debrief of the weekend!&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;Friday’s Plenary from Mozlando is now public on Air Mozilla: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;If you’re interested in learning more about all the exciting new features, projects, and plans that were presented at Mozlando look no further! You can now watch the final plenary sessions on Air Mozilla (it’s a lot of fun so I highly recommend it!) &lt;a href=&quot;https://air.mozilla.org/channels/mozlando/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Share your questions and comments on discourse &lt;a href=&quot;https://discourse.mozilla-community.org/t/friday-plenary-from-mozlando-now-public-on-air-mozilla/6659&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Look forward to more updates like these in the coming months!&lt;/em&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T17:58:33+00:00</dc:date>
+ <dc:creator>Lucy Harris</dc:creator>
+ </item>
+ <item rdf:about="https://blog.mozilla.org/netpolicy/?p=912">
+ <title>Mozilla Privacy Blog: Prioritizing privacy: Good for business</title>
+ <link>https://blog.mozilla.org/netpolicy/2016/01/21/prioritizing-privacy-good-for-business/</link>
+ <content:encoded>&lt;p&gt;&lt;em&gt;This was originally posted at &lt;a href=&quot;http://staysafeonline.org/blog/prioritizing-privacy-good-for-business/&quot;&gt;StaySafeOnline.org&lt;/a&gt; in advance of &lt;a href=&quot;http://www.staysafeonline.org/data-privacy-day/events/&quot;&gt;Data Privacy Day&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;Data Privacy Day – which arrives in just a week – is a day designed to raise awareness and promote best practices for privacy and data protection. It is a day that looks to the future and recognizes that we can and should do better as an industry. It reminds us that we need to focus on the importance of having the trust of our users.&lt;/p&gt;
+ &lt;p&gt;We seek to build trust so we can collectively create the Web our users want – the Web we all want.&lt;/p&gt;
+ &lt;p&gt;That Web is based on relationships, the same way that the offline world is. When I log in to a social media account, schedule a grocery delivery online or browse the news, I’m relying on those services to respect my data. While companies are innovating their products and services, they need to be innovating on user trust as well, which means designing to address privacy concerns – and making smart choices (early!) about how to manage data.&lt;/p&gt;
+ &lt;p&gt;A &lt;a href=&quot;http://www.pewinternet.org/2016/01/14/privacy-and-information-sharing/&quot;&gt;recent survey by Pew&lt;/a&gt; highlights the thought that each user puts into their choices – and the contextual considerations in various scenarios. They concluded that many participants were annoyed and uncertain by how their information was used, and they are choosing not to interact with those services that they don’t trust. This is a clear call to businesses to foster more trust with their users, which starts by making sure that there are people empowered within your company to ask the right questions: what do your users expect? What data do you need to collect? How can you communicate about that data collection? How should you protect their data? Is holding on to data a risk, or should you delete it?&lt;/p&gt;
+ &lt;p&gt;It’s crucial that users are a part of this process – consumers’ data is needed to offer cool, new experiences and a user needs to trust you in order to choose to give you their data. Pro-user innovation can’t happen in a vacuum – the system as it stands today isn’t doing a good job of aligning user interests with business incentives. Good user decisions can be good business decisions, but only if we create thoughtful user-centric products in a way that closes the feedback loop so that positive user experiences are rewarded with better business outcomes.&lt;/p&gt;
+ &lt;p&gt;Not prioritizing privacy in product decisions will impact the bottom line. From the many data breaches over the last few years to increasing evidence of eroding trust in online services, data practices are proving to be the dark horse in the online economy. When a company loses user trust, whether on privacy or &lt;a href=&quot;https://medium.com/@davidamerland/the-cost-of-losing-trust-97d764a1e696&quot;&gt;anything else&lt;/a&gt;, it loses customers and the potential for growth.&lt;/p&gt;
+ &lt;p&gt;Privacy means different things to different people but what’s clear is that people make decisions about the products and services that they use based on how those companies choose to treat their users. Over this time, the Internet ecosystem has evolved, as has its relationship with users – and some aspects of this evolution threaten the trust that lies at the heart of that relationship. Treating a user as a target – whether for an ad, purchase, or service – undermines the trust and relationship that a business may have with a consumer.&lt;/p&gt;
+ &lt;p&gt;The solution is not to abandon the massive value that robust data can bring to users, but rather, to collect and use data leanly, productively and transparently. At Mozilla, we have created a strong set of internal data practices to ensure that data decisions align with our &lt;a href=&quot;https://www.mozilla.org/en-US/privacy/principles/&quot;&gt;privacy principles&lt;/a&gt;. As an industry, we need to keep users at the center of the product vision rather than viewing them as targets of the product – it’s the only way to stay true to consumers and deliver the best, most trusted experiences possible.&lt;/p&gt;
+ &lt;p&gt;Want to hear more about how businesses can build relationships with their users by focusing on trust and privacy? We’re holding events in Washington, D.C., and &lt;a href=&quot;https://www.eventbrite.com/e/january-privacy-lab-privacy-for-startups-tickets-19849219550?aff=es2&quot;&gt;San Francisco&lt;/a&gt; with some of our partners to talk about it. Please join us!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T17:42:00+00:00</dc:date>
+ <dc:creator>Heather West</dc:creator>
+ </item>
+ <item rdf:about="https://tacticalsecret.com/tag/mozilla/rss/9c39ad13-14ae-4456-a84e-13612637d832">
+ <title>J.C. Jones: Issuance Rate for Let's Encrypt</title>
+ <link>https://tacticalsecret.com/issuance-rate-for-lets-encrypt/</link>
+ <content:encoded>&lt;p&gt;Gathering data from &lt;a href=&quot;https://github.com/jcjones/letsencrypt_statistics&quot;&gt;Certificate Transparency logs&lt;/a&gt;, here's a snapshot in time of Let's Encrypt's certificate issuance rate per minute from 7-21 January 2016. On 20 January, DreamHost launched formal support for Let's Encrypt, which coincides with a rate increase.&lt;/p&gt;
+
+ &lt;p&gt;Note: This is mostly an experimental post with embedding charts; I've more data in the queue.&lt;/p&gt;
+
+ &lt;h3&gt;Let's Encrypt Issuance Rate per Minute&lt;/h3&gt;
+
+ &lt;div id=&quot;rate_hours&quot;&gt;&lt;/div&gt;</content:encoded>
+ <dc:date>2016-01-21T17:07:25+00:00</dc:date>
+ <dc:creator>James 'J.C.' Jones</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/web-qa-weekly-meeting-20160121/">
+ <title>Air Mozilla: Web QA Weekly Meeting, 21 Jan 2016</title>
+ <link>https://air.mozilla.org/web-qa-weekly-meeting-20160121/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Web QA Weekly Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png&quot; width=&quot;160&quot; /&gt;
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T17:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://soledadpenades.com/?p=6379">
+ <title>Soledad Penades: No more tap tap tap sounds: yay!</title>
+ <link>http://soledadpenades.com/2016/01/21/no-more-tap-tap-tap-sounds-yay/</link>
+ <content:encoded>&lt;p&gt;A few days ago the fantastic Fritz from the Netherlands told me that my &lt;a href=&quot;http://soledadpenades.com/files/t/2015_howa/&quot;&gt;Hands On Web Audio slides&lt;/a&gt; had stopping working and there was no sound coming out from them in Firefox.&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; width=&quot;550&quot;&gt;&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;&lt;a href=&quot;https://twitter.com/supersole&quot;&gt;@supersole&lt;/a&gt; oh noes! I reopened your slides: &lt;a href=&quot;https://t.co/SO35UfljMI&quot;&gt;https://t.co/SO35UfljMI&lt;/a&gt; and it doesn't work in &lt;a href=&quot;https://twitter.com/firefox&quot;&gt;@firefox&lt;/a&gt; anymore &lt;img alt=&quot;😱&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f631.png&quot; style=&quot;height: 1em;&quot; /&gt; (works in chrome though.. &lt;img alt=&quot;😢&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f622.png&quot; style=&quot;height: 1em;&quot; /&gt;)&lt;/p&gt;
+ &lt;p&gt;— Boring Stranger (@fritzvd) &lt;a href=&quot;https://twitter.com/fritzvd/status/686481500611735552&quot;&gt;January 11, 2016&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Which is pretty disappointing for a slide deck that is built to teach you about Web Audio!&lt;/p&gt;
+ &lt;p&gt;I noticed that the issue was only on the introductory slide which uses a modified version of Stuart Memo’s &lt;a href=&quot;https://blog.stuartmemo.com/thx-deep-note-in-javascript/&quot;&gt;fantastic THX sound recreation&lt;/a&gt;-the rest of slides did play sound.&lt;/p&gt;
+ &lt;p&gt;I built &lt;a href=&quot;http://sole.github.io/test_cases/web_audio/thx_cutting_out/&quot;&gt;an isolated test case&lt;/a&gt; &lt;small&gt;&lt;a href=&quot;https://github.com/sole/test_cases/tree/gh-pages/web_audio/thx_cutting_out&quot;&gt;(source)&lt;/a&gt;&lt;/small&gt; that used a parameter-capable version of the THX sound code, just in case the issue depended on the number of oscillators, and submitted this funnily titled bug to the Web Audio component: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240054&quot;&gt;Entirely Web Audio generated sound cuts out after a little while, or emits random tap tap tap sounds then silence&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;I can happily confirm that the bug has been fixed in Nightly and the fix will hopefully be “uplifted” to DevEdition very soon, as it was due to a regression.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://paul.cx/&quot;&gt;Paul Adenot&lt;/a&gt; (who works in Web Audio and is a Web Audio spec editor, amongst a couple tons of other cool things) was really excited about the bug, saying it was very edge-casey! Yay! And he also explained what did actually happen in lay terms: “you’d have to have a frequency that goes down very very slowly so that the FFT code could not keep up”, which is what the THX sound is doing with the filter frequency automation.&lt;/p&gt;
+ &lt;p&gt;I want to thank both Fritz for spotting this out and letting me know and also Stuart for sharing his THX code. It’s amazing what happens when you put stuff on the net and lots of different people use it in different ways and configurations. Together we make everything more robust &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Of course also sending thanks to Paul and Ben for identifying and fixing the issue so fast! It’s not been even a week! Woohoo!&lt;/p&gt;
+ &lt;p&gt;Well done everyone! &lt;img alt=&quot;👏&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f44f.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;img alt=&quot;🏼&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f3fc.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://soledadpenades.com/?flattrss_redirect&amp;amp;id=6379&amp;amp;md5=57babe624711830f95e4b8fbd6e52c91&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img alt=&quot;flattr this!&quot; src=&quot;http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T15:49:05+00:00</dc:date>
+ <dc:creator>sole</dc:creator>
+ </item>
+ <item rdf:about="http://pierros.papadeas.gr/?p=447">
+ <title>Pierros Papadeas: Mozillians.org Profile Edit refresh</title>
+ <link>http://pierros.papadeas.gr/?p=447</link>
+ <content:encoded>&lt;p&gt;Since the start of this year, Participation Infrastructure team has a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs. This will not be an one-time effort. We need to invest technically and programmatically in order to deliver a first-class product that will be the foundation for identity management across the Mozilla ecosystem.&lt;/p&gt;
+ &lt;p&gt;Mozillians.org is full of functionality as it is today, but is paying the debt of being developed by 5 different teams over the past 5 years. We started simple this time. Updated all core technology pieces, did privacy and security reviews, and started the process of consolidating and modernizing many of the things we do in the site.&lt;/p&gt;
+ &lt;p&gt;Our first target was Profile Edit. We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile.png&quot; rel=&quot;attachment wp-att-448&quot;&gt;&lt;img alt=&quot;new-profile&quot; class=&quot;aligncenter size-large wp-image-448&quot; height=&quot;417&quot; src=&quot;http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile-1024x731.png&quot; width=&quot;584&quot; /&gt;&lt;/a&gt;Have a&lt;a href=&quot;https://mozillians.org/en-US/user/edit/&quot;&gt; look for yourself &lt;/a&gt;and don’t miss the chance to update your profile while you do it!&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://mozillians.org/en-US/u/comzeradd/&quot;&gt;Nikos&lt;/a&gt; (on the front-end), &lt;a href=&quot;https://mozillians.org/en-US/u/akatsoulas/&quot;&gt;Tasos&lt;/a&gt; and &lt;a href=&quot;https://mozillians.org/en-US/u/jgiannelos/&quot;&gt;Nemo&lt;/a&gt; (on the back-end) worked hard to deliver this in a speedy manner (as they are used to), and the end result is a testament to what is coming next on Mozillians.org.&lt;/p&gt;
+ &lt;p&gt;Our next target? Groups. Currently it is obscure and unclear what all those settings in groups are, what is the functionality and how teams within Mozilla will be using it. We will be tackling this soon. After that, search and stats will be our attention, in an ongoing effort to fortify mozillians.org functionality. Stay tuned, and as always feel free to &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Participation%20Infrastructure&amp;amp;component=Phonebook&quot;&gt;file bugs&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/mozillians&quot;&gt;contribute &lt;/a&gt;in the process.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T11:41:39+00:00</dc:date>
+ <dc:creator>Pierros Papadeas</dc:creator>
+ </item>
+ <item rdf:about="http://adamlofting.com/?p=1396">
+ <title>Adam Lofting: Blog posts I haven’t written lately</title>
+ <link>http://feedproxy.google.com/~r/adamlofting/blog/~3/DoEWpBapwiw/</link>
+ <content:encoded>&lt;p&gt;Last year I joked…&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;
+ &lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;Thinking about writing a blog post listing the blog posts I’ve been meaning to write… Maybe that will save some time&lt;/p&gt;
+ &lt;p&gt;— Adam Lofting (@adamlofting) &lt;a href=&quot;https://twitter.com/adamlofting/status/667657889817956352&quot;&gt;November 20, 2015&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Now, it has come to this.&lt;/p&gt;
+ &lt;h4&gt;9 blog posts I’ve not been writing&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Working on working on the impact of impact&lt;/li&gt;
+ &lt;li&gt;Designing Games in &lt;a href=&quot;https://en.wikipedia.org/wiki/Amateur&quot; target=&quot;_blank&quot;&gt;my free time&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Moving Out (the board game)&lt;/li&gt;
+ &lt;li&gt;Mozilla Foundation 2016 KPIs&lt;/li&gt;
+ &lt;li&gt;Studying Network Science&lt;/li&gt;
+ &lt;li&gt;Learning Analytics plans for 2016&lt;/li&gt;
+ &lt;li&gt;Daily practice / you are what you do every day&lt;/li&gt;
+ &lt;li&gt;Several more A/B tests to write up from &lt;a href=&quot;http://fundraising.mozilla.org/&quot;&gt;the fundraising campaign&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;CRM Progress in 2015&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;But my most requested blog by far, is an update on the status of my shed / office that I was tagging on to the end my blog posts at this time last year. Many people at Mozfest wanted to know about the shed… so here it is.&lt;/p&gt;
+ &lt;p&gt;This time last year:&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;
+ Starting in the new office today. It will take time to make it *nice* but it works for now. &lt;a href=&quot;http://t.co/sWoC4kFNLc&quot;&gt;pic.twitter.com/sWoC4kFNLc&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;— Adam Lofting (@adamlofting) &lt;a href=&quot;https://twitter.com/adamlofting/status/560361913339899904&quot;&gt;January 28, 2015&lt;/a&gt;
+ &lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Some pictures from this morning:&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;office1&quot; class=&quot;alignright size-large wp-image-1398&quot; height=&quot;282&quot; src=&quot;http://adamlofting.com/wp-content/uploads/2016/01/office1-750x320.jpg&quot; width=&quot;660&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;office2&quot; class=&quot;aligncenter size-large wp-image-1399&quot; height=&quot;237&quot; src=&quot;http://adamlofting.com/wp-content/uploads/2016/01/office2-750x269.jpg&quot; width=&quot;660&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;It’s a pretty nice place to work now and it doubles as useful workshop on the weekends. It needs a few finishing touches, but the law of diminishing returns means those finishing touches are lower priority than work that needs to be done elsewhere in the house and garden. So it’ll stay like this a while longer.&lt;/p&gt;
+ &lt;div class=&quot;feedflare&quot;&gt;
+ &lt;a href=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?a=DoEWpBapwiw:VxTJGXwqhlI:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?a=DoEWpBapwiw:VxTJGXwqhlI:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt;
+ &lt;/div&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/adamlofting/blog/~4/DoEWpBapwiw&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-21T09:44:24+00:00</dc:date>
+ <dc:creator>Adam</dc:creator>
+ </item>
+ <item rdf:about="http://blog.ziade.org/2016/01/21/a-pelican-web-editor/">
+ <title>Tarek Ziadé: A Pelican web editor</title>
+ <link>http://blog.ziade.org/2016/01/21/a-pelican-web-editor/</link>
+ <content:encoded>&lt;p&gt;The benefit of being a father again (Freya my 3rd child, was born last week) is
+ that while on paternity leave &amp;amp; between two baby bottles, I can hack on fun stuff.&lt;/p&gt;
+ &lt;p&gt;A few months ago, I've built for my running club a Pelican-based website, check it out
+ at : &lt;a class=&quot;reference external&quot; href=&quot;http://acr-dijon.org&quot;&gt;http://acr-dijon.org&lt;/a&gt;. Nothing's special about it, except that I am not
+ the one feeding it. The content is added by people from the club that have zero
+ knowledge about softwares, let alone stuff like vim or command line tools.&lt;/p&gt;
+ &lt;p&gt;I set up a github-based flow for them, where they add content through the
+ github UI and its minimal reStructuredText preview feature - and then a few
+ of my crons update the website on the server I host.
+ For images and other media, they are uploading them via FTP using FireSSH in Firefox.&lt;/p&gt;
+ &lt;p&gt;For the comments, I've switched from Disqus to &lt;a class=&quot;reference external&quot; href=&quot;https://posativ.org/isso/&quot;&gt;ISSO&lt;/a&gt;
+ after I got annoyed by the fact that it was impossible to display a simple Disqus
+ UI for people to comment without having to log in.&lt;/p&gt;
+ &lt;p&gt;I had to make my club friends go through a minimal
+ reStructuredText syntax training, and things are more of less working now.&lt;/p&gt;
+ &lt;p&gt;The system has a few caveats though:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;it's dependent on Github. I'd rather have everything hosted on my server.&lt;/li&gt;
+ &lt;li&gt;the github restTRucturedText preview will not display syntax errors and warnings
+ and very often, articles get broken&lt;/li&gt;
+ &lt;li&gt;the resulting reST is ugly, and it's a bit hard to force my editors to be stricter
+ about details like empty lines, not using tabs etc.&lt;/li&gt;
+ &lt;li&gt;adding folders or organizing articles from Github is a pain&lt;/li&gt;
+ &lt;li&gt;editing the metadata tags is prone to many mistakes&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;So I've decided to build my own web editing tool with the following features:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;resTructuredText cleanup&lt;/li&gt;
+ &lt;li&gt;content browsing&lt;/li&gt;
+ &lt;li&gt;resTructuredText web editor with live preview that shows warnings &amp;amp; errors&lt;/li&gt;
+ &lt;li&gt;a little bit of wsgi glue and a few forms to create articles without
+ having to worry about metadata syntax.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;section&quot; id=&quot;restructuredtext-cleanup&quot;&gt;
+ &lt;h3&gt;resTructuredText cleanup&lt;/h3&gt;
+ &lt;p&gt;The first step was to build a reStructuredText parser that would read some
+ reStructuredText and render it back into a cleaner version.&lt;/p&gt;
+ &lt;p&gt;We've imported almost 2000 articles in Pelican from the old blog, so I had
+ a &lt;strong&gt;lot&lt;/strong&gt; of samples to make my parser work well.&lt;/p&gt;
+ &lt;p&gt;I first tried &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/benoitbryon/rst2rst&quot;&gt;rst2rst&lt;/a&gt; but that
+ parser was built for a very specific use case (text wrapping) and was
+ incomplete. It was not parsing all of the reStructuredText syntax.&lt;/p&gt;
+ &lt;p&gt;Inspired by it, I wrote my own little parser using &lt;strong&gt;docutils&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;Understanding docutils is not a small task. This project is very powerfull
+ but quite complex. One thing that cruelly misses in docutils parser tools
+ is the ability to get the source text from any node, including its children,
+ so you can render back the same source.&lt;/p&gt;
+ &lt;p&gt;That's roughly what I had to add in my code. It's ugly but it does the job:
+ it will parse rst files and render the same content, minus all the extraneous
+ empty lines, spaces, tabs etc.&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;content-browsing&quot;&gt;
+ &lt;h3&gt;Content browsing&lt;/h3&gt;
+ &lt;p&gt;Content browsing is pretty straightforward: my admin tool let you browse
+ the Pelican &lt;em&gt;content&lt;/em&gt; directory and lists all articles, organized by categories.&lt;/p&gt;
+ &lt;p&gt;In our case, each category has a top directory in &lt;em&gt;content&lt;/em&gt;. The browser
+ parses the articles using my parser and displays paginated lists.&lt;/p&gt;
+ &lt;p&gt;I had to add a cache system for the parser, because one of the directory
+ contains over 1000 articles -- and browsing was kind of slow :)&lt;/p&gt;
+ &lt;img alt=&quot;http://ziade.org/henet-browsing.png&quot; src=&quot;http://ziade.org/henet-browsing.png&quot; /&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;restructuredtext-web-editor&quot;&gt;
+ &lt;h3&gt;resTructuredText web editor&lt;/h3&gt;
+ &lt;p&gt;The last big bit was the live editor. I've stumbled on a neat little tool
+ called &lt;strong&gt;rsted&lt;/strong&gt;, that provides a live preview of the reStructuredText
+ as you are typing it. And it includes warnings !&lt;/p&gt;
+ &lt;p&gt;Check it out: &lt;a class=&quot;reference external&quot; href=&quot;http://rst.ninjs.org/&quot;&gt;http://rst.ninjs.org/&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I've stripped it and kept what I needed, and included it in my app.&lt;/p&gt;
+ &lt;img alt=&quot;http://ziade.org/henet.png&quot; src=&quot;http://ziade.org/henet.png&quot; /&gt;
+ &lt;p&gt;I am quite happy with the result so far. I need to add real tests and
+ a bit of documentation, and I will start to train my club friends on it.&lt;/p&gt;
+ &lt;p&gt;The next features I'd like to add are:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;comments management, to replace Isso (working on it now)&lt;/li&gt;
+ &lt;li&gt;smart Pelican builds. e.g. if a comment is added I don't want to rebuild the whole
+ blog (~1500 articles)&lt;/li&gt;
+ &lt;li&gt;media management&lt;/li&gt;
+ &lt;li&gt;spell checker&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;The project lives here: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/AcrDijon/henet&quot;&gt;https://github.com/AcrDijon/henet&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I am not going to release it, but if someone finds it useful, I could.&lt;/p&gt;
+ &lt;p&gt;It's built with Bottle &amp;amp; Bootstrap as well.&lt;/p&gt;
+ &lt;/div&gt;</content:encoded>
+ <dc:date>2016-01-21T09:40:00+00:00</dc:date>
+ <dc:creator>Tarek Ziade</dc:creator>
+ </item>
+ <item rdf:about="http://www.ncameron.org/blog/rss/631106eb-e7b1-47d5-82f9-cb6ad210ea89">
+ <title>Nick Cameron: Closures and first-class functions</title>
+ <link>http://www.ncameron.org/blog/closures-and-first-class-functions/</link>
+ <content:encoded>&lt;p&gt;I wrote a long and probably dull chapter on closures and first-class and higher-order functions in Rust. It goes into some detail on the implementation and some of the subtleties like higher-ranked lifetime bounds.&lt;/p&gt;
+
+ &lt;p&gt;I was going to post it here too, but it is really too long. Instead, pop over to the 'Rust for C++ programmers' repo and read it &lt;a href=&quot;https://github.com/nrc/r4cppp/blob/master/closures.md&quot;&gt;there&lt;/a&gt;.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T08:36:21+00:00</dc:date>
+ <dc:creator>Nick Cameron</dc:creator>
+ </item>
+ <item rdf:about="http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace">
+ <title>Nick Desaulniers: Intro to Debugging x86-64 Assembly</title>
+ <link>http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace/</link>
+ <content:encoded>&lt;p&gt;I’m hacking on an assembly project, and wanted to document some of the tricks I
+ was using for figuring out what was going on. This post might seem a little
+ basic for folks who spend all day heads down in gdb or who do this stuff
+ professionally, but I just wanted to share a quick intro to some tools that
+ others may find useful.
+ (&lt;a href=&quot;https://pchiusano.github.io/2014-10-11/defensive-writing.html&quot;&gt;oh god, I’m doing it&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;If your coming from gdb to lldb, there’s a few differences in commands. LLDB
+ has
+ &lt;a href=&quot;http://lldb.llvm.org/lldb-gdb.html&quot;&gt;great documentation&lt;/a&gt;
+ on some of the differences. Everything in this post about LLDB is pretty much
+ there.&lt;/p&gt;
+
+ &lt;p&gt;The bread and butter commands when working with gdb or lldb are:&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;r (run the program)&lt;/li&gt;
+ &lt;li&gt;s (step in)&lt;/li&gt;
+ &lt;li&gt;n (step over)&lt;/li&gt;
+ &lt;li&gt;finish (step out)&lt;/li&gt;
+ &lt;li&gt;c (continue)&lt;/li&gt;
+ &lt;li&gt;q (quit the program)&lt;/li&gt;
+ &lt;/ul&gt;
+
+
+ &lt;p&gt;You can hit enter if you want to run the last command again, which is really
+ useful if you want to keep stepping over statements repeatedly.&lt;/p&gt;
+
+ &lt;p&gt;I’ve been using LLDB on OSX. Let’s say I want to debug a program I can build,
+ but is crashing or something:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo lldb ./asmttpd web_root
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Setting a breakpoint on jump to label:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; b sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Breakpoint 3: &lt;span class=&quot;nv&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write, &lt;span class=&quot;nv&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000029ae
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Running the program until breakpoint hit:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; r
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 32236 launched: &lt;span class=&quot;s1&quot;&gt;'./asmttpd'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 32236 stopped
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Seeing more of the current stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;24&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; d
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b3 &amp;lt;+5&amp;gt;: pushq %r8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b5 &amp;lt;+7&amp;gt;: pushq %r9
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b7 &amp;lt;+9&amp;gt;: pushq %rbx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b8 &amp;lt;+10&amp;gt;: pushq %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b9 &amp;lt;+11&amp;gt;: movq %rsi, %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29bc &amp;lt;+14&amp;gt;: movq %rdi, %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29bf &amp;lt;+17&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x1&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29c6 &amp;lt;+24&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x2000004&lt;/span&gt;, %rax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29cd &amp;lt;+31&amp;gt;: syscall
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29cf &amp;lt;+33&amp;gt;: popq %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d0 &amp;lt;+34&amp;gt;: popq %rbx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d1 &amp;lt;+35&amp;gt;: popq %r9
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d3 &amp;lt;+37&amp;gt;: popq %r8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29 &amp;lt;+39&amp;gt;: popq %r10
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d7 &amp;lt;+41&amp;gt;: popq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d8 &amp;lt;+42&amp;gt;: popq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d9 &amp;lt;+43&amp;gt;: popq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29da &amp;lt;+44&amp;gt;: retq
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Getting a back trace (call stack):&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; bt
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; * frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#1: 0x00000000000021b6 asmttpd`print_line + 16&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#2: 0x0000000000002ab3 asmttpd`start + 35&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#3: 0x00007fff9900c5ad libdyld.dylib`start + 1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#4: 0x00007fff9900c5ad libdyld.dylib`start + 1&lt;/span&gt;
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;peeking at the upper stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; up
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;frame &lt;span class=&quot;c&quot;&gt;#1: 0x00000000000021b6 asmttpd`print_line + 16&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;print_line:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21b6 &amp;lt;+16&amp;gt;: movabsq &lt;span class=&quot;nv&quot;&gt;$0x30cb&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21c0 &amp;lt;+26&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x1&lt;/span&gt;, %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21c7 &amp;lt;+33&amp;gt;: callq 0x29ae ; sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21cc &amp;lt;+38&amp;gt;: popq %rcx
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;back down to the breakpoint-halted stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; down
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;dumping the values of registers:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; register &lt;span class=&quot;nb&quot;&gt;read&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;General Purpose Registers:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rax&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000002a90 asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;start
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rbx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rcx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffaf8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffa40
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000030cc start_text
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rsi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x000000000000000f
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rbp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffa18
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rsp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbff9b8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r8&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r9&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff7b1670c8 atexit_mutex + 24
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r10&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000ffffffff
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0xffffffff00000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r12&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r13&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r14&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r15&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rip&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000029ae asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rflags&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000246
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;cs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x000000000000002b
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;fs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;read just one register:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; register &lt;span class=&quot;nb&quot;&gt;read &lt;/span&gt;rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000030cc start_text
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;When you’re trying to figure out what system calls are made by some C code,
+ using dtruss is very helpful. dtruss is available on OSX and seems to be some
+ kind of wrapper around DTrace.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cat sleep.c
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;c&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;int main &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; struct timespec &lt;span class=&quot;nv&quot;&gt;rqtp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 2,
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; nanosleep&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&amp;amp;rqtp, NULL&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;clang sleep.c
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo dtruss ./a.out
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;...all kinds of fun stuff
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;__semwait_signal&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;0xB03, 0x0, 0x1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; -1 Err#60
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;If you compile with &lt;code&gt;-g&lt;/code&gt; to emit debug symbols, you can use lldb’s disassemble
+ command to get the equivalent assembly:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;24&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;25&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;26&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;27&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;28&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;29&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;30&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;31&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;32&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;33&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;34&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;35&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;36&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;37&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;clang sleep.c -g
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;lldb a.out
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; target create &lt;span class=&quot;s2&quot;&gt;&quot;a.out&quot;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Current executable &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;to &lt;span class=&quot;s1&quot;&gt;'a.out'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;.
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; b main
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Breakpoint 1: &lt;span class=&quot;nv&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; a.out&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;main + 16 at sleep.c:3, &lt;span class=&quot;nv&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000100000f40
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; r
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 33213 launched: &lt;span class=&quot;s1&quot;&gt;'/Users/Nicholas/code/assembly/asmttpd/a.out'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 33213 stopped
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xeca04, 0x0000000100000f40 a.out`main + 16 at sleep.c:3, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#0: 0x0000000100000f40 a.out`main + 16 at sleep.c:3&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 1 &lt;span class=&quot;c&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 2 int main &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 3 struct timespec &lt;span class=&quot;nv&quot;&gt;rqtp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 4 2,
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 5 0
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 6 &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 7
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; disassemble
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;a.out&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;main:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f30 &amp;lt;+0&amp;gt;: pushq %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f31 &amp;lt;+1&amp;gt;: movq %rsp, %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f34 &amp;lt;+4&amp;gt;: subq &lt;span class=&quot;nv&quot;&gt;$0x20&lt;/span&gt;, %rsp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f38 &amp;lt;+8&amp;gt;: leaq -0x10&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f3c &amp;lt;+12&amp;gt;: xorl %eax, %eax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f3e &amp;lt;+14&amp;gt;: movl %eax, %esi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x100000f40 &amp;lt;+16&amp;gt;: movq 0x49&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rip&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f47 &amp;lt;+23&amp;gt;: movq %rcx, -0x10&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f4b &amp;lt;+27&amp;gt;: movq 0x46&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rip&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f52 &amp;lt;+34&amp;gt;: movq %rcx, -0x8&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f56 &amp;lt;+38&amp;gt;: callq 0x100000f68 ; symbol stub &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;: nanosleep
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f5b &amp;lt;+43&amp;gt;: xorl %edx, %edx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f5d &amp;lt;+45&amp;gt;: movl %eax, -0x14&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f60 &amp;lt;+48&amp;gt;: movl %edx, %eax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f62 &amp;lt;+50&amp;gt;: addq &lt;span class=&quot;nv&quot;&gt;$0x20&lt;/span&gt;, %rsp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f66 &amp;lt;+54&amp;gt;: popq %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f67 &amp;lt;+55&amp;gt;: retq
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Anyways, I’ve been learning some interesting things about OSX that I’ll be
+ sharing soon. If you’d like to learn more about x86-64 assembly programming,
+ you should read my other posts about
+ &lt;a href=&quot;http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/&quot;&gt;writing x86-64&lt;/a&gt;
+ and a toy
+ &lt;a href=&quot;http://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler-jit/&quot;&gt;JIT for Brainfuck&lt;/a&gt;
+ (&lt;a href=&quot;https://www.reddit.com/r/programming/comments/377ov9/interpreter_compiler_jit/crkkrz4&quot;&gt;the creator of Brainfuck liked it&lt;/a&gt;).&lt;/p&gt;
+
+ &lt;p&gt;I should also do a post on
+ &lt;a href=&quot;http://rr-project.org/&quot;&gt;Mozilla’s rr&lt;/a&gt;,
+ because it can do amazing things like step backwards. Another day…&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-21T04:04:00+00:00</dc:date>
+ </item>
+ <item rdf:about="https://rail.merail.ca/posts/rebooting-productivity.html">
+ <title>Rail Aliiev: Rebooting productivity</title>
+ <link>https://rail.merail.ca/posts/rebooting-productivity.html</link>
+ <content:encoded>&lt;div&gt;&lt;p&gt;Every new year gives you an opportunity to sit back, relax,
+ &lt;span class=&quot;strike&quot;&gt;have some scotch&lt;/span&gt; and re-think the passed year. Holidays give
+ you enough free time. Even if you decide to not take a vacation around
+ the holidays, it's usually calm and peaceful.&lt;/p&gt;
+ &lt;p&gt;This time, I found myself thinking mostly about productivity, being
+ effective, feeling busy, overwhelmed with work and other related topics.&lt;/p&gt;
+ &lt;p&gt;When I started at Mozilla (almost 6 years ago!), I tried to apply all my
+ GTD and time management knowledge and techniques. Working remotely and
+ in a different time zone was an advantage - I had close to zero
+ interruptions. It worked perfect.&lt;/p&gt;
+ &lt;p&gt;Last year I realized that my productivity skills had faded away somehow.
+ 40h+ workweeks, working on weekends, delivering goals in the last week
+ of quarter don't sound like good signs. Instead of being productive I
+ felt busy.&lt;/p&gt;
+ &lt;p&gt;&quot;Every crisis is an opportunity&quot;. Time to make a step back and reboot
+ myself. Burning out at work is not a good idea. :)&lt;/p&gt;
+ &lt;p&gt;Here are some ideas/tips that I wrote down for myself you may found
+ useful.&lt;/p&gt;
+ &lt;div class=&quot;section&quot; id=&quot;health-related&quot;&gt;
+ &lt;h3&gt;Health related&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Morning exercises. A 20-minute walk will wake your brain up and
+ generate enough endorphins for the first half of the day.&lt;/li&gt;
+ &lt;li&gt;Meditation. 2x20min a day is ideal; 2x10min would work too. Something
+ like &lt;a class=&quot;reference external&quot; href=&quot;http://www.calm.com/&quot;&gt;calm.com&lt;/a&gt; makes this a peace of cake.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;concentration&quot;&gt;
+ &lt;h3&gt;Concentration&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Task #1: make a daily plan. No plan - no work.&lt;/li&gt;
+ &lt;li&gt;Don't start your day by reading emails. Get one (little) thing done
+ first - THEN check your email.&lt;/li&gt;
+ &lt;li&gt;Try to define outcomes, not tasks. &quot;Ship XYZ&quot; instead of &quot;Work on XYZ&quot;.&lt;/li&gt;
+ &lt;li&gt;Meetings are time consuming, so &quot;Set a goal for each meeting&quot;.
+ Consider skipping a meeting if you don't have any goal set, unless it's a
+ beer-and-tell meeting! :)&lt;/li&gt;
+ &lt;li&gt;Constantly ask yourself if what you're working on is important.&lt;/li&gt;
+ &lt;li&gt;3-4 times a day ask yourself whether you are doing something towards
+ your goal or just finding something else to keep you busy. If you want
+ to look busy, take your phone and walk around the office with some
+ papers in your hand. Everybody will think that you are a busy person!
+ This way you can take a break and look busy at the same time!&lt;/li&gt;
+ &lt;li&gt;Take breaks! &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Pomodoro_Technique&quot;&gt;Pomodoro technique&lt;/a&gt; has this option
+ built-in. Taking breaks helps not only to avoid &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Repetitive_strain_injury&quot;&gt;RSI&lt;/a&gt;, but also
+ keeps your brain sane and gives you time to ask yourself the questions
+ mentioned above. I use &lt;a class=&quot;reference external&quot; href=&quot;http://www.workrave.org/&quot;&gt;Workrave&lt;/a&gt; on my
+ laptop, but you can use a real kitchen timer instead.&lt;/li&gt;
+ &lt;li&gt;Wear headphones, especially at office. Noise cancelling ones are even
+ better. White noise, nature sounds, or instrumental music are your
+ friends.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;home-office&quot;&gt;
+ &lt;h3&gt;(Home) Office&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Make sure you enjoy your work environment. Why on the earth would you
+ spend your valuable time working without joy?!&lt;/li&gt;
+ &lt;li&gt;De-clutter and organize your desk. Less things around - less
+ distractions.&lt;/li&gt;
+ &lt;li&gt;Desk, chair, monitor, keyboard, mouse, etc - don't cheap out on them.
+ Your health is more important and expensive. Thanks to &lt;a class=&quot;reference external&quot; href=&quot;https://twitter.com/mhoye&quot;&gt;mhoye&lt;/a&gt; for this advice!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;other&quot;&gt;
+ &lt;h3&gt;Other&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Don't check email every 30 seconds. If there is an emergency, they
+ will call you! :)&lt;/li&gt;
+ &lt;li&gt;Reward yourself at a certain time. &quot;I'm going to have a chocolate at
+ 11am&quot;, or &quot;MFBT at 4pm sharp!&quot; are good examples. Don't forget, you
+ are &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Classical_conditioning&quot;&gt;Pavlov's dog&lt;/a&gt; too!&lt;/li&gt;
+ &lt;li&gt;Don't try to read everything NOW. Save it for later and read in a
+ batch.&lt;/li&gt;
+ &lt;li&gt;Capture all creative ideas. You can delete them later. ;)&lt;/li&gt;
+ &lt;li&gt;Prepare for next task before break. Make sure you know what's next, so
+ you can think about it during the break.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;This is my list of things that I try to use everyday. Looking forward to
+ see improvements!&lt;/p&gt;
+ &lt;p&gt;I would appreciate your thoughts this topic. Feel free to comment or
+ send a private email.&lt;/p&gt;
+ &lt;p&gt;Happy Productive New Year!&lt;/p&gt;
+ &lt;/div&gt;&lt;/div&gt;</content:encoded>
+ <dc:date>2016-01-21T02:06:37+00:00</dc:date>
+ <dc:creator>Rail Aliiev</dc:creator>
+ </item>
+ <item rdf:about="http://blog.rust-lang.org/2016/01/21/Rust-1.6.html">
+ <title>The Rust Programming Language Blog: Announcing Rust 1.6</title>
+ <link>http://blog.rust-lang.org/2016/01/21/Rust-1.6.html</link>
+ <content:encoded>&lt;p&gt;Hello 2016! We’re happy to announce the first Rust release of the year, 1.6.
+ Rust is a systems programming language focused on safety, speed, and
+ concurrency.&lt;/p&gt;
+
+ &lt;p&gt;As always, you can &lt;a href=&quot;http://www.rust-lang.org/install.html&quot;&gt;install Rust 1.6&lt;/a&gt; from the appropriate page on our
+ website, and check out the &lt;a href=&quot;https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21&quot;&gt;detailed release notes for 1.6&lt;/a&gt; on GitHub.
+ About 1100 patches were landed in this release.&lt;/p&gt;
+
+ &lt;h3 id=&quot;what-39-s-in-1-6-stable&quot;&gt;What’s in 1.6 stable&lt;/h3&gt;
+
+ &lt;p&gt;This release contains a number of small refinements, one major feature, and
+ a change to &lt;a href=&quot;https://crates.io&quot;&gt;Crates.io&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;h4 id=&quot;libcore-stabilization&quot;&gt;libcore stabilization&lt;/h4&gt;
+
+ &lt;p&gt;The largest new feature in 1.6 is that &lt;a href=&quot;http://doc.rust-lang.org/nightly/core/&quot;&gt;&lt;code&gt;libcore&lt;/code&gt;&lt;/a&gt; is now stable! Rust’s
+ standard library is two-tiered: there’s a small core library, &lt;code&gt;libcore&lt;/code&gt;, and
+ the full standard library, &lt;code&gt;libstd&lt;/code&gt;, that builds on top of it. &lt;code&gt;libcore&lt;/code&gt; is
+ completely platform agnostic, and requires only a handful of external symbols
+ to be defined. Rust’s &lt;code&gt;libstd&lt;/code&gt; builds on top of &lt;code&gt;libcore&lt;/code&gt;, adding support for
+ memory allocation, I/O, and concurrency. Applications using Rust in the
+ embedded space, as well as those writing operating systems, often eschew
+ &lt;code&gt;libstd&lt;/code&gt;, using only &lt;code&gt;libcore&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;libcore&lt;/code&gt; being stabilized is a major step towards being able to write the
+ lowest levels of software using stable Rust. There’s still future work to be
+ done, however. This will allow for a library ecosystem to develop around
+ &lt;code&gt;libcore&lt;/code&gt;, but &lt;em&gt;applications&lt;/em&gt; are not fully supported yet. Expect to hear more
+ about this in future release notes.&lt;/p&gt;
+
+ &lt;h4 id=&quot;library-stabilizations&quot;&gt;Library stabilizations&lt;/h4&gt;
+
+ &lt;p&gt;About 30 library functions and methods are now stable in 1.6. Notable
+ improvements include:&lt;/p&gt;
+
+ &lt;p&gt;The &lt;code&gt;drain()&lt;/code&gt; family of functions on collections. These methods let you move
+ elements out of a collection while allowing them to retain their backing
+ memory, reducing allocation in certain situations.&lt;/p&gt;
+
+ &lt;p&gt;A number of implementations of &lt;code&gt;From&lt;/code&gt; for converting between standard library
+ types, mainly between various integral and floating-point types.&lt;/p&gt;
+
+ &lt;p&gt;Finally, &lt;code&gt;Vec::extend_from_slice()&lt;/code&gt;, which was previously known as
+ &lt;code&gt;push_all()&lt;/code&gt;. This method has a significantly faster implementation than the
+ more general &lt;code&gt;extend()&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;See the &lt;a href=&quot;https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21&quot;&gt;detailed release notes&lt;/a&gt; for more.&lt;/p&gt;
+
+ &lt;h4 id=&quot;crates-io-disallows-wildcards&quot;&gt;Crates.io disallows wildcards&lt;/h4&gt;
+
+ &lt;p&gt;If you maintain a crate on &lt;a href=&quot;https://crates.io&quot;&gt;Crates.io&lt;/a&gt;, you might have seen
+ a warning: newly uploaded crates are no longer allowed to use a wildcard when
+ describing their dependencies. In other words, this is not allowed:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*&quot;&lt;/span&gt;
+ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
+ &lt;p&gt;Instead, you must actually specify &lt;a href=&quot;http://doc.crates.io/crates-io.html#using-cratesio-based-crates&quot;&gt;a specific version or range of
+ versions&lt;/a&gt;, using one of the &lt;code&gt;semver&lt;/code&gt; crate’s various options: &lt;code&gt;^&lt;/code&gt;,
+ &lt;code&gt;~&lt;/code&gt;, or &lt;code&gt;=&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;A wildcard dependency means that you work with any possible version of your
+ dependency. This is highly unlikely to be true, and causes unnecessary breakage
+ in the ecosystem. We’ve been advertising this change as a warning for some time;
+ now it’s time to turn it into an error.&lt;/p&gt;
+
+ &lt;h3 id=&quot;contributors-to-1-6&quot;&gt;Contributors to 1.6&lt;/h3&gt;
+
+ &lt;p&gt;We had 132 individuals contribute to 1.6. Thank you so much!&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;Aaron Turon&lt;/li&gt;
+ &lt;li&gt;Adam Badawy&lt;/li&gt;
+ &lt;li&gt;Aleksey Kladov&lt;/li&gt;
+ &lt;li&gt;Alexander Bulaev&lt;/li&gt;
+ &lt;li&gt;Alex Burka&lt;/li&gt;
+ &lt;li&gt;Alex Crichton&lt;/li&gt;
+ &lt;li&gt;Alex Gaynor&lt;/li&gt;
+ &lt;li&gt;Alexis Beingessner&lt;/li&gt;
+ &lt;li&gt;Amanieu d'Antras&lt;/li&gt;
+ &lt;li&gt;Amit Saha&lt;/li&gt;
+ &lt;li&gt;Andrea Canciani&lt;/li&gt;
+ &lt;li&gt;Andrew Paseltiner&lt;/li&gt;
+ &lt;li&gt;androm3da&lt;/li&gt;
+ &lt;li&gt;angelsl&lt;/li&gt;
+ &lt;li&gt;Angus Lees&lt;/li&gt;
+ &lt;li&gt;Antti Keränen&lt;/li&gt;
+ &lt;li&gt;arcnmx&lt;/li&gt;
+ &lt;li&gt;Ariel Ben-Yehuda&lt;/li&gt;
+ &lt;li&gt;Ashkan Kiani&lt;/li&gt;
+ &lt;li&gt;Barosl Lee&lt;/li&gt;
+ &lt;li&gt;Benjamin Herr&lt;/li&gt;
+ &lt;li&gt;Ben Striegel&lt;/li&gt;
+ &lt;li&gt;Bhargav Patel&lt;/li&gt;
+ &lt;li&gt;Björn Steinbrink&lt;/li&gt;
+ &lt;li&gt;Boris Egorov&lt;/li&gt;
+ &lt;li&gt;bors&lt;/li&gt;
+ &lt;li&gt;Brian Anderson&lt;/li&gt;
+ &lt;li&gt;Bruno Tavares&lt;/li&gt;
+ &lt;li&gt;Bryce Van Dyk&lt;/li&gt;
+ &lt;li&gt;Cameron Sun&lt;/li&gt;
+ &lt;li&gt;Christopher Sumnicht&lt;/li&gt;
+ &lt;li&gt;Cole Reynolds&lt;/li&gt;
+ &lt;li&gt;corentih&lt;/li&gt;
+ &lt;li&gt;Daniel Campbell&lt;/li&gt;
+ &lt;li&gt;Daniel Keep&lt;/li&gt;
+ &lt;li&gt;Daniel Rollins&lt;/li&gt;
+ &lt;li&gt;Daniel Trebbien&lt;/li&gt;
+ &lt;li&gt;Danilo Bargen&lt;/li&gt;
+ &lt;li&gt;Devon Hollowood&lt;/li&gt;
+ &lt;li&gt;Doug Goldstein&lt;/li&gt;
+ &lt;li&gt;Dylan McKay&lt;/li&gt;
+ &lt;li&gt;ebadf&lt;/li&gt;
+ &lt;li&gt;Eli Friedman&lt;/li&gt;
+ &lt;li&gt;Eric Findlay&lt;/li&gt;
+ &lt;li&gt;Erik Davidson&lt;/li&gt;
+ &lt;li&gt;Felix S. Klock II&lt;/li&gt;
+ &lt;li&gt;Florian Hahn&lt;/li&gt;
+ &lt;li&gt;Florian Hartwig&lt;/li&gt;
+ &lt;li&gt;Gleb Kozyrev&lt;/li&gt;
+ &lt;li&gt;Guillaume Gomez&lt;/li&gt;
+ &lt;li&gt;Huon Wilson&lt;/li&gt;
+ &lt;li&gt;Igor Shuvalov&lt;/li&gt;
+ &lt;li&gt;Ivan Ivaschenko&lt;/li&gt;
+ &lt;li&gt;Ivan Kozik&lt;/li&gt;
+ &lt;li&gt;Ivan Stankovic&lt;/li&gt;
+ &lt;li&gt;Jack Fransham&lt;/li&gt;
+ &lt;li&gt;Jake Goulding&lt;/li&gt;
+ &lt;li&gt;Jake Worth&lt;/li&gt;
+ &lt;li&gt;James Miller&lt;/li&gt;
+ &lt;li&gt;Jan Likar&lt;/li&gt;
+ &lt;li&gt;Jean Maillard&lt;/li&gt;
+ &lt;li&gt;Jeffrey Seyfried&lt;/li&gt;
+ &lt;li&gt;Jethro Beekman&lt;/li&gt;
+ &lt;li&gt;John Kåre Alsaker&lt;/li&gt;
+ &lt;li&gt;John Talling&lt;/li&gt;
+ &lt;li&gt;Jonas Schievink&lt;/li&gt;
+ &lt;li&gt;Jonathan S&lt;/li&gt;
+ &lt;li&gt;Jose Narvaez&lt;/li&gt;
+ &lt;li&gt;Josh Austin&lt;/li&gt;
+ &lt;li&gt;Josh Stone&lt;/li&gt;
+ &lt;li&gt;Joshua Holmer&lt;/li&gt;
+ &lt;li&gt;JP Sugarbroad&lt;/li&gt;
+ &lt;li&gt;jrburke&lt;/li&gt;
+ &lt;li&gt;Kevin Butler&lt;/li&gt;
+ &lt;li&gt;Kevin Yeh&lt;/li&gt;
+ &lt;li&gt;Kohei Hasegawa&lt;/li&gt;
+ &lt;li&gt;Kyle Mayes&lt;/li&gt;
+ &lt;li&gt;Lee Jeffery&lt;/li&gt;
+ &lt;li&gt;Manish Goregaokar&lt;/li&gt;
+ &lt;li&gt;Marcell Pardavi&lt;/li&gt;
+ &lt;li&gt;Markus Unterwaditzer&lt;/li&gt;
+ &lt;li&gt;Martin Pool&lt;/li&gt;
+ &lt;li&gt;Marvin Löbel&lt;/li&gt;
+ &lt;li&gt;Matt Brubeck&lt;/li&gt;
+ &lt;li&gt;Matthias Bussonnier&lt;/li&gt;
+ &lt;li&gt;Matthias Kauer&lt;/li&gt;
+ &lt;li&gt;mdinger&lt;/li&gt;
+ &lt;li&gt;Michael Layzell&lt;/li&gt;
+ &lt;li&gt;Michael Neumann&lt;/li&gt;
+ &lt;li&gt;Michael Sproul&lt;/li&gt;
+ &lt;li&gt;Michael Woerister&lt;/li&gt;
+ &lt;li&gt;Mihaly Barasz&lt;/li&gt;
+ &lt;li&gt;Mika Attila&lt;/li&gt;
+ &lt;li&gt;mitaa&lt;/li&gt;
+ &lt;li&gt;Ms2ger&lt;/li&gt;
+ &lt;li&gt;Nicholas Mazzuca&lt;/li&gt;
+ &lt;li&gt;Nick Cameron&lt;/li&gt;
+ &lt;li&gt;Niko Matsakis&lt;/li&gt;
+ &lt;li&gt;Ole Krüger&lt;/li&gt;
+ &lt;li&gt;Oliver Middleton&lt;/li&gt;
+ &lt;li&gt;Oliver Schneider&lt;/li&gt;
+ &lt;li&gt;Ori Avtalion&lt;/li&gt;
+ &lt;li&gt;Paul A. Jungwirth&lt;/li&gt;
+ &lt;li&gt;Peter Atashian&lt;/li&gt;
+ &lt;li&gt;Philipp Matthias Schäfer&lt;/li&gt;
+ &lt;li&gt;pierzchalski&lt;/li&gt;
+ &lt;li&gt;Ravi Shankar&lt;/li&gt;
+ &lt;li&gt;Ricardo Martins&lt;/li&gt;
+ &lt;li&gt;Ricardo Signes&lt;/li&gt;
+ &lt;li&gt;Richard Diamond&lt;/li&gt;
+ &lt;li&gt;Rizky Luthfianto&lt;/li&gt;
+ &lt;li&gt;Ryan Scheel&lt;/li&gt;
+ &lt;li&gt;Scott Olson&lt;/li&gt;
+ &lt;li&gt;Sean Griffin&lt;/li&gt;
+ &lt;li&gt;Sebastian Hahn&lt;/li&gt;
+ &lt;li&gt;Sébastien Marie&lt;/li&gt;
+ &lt;li&gt;Seo Sanghyeon&lt;/li&gt;
+ &lt;li&gt;Simonas Kazlauskas&lt;/li&gt;
+ &lt;li&gt;Simon Sapin&lt;/li&gt;
+ &lt;li&gt;Stepan Koltsov&lt;/li&gt;
+ &lt;li&gt;Steve Klabnik&lt;/li&gt;
+ &lt;li&gt;Steven Fackler&lt;/li&gt;
+ &lt;li&gt;Tamir Duberstein&lt;/li&gt;
+ &lt;li&gt;Tobias Bucher&lt;/li&gt;
+ &lt;li&gt;Toby Scrace&lt;/li&gt;
+ &lt;li&gt;Tshepang Lekhonkhobe&lt;/li&gt;
+ &lt;li&gt;Ulrik Sverdrup&lt;/li&gt;
+ &lt;li&gt;Vadim Chugunov&lt;/li&gt;
+ &lt;li&gt;Vadim Petrochenkov&lt;/li&gt;
+ &lt;li&gt;William Throwe&lt;/li&gt;
+ &lt;li&gt;xd1le&lt;/li&gt;
+ &lt;li&gt;Xmasreturns&lt;/li&gt;
+ &lt;/ul&gt;</content:encoded>
+ <dc:date>2016-01-21T00:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/addons/?p=7644">
+ <title>Mozilla Addons Blog: Archiving AMO Stats</title>
+ <link>https://blog.mozilla.org/addons/2016/01/20/archiving-amo-stats/</link>
+ <content:encoded>&lt;p&gt;One of the advantages of listing an add-on or theme on &lt;a href=&quot;https://addons.mozilla.org&quot; target=&quot;_blank&quot;&gt;addons.mozilla.org&lt;/a&gt; (AMO) is that you’ll get statistics on your add-on’s usage. These stats, which are covered by the &lt;a href=&quot;https://www.mozilla.org/privacy/&quot; target=&quot;_blank&quot;&gt;Mozilla privacy policy&lt;/a&gt;, provide add-on developers with information such as the number of downloads and daily users, among other insights.&lt;/p&gt;
+ &lt;p&gt;Currently, the data that generates these statistics can go back as far as 2007, as we haven’t had an archiving policy. As a result, statistics take up the vast majority of disk space in our database and require a significant amount of processing and operations time. Statistics over a year old are very rarely accessed, and the value of their generation is very low, while the costs are increasing.&lt;/p&gt;
+ &lt;p&gt;To reduce our operating and development costs, and increase the site’s reliability for developers, we are introducing an archiving policy.&lt;/p&gt;
+ &lt;p&gt;In the coming weeks, statistics data &lt;strong&gt;over one year old&lt;/strong&gt; will no longer be stored in the AMO database, and reports generated from them will no longer be accessible through AMO’s add-on statistics pages. Instead, the data will be archived and maintained as plain text files, which developers can download. We will write a follow-up post when these archives become available.&lt;/p&gt;
+ &lt;p&gt;If you’ve chosen to keep your add-on’s statistics private, they will remain private when stats are archived. You can check your privacy settings by going to your add-on in the &lt;a href=&quot;https://addons.mozilla.org/developers/addons&quot; target=&quot;_blank&quot;&gt;Developer Hub&lt;/a&gt;, clicking on &lt;strong&gt;Edit Listing&lt;/strong&gt;, and then &lt;strong&gt;Technical Details&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33.png&quot;&gt;&lt;img alt=&quot;editlisting&quot; class=&quot;alignnone size-large wp-image-7645&quot; height=&quot;389&quot; src=&quot;https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33-600x389.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;The total number of users and other cumulative counts on add-ons and themes will not be affected and these will continue to function.&lt;/p&gt;
+ &lt;p&gt;If you have feedback or concerns, please head to our &lt;a href=&quot;https://discourse.mozilla-community.org/t/archiving-of-add-on-statistics/6573&quot; target=&quot;_blank&quot;&gt;forum post&lt;/a&gt; on this topic.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-20T23:54:09+00:00</dc:date>
+ <dc:creator>Andy McKay</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/the-joy-of-coding-episode-41/">
+ <title>Air Mozilla: The Joy of Coding - Episode 41</title>
+ <link>https://air.mozilla.org/the-joy-of-coding-episode-41/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;The Joy of Coding - Episode 41&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/cb/68/cb68b6ac48452be7e7f25ddc7b63c959.png&quot; width=&quot;160&quot; /&gt;
+ mconley livehacks on real Firefox bugs while thinking aloud.
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-20T18:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/nfroyd/?p=452">
+ <title>Nathan Froyd: gecko and c++ onboarding presentation</title>
+ <link>https://blog.mozilla.org/nfroyd/2016/01/20/gecko-and-c-onboarding-presentation/</link>
+ <content:encoded>&lt;p&gt;One of the things the Firefox team has been doing recently is having onboarding sessions for new hires. This onboarding currently covers:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;1st day setup&lt;/li&gt;
+ &lt;li&gt;Bugzilla&lt;/li&gt;
+ &lt;li&gt;Building Firefox&lt;/li&gt;
+ &lt;li&gt;Desktop Firefox Architecture / Product&lt;/li&gt;
+ &lt;li&gt;Communication and Community&lt;/li&gt;
+ &lt;li&gt;Javascript and the DOM&lt;/li&gt;
+ &lt;li&gt;C++ and Gecko&lt;/li&gt;
+ &lt;li&gt;Shipping Software&lt;/li&gt;
+ &lt;li&gt;Telemetry&lt;/li&gt;
+ &lt;li&gt;Org structure and career development&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;My first day consisted of some useful HR presentations and then I was given my laptop and a pointer to a wiki page on building Firefox. Needless to say, it took me a while to get started! It would have been super convenient to have an introduction to all the stuff above.&lt;/p&gt;
+ &lt;p&gt;I’ve been asked to do the C++ and Gecko session three times. All of the sessions are open to whoever wants to come, not just the new hires, and I think yesterday’s session was easily the most well-attended yet: somewhere between 10 and 20 people showed up. Yesterday’s session was the first session where I made the slides available to attendees (should have been doing that from the start…) and it seemed equally useful to make the slides available to a broader audience as well. The &lt;a href=&quot;https://docs.google.com/presentation/d/1ZHUkNzZK2TrF5_4MWd_lqEq7Ph5B6CDbNsizIkBxbnQ/edit?usp=sharing&quot;&gt;Gecko and C++ Onboarding slides&lt;/a&gt; are up now!&lt;/p&gt;
+ &lt;p&gt;This presentation is a “living” presentation; it will get updated for future sessions with feedback and as I think of things that should have been in the presentation or better ways to set things up (some diagrams would be nice…). If you have feedback (good, bad, or ugly) on particular things in the slides or you have suggestions on what other things should be covered, please contact me! Next time I do this I’ll try to record the presentation so folks can watch that if they prefer.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-20T16:48:29+00:00</dc:date>
+ <dc:creator>Nathan Froyd</dc:creator>
+ </item>
+ <item rdf:about="http://andreasgal.com/?p=573">
+ <title>Andreas Gal: Brendan is back to save the Web</title>
+ <link>http://andreasgal.com/2016/01/20/brendan-is-back-to-save-the-web/</link>
+ <content:encoded>&lt;p class=&quot;p1&quot;&gt;Brendan is &lt;a href=&quot;https://github.com/brave&quot;&gt;back&lt;/a&gt;, and he has a &lt;a href=&quot;http://brave.com/&quot;&gt;plan&lt;/a&gt; to save the Web. Its a big and bold plan, and it may just work. I am pretty excited about this. If you have 5 minutes to read along I’ll explain why I think you should be as well.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;The Web is broken&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Lets face it, the Web today is a mess. Everywhere we go online we are constantly inundated with annoying ads. Often pages are more ads than content, and the more ads the industry throws at us, the more we ignore them, the more obnoxious ads get, trying to catch our attention. As Brendan explains in his blog post, the browser used to be on the user’s side—we call browsers the user agent for a reason. Part of the early success of Firefox was that it blocked popup ads. But somewhere over the last 10 years of modern Web browsers, browsers lost their way and stopped being the user’s agent alone. Why?&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Browsers aren’t free&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Making a modern Web browser is not free. It takes hundreds of engineers to make a competitive modern browser engine. Someone has to pay for that, and that someone needs to have a reason to pay for it. Google doesn’t make Chrome for the good of mankind. Google makes Chrome so you can consume more Web and along with it, more Google ads. Each time you click on one, Google makes more money. Chrome is a billion dollar business for Google. And the same is true for pretty much every other browser. Every major browser out there is funded through advertisement. No browser maker can escape this dilemma. Maybe now you understand why no major browser ships with a builtin enabled by default ad-blocker, even though ad-blockers are by far the most popular add-ons.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Our privacy is at stake&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;It’s not just the unregulated flood of advertisement that needs a solution. Every ad you see is often selected based on sensitive private information advertisement networks have extracted from your browsing behavior through tracking. Remember how the FBI used to track what books Americans read at the library, and it was a big scandal? Today the Googles and Facebooks of the world know almost every site you visit, everything you buy online, and they use this data to target you with advertisement. I am often puzzled why people are so afraid of the NSA spying on us but show so little concern about all the deeply personal data Google and Facebook are amassing about everyone.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Blocking alone doesn’t scale&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;I wish the solution was as easy as just blocking all ads. There is a lot of great Web content out there: news, entertainment, educational content. It’s not free to make all this content, but we have gotten used to consuming it “for free”. Banning all ads without an alternative mechanism would break the economic backbone of the Web. This dilemma has existed for many years, and the big browser vendors seem to have given up on it. It’s hard to blame them. How do you disrupt the status quo without sawing off the (ad revenue) branch you are sitting on?&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;It takes an newcomer to fix this mess&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;I think its unlikely that the incumbent browser vendors will make any bold moves to solve this mess. There is too much money at stake. I am excited to see a startup take a swipe at this problem, because they have little to lose (seed money aside). Brave is getting the user agent back into the game. Browsers have intentionally remained silent onlookers to the ad industry invading users’ privacy. With Brave, Brendan makes the user agent step up and fight for the user as it was always intended to do.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Brave basically consists of two parts: part one blocks third party ad content and tracking signals. Instead of these Brave inserts alternative ad content. Sites can sign up to get a fair share of any ads that Brave displays for them. The big change in comparison to the status quo is that the Brave user agent is in control and can regulate what you see. It’s like a speed limit for advertisement on the Web, with the goal to restore balance and give sites a fair way to monetize while giving the user control through the user agent.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Making money with a better Web&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;The ironic part of Brave is that its for-profit. Brave can make money by reducing obnoxious ads and protecting your privacy at the same time. If Brave succeeds, it’s going to drain money away from the crappy privacy-invasive obnoxious advertisement world we have today, and publishers and sites will start transacting in the new Brave world that is regulated by the user agent. Brave will take a cut of these transactions. And I think this is key. It aligns the incentives right. The current funding structure of major browsers encourages them to keep things as they are. Brave’s incentive is to bring down the whole diseased temple and usher in a better Web. Exciting.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Quick update:&lt;/strong&gt; I had a chance to look over the Brave GitHub repo. It looks like the Brave Desktop browser is based on Chromium, not Gecko. Yes, you read that right. &lt;span style=&quot;text-decoration: underline;&quot;&gt;Brave is using Google’s rendering engine, not Mozilla’s.&lt;/span&gt; Much to write about this one, but it will definitely help Brave “hide” better in the large volume of Chrome users, making it harder for sites to identify and block Brave users. Brave for iOS seems to be a &lt;span style=&quot;text-decoration: underline;&quot;&gt;fork of Firefox for iOS, but it manages to block ads&lt;/span&gt; (Mozilla says they can’t).&lt;/p&gt;&lt;br /&gt;Filed under: &lt;a href=&quot;http://andreasgal.com/category/mozilla/&quot;&gt;Mozilla&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://pixel.wp.com/b.gif?host=andreasgal.com&amp;amp;blog=891661&amp;amp;post=573&amp;amp;subd=andreasgal&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-20T16:00:00+00:00</dc:date>
+ <dc:creator>Andreas</dc:creator>
+ </item>
+ <item rdf:about="https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html">
+ <title>Mike Taylor: 🙅 @media (-webkit-transform-3d)</title>
+ <link>https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html</link>
+ <content:encoded>&lt;p&gt;&lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; is a funny thing that exists on the web.&lt;/p&gt;
+
+ &lt;p&gt;It's like, a &lt;a href=&quot;https://drafts.csswg.org/mediaqueries-4/#mq-features&quot;&gt;media query feature&lt;/a&gt; in the form of a prefixed CSS property, which should tell you if your (once upon a time probably Safari-only) browser supports 3D transforms, invented back in the day before we had &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@supports&quot;&gt;&lt;code&gt;@supports&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;(According to &lt;a href=&quot;https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/OtherStandardCSS3Features.html#//apple_ref/doc/uid/TP40007601-SW3&quot;&gt;Apple docs&lt;/a&gt; it first appeared in Safari 4, along side the other &lt;code&gt;-webkit-transition&lt;/code&gt; and &lt;code&gt;-webkit-transform-2d&lt;/code&gt; hybrid-media-query-feature-prefixed-css-properties-things that you should immediately forget exist.)&lt;/p&gt;
+
+ &lt;p&gt;Older versions of Modernizr &lt;a href=&quot;https://github.com/Modernizr/Modernizr/blob/66c694d136241d356e0d24fcbaa5c068b0b0cdae/feature-detects/css/transforms3d.js#L26-L27&quot;&gt;used this (and only this)&lt;/a&gt; to detect support for 3D transforms, and that seemed pretty OK. (They also did the polite thing and tested &lt;code&gt;@media (transform-3d)&lt;/code&gt;, but no browser has ever actually supported that, as it turns out). And because they're so consistently polite, they've since &lt;a href=&quot;https://github.com/patrickkettner/Modernizr/commit/a54308e47e269a058472854b1ef417bd54f4e616&quot;&gt;updated the test&lt;/a&gt; to prefer &lt;code&gt;@supports&lt;/code&gt; too (via a pull request from Edge developer Jacob Rossi).&lt;/p&gt;
+
+ &lt;p&gt;As it turns out other browsers have been &lt;a href=&quot;http://caniuse.com/#feat=transforms3d&quot;&gt;updated to support 3D CSS transforms&lt;/a&gt;, but sites didn't go back and update their version of Modernizr. So unless you support &lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; these sites break. Niche websites like &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239136&quot;&gt;yahoo.com&lt;/a&gt; and &lt;a href=&quot;https://github.com/webcompat/web-bugs/issues/2151&quot;&gt;about.com&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;So, anyways. I added &lt;a href=&quot;https://compat.spec.whatwg.org/#css-media-queries-webkit-transform-3d&quot;&gt;&lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; to the Compat Standard&lt;/a&gt; and we &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239799&quot;&gt;added support for it Firefox&lt;/a&gt; so websites stop breaking.&lt;/p&gt;
+
+ &lt;p&gt;But you shouldn't ever use it—use &lt;code&gt;@supports&lt;/code&gt;. In fact, don't even share this blog post. Maybe delete it from your browser history just in case.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-20T08:00:00+00:00</dc:date>
+ <dc:creator>Mike Taylor</dc:creator>
+ </item>
+ <item rdf:about="http://globau.wordpress.com/?p=881">
+ <title>Byron Jones: happy bmo push day!</title>
+ <link>https://globau.wordpress.com/2016/01/20/happy-bmo-push-day-166/</link>
+ <content:encoded>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1236161&quot; target=&quot;_blank&quot;&gt;1236161&lt;/a&gt;] when converting a BMP attachment to PNG fails a zero byte attachment is created&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1231918&quot; target=&quot;_blank&quot;&gt;1231918&lt;/a&gt;] error handler doesn’t close multi-part responses&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;Filed under: &lt;a href=&quot;https://globau.wordpress.com/category/mozilla/bmo/&quot;&gt;bmo&lt;/a&gt;, &lt;a href=&quot;https://globau.wordpress.com/category/mozilla/&quot;&gt;mozilla&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=globau.wordpress.com&amp;amp;blog=25718030&amp;amp;post=881&amp;amp;subd=globau&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-20T07:33:46+00:00</dc:date>
+ <dc:creator>glob</dc:creator>
+ </item>
+ <item rdf:about="https://www.alex-johnson.net/tag/mozilla/rss/85d84c54-ed0c-4ee5-beb3-8823edb3c074">
+ <title>Alex Johnson: Removing Honeycomb Code</title>
+ <link>https://www.alex-johnson.net/removing-honeycomb-code/</link>
+ <content:encoded>&lt;p&gt;As an effort to reduce the APK size of Firefox for Android and to remove unnecessary code, I will be helping remove the Honeycomb code throughout the Fennec project. Honeycomb will not be supported since Firefox 46, so this code is not necessary. &lt;br /&gt;
+ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1217675&quot;&gt;Bug 1217675&lt;/a&gt; will keep track of the progress. &lt;br /&gt;
+ Hopefully this will help reduce the APK size some and clean up the road for &lt;a href=&quot;https://www.youtube.com/watch?v=NJ6kzW5t02Y&quot;&gt;killing Gingerbread&lt;/a&gt; hopefully sometime in the near future.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-20T04:59:34+00:00</dc:date>
+ <dc:creator>Alex Johnson</dc:creator>
+ </item>
+ <item rdf:about="http://www.brianbondy.com/blog/id/172">
+ <title>Brian R. Bondy: Brave Software</title>
+ <link>http://www.brianbondy.com/blog/172/brave-software</link>
+ <content:encoded>&lt;p&gt;&lt;/p&gt;&lt;p&gt;Since June of last year, I’ve been co-founding a new startup called &lt;a href=&quot;https://brave.com/&quot;&gt;Brave Software&lt;/a&gt; with &lt;a href=&quot;https://en.wikipedia.org/wiki/Brendan_Eich&quot;&gt;Brendan Eich&lt;/a&gt;.
+ With our amazing team, we're developing something pretty epic.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;We're building the next-generation of browsers for smartphones and laptops as part of our new ad-tech platform.
+ Our terms of use give our users control over their personal data by blocking ad trackers and third party cookies.
+ We re-integrate fewer and better ads directly into programmatic ad positions, paying revenue shares to users and publishers to support both of these essential parties in the web ecosystem.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;Coming built in, we have new faster engines for tracking protection, ad block, HTTPS Everywhere, safe ads with rev-share, and more.
+ We're seeing massive web page load time speedups.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+
+
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;We're starting to bring people in for early developer build access on all platforms.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;I’m happy to share that the browsers we’re developing were made fully open sourced.
+ We welcome contributors, and would love your help.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;Some of the repositories include:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/browser-laptop&quot;&gt;Brave OSX and Windows x64 browsers&lt;/a&gt;: Prototyped as a Gecko based browser, but now replaced with a powerful new browser built on top of the electron framework. The electron framework is the same one in use by Slack and the Atom editor. It uses the latest libchromiumcontent and Node.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/link-bubble&quot;&gt;Brave for Android&lt;/a&gt;: Formerly Link Bubble, working as a background service so you can use other apps as your pages load.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/browser-ios&quot;&gt;Brave for iOS&lt;/a&gt;: Originally forked from Firefox for iOS but with all of the built-in greatness described above.&lt;/li&gt;
+ &lt;li&gt;And many others: Website, updater code, vault, electron fork, and others.&lt;/li&gt;
+ &lt;/ul&gt;</content:encoded>
+ <dc:date>2016-01-20T00:00:00+00:00</dc:date>
+ <dc:creator>Brian R. Bondy</dc:creator>
+ </item>
+ <item rdf:about="http://coffeeonthekeyboard.com/rss/0388d8a6-fc86-477e-a161-1b356e01fe77">
+ <title>James Socol: PIEfection Slides Up</title>
+ <link>http://coffeeonthekeyboard.com/piefection-slides-up/</link>
+ <content:encoded>&lt;p&gt;I put &lt;a href=&quot;https://github.com/jsocol/talks/tree/master/2016-01-13-manhattanjs-pie&quot;&gt;the slides for my ManhattanJS talk, &quot;PIEfection&quot;&lt;/a&gt; up on GitHub the other day (sans images, but there are links in the source for all of those).&lt;/p&gt;
+
+ &lt;p&gt;I completely neglected to talk about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Maillard_reaction&quot;&gt;Maillard reaction&lt;/a&gt;, which is responsible for food tasting good, and specifically for browning pie crusts. tl;dr: Amino acid (protein) + sugar + ~300°F (~150°C) = delicious. There are innumerable and poorly understood combinations of amino acids and sugars, but this class of reaction is responsible for everything from searing stakes to browning crusts to toasting marshmallows.&lt;/p&gt;
+
+ &lt;p&gt;Above ~330°F, you get caramelization, which is also a delicious part of the pie and crust, but you don't want to overdo it. Starting around ~400°F, you get pyrolysis (burning, charring, carbonization) and below 285°F the reaction won't occur (at least not quickly) so you won't get the delicious compounds.&lt;/p&gt;
+
+ &lt;p&gt;(All of these are, of course, temperatures measured in the material, not in the air of the oven.)&lt;/p&gt;
+
+ &lt;p&gt;So, instead of an egg wash on your top crust, try whole milk, which has more sugar to react with the gluten in the crust.&lt;/p&gt;
+
+ &lt;p&gt;I also didn't get a chance to mention a rolling technique I use, that I learned from a &lt;a href=&quot;https://www.facebook.com/ellenspirerstaffing&quot;&gt;cousin of mine&lt;/a&gt;, in whose baking shadow I happily live.&lt;/p&gt;
+
+ &lt;p&gt;When rolling out a crust after it's been in the fridge, first roll it out in a long stretch, then fold it in thirds; do it again; then start rolling it out into a round. Not only do you add more layer structure (mmm, flaky, delicious layers) but it'll fill in the cracks that often form if you try to roll it out directly, resulting in a stronger crust.&lt;/p&gt;
+
+ &lt;p&gt;Those &lt;a href=&quot;http://www.amazon.com/Cheese-Shaker-Pepper-Perforated-Stainless/dp/B007T40P28/ref=sr_1_1?ie=UTF8&amp;amp;qid=1453236391&amp;amp;sr=8-1&amp;amp;keywords=pizza+shaker&quot;&gt;pepper flake shakers&lt;/a&gt;, filled with flour, are a great way to keep adding flour to the workspace without worrying about your buttery hands.&lt;/p&gt;
+
+ &lt;p&gt;For transferring the crust to the pie plate, try rolling it up onto your rolling pin and unrolling it on the plate. &lt;a href=&quot;http://www.amazon.com/Ateco-20-Inch-Length-French-Rolling/dp/B000KESQ1G&quot;&gt;Tapered (or &quot;French&quot;) rolling pins&lt;/a&gt; (or wine bottle) are particularly good at this since they don't have moving parts.&lt;/p&gt;
+
+ &lt;p&gt;Finally, thanks again to &lt;a href=&quot;https://twitter.com/renrutnnej&quot;&gt;Jenn&lt;/a&gt; for helping me get pies from one island to another. It would not have been possible without her!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T20:45:34+00:00</dc:date>
+ <dc:creator>James Socol</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/">
+ <title>Air Mozilla: Reprendre le contrôle de sa vie privée sur Internet</title>
+ <link>https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Reprendre le contrôle de sa vie privée sur Internet&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/be/f6/bef62897fb87e08dc8392fe61d10bcfa.png&quot; width=&quot;160&quot; /&gt;
+ L'omniprésence des réseaux sociaux, des moteurs de recherches et de la publicité est-elle compatible avec notre droit à la vie privée ?
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T18:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="https://mykzilla.org/?p=245">
+ <title>Myk Melez: New Year, New Blogware</title>
+ <link>https://mykzilla.org/2016/01/19/new-year-new-blogware/</link>
+ <content:encoded>&lt;p&gt;Four score and many moons ago, I decided to move this blog from Blogger to WordPress. The transition took longer than expected, but it’s finally done.&lt;/p&gt;
+ &lt;p&gt;If you’ve been following along at the old address, &lt;a href=&quot;https://mykzilla.blogspot.com/&quot;&gt;https://mykzilla.blogspot.com/&lt;/a&gt;, now’s the time to update your address book! If you’ve been going to &lt;a href=&quot;https://mykzilla.org/&quot;&gt;https://mykzilla.org/&lt;/a&gt;, however, or you read the blog on &lt;a href=&quot;http://planet.mozilla.org/&quot;&gt;Planet Mozilla&lt;/a&gt;, then there’s nothing to do, as that’s the new address, and Planet Mozilla has been updated to syndicate posts from it.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T16:56:05+00:00</dc:date>
+ <dc:creator>Myk Melez</dc:creator>
+ </item>
+ <item rdf:about="http://michaelkohler.info/?p=348">
+ <title>Michael Kohler: Mozillas strategische Leitlinien für 2016 und danach</title>
+ <link>https://michaelkohler.info/2016/mozillas-strategische-leitlinien-fur-2016-und-danach</link>
+ <content:encoded>&lt;p&gt;Dieser Beitrag wurde zuerst im Blog auf&lt;a href=&quot;https://blog.mozilla.org/community&quot;&gt; https://blog.mozilla.org/community&lt;/a&gt; veröffentlicht. Herzlichen Dank an Aryx und Coce für die Übersetzung!&lt;/p&gt;
+ &lt;p&gt;Auf der ganzen Welt arbeiten leidenschaftliche Mozillianer am Fortschritt für Mozillas Mission. Aber fragt man fünf verschiedene Mozillianer, was die Mission ist, erhält man womöglich sieben verschiedene Antworten.&lt;/p&gt;
+ &lt;p&gt;Am Ende des letzten Jahres legte Mozillas CEO Chris Beard klare Vorstellungen über Mozillas Mission, Vision und Rolle dar und zeigte auf, wie unsere Produkte uns diesem Ziel in den nächsten fünf Jahren näher bringen. Das Ziel dieser strategischen Leitlinien besteht darin, für Mozilla insgesamt ein prägnantes, gemeinsames Verständnis unserer Ziele zu entwickeln, die uns als Individuen das Treffen von Entscheidungen und Erkennen von Möglichkeiten erleichtert, mit denen wir Mozilla voranbringen.&lt;/p&gt;
+ &lt;p&gt;Mozillas Mission können wir nicht alleine erreichen. Die Tausenden von Mozillianern auf der ganzen Welt müssen dahinter stehen, damit wir zügig und mit lauterer Stimme als je zuvor Unglaubliches erreichen können.&lt;/p&gt;
+ &lt;p&gt;Deswegen ist eine der sechs&lt;a href=&quot;https://docs.google.com/presentation/d/1A3Ma9gNawAYYGbYC2bUW0wUwcpHuvyMiZvHNiMLriw0/edit#slide=id.gdaa7a0bd0_1_0&quot;&gt; strategischen Initiativen&lt;/a&gt; des Participation Teams für die erste Jahreshälfte, möglichst viele Mozillianer über diese Leitlinien aufzuklären, damit wir 2016 den bisher wesentlichsten Einfluss erzielen können. Wir werden einen weiteren Beitrag veröffentlichen, der sich näher mit der Strategie des Participation Teams für das Jahr 2016 befassen wird.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone&quot; height=&quot;335&quot; src=&quot;https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/community/files/2016/01/Screen-Shot-2015-12-18-at-2.02.07-PM-600x335.png&quot; width=&quot;600&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Das Verstehen dieser Strategie wird unabdingbar sein für jeden, der bei Mozilla in diesem Jahr etwas bewirken möchte, denn sie wird bestimmen, wofür wir eintreten, wo wir unsere Ressourcen einsetzen und auf welche Projekte wir uns 2016 konzentrieren werden.&lt;/p&gt;
+ &lt;p&gt;Zu Jahresbeginn werden wir näher auf diese Strategie eingehen und weitere Details dazu bekanntgeben, wie die diversen Teams und Projekte bei Mozilla auf diese Ziele hinarbeiten.&lt;/p&gt;
+ &lt;p&gt;Der aktuelle Aufruf zum Handeln besteht darin, im Kontext Ihrer Arbeit über diese Ziele nachzudenken und darüber, wie Sie im kommenden Jahr bei Mozilla mitwirken möchten. Dies hilft, Ihre Innovationen, Ambitionen und Ihren Einfluss im Jahr 2016 zu gestalten.&lt;/p&gt;
+ &lt;p&gt;Wir hoffen, dass Sie mitdiskutieren und Ihre Fragen, Kommentare und Pläne für das Vorantreiben der strategischen Leitlinien im Jahr 2016&lt;a href=&quot;https://discourse.mozilla-community.org/t/mozillas-strategic-narrative-2016/6397&quot;&gt; hier&lt;/a&gt; auf Discourse teilen und Ihre Gedanken auf Twitter mit dem Hashtag &lt;a href=&quot;https://twitter.com/search?q=%23mozilla2016strategy&amp;amp;src=typd&quot;&gt;#Mozilla2016Strategy&lt;/a&gt; mitteilen.&lt;/p&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;h3&gt;Mission, Vision &amp;amp; Strategie&lt;/h3&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Mission&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Dafür zu sorgen, dass das Internet eine weltweite öffentliche Ressource ist, die allen zugänglich ist.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Vision&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Ein Internet, für das Menschen tatsächlich an erster Stelle stehen. Ein Internet, in dem Menschen ihr eigenes Erlebnis gestalten können. Ein Internet, in dem die Menschen selbst entscheiden können sowie sicher und unabhängig sind.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Rolle&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Mozilla setzt sich im wahrsten Sinne des Wortes in Ihrem Online-Leben für Sie ein. Wir setzen uns für Sie ein, sowohl in Ihrem Online-Erlebnis als auch für Ihre Interessen beim Zustand des Internets.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Arbeit&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Unsere Säulen&lt;/p&gt;
+ &lt;ol&gt;
+ &lt;li&gt;&lt;b&gt;Produkte:&lt;/b&gt; Wir entwickeln Produkte mit Menschen im Mittelpunkt sowie Bildungsprogramme, mit deren Hilfe Menschen online ihr gesamtes Potential ausschöpfen können.&lt;/li&gt;
+ &lt;li&gt;&lt;b&gt;Technologie:&lt;/b&gt; Wir entwickeln robuste technische Lösungen, die das Internet über verschiedene Plattformen hinweg zum Leben erwecken.&lt;/li&gt;
+ &lt;li&gt;&lt;b&gt;Menschen:&lt;/b&gt; Wir entwickeln Führungspersonen und Mitwirkende in der Gemeinschaft, die das Internet erfinden, gestalten und verteidigen.&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;p&gt;Wir wir positive Veränderungen in Zukunft anpacken wollen&lt;/p&gt;
+ &lt;p&gt;Die Arbeitsweise ist ebensowichtig wie das Ziel. Unsere Gesundheit und bleibender Einfluss hängen davon ab, wie sehr unsere Produkte und Aktivitäten:&lt;/p&gt;
+ &lt;ol&gt;
+ &lt;li&gt;Interoperabilität, Open Source und offene Standards fördern,&lt;/li&gt;
+ &lt;li&gt;Gemeinschaften aufbauen und fördern,&lt;/li&gt;
+ &lt;li&gt;Für politische Veränderungen und rechtlichen Schutz eintreten sowie&lt;/li&gt;
+ &lt;li&gt;Netzbürger bilden und einbeziehen.&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;img alt=&quot;&quot; height=&quot;0&quot; src=&quot;http://piwik.michaelkohler.info/piwik.php?idsite=1&amp;amp;rec=1&amp;amp;url=https%3A%2F%2Fmichaelkohler.info%2F2016%2Fmozillas-strategische-leitlinien-fur-2016-und-danach&amp;amp;action_name=Mozillas+strategische+Leitlinien+f%C3%BCr+2016+und+danach&amp;amp;urlref=https%3A%2F%2Fmichaelkohler.info%2Ffeed&quot; style=&quot;border: 0; width: 0; height: 0;&quot; width=&quot;0&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-19T15:27:24+00:00</dc:date>
+ <dc:creator>Michael Kohler</dc:creator>
+ </item>
+ <item rdf:about="http://dlawrence.wordpress.com/?p=27">
+ <title>David Lawrence: happy bmo push day!</title>
+ <link>https://dlawrence.wordpress.com/2016/01/19/happy-bmo-push-day-3/</link>
+ <content:encoded>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238573&quot; target=&quot;_blank&quot;&gt;1238573&lt;/a&gt;] Change label of “New Bug” menu to “New/Clone Bug”&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239065&quot; target=&quot;_blank&quot;&gt;1239065&lt;/a&gt;] Project Kickoff Form: Adjustments needed to Mozilla Infosec review portion&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240157&quot; target=&quot;_blank&quot;&gt;1240157&lt;/a&gt;] Fix a typo in bug.rst&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1236461&quot; target=&quot;_blank&quot;&gt;1236461&lt;/a&gt;] Mass update mozilla-reps group&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/27/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;amp;blog=58816&amp;amp;post=27&amp;amp;subd=dlawrence&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-19T14:49:59+00:00</dc:date>
+ <dc:creator>dlawrence</dc:creator>
+ </item>
+ <item rdf:about="http://soledadpenades.com/?p=6335">
+ <title>Soledad Penades: Hardware Hack Day @ MozLDN, 1</title>
+ <link>http://soledadpenades.com/2016/01/19/hardware-hack-day-mozldn-1/</link>
+ <content:encoded>&lt;p&gt;Last week we ran an internal “hack day” here at the Mozilla space in London. It was just a bunch of &lt;em&gt;software&lt;/em&gt; engineers looking at various &lt;em&gt;hardware&lt;/em&gt; boards and things and learning about them &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Here’s what we did!&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://soledadpenades.com/&quot;&gt;Sole&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;I essentially &lt;a href=&quot;http://soledadpenades.com/2016/01/19/kind-of-bricking-an-arduino-duemilanove-by-exhausting-its-memory/&quot;&gt;kind of bricked my Arduino Duemilanove&lt;/a&gt; trying to get it working with Johnny Five, but it was fine–apparently there’s a way to recover it using another Arduino, and someone offered to help with that in the next &lt;a href=&quot;http://www.meetup.com/NodeBots-of-London/events/227890374/&quot;&gt;NodeBots&lt;/a&gt; London, which I’m going to attend.&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://ardeenelinfierno.com/&quot;&gt;Francisco&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Thinks he’s having issues with cables. It seems like the boards are not reset automatically by the Arduino IDE nowadays? He found the button in the board actually resets the board when pressed i.e. it’s the RESET button.&lt;/p&gt;
+ &lt;p&gt;On the Raspberry Pi side of things, he was very happy to put all his old-school Linux skills in action configuring network interfaces without GUIs!&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://gu.illau.me/&quot;&gt;Guillaume&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Played with mDNS advertising and listening to services on Raspberry Pi.&lt;/p&gt;
+ &lt;p&gt;(He was very quiet)&lt;/p&gt;
+ &lt;p&gt;(He also built a very nice LEGO case for the Raspberry Pi, but I do not have a picture, so just imagine it).&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://wilsonpage.co.uk/&quot;&gt;Wilson&lt;/a&gt;&lt;/h3&gt;
+ &lt;blockquote&gt;&lt;p&gt;
+ Wilson: “I got my Raspberry Pi on the Wi-Fi”&lt;/p&gt;
+ &lt;p&gt;Francisco: “Sorry?”&lt;/p&gt;
+ &lt;p&gt;Wilson: “I mean, you got my Raspberry Pi on the network. And now I’m trying to build a web app on the Pi…”&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://chrislord.net/&quot;&gt;Chris&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Exploring the Pebble with Linux. There’s a libpebble, and he managed to connect…&lt;/p&gt;
+ &lt;p&gt;&lt;del datetime=&quot;2016-01-20T11:22:33+00:00&quot;&gt;&lt;em&gt;&lt;small&gt;(sorry, I had to leave early so I do not know what else did Chris do!)&lt;/small&gt;&lt;/em&gt;&lt;/del&gt;&lt;/p&gt;
+ &lt;p&gt;Updated, 20 January: Chris told me he just managed to successfully connect to the Pebble watch using the bluetooth WebAPI. It requires two Gecko patches (one regression patch and one obvious logic error that he hasn’t filed yet). PROGRESS!&lt;/p&gt;
+ &lt;p&gt;~~~&lt;/p&gt;
+ &lt;p&gt;So as you can see we didn’t really get super far in just a day, and I even ended up with unusable hardware. BUT! we all learned something, and next time we know what NOT to do (or at least I DO KNOW what NOT to do!).&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://soledadpenades.com/?flattrss_redirect&amp;amp;id=6335&amp;amp;md5=40427d69faa3b9c2d1530732fd78e66d&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img alt=&quot;flattr this!&quot; src=&quot;http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T13:31:55+00:00</dc:date>
+ <dc:creator>sole</dc:creator>
+ </item>
+ <item rdf:about="http://daniel.haxx.se/blog/?p=8544">
+ <title>Daniel Stenberg: “Subject: Urgent Warning”</title>
+ <link>http://daniel.haxx.se/blog/2016/01/19/subject-urgent-warning/</link>
+ <content:encoded>&lt;p&gt;Back in December I got a desperate email from this person. A woman who said her Instagram had been hacked and since she found my contact info in the app she mailed me and asked for help. I of course replied and said that I have nothing to do with her being hacked but I also have nothing to do with Instagram other than that they use software I’ve written.&lt;/p&gt;
+ &lt;p&gt;Today she writes back. Clearly not convinced I told the truth before, and now she strikes back with more “evidence” of my wrongdoings.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Dear Daniel,&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;I had emailed you a couple months ago about my “screen dumps” aka screenshots and asked for your help with restoring my Instagram account since it had been hacked, my photos changed, and your name was included in the coding. You claimed to have no involvement whatsoever in developing a third party app for Instagram and could not help me salvage my original Instagram photos, pre-hacked, despite Instagram serving as my Photography portfolio and my career is a Photographer.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Since you weren’t aware that your name was attached to Instagram related hacking code, I thought you might want to know, in case you weren’t already aware, that your name is also included in Spotify terms and conditions. I came across this information using my Spotify which has also been hacked into and would love your help hacking out of Spotify. Also, I have yet to figure out how to unhack the hackers from my Instagram so if you change your mind and want to restore my Instagram to its original form as well as help me secure my account from future privacy breaches, I’d be extremely grateful. As you know, changing my passwords did nothing to resolve the problem. Please keep in mind that Facebook owns Instagram and these are big companies that you likely don’t want to have a trail of evidence that you are a part of an Instagram and Spotify hacking ring. Also, Spotify is a major partner of Spotify so you are likely familiar with the coding for all of these illegally developed third party apps. I’d be grateful for your help fixing this error immediately.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Thank you,&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;[name redacted]&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;P.S. Please see attached screen dump for a screen shot of your contact info included in Spotify (or what more likely seems to be a hacked Spotify developed illegally by a third party).&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393.png&quot; rel=&quot;attachment wp-att-8545&quot;&gt;&lt;img alt=&quot;Spotify credits screenshot&quot; class=&quot;aligncenter size-medium wp-image-8545&quot; height=&quot;450&quot; src=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393-253x450.png&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;Here’s the Instagram screenshot she sent me in a previous email:&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156.jpg&quot; rel=&quot;attachment wp-att-8546&quot;&gt;&lt;img alt=&quot;Instagram credits screenshot&quot; class=&quot;aligncenter size-medium wp-image-8546&quot; height=&quot;450&quot; src=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156-253x450.jpg&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I’ve tried to respond with calm and clear reasonable logic and technical details on why she’s seeing my name there. That clearly failed. What do I try next?&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T08:37:32+00:00</dc:date>
+ <dc:creator>Daniel Stenberg</dc:creator>
+ </item>
+ <item rdf:about="http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html">
+ <title>Emily Dunham: How much knowledge do you need to give a conference talk?</title>
+ <link>http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html</link>
+ <content:encoded>&lt;h3&gt;How much knowledge do you need to give a conference talk?&lt;/h3&gt;
+ &lt;p&gt;I was recently asked an excellent question when I promoted the &lt;a class=&quot;reference external&quot; href=&quot;http://www.linuxfestnorthwest.org/2016/present&quot;&gt;LFNW CFP&lt;/a&gt; on
+ IRC:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;div&gt;As someone who has never done a talk, but wants to, what kind of knowledge
+ do you need about a subject to give a talk on it?&lt;/div&gt;&lt;/blockquote&gt;
+ &lt;p&gt;If you answer “yes” to any of the following questions, you know enough to
+ propose a talk:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Do you have a &lt;strong&gt;hobby&lt;/strong&gt; that most tech people aren’t experts on? Talk
+ about applying a lesson or skill from that hobby to tech! For instance, I
+ turned a habit of reading about psychology into my &lt;a class=&quot;reference external&quot; href=&quot;http://talks.edunham.net/scale13x/#1&quot;&gt;Human Hacking&lt;/a&gt; talk.&lt;/li&gt;
+ &lt;li&gt;Have you ever spent a bunch of hours forcing two tools to work with each
+ other, because the documentation wasn’t very helpful and Googling didn’t get
+ you very far, and built something useful? “How to build ___ with ___” makes
+ a catchy talk title, if the &lt;strong&gt;thing you built&lt;/strong&gt; solves a common problem.&lt;/li&gt;
+ &lt;li&gt;Have you ever had a mentor sit down with you and explain a tool or
+ technique, and the new understanding improved the quality of your work or
+ code? Passing along useful &lt;strong&gt;lessons from your mentors&lt;/strong&gt; is a valuable talk,
+ because it allows others to benefit from the knowledge without taking as
+ much of your mentor’s time.&lt;/li&gt;
+ &lt;li&gt;Have you seen a dozen newbies ask the same question over the course of a few
+ months? When your &lt;strong&gt;answer to a common question&lt;/strong&gt; starts to feel like a
+ broken record, it’s time to compose it into a talk then link the newbies to
+ your slides or recording!&lt;/li&gt;
+ &lt;li&gt;Have you taken a really &lt;strong&gt;interesting class&lt;/strong&gt; lately? Can you distill part of it
+ into a 1-hour lesson that would appeal to nerds who don’t have the time or
+ resources to take the class themselves? (thanks &lt;a class=&quot;reference external&quot; href=&quot;http://lucywyman.me/&quot;&gt;lucyw&lt;/a&gt; for adding this to
+ the list!)&lt;/li&gt;
+ &lt;li&gt;Have you built a cool thing that over a dozen other people use? A &lt;strong&gt;tutorial
+ talk&lt;/strong&gt; can not only expand your community, but its recording can augment your
+ documentation and make the project more accessible for those who prefer to
+ learn directly from humans!&lt;/li&gt;
+ &lt;li&gt;Did you benefit from a really great introductory talk when you were learning
+ a tool? Consider doing your own tutorial! Any conference with beginners in
+ their target audience needs at least one Git lesson, an IRC talk, and some
+ discussions of how to use basic Unix utilities. These &lt;strong&gt;introductory talks&lt;/strong&gt;
+ are actually better when given by someone who learned the technology
+ relatively recently, because newer users remember what it’s like not to know
+ how to use it. Just remember to have a more expert user look over your slides
+ before you present, in case you made an incorrect assumption about the tool’s
+ more advanced functionality.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;I personally try to propose talks I want to hear, because the dealine of a
+ CFP or conference is great motivation to prioritize a cool project over
+ ordinary chores.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T08:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="https://quality.mozilla.org/?p=49441">
+ <title>QMO: Aurora 45.0 Testday Results</title>
+ <link>https://quality.mozilla.org/2016/01/aurora-45-0-testday-results/</link>
+ <content:encoded>&lt;p&gt;Howdy mozillians!&lt;/p&gt;
+ &lt;p&gt;Last week – on &lt;em&gt;Friday, January 15th&lt;/em&gt; – we held &lt;a href=&quot;https://quality.mozilla.org/2016/01/firefox-45-0-aurora-testday-january-15th/&quot;&gt;Aurora 45.0 Testday&lt;/a&gt;; and, of course, it was another outstanding event!&lt;/p&gt;
+ &lt;p&gt;&lt;strong&gt;Thank you&lt;/strong&gt; all – &lt;span class=&quot;author-a-oz90z4z89zz89za7qfz70zda5z87zxz85z i&quot;&gt;&lt;i&gt;Mahmoudi Dris, Iryna Thompson, Chandrakant Dhutadmal, Preethi Dhinesh, Moin Shaikh, Ilse Macías, Hossain Al Ikram, Rezaul Huque Nayeem, Tahsan Chowdhury Akash, Kazi Nuzhat Tasnem, Fahmida Noor, Tazin Ahmed, Md. Ehsanul Hassan, Mohammad Maruf Islam, Kazi Sakib Ahmad, Khalid Syfullah Zaman, Asiful Kabir, Tabassum Mehnaz, Hasibul Hasan, Saddam Hossain, Mohammad Kamran Hossain, Amlan Biswas, Fazle Rabbi, Mohammed Jawad Ibne Ishaque, Asif Mahmud Shuvo, Nazir Ahmed Sabbir, Md. Raihan Ali, Md. Almas Hossain, Sadik Khan, Md. Faysal Alam Riyad, Faisal Mahmud, Md. Oliullah Sizan, Asif Mahmud Rony, Forhad Hossain &lt;/i&gt;and&lt;i&gt; Tanvir Rahman &lt;/i&gt;&lt;/span&gt;– for the participation!&lt;/p&gt;
+ &lt;p&gt;A big &lt;strong&gt;thank you&lt;/strong&gt; to all our active moderators too!&lt;/p&gt;
+ &lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;u&gt;Results:&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;15&lt;/strong&gt; issues were verified: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; &lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1235821&quot;&gt;1235821&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1228518&quot;&gt;1228518&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1165637&quot;&gt;1165637&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1232647&quot;&gt;1232647&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1235379&quot;&gt;1235379&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=842356&quot;&gt;842356&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222971&quot;&gt;1222971&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=915962&quot;&gt;915962&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1180761&quot;&gt;1180761&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1218455&quot;&gt;1218455&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222747&quot;&gt;1222747&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210752&quot;&gt;1210752&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1198450&quot;&gt;1198450&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222820&quot;&gt;1222820&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1225514&quot;&gt;1225514&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; bug was triaged: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1230789&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;1230789&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;some failures were mentioned for &lt;i&gt;Search Refactoring &lt;/i&gt;feature in the etherpads (&lt;a href=&quot;https://public.etherpad-mozilla.org/p/testday-20160115&quot;&gt;link 1&lt;/a&gt; and &lt;a href=&quot;https://public.etherpad-mozilla.org/p/bangladesh.testday-15012016&quot;&gt;link 2&lt;/a&gt;); please feel free to add the requested details in the etherpads or, even better, join us on &lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot; target=&quot;_blank&quot;&gt;#qa IRC channel&lt;/a&gt; and let’s figure them out&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;I &lt;strong&gt;strongly&lt;/strong&gt; advise everyone of you to reach out to us, the moderators, via &lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot;&gt;#qa&lt;/a&gt; during the events when you encountered any kind of failures. Keep up the great work! \o/&lt;/p&gt;
+ &lt;p&gt;And keep an eye on QMO for upcoming events! &lt;img alt=&quot;😉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/72x72/1f609.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-19T07:51:57+00:00</dc:date>
+ <dc:creator>Alexandra Lucinet</dc:creator>
+ </item>
+ <item rdf:about="http://blog.monotonous.org/?p=678">
+ <title>Eitan Isaacson: It’s MLK Day and It’s Not Too Late to Do Something About It</title>
+ <link>http://blog.monotonous.org/2016/01/18/its-mlk-day-and-its-not-too-late-to-do-something-about-it/</link>
+ <content:encoded>&lt;p&gt;For the last three years I have had the opportunity to send out a reminder to Mozilla staff that Martin Luther King Jr. Day is coming up, and that U.S. employees get the day off. It has turned into my MLK Day eve ritual. I read his letters, listen to speeches, and then I compose a belabored paragraph about Dr. King with some choice quotes.&lt;/p&gt;
+ &lt;p&gt;If you didn’t get a chance to celebrate Dr. King’s legacy and the movements he was a part of, you still have a chance:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Watch &lt;a href=&quot;http://www.imdb.com/title/tt1020072/&quot; target=&quot;_blank&quot;&gt;Selma.&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Watch &lt;a href=&quot;http://www.imdb.com/title/tt1592527/&quot; target=&quot;_blank&quot;&gt;The Black Power Mixtape&lt;/a&gt; (it’s on Netflix).&lt;/li&gt;
+ &lt;li&gt;Read &lt;a href=&quot;http://www.africa.upenn.edu/Articles_Gen/Letter_Birmingham.html&quot; target=&quot;_blank&quot;&gt;A Letter from a Birmingham Jail&lt;/a&gt; (it’s really really good).&lt;/li&gt;
+ &lt;li&gt;Listen to his speech &lt;a href=&quot;https://www.youtube.com/watch?v=3Qf6x9_MLD0&quot; target=&quot;_blank&quot;&gt;Beyond Vietnam&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Listen to his last speech &lt;a href=&quot;https://www.youtube.com/watch?v=IDl84vusXos&quot; target=&quot;_blank&quot;&gt;I Have Been To The Mountaintop&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/blogdotmonotonousdotorg.wordpress.com/678/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/blogdotmonotonousdotorg.wordpress.com/678/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://pixel.wp.com/b.gif?host=blog.monotonous.org&amp;amp;blog=34885741&amp;amp;post=678&amp;amp;subd=blogdotmonotonousdotorg&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-18T23:35:19+00:00</dc:date>
+ <dc:creator>Eitan</dc:creator>
+ </item>
+ <item rdf:about="http://www.ncameron.org/blog/rss/0e4d587c-380c-40ce-954a-7206f69bc1dd">
+ <title>Nick Cameron: Libmacro</title>
+ <link>http://www.ncameron.org/blog/libmacro/</link>
+ <content:encoded>&lt;p&gt;As I outlined in an &lt;a href=&quot;http://ncameron.org/blog/procedural-macros-framework/&quot;&gt;earlier post&lt;/a&gt;, libmacro is a new crate designed to be used by procedural macro authors. It provides the basic API for procedural macros to interact with the compiler. I expect higher level functionality to be provided by library crates. In this post I'll go into a bit more detail about the API I think should be exposed here.&lt;/p&gt;
+
+ &lt;p&gt;This is a lot of stuff. I've probably missed something. If you use syntax extensions today and do something with libsyntax that would not be possible with libmacro, please let me know!&lt;/p&gt;
+
+ &lt;p&gt;I previously introduced &lt;code&gt;MacroContext&lt;/code&gt; as one of the gateways to libmacro. All procedural macros will have access to a &lt;code&gt;&amp;amp;mut MacroContext&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;h3&gt;Tokens&lt;/h3&gt;
+
+ &lt;p&gt;I described the &lt;code&gt;tokens&lt;/code&gt; module in the last post, I won't repeat that here.&lt;/p&gt;
+
+ &lt;p&gt;There are a few more things I thought of. I mentioned a &lt;code&gt;TokenStream&lt;/code&gt; which is a sequence of tokens. We should also have &lt;code&gt;TokenSlice&lt;/code&gt; which is a borrowed slice of tokens (the slice to &lt;code&gt;TokenStream&lt;/code&gt;'s &lt;code&gt;Vec&lt;/code&gt;). These should implement the standard methods for sequences, in particular they support iteration, so can be &lt;code&gt;map&lt;/code&gt;ed, etc.&lt;/p&gt;
+
+ &lt;p&gt;In the earlier blog post, I talked about a token kind called &lt;code&gt;Delimited&lt;/code&gt; which contains a delimited sequence of tokens. I would like to rename that to &lt;code&gt;Sequence&lt;/code&gt; and add a &lt;code&gt;None&lt;/code&gt; variant to the &lt;code&gt;Delimiter&lt;/code&gt; enum. The &lt;code&gt;None&lt;/code&gt; option is so that we can have blocks of tokens without using delimiters. It will be used for noting unsafety and other properties of tokens. Furthermore, it is useful for macro expansion (replacing the interpolated AST tokens currently present). Although &lt;code&gt;None&lt;/code&gt; blocks do not affect scoping, they do affect precedence and parsing.&lt;/p&gt;
+
+ &lt;p&gt;We should provide API for creating tokens. By default these have no hygiene information and come with a span which has no place in the source code, but shows the source of the token to be the procedural macro itself (see below for how this interacts with expansion of the current macro). I expect a &lt;code&gt;make_&lt;/code&gt; function for each kind of token. We should also have API for creating macros in a given scope (which do the same thing but with provided hygiene information). This could be considered an over-rich API, since the hygiene information could be set after construction. However, since hygiene is fiddly and annoying to get right, we should make it as easy as possible to work with.&lt;/p&gt;
+
+ &lt;p&gt;There should also be a function for creating a token which is just a fresh name. This is useful for creating new identifiers. Although this can be done by interning a string and then creating a token around it, it is used frequently enough to deserve a helper function.&lt;/p&gt;
+
+ &lt;h3&gt;Emitting errors and warnings&lt;/h3&gt;
+
+ &lt;p&gt;Procedural macros should report errors, warnings, etc. via the &lt;code&gt;MacroContext&lt;/code&gt;. They should avoid panicking as much as possible since this will crash the compiler (once &lt;code&gt;catch_panic&lt;/code&gt; is available, we should use it to catch such panics and exit gracefully, however, they will certainly still meaning aborting compilation).&lt;/p&gt;
+
+ &lt;p&gt;Libmacro will 're-export' &lt;code&gt;DiagnosticBuilder&lt;/code&gt; from &lt;a href=&quot;https://dxr.mozilla.org/rust/source/src/libsyntax/errors/mod.rs&quot;&gt;syntax::errors&lt;/a&gt;. I don't actually expect this to be a literal re-export. We will use libmacro's version of &lt;code&gt;Span&lt;/code&gt;, for example.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;impl MacroContext {
+ pub fn struct_error(&amp;amp;self, &amp;amp;str) -&amp;gt; DiagnosticBuilder;
+ pub fn error(&amp;amp;self, Option&amp;lt;Span&amp;gt;, &amp;amp;str);
+ }
+
+ pub mod errors {
+ pub struct DiagnosticBuilder { ... }
+ impl DiagnosticBuilder { ... }
+ pub enum ErrorLevel { ... }
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;There should be a macro &lt;code&gt;try_emit!&lt;/code&gt;, which reduces a &lt;code&gt;Result&amp;lt;T, ErrStruct&amp;gt;&lt;/code&gt; to a T or calls &lt;code&gt;emit()&lt;/code&gt; and then calls &lt;code&gt;unreachable!()&lt;/code&gt; (if the error is not fatal, then it should be upgraded to a fatal error).&lt;/p&gt;
+
+ &lt;h3&gt;Tokenising and quasi-quoting&lt;/h3&gt;
+
+ &lt;p&gt;The simplest function here is &lt;code&gt;tokenize&lt;/code&gt; which takes a string (&lt;code&gt;&amp;amp;str&lt;/code&gt;) and returns a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt;. The string is treated like source text. The success option is the tokenised version of the string. I expect this function must take a &lt;code&gt;MacroContext&lt;/code&gt; argument.&lt;/p&gt;
+
+ &lt;p&gt;We will offer a quasi-quoting macro. This will return a &lt;code&gt;TokenStream&lt;/code&gt; (in contrast to today's quasi-quoting which returns AST nodes), to be precise a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt;. The string which is quoted may include metavariables (&lt;code&gt;$x&lt;/code&gt;), and these are filled in with variables from the environment. The type of the variables should be either a &lt;code&gt;TokenStream&lt;/code&gt;, a &lt;code&gt;TokenTree&lt;/code&gt;, or a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt; (in this last case, if the variable is an error, then it is just returned by the macro). For example,&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;fn foo(cx: &amp;amp;mut MacroContext, tokens: TokenStream) -&amp;gt; TokenStream {
+ quote!(cx, fn foo() { $tokens }).unwrap()
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;quote!&lt;/code&gt; macro can also handle multiple tokens when the variable corresponding with the metavariable has type &lt;code&gt;[TokenStream]&lt;/code&gt; (or is dereferencable to it). In this case, the same syntax as used in macros-by-example can be used. For example, if &lt;code&gt;x: Vec&amp;lt;TokenStream&amp;gt;&lt;/code&gt; then &lt;code&gt;quote!(cx, ($x),*)&lt;/code&gt; will produce a &lt;code&gt;TokenStream&lt;/code&gt; of a comma-separated list of tokens from the elements of &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;Since the &lt;code&gt;tokenize&lt;/code&gt; function is a degenerate case of quasi-quoting, an alternative would be to always use &lt;code&gt;quote!&lt;/code&gt; and remove &lt;code&gt;tokenize&lt;/code&gt;. I believe there is utility in the simple function, and it must be used internally in any case.&lt;/p&gt;
+
+ &lt;p&gt;These functions and macros should create tokens with spans and hygiene information set as described above for making new tokens. We might also offer versions which takes a scope and uses that as the context for tokenising.&lt;/p&gt;
+
+ &lt;h3&gt;Parsing helper functions&lt;/h3&gt;
+
+ &lt;p&gt;There are some common patterns for tokens to follow in macros. In particular those used as arguments for attribute-like macros. We will offer some functions which attempt to parse tokens into these patterns. I expect there will be more of these in time; to start with:&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod parsing {
+ // Expects `(foo = &quot;bar&quot;),*`
+ pub fn parse_keyed_values(&amp;amp;TokenSlice, &amp;amp;mut MacroContext) -&amp;gt; Result&amp;lt;Vec&amp;lt;(InternedString, String)&amp;gt;, ErrStruct&amp;gt;;
+ // Expects `&quot;bar&quot;`
+ pub fn parse_string(&amp;amp;TokenSlice, &amp;amp;mut MacroContext) -&amp;gt; Result&amp;lt;String, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;To be honest, given the token design in the last post, I think &lt;code&gt;parse_string&lt;/code&gt; is unnecessary, but I wanted to give more than one example of this kind of function. If &lt;code&gt;parse_keyed_values&lt;/code&gt; is the only one we end up with, then that is fine.&lt;/p&gt;
+
+ &lt;h3&gt;Pattern matching&lt;/h3&gt;
+
+ &lt;p&gt;The goal with the pattern matching API is to allow procedural macros to operate on tokens in the same way as macros-by-example. The pattern language is thus the same as that for macros-by-example.&lt;/p&gt;
+
+ &lt;p&gt;There is a single macro, which I propose calling &lt;code&gt;matches&lt;/code&gt;. Its first argument is the name of a &lt;code&gt;MacroContext&lt;/code&gt;. Its second argument is the input, which must be a &lt;code&gt;TokenSlice&lt;/code&gt; (or dereferencable to one). The third argument is a pattern definition. The macro produces a &lt;code&gt;Result&amp;lt;T, ErrStruct&amp;gt;&lt;/code&gt; where &lt;code&gt;T&lt;/code&gt; is the type produced by the pattern arms. If the pattern has multiple arms, then each arm must have the same type. An error is produced if none of the arms in the pattern are matched.&lt;/p&gt;
+
+ &lt;p&gt;The pattern language follows the language for defining macros-by-example (but is slightly stricter). There are two forms, a single pattern form and a multiple pattern form. If the first character is a &lt;code&gt;{&lt;/code&gt; then the pattern is treated as a multiple pattern form, if it starts with &lt;code&gt;(&lt;/code&gt; then as a single pattern form, otherwise an error (causes a panic with a &lt;code&gt;Bug&lt;/code&gt; error, as opposed to returning an &lt;code&gt;Err&lt;/code&gt;).&lt;/p&gt;
+
+ &lt;p&gt;The single pattern form is &lt;code&gt;(pattern) =&amp;gt; { code }&lt;/code&gt;. The multiple pattern form is &lt;code&gt;{(pattern) =&amp;gt; { code } (pattern) =&amp;gt; { code } ... (pattern) =&amp;gt; { code }}&lt;/code&gt;. &lt;code&gt;code&lt;/code&gt; is any old Rust code which is executed when the corresponding pattern is matched. The pattern follows from macros-by-example - it is a series of characters treated as literals, meta-variables indicated with &lt;code&gt;$&lt;/code&gt;, and the syntax for matching multiple variables. Any meta-variables are available as variables in the righthand side, e.g., &lt;code&gt;$x&lt;/code&gt; becomes available as &lt;code&gt;x&lt;/code&gt;. These variables have type &lt;code&gt;TokenStream&lt;/code&gt; if they appear singly or &lt;code&gt;Vec&amp;lt;TokenStream&amp;gt;&lt;/code&gt; if they appear multiply (or &lt;code&gt;Vec&amp;lt;Vec&amp;lt;TokenStream&amp;gt;&amp;gt;&lt;/code&gt; and so forth).&lt;/p&gt;
+
+ &lt;p&gt;Examples:&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;matches!(cx, input, (foo($x:expr) bar) =&amp;gt; {quote(cx, foo_bar($x).unwrap()}).unwrap()
+
+ matches!(cx, input, {
+ () =&amp;gt; {
+ cx.err(&quot;No input?&quot;);
+ }
+ (foo($($x:ident),+ bar) =&amp;gt; {
+ println!(&quot;found {} idents&quot;, x.len());
+ quote!(($x);*).unwrap()
+ }
+ }
+ })
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;Note that since we match AST items here, our backwards compatibility story is a bit complicated (though hopefully not much more so than with current macros).&lt;/p&gt;
+
+ &lt;h3&gt;Hygiene&lt;/h3&gt;
+
+ &lt;p&gt;The intention of the design is that the actual hygiene algorithm applied is irrelevant. Procedural macros should be able to use the same API if the hygiene algorithm changes (of course the result of applying the API might change). To this end, all hygiene objects are opaque and cannot be directly manipulated by macros.&lt;/p&gt;
+
+ &lt;p&gt;I propose one module (&lt;code&gt;hygiene&lt;/code&gt;) and two types: &lt;code&gt;Context&lt;/code&gt; and &lt;code&gt;Scope&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;A &lt;code&gt;Context&lt;/code&gt; is attached to each token and contains all hygiene information about that token. If two tokens have the same &lt;code&gt;Context&lt;/code&gt;, then they may be compared syntactically. The reverse is not true - two tokens can have different &lt;code&gt;Context&lt;/code&gt;s and still be equal. &lt;code&gt;Context&lt;/code&gt;s can only be created by applying the hygiene algorithm and cannot be manipulated, only moved and stored.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;fresh_hygiene_context&lt;/code&gt; for creating a new, fresh &lt;code&gt;Context&lt;/code&gt; (i.e., a &lt;code&gt;Context&lt;/code&gt; not shared with any other tokens).&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;expansion_hygiene_context&lt;/code&gt; for getting the &lt;code&gt;Context&lt;/code&gt; where the macro is defined. This is equivalent to &lt;code&gt;.expansion_scope().direct_context()&lt;/code&gt;, but might be more efficient (and I expect it to be used a lot).&lt;/p&gt;
+
+ &lt;p&gt;A &lt;code&gt;Scope&lt;/code&gt; provides information about a position within an AST at a certain point during macro expansion. For example,&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;fn foo() {
+ a
+ {
+ b
+ c
+ }
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; will have different &lt;code&gt;Scope&lt;/code&gt;s. &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; will have the same &lt;code&gt;Scope&lt;/code&gt;s, even if &lt;code&gt;b&lt;/code&gt; was written in this position and &lt;code&gt;c&lt;/code&gt; is due to macro expansion. However, a &lt;code&gt;Scope&lt;/code&gt; may contain more information than just the syntactic scopes, for example, it may contain information about pending scopes yet to be applied by the hygiene algorithm (i.e., information about &lt;code&gt;let&lt;/code&gt; expressions which are in scope).&lt;/p&gt;
+
+ &lt;p&gt;Note that a &lt;code&gt;Scope&lt;/code&gt; means a scope in the macro hygiene sense, not the commonly used sense of a scope declared with &lt;code&gt;{}&lt;/code&gt;. In particular, each &lt;code&gt;let&lt;/code&gt; statement starts a new scope and the items and statements in a function body are in different scopes.&lt;/p&gt;
+
+ &lt;p&gt;The functions &lt;code&gt;lookup_item_scope&lt;/code&gt; and &lt;code&gt;lookup_statement_scope&lt;/code&gt; take a &lt;code&gt;MacroContext&lt;/code&gt; and a path, represented as a &lt;code&gt;TokenSlice&lt;/code&gt;, and return the &lt;code&gt;Scope&lt;/code&gt; which that item defines or an error if the path does not refer to an item, or the item does not define a scope of the right kind.&lt;/p&gt;
+
+ &lt;p&gt;The function &lt;code&gt;lookup_scope_for&lt;/code&gt; is similar, but returns the &lt;code&gt;Scope&lt;/code&gt; in which an item is declared.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;expansion_scope&lt;/code&gt; for getting the scope in which the current macro is being expanded.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a method &lt;code&gt;direct_context&lt;/code&gt; which returns a &lt;code&gt;Context&lt;/code&gt; for items declared directly (c.f., via macro expansion) in that &lt;code&gt;Scope&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a method &lt;code&gt;nested&lt;/code&gt; which creates a fresh &lt;code&gt;Scope&lt;/code&gt; nested within the receiver scope.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a static method &lt;code&gt;empty&lt;/code&gt; for creating an empty scope, that is one with no scope information at all (note that this is different from a top-level scope).&lt;/p&gt;
+
+ &lt;p&gt;I expect the exact API around &lt;code&gt;Scope&lt;/code&gt;s and &lt;code&gt;Context&lt;/code&gt;s will need some work. &lt;code&gt;Scope&lt;/code&gt; seems halfway between an intuitive, algorithm-neutral abstraction, and the scopes from the sets of scopes hygiene algorithm. I would prefer a &lt;code&gt;Scope&lt;/code&gt; should be more abstract, on the other hand, macro authors may want fine-grained control over hygiene application.&lt;/p&gt;
+
+ &lt;h4&gt;Manipulating hygiene information on tokens,&lt;/h4&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod hygiene {
+ pub fn add(cx: &amp;amp;mut MacroContext, t: &amp;amp;Token, scope: &amp;amp;Scope) -&amp;gt; Token;
+ // Maybe unnecessary if we have direct access to Tokens.
+ pub fn set(t: &amp;amp;Token, cx: &amp;amp;Context) -&amp;gt; Token;
+ // Maybe unnecessary - can use set with cx.expansion_hygiene_context().
+ // Also, bad name.
+ pub fn current(cx: &amp;amp;MacroContext, t: &amp;amp;Token) -&amp;gt; Token;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;add&lt;/code&gt; adds &lt;code&gt;scope&lt;/code&gt; to any context already on &lt;code&gt;t&lt;/code&gt; (&lt;code&gt;Context&lt;/code&gt; should have a similar method). Note that the implementation is a bit complex - the nature of the &lt;code&gt;Scope&lt;/code&gt; might mean we replace the old context completely, or add to it.&lt;/p&gt;
+
+ &lt;h4&gt;Applying hygiene when expanding the current macro&lt;/h4&gt;
+
+ &lt;p&gt;By default, the current macro will be expanded in the standard way, having hygiene applied as expected. Mechanically, hygiene information is added to tokens when the macro is expanded. Assuming the sets of scopes algorithm, scopes (for example, for the macro's definition, and for the introduction) are added to any scopes already present on the token. A token with no hygiene information will thus behave like a token in a macro-by-example macro. Hygiene due to nested scopes created by the macro do not need to be taken into account by the macro author, this is handled at expansion time.&lt;/p&gt;
+
+ &lt;p&gt;Procedural macro authors may want to customise hygiene application (it is common in Racket), for example, to introduce items that can be referred to by code in the call-site scope.&lt;/p&gt;
+
+ &lt;p&gt;We must provide an option to expand the current macro without applying hygiene; the macro author must then handle hygiene. For this to work, the macro must be able to access information about the scope in which it is applied (see &lt;code&gt;MacroContext::expansion_scope&lt;/code&gt;, above) and to supply a &lt;code&gt;Scope&lt;/code&gt; indicating scopes that should be added to tokens following the macro expansion.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod hygiene {
+ pub enum ExpansionMode {
+ Automatic,
+ Manual(Scope),
+ }
+ }
+
+ impl MacroContext {
+ pub fn set_hygienic_expansion(hygiene::ExpansionMode);
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;We may wish to offer other modes for expansion which allow for tweaking hygiene application without requiring full manual application. One possible mode is where the author provides a &lt;code&gt;Scope&lt;/code&gt; for the macro definition (rather than using the scope where the macro is actually defined), but hygiene is otherwise applied automatically. We might wish to give the author the option of applying scopes due to the macro definition, but not the introduction scopes.&lt;/p&gt;
+
+ &lt;p&gt;On a related note, might we want to affect how spans are applied when the current macro is expanded? I can't think of a use case right now, but it seems like something that might be wanted.&lt;/p&gt;
+
+ &lt;p&gt;Blocks of tokens (that is a &lt;code&gt;Sequence&lt;/code&gt; token) may be marked (not sure how, exactly, perhaps using a distinguished context) such that it is expanded without any hygiene being applied or spans changed. There should be a function for creating such a &lt;code&gt;Sequence&lt;/code&gt; from a &lt;code&gt;TokenSlice&lt;/code&gt; in the &lt;code&gt;tokens&lt;/code&gt; module. The primary motivation for this is to handle the tokens representing the body on which an annotation-like macro is present. For a 'decorator' macro, these tokens will be untouched (passed through by the macro), and since they are not touched by the macro, they should appear untouched by it (in terms of hygiene and spans).&lt;/p&gt;
+
+ &lt;h3&gt;Applying macros&lt;/h3&gt;
+
+ &lt;p&gt;We provide functionality to expand a provided macro or to lookup and expand a macro.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod apply {
+ pub fn expand_macro(cx: &amp;amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;amp;TokenSlice,
+ macro_scope: Scope,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;(TokenStream, Scope), ErrStruct&amp;gt;;
+ pub fn lookup_and_expand_macro(cx: &amp;amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;(TokenStream, Scope), ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;These functions apply macro hygiene in the usual way, with &lt;code&gt;expansion_scope&lt;/code&gt; dictating the scope into which the macro is expanded. Other spans and hygiene information is taken from the tokens. &lt;code&gt;expand_macro&lt;/code&gt; takes pending scopes from &lt;code&gt;macro_scope&lt;/code&gt;, &lt;code&gt;lookup_and_expand_macro&lt;/code&gt; uses the proper pending scopes. In order to apply the hygiene algorithm, the result of the macro must be parsable. The returned scope will contain pending scopes that can be applied by the macro to subsequent tokens.&lt;/p&gt;
+
+ &lt;p&gt;We could provide versions that don't take an &lt;code&gt;expansion_scope&lt;/code&gt; and use &lt;code&gt;cx.expansion_scope()&lt;/code&gt;. Probably unnecessary.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod apply {
+ pub fn expand_macro_unhygienic(cx: &amp;amp;mut MacroContext,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;TokenStream, ErrStruct&amp;gt;;
+ pub fn lookup_and_expand_macro_unhygienic(cx: &amp;amp;mut MacroContext,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;TokenStream, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;_unhygienic&lt;/code&gt; variants expand a macro as in the first functions, but do not apply the hygiene algorithm or change any hygiene information. Any hygiene information on tokens is preserved. I'm not sure if &lt;code&gt;_unhygienic&lt;/code&gt; are the right names - using these is not necessarily unhygienic, just that we are automatically applying the hygiene algorithm.&lt;/p&gt;
+
+ &lt;p&gt;Note that all these functions are doing an eager expansion of macros, or in Scheme terms they are &lt;code&gt;local-expand&lt;/code&gt; functions. &lt;/p&gt;
+
+ &lt;h3&gt;Looking up items&lt;/h3&gt;
+
+ &lt;p&gt;The function &lt;code&gt;lookup_item&lt;/code&gt; takes a &lt;code&gt;MacroContext&lt;/code&gt; and a path represented as a &lt;code&gt;TokenSlice&lt;/code&gt; and returns a &lt;code&gt;TokenStream&lt;/code&gt; for the item referred to by the path, or an error if name resolution failed. I'm not sure where this function should live.&lt;/p&gt;
+
+ &lt;h3&gt;Interned strings&lt;/h3&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod strings {
+ pub struct InternedString;
+
+ impl InternedString {
+ pub fn get(&amp;amp;self) -&amp;gt; String;
+ }
+
+ pub fn intern(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ pub fn find(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ pub fn find_or_intern(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;intern&lt;/code&gt; interns a string and returns a fresh &lt;code&gt;InternedString&lt;/code&gt;. &lt;code&gt;find&lt;/code&gt; tries to find &lt;em&gt;an&lt;/em&gt; existing &lt;code&gt;InternedString&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;h3&gt;Spans&lt;/h3&gt;
+
+ &lt;p&gt;A span gives information about where in the source code a token is defined. It also gives information about where the token came from (how it was generated, if it was generated code).&lt;/p&gt;
+
+ &lt;p&gt;There should be a &lt;code&gt;spans&lt;/code&gt; module in libmacro, which will include a &lt;code&gt;Span&lt;/code&gt; type which can be easily inter-converted with the &lt;code&gt;Span&lt;/code&gt; defined in libsyntax. Libsyntax spans currently include information about stability, this will not be present in libmacro spans.&lt;/p&gt;
+
+ &lt;p&gt;If the programmer does nothing special with spans, then they will be 'correct' by default. There are two important cases: tokens passed to the macro and tokens made fresh by the macro. The former will have the source span indicating where they were written and will include their history. The latter will have no source span and indicate they were created by the current macro. All tokens will have the history relating to expansion of the current macro added when the macro is expanded. At macro expansion, tokens with no source span will be given the macro use-site as their source.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Span&lt;/code&gt;s can be freely copied between tokens.&lt;/p&gt;
+
+ &lt;p&gt;It will probably useful to make it easy to manipulate spans. For example, rather than point at the macro's defining function, point at a helper function where the token is made. Or to set the origin to the current macro when the token was produced by another which should an implementation detail. I'm not sure what such an interface should look like (and is probably not necessary in an initial library).&lt;/p&gt;
+
+ &lt;h3&gt;Feature gates&lt;/h3&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod features {
+ pub enum FeatureStatus {
+ // The feature gate is allowed.
+ Allowed,
+ // The feature gate has not been enabled.
+ Disallowed,
+ // Use of the feature is forbidden by the compiler.
+ Forbidden,
+ }
+
+ pub fn query_feature(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_unused(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_by_str_unused(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+
+ pub fn used_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn used_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+
+ pub fn allow_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn allow_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn disallow_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn disallow_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;query_*&lt;/code&gt; functions query if a feature gate has been set. They return an error if the feature gate does not exist. The &lt;code&gt;_unused&lt;/code&gt; variants do not mark the feature gate as used. The &lt;code&gt;used_&lt;/code&gt; functions mark a feature gate as used, or return an error if it does not exist.&lt;/p&gt;
+
+ &lt;p&gt;The &lt;code&gt;allow_&lt;/code&gt; and &lt;code&gt;disallow_&lt;/code&gt; functions set a feature gate as allowed or disallowed for the current crate. These functions will only affect feature gates which take affect after parsing and expansion are complete. They do not affect feature gates which are checked during parsing or expansion.&lt;/p&gt;
+
+ &lt;p&gt;Question: do we need the &lt;code&gt;used_&lt;/code&gt; functions? Could just call &lt;code&gt;query_&lt;/code&gt; and ignore the result.&lt;/p&gt;
+
+ &lt;h3&gt;Attributes&lt;/h3&gt;
+
+ &lt;p&gt;We need some mechanism for setting attributes as used. I don't actually know how the unused attribute checking in the compiler works, so I can't spec this area. But, I expect &lt;code&gt;MacroContext&lt;/code&gt; to make available some interface for reading attributes on a macro use and marking them as used.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-18T21:40:42+00:00</dc:date>
+ <dc:creator>Nick Cameron</dc:creator>
+ </item>
+ <item rdf:about="http://geekyogre.com/rss/63eb682d-66b4-447d-8fb6-f4ed448019df">
+ <title>Seif Lotfy: Skizze progress and REPL</title>
+ <link>http://geekyogre.com/skizze-progress-and-repl/</link>
+ <content:encoded>&lt;p&gt;&lt;img align=&quot;center&quot; height=&quot;190&quot; src=&quot;http://i.imgur.com/9z47NdA.png&quot; width=&quot;600&quot; /&gt; &lt;br /&gt;
+ &lt;br /&gt; &lt;br /&gt;
+ Over the last 3 weeks, based on feedback we proceeded fledging out the concepts and the code behind &lt;a href=&quot;https://github.com/skizzehq/skizze&quot;&gt;Skizze&lt;/a&gt;. &lt;br /&gt;
+ &lt;a href=&quot;https://medium.com/@njpatel/&quot;&gt;Neil Patel&lt;/a&gt; suggested the following:&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;em&gt;So I've been thinking about the server API. I think we want to choose one thing and do it as well as possible, instead of having six ways to talk to the server. I think that helps to keep things sane and simple overall.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;Thinking about usage, I can only really imagine Skizze in an environment like &lt;a href=&quot;https://xamarin.com/insights&quot;&gt;ours&lt;/a&gt;, which is high-throughput. I think that is it's 'home' and we should be optimising for that all day long.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;Taking that into account, I believe we have two options:&lt;/em&gt;&lt;/p&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;&lt;p&gt;&lt;em&gt;We go the gRPC route, provide .proto files and let people use the existing gRPC tooling to build support for their favourite language. That means we can happily give Ruby/Node/C#/etc devs a real way to get started up with Skizze almost immediately, piggy-backing on the gRPC docs etc.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;p&gt;&lt;em&gt;We absorb the Redis Protocol. It does everything we need, is very lean, and we can (mostly) easily adapt it for what we need to do. The downside is that to get support from other libs, there will have to be actual libraries for every language. This could slow adoption, or it might be easy enough if people can reuse existing REDIS code. It's hard to tell how that would end up.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+
+ &lt;p&gt;&lt;em&gt;gRPC is interesting because it's built already for distributed systems, across bad networks, and obviously is bi-directional etc. Without us having to spend time on the protocol, gRPC let's us easily add features that require streaming. Like, imagine a client being able to listen for changes in count/size and be notified instantly. That's something that gRPC is built for right now.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;I think gRPC is a bit verbose, but I think it'll pay off for ease of third-party lib support and as things grow.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;The CLI could easily be built to work with gRPC, including adding support for streaming stuff etc. Which could be pretty exciting.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;That being said, we gave Skizze &lt;a href=&quot;https://github.com/skizzehq/&quot;&gt;a new home&lt;/a&gt;, where based on feedback we developed .proto files and started rewriting big chunks of the code.&lt;/p&gt;
+
+ &lt;p&gt;We added a new wrapper called &quot;domain&quot; which represents a stream. It wraps around Count-Min-Log, Bloom Filter, Top-K and HyperLogLog++, so when feeding it values it feeds all the sketches. Later we intend to allow attaching and detaching sketches from &quot;domains&quot; (We need a better name).&lt;/p&gt;
+
+ &lt;p&gt;We also implemented a gRPC API which should allow easy wrapper creation in other languages.&lt;/p&gt;
+
+ &lt;p&gt;Special thanks go to &lt;a href=&quot;https://twitter.com/martinpintob&quot;&gt;Martin Pinto&lt;/a&gt; for helping out with unit tests and &lt;a href=&quot;http://dopeness.org&quot;&gt;Soren Macbeth&lt;/a&gt; for thorough feedback and ideas about the &quot;domain&quot; concept. &lt;br /&gt;
+ Take a look at our initial REPL work there:&lt;/p&gt;
+
+ &lt;p&gt;&lt;a href=&quot;http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif&quot;&gt;&lt;img alt=&quot;Link to this page&quot; border=&quot;0&quot; src=&quot;http://geekyogre.com/content/images/2016/01/skizze-1.png&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
+ &lt;a href=&quot;http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif&quot;&gt;click for GIF&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-18T17:41:43+00:00</dc:date>
+ <dc:creator>Seif Lotfy</dc:creator>
+ </item>
+ <item rdf:about="http://dougbelshaw.com/blog/?p=39986">
+ <title>Doug Belshaw: What a post-Persona landscape means for Open Badges</title>
+ <link>http://dougbelshaw.com/blog/2016/01/18/open-badges-persona/</link>
+ <content:encoded>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; I don’t work for Mozilla any more, so (like &lt;a href=&quot;https://www.youtube.com/watch?v=YQHsXMglC9A&quot;&gt;Adele&lt;/a&gt;) these are my thoughts ‘from the outside’…&lt;/em&gt;&lt;/p&gt;
+ &lt;hr /&gt;
+ &lt;h3&gt;Introduction&lt;/h3&gt;
+ &lt;p&gt;&lt;a href=&quot;http://openbadges.org&quot;&gt;Open Badges&lt;/a&gt; is no longer a &lt;a href=&quot;http://mozilla.org&quot;&gt;Mozilla&lt;/a&gt; project. In fact, it hasn’t been for a while — the &lt;a href=&quot;http://badgealliance.org&quot;&gt;Badge Alliance&lt;/a&gt; was set up a couple of years ago to promote the specification on a both a technical and community basis. As I stated in a recent post, this is a &lt;strong&gt;good&lt;/strong&gt; thing and means that &lt;a href=&quot;http://dougbelshaw.com/blog/2015/11/08/bright-future-badges/&quot;&gt;the future is bright for Open Badges&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;However, Mozilla &lt;em&gt;is&lt;/em&gt; still involved with the Open Badges project: Mark Surman, Executive Director of the Mozilla Foundation, sits on the board of the Badge Alliance. Mozilla also pays for contractors to work on the &lt;a href=&quot;http://backpack.openbadges.org&quot;&gt;Open Badges backpack&lt;/a&gt; and there were badges earned at the &lt;a href=&quot;http://mozillafestival.org&quot;&gt;Mozilla Festival&lt;/a&gt; a few months ago.&lt;/p&gt;
+ &lt;p&gt;Although it may seem strange for those used to corporates interested purely in profit, Mozilla creates what the open web needs at any given time. Like any organisation, sometimes it gets these wrong, either because the concept was flawed, or because the execution was poor. Other times, I’d argue, Mozilla doesn’t give ideas and concepts enough time to gain traction.&lt;/p&gt;
+ &lt;h3&gt;The end of Persona at Mozilla&lt;/h3&gt;
+ &lt;p&gt;Open Badges, at its very essence, is a technical specification. It allows credentials with metadata hard-coded into them to be issued, exchanged, and displayed. This is done in a secure, standardised manner.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;OBI diagram&quot; class=&quot;alignnone wp-image-39987 size-full&quot; src=&quot;http://i1.wp.com/dougbelshaw.com/blog/wp-content/uploads/2016/01/obi-diagram.png?w=100%25&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;For users to be able to access their ‘backpack’ (i.e. the place they store badges) they needed a secure login system.Back in 2011 at the start of the Open Badges project it made sense to make use of Mozilla’s nascent &lt;a href=&quot;https://www.mozilla.org/en-US/persona/&quot;&gt;Persona&lt;/a&gt; project. This aimed to provide a way for users to easily sign into sites around the web without using their Facebook/Google logins. These ‘social’ sign-in methods mean that users are tracked around the web — something that Mozilla was obviously against.&lt;/p&gt;
+ &lt;p&gt;By 2014, Persona wasn’t seen to be having the kind of ‘growth trajectory’ that Mozilla wanted. The project was transferred to &lt;a href=&quot;http://identity.mozilla.com/post/78873831485/transitioning-persona-to-community-ownership&quot;&gt;community ownership&lt;/a&gt; and most of the team left Mozilla in 2015. It was &lt;a href=&quot;https://groups.google.com/forum/#!msg/mozilla.dev.identity/mibOQrD6K0c/kt0NdMWbEQAJ&quot;&gt;announced&lt;/a&gt; that Persona would be shutting down as a Mozilla service in November 2016. While Persona will exist as an open source project, it won’t be hosted by Mozilla.&lt;/p&gt;
+ &lt;h3&gt;What this means for Open Badges&lt;/h3&gt;
+ &lt;p&gt;Although I’m not aware of an official announcement from the Badge Alliance, I think it’s worth making three points here.&lt;/p&gt;
+ &lt;h5&gt;1. You can still use Persona&lt;/h5&gt;
+ &lt;p&gt;If you’re a developer, you can still use Persona. It’s open source. It works.&lt;/p&gt;
+ &lt;h5&gt;2. Persona is not central to the Open Badges Infrastructure&lt;/h5&gt;
+ &lt;p&gt;The Open Badges backpack is &lt;em&gt;one&lt;/em&gt; place where users can store their badges. There are others, including the &lt;a href=&quot;https://openbadgepassport.com/&quot;&gt;Open Badge Passport&lt;/a&gt; and &lt;a href=&quot;https://www.openbadgeacademy.com/&quot;&gt;Open Badge Academy&lt;/a&gt;. MacArthur, who seed-funded the Open Badges ecosystem, have a new platform launching through &lt;a href=&quot;https://www.lrng.org/&quot;&gt;LRNG&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;It is up to the organisations behind these various solutions as to how they allow users to authenticate. They may choose to allow social logins. They may force users to create logins based on their email address. They may decide to use an open source version of Persona. It’s entirely up to them.&lt;/p&gt;
+ &lt;h5&gt;3. A post-Persona badges system has its advantages&lt;/h5&gt;
+ &lt;p&gt;The Persona authentication system runs off email addresses. This means that transitioning &lt;em&gt;from&lt;/em&gt; Persona to another system is relatively straightforward. It has, however, meant that for the past few years we’ve had a recurrent problem: what do you do with people being issued badges to multiple email addresses?&lt;/p&gt;
+ &lt;p&gt;Tying badges to emails seemed like the easiest and fastest way to get to a critical mass in terms of Open Badge adoption. Now that’s worked, we need to think in a more nuanced way about allowing users to tie multiple identities to a single badge.&lt;/p&gt;
+ &lt;h4&gt;Conclusion&lt;/h4&gt;
+ &lt;p&gt;Persona was always a slightly awkward fit for Open Badges. Although, for a time, it made sense to use Persona for authentication to the Open Badges backpack, we’re now in a post-Persona landscape. This brings with it certain advantages.&lt;/p&gt;
+ &lt;p&gt;As Nate Otto wrote in his post &lt;a href=&quot;https://medium.com/badge-alliance/open-badges-in-2016-a-look-ahead-3cfe5c3c9878#.l5mhiztwx&quot;&gt;Open Badges in 2016: A Look Ahead&lt;/a&gt;, the project is growing up. It’s time to move beyond what was expedient at the dawn of Open Badges and look to the future. I’m sad to see the decline of Persona, but I’m excited what the future holds!&lt;/p&gt;
+ &lt;p style=&quot;text-align: right;&quot;&gt;&lt;em&gt;Header image CC BY-NC-SA &lt;a href=&quot;https://www.flickr.com/photos/blmiers2/6904758951/&quot;&gt;Barbara&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-18T11:34:19+00:00</dc:date>
+ <dc:creator>Doug Belshaw</dc:creator>
+ </item>
+ <item rdf:about="tag:this-week-in-rust.org,2016-01-18:blog/2016/01/18/this-week-in-rust-114/">
+ <title>This Week In Rust: This Week in Rust 114</title>
+ <link>http://this-week-in-rust.org/blog/2016/01/18/this-week-in-rust-114/</link>
+ <content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
+ &lt;a href=&quot;http://rust-lang.org&quot;&gt;Rust&lt;/a&gt; is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; or &lt;a href=&quot;mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion&quot;&gt;send us an
+ email&lt;/a&gt;!
+ Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love
+ contributions&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/cmr/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt;.
+ If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/cmr/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;This week's edition was edited by: &lt;a href=&quot;https://github.com/nasa42&quot;&gt;nasa42&lt;/a&gt;, &lt;a href=&quot;https://github.com/brson&quot;&gt;brson&lt;/a&gt;, and &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;Updates from Rust Community&lt;/h3&gt;
+ &lt;h4&gt;News &amp;amp; Blog Posts&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://gregchapple.com/contributing-to-the-rust-compiler/&quot;&gt;Guide: Contributing to the Rust compiler&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.ncameron.org/blog/a-type-safe-and-zero-allocation-library-for-reading-and-navigating-elf-files/&quot;&gt;A type-safe and zero-allocation library for reading and navigating ELF files&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[podcast] &lt;a href=&quot;http://www.newrustacean.com/show_notes/e009/&quot;&gt;New Rustacean podcast episode 09&lt;/a&gt;. Getting into the nitty-gritty with Rust's traits.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://jadpole.github.io/arcaders/arcaders-1-12/&quot;&gt;ArcadeRS 1.12: Brawl, at last&lt;/a&gt;! Part of the series &lt;a href=&quot;https://jadpole.github.io/arcaders/arcaders-1-0/&quot;&gt;ArcadeRS 1.0: The project&lt;/a&gt; - a series whose objective is to explore the Rust programming language and ecosystem through the development of a simple, old-school shooter.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://blog.thiago.me/raspberry-pi-bare-metal-programming-with-rust/&quot;&gt;Raspberry Pi bare metal programming with Rust&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://blog.servo.org/2016/01/11/twis-47/&quot;&gt;This week in Servo 47&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.redox-os.org/news/this-week-in-redox-10/&quot;&gt;This week in Redox OS 10&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Notable New Crates &amp;amp; Project Updates&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/ebkalderon/amethyst&quot;&gt;Amethyst&lt;/a&gt;. Data-oriented game engine written in Rust.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust website&lt;/a&gt; has received some &lt;a href=&quot;https://www.reddit.com/r/rust/comments/40zxey/major_website_updates/&quot;&gt;major updates&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://packages.debian.org/stretch/rustc&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://packages.debian.org/stretch/cargo&quot;&gt;Cargo&lt;/a&gt; are now available in Debian stretch.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://community.particle.io/t/rust-on-particle-call-for-contributors/19090&quot;&gt;Rust on Particle: Call for contributors&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://dwrensha.github.io/capnproto-rust/2016/01/11/async-rpc.html&quot;&gt;capnp-rpc-rust rewritten to use async I/O&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/Ogeon/palette&quot;&gt;Palette&lt;/a&gt;. A Rust library for linear color calculations and conversion.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Updates from Rust Core&lt;/h3&gt;
+ &lt;p&gt;164 pull requests were &lt;a href=&quot;https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-11..2016-01-18&quot;&gt;merged in the last week&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;See the &lt;a href=&quot;https://internals.rust-lang.org/t/triage-digest-tue-jan-05-2016/3052&quot;&gt;triage digest&lt;/a&gt; and &lt;a href=&quot;https://internals.rust-lang.org/t/subteam-reports-2016-01-08/3067&quot;&gt;subteam reports&lt;/a&gt; for more details.&lt;/p&gt;
+ &lt;h4&gt;Notable changes&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30943&quot;&gt;std: Stabilize APIs for the 1.7 release&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/27807&quot;&gt;Refactor and improve: Arena, TypedArena&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/29498&quot;&gt;Let &lt;code&gt;str::replace&lt;/code&gt; take a pattern&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30295&quot;&gt;rustc_resolve: Fix bug in duplicate checking for extern crates&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30426&quot;&gt;Rewrite BTreeMap to use parent pointers&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30446&quot;&gt;Support generic associated consts&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30509&quot;&gt;Add an &lt;code&gt;impl&lt;/code&gt; for &lt;code&gt;Box&amp;lt;Error&amp;gt;&lt;/code&gt; from String&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30533&quot;&gt;Introduce &quot;obligation forest&quot; data structure into fulfillment to track backtraces&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30538&quot;&gt;Remove negate_unsigned feature gate&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30567&quot;&gt;llvm: Add support for vectorcall (X86_VectorCall) convention&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30676&quot;&gt;Make coherence more tolerant of error types&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30740&quot;&gt;Add fast path for ASCII in UTF-8 validation&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30753&quot;&gt;Downgrade unit struct match via S(..) warnings to errors&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30930&quot;&gt;Move const block checks before lowering step&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New Contributors&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Anton Blanchard&lt;/li&gt;
+ &lt;li&gt;Jonas Tepe&lt;/li&gt;
+ &lt;li&gt;Jörg Krause&lt;/li&gt;
+ &lt;li&gt;Joshua Olson&lt;/li&gt;
+ &lt;li&gt;kalita.alexey&lt;/li&gt;
+ &lt;li&gt;Pierre Krieger&lt;/li&gt;
+ &lt;li&gt;Sergey Veselkov&lt;/li&gt;
+ &lt;li&gt;Simon Martin&lt;/li&gt;
+ &lt;li&gt;Steffen&lt;/li&gt;
+ &lt;li&gt;tomaka&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Approved RFCs&lt;/h4&gt;
+ &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments)
+ process&lt;/a&gt;. These
+ are the RFCs that were approved for implementation this week:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1331&quot;&gt;RFC 1331: &lt;code&gt;src/grammar&lt;/code&gt; for the canonical grammar of the Rust language&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Final Comment Period&lt;/h4&gt;
+ &lt;p&gt;Every week &lt;a href=&quot;https://rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. &lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;This week's FCPs&lt;/a&gt; are:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1462&quot;&gt;Add &lt;code&gt;[&lt;/code&gt; to the FOLLOW(ty) in macro future-proofing rules&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1457&quot;&gt;Rewrite &lt;code&gt;for&lt;/code&gt; loop desugaring to use language items&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1320&quot;&gt;Amend 1192 (RangeInclusive) to use an enum&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/243&quot;&gt;Trait-based exception handling&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1361&quot;&gt;Improve Cargo target-specific dependencies&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1129&quot;&gt;Add a &lt;code&gt;IndexAssign&lt;/code&gt; trait that allows overloading &quot;indexed assignment&quot; expressions like &lt;code&gt;a[b] = c&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1196&quot;&gt;Allow eliding more type parameters&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1296&quot;&gt;Add an &lt;code&gt;alias&lt;/code&gt; attribute to &lt;code&gt;#[link]&lt;/code&gt; and &lt;code&gt;-l&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New RFCs&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1459&quot;&gt;Add a used attribute to prevent symbols from being discarded&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1461&quot;&gt;Move some net2 functionality into libstd&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1465&quot;&gt;Add &lt;code&gt;some!&lt;/code&gt; macro for unwrapping Option more safely&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1467&quot;&gt;Stabilize the &lt;code&gt;volatile_load&lt;/code&gt; and &lt;code&gt;volatile_store&lt;/code&gt; intrinsics as &lt;code&gt;ptr::volatile_read&lt;/code&gt; and &lt;code&gt;ptr::volatile_write&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Upcoming Events&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Meetup-Hamburg/events/227838367/&quot;&gt;1/19. Rust Hack and Learn Hamburg @ Ponton&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Bay-Area/events/227841778/&quot;&gt;1/21. SF Bay Area: Rust Concurrency and Parallelism&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/opentechschool-berlin/&quot;&gt;1/27. OpenTechSchool Berlin: Rust Hack and Learn&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
+ it mentioned here. Email &lt;a href=&quot;mailto:erick.tryzelaar@gmail.com&quot;&gt;Erick Tryzelaar&lt;/a&gt; or &lt;a href=&quot;mailto:banderson@mozilla.com&quot;&gt;Brian
+ Anderson&lt;/a&gt; for access.&lt;/p&gt;
+ &lt;h3&gt;fn work(on: RustProject) -&amp;gt; Money&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://maidsafe.net/rust_engineer.html&quot;&gt;Rust Engineer&lt;/a&gt; at MaidSafe.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/ozy21fwU&quot;&gt;Research Engineer - Servo&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/o0H41fww&quot;&gt;Senior Research Engineer - Rust&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://plv.mpi-sws.org/rustbelt/&quot;&gt;PhD and postdoc positions&lt;/a&gt; at MPI-SWS.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;em&gt;Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; to get your job offers listed here!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;Crate of the Week&lt;/h3&gt;
+ &lt;p&gt;This week's Crate of the Week is &lt;a href=&quot;https://github.com/alexcrichton/toml-rs&quot;&gt;toml&lt;/a&gt;, a crate for all our configuration needs, simple yet effective.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/stebalien&quot;&gt;Steven Allen&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Submit your suggestions for next week&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;Quote of the Week&lt;/h3&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Borrow/lifetime errors are usually Rust compiler bugs.
+ Typically, I will spend 20 minutes detailing the precise conditions of
+ the bug, using language that understates my immense knowledge, while
+ demonstrating sympathetic understanding of the pressures placed on a
+ Rust compiler developer, who is also probably studying for several exams
+ at the moment. The developer reading my bug report may not understand
+ this stuff as well as I do, so I will carefully trace the lifetimes of
+ each variable, where memory is allocated on the stack vs the heap, which
+ struct or function owns a value at any point in time, where borrows
+ begin and where they... oh yeah, actually that variable really doesn't
+ live long enough.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;p&gt;— &lt;a href=&quot;https://www.reddit.com/r/rust/comments/4084yx/my_trick_when_i_get_stuck_as_a_beginner/cysqz3s&quot;&gt;peterjoel on /r/rust&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/WaDelma&quot;&gt;Wa Delma&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Submit your quotes for next week&lt;/a&gt;!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-18T05:00:00+00:00</dc:date>
+ <dc:creator>Corey Richardson</dc:creator>
+ </item>
+ <item rdf:about="http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html">
+ <title>Nikki Bee: Okay, But What Does Your Work Actually Mean, Nikki? Part 2: The Fetch Standard and Servo</title>
+ <link>http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html</link>
+ <content:encoded>&lt;p&gt;In my previous post, I started discussing in more detail what my internship entails, by talking about my first contribution to Servo. As a refresher, my first contribution was as part of my application to Outreachy, which I later revisited during my internship after a change I introduced to the HTML Standard it relied on. I’m going to expand on that last point today- specifically, how easy it is to introduce changes in &lt;a href=&quot;https://wiki.whatwg.org/wiki/FAQ#What_is_the_WHATWG.3F&quot;&gt;WHATWG&lt;/a&gt;’s various standards. I’m also going to talk about how this accessibility to changing web standards affects how I can understand it, how I can help improve it, and my work on Servo.&lt;/p&gt;
+
+ &lt;h3&gt;Two Ways To Change&lt;/h3&gt;
+
+ &lt;p&gt;There are many ways to &lt;a href=&quot;https://wiki.whatwg.org/wiki/What_you_can_do&quot;&gt;get involved with WHATWG&lt;/a&gt;, but there are two that I’ve become the most familiar with: firstly, by opening a discussion about a perceived issue and asking how it should be resolved; secondly, by taking on an issue approved as needing change and making the desired change. I’ve almost entirely only done the former, and the latter only for some minor typos. Any changes that relate directly to my work, however minor, are significant for me though! Like I discussed in my previous post, I brought attention to &lt;a href=&quot;https://github.com/whatwg/html/issues/296&quot;&gt;an inconsistency&lt;/a&gt; that was resolved, giving me a new task of updating my first contribution to Servo to reflect the change in the HTML Standard. I’ve done that several times since, for the Fetch Standard.&lt;/p&gt;
+
+ &lt;h3&gt;Understanding Fetch&lt;/h3&gt;
+
+ &lt;p&gt;My first two weeks of my internship were spent on reading through the majority of the &lt;a href=&quot;https://fetch.spec.whatwg.org/&quot;&gt;Fetch Standard&lt;/a&gt;, primarily the various Fetch functions. I took many notes describing the steps to myself, annotated with questions I had and the answers I got from either other people on the Servo team who had worked with Fetch (including my internship mentor, of course!) or people from WHATWG who were involved in the Fetch Standard. Getting so familiar with Fetch meant a few things: I would notice minor errors (such as an out of date link) that I could submit a &lt;a href=&quot;https://github.com/whatwg/fetch/pull/173&quot;&gt;simple fix for&lt;/a&gt;, or a bigger issue that I couldn’t resolve myself.&lt;/p&gt;
+
+ &lt;h3&gt;Discussions &amp;amp; Resolutions&lt;/h3&gt;
+
+ &lt;p&gt;I’m going to go into more detail about some of those bigger issues. From my perspective, when I start a discussion about a piece of documentation (such as the Fetch Standard, or reading about a programming library Servo uses), I go into it thinking “Either this documentation is incorrect, or my understanding is incorrect”. Whichever the answer is, it doesn’t mean that the documentation is bad, or that I’m bad at reading comprehension. I understand best by building up a model of something in my head, putting that to practice, and asking a lot of questions along the way. I learn by getting things wrong and figuring out why I was wrong, and sometimes in the process I uncover a point that could be made more clear, or an inconsistency! I have good examples of both of the different outcomes I listed, which I’ll cover over the next two sections.&lt;/p&gt;
+
+ &lt;h5&gt;Looking For The Big Picture&lt;/h5&gt;
+
+ &lt;p&gt;Early on in my initial review of the Fetch Standard’s several protocols, I found a major step that seemed to have no use. I understood that since I was learning Fetch on a step-by-step basis, I did not have a view of the bigger picture, so I asked around what I was missing that would help me understand this. One of the people I work with on implementing Fetch agreed with me that the step seemed to have no purpose, and so we decided to &lt;a href=&quot;https://github.com/whatwg/fetch/issues/174&quot;&gt;open an issue&lt;/a&gt; asking about removing it from the standard. It turned out that I had actually missed the meaning of it, as we learned. However, instead of leaving it there, I shifted the issue into asking for some explanatory notes on why this step is needed, which was fulfilled. This meant that I would have a reference to go back to should I forget the significance of the step, and that people reading the Fetch Standard in the future would be much less likely to come to the same incorrect conclusion I had.&lt;/p&gt;
+
+ &lt;h5&gt;A Confusing Order&lt;/h5&gt;
+
+ &lt;p&gt;Shortly after I had first discovered that apparent issue, I found myself struggling to comprehend a sequence of actions in another Fetch protocol. The specification seemed to say that part of an early step was meant to only be done after the final step. I unfortunately don’t remember details of the discussion I had about this- if there was a reason for why it was organized like this, I forget what it was. Regardless, it was agreed that &lt;a href=&quot;https://github.com/whatwg/fetch/issues/176&quot;&gt;moving those sub-steps&lt;/a&gt; to be actually listed after the step they’re supposed to run after would be a good change. This meant that I would need to re-organize my notes to reflect the re-arranged sequence of actions, as well as have an easier time being able to follow this part of the Fetch Standard.&lt;/p&gt;
+
+ &lt;h3&gt;A Living Standard&lt;/h3&gt;
+
+ &lt;p&gt;Like I said at the start of this post, I’m going to talk about how changes in the Fetch Standard affects my work on Servo itself. What I’ve covered so far has mostly been how changes affect my understanding of the standard itself. A key aspect in understanding the Fetch protocols is reviewing them for updates that impact me. WHATWG labels every standard they author as a “&lt;a href=&quot;https://wiki.whatwg.org/wiki/FAQ#What_does_.22Living_Standard.22_mean.3F&quot;&gt;Living Standard&lt;/a&gt;” for good reason. It was one thing for me to learn how easy it is to introduce changes, while knowing exactly what’s going on, but it’s another for me to understand that anybody else can, and often does, make changes to the Fetch Standard!&lt;/p&gt;
+
+ &lt;h5&gt;Changes Over Time&lt;/h5&gt;
+
+ &lt;p&gt;When an update is made to the Fetch Standard, it’s not so difficult to deal with as one might imagine. The Fetch Standard always notes the last day it was updated at the top of the document, I follow a Twitter account that &lt;a href=&quot;https://twitter.com/fetchstandard&quot;&gt;posts about updates&lt;/a&gt;, and all the history can be &lt;a href=&quot;https://github.com/whatwg/fetch/commits&quot;&gt;seen on GitHub&lt;/a&gt; which will show me exactly what has been changed as well as some discussion on what the change does. All of these together alert me to the fact that the Fetch Standard has been modified, and I can quickly see what was revised. If it’s relevant to what I’m going to be implementing, I update my notes to match it. Occasionally, I need to change existing code to reflect the new Standard, which is also easily done by comparing my new notes to the Fetch implementation in Servo!&lt;/p&gt;
+
+ &lt;h5&gt;Snapshots&lt;/h5&gt;
+
+ &lt;p&gt;From all of this, it might sound like the Fetch Standard is unfinished, or unreliable/inconsistent. I don’t mean to misrepresent it- the many small improvements help make the Fetch Standard, like all of WHATWG’s standards, better and more reliable. You can think of the status of the Fetch Standard at any point in time as a single, working snapshot. If somebody implemented all of Fetch as it is now, they’d have something that works by itself correctly. A different snapshot of Fetch is just that- different. It will have an improvement or two, but that doesn’t obsolete anybody who implemented it previously. It just means if they revisit the implementation, they’ll have things to update.&lt;/p&gt;
+
+ &lt;p&gt;Third post over.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-17T20:20:27+00:00</dc:date>
+ </item>
+ <item rdf:about="http://ngokevin.com/blog/aframe-component/">
+ <title>Kevin Ngo: How to Write an A-Frame VR Component</title>
+ <link>http://ngokevin.com/blog/aframe-component/</link>
+ <content:encoded>&lt;img align=&quot;left&quot; hspace=&quot;5&quot; src=&quot;http://thevrjump.com/assets/img/articles/aframe-system/aframe-example.jpg&quot; width=&quot;320&quot; /&gt;Abstract representation of components by @rubenmueller of thevrjump.com.
+
+ &lt;p&gt;&lt;a href=&quot;http://ngokevin.com/blog/aframe&quot;&gt;A-Frame&lt;/a&gt; is a WebVR framework that introduces the
+ &lt;a href=&quot;http://ngokevin.com/blog/aframe-vs-3dml&quot;&gt;entity-component system&lt;/a&gt; (&lt;a href=&quot;http://ngokevin.com/rss/docs&quot;&gt;docs&lt;/a&gt;) to the DOM. The
+ entity-component system treats every &lt;strong&gt;entity&lt;/strong&gt; in the scene as a placeholder
+ object which we apply and mix &lt;strong&gt;components&lt;/strong&gt; to in order to add appearance,
+ behavior, and functionality. A-Frame comes with some standard components out of
+ the box like camera, geometry, material, light, or sound. However, people can
+ write, publish, and register their own components to do &lt;strong&gt;whatever&lt;/strong&gt; they want
+ like have entities &lt;a href=&quot;https://github.com/dmarcos/a-invaders/tree/master/js/components&quot;&gt;collide/explode/spawn&lt;/a&gt;, be controlled by
+ &lt;a href=&quot;https://github.com/ngokevin/aframe-physics-components&quot;&gt;physics&lt;/a&gt;, or &lt;a href=&quot;https://jsbin.com/dasefeh/edit?html,output&quot;&gt;follow a path&lt;/a&gt;. Today, we'll be going through
+ how we can write our own A-Frame components.&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Note that this tutorial will be covering the upcoming release of &lt;a href=&quot;https://github.com/aframevr/aframe/blob/dev/CHANGELOG.md#dev&quot;&gt;A-Frame
+ 0.2.0&lt;/a&gt; which vastly improves the component API.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;h3&gt;Table of Contents&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#what-a-component-looks-like&quot;&gt;What a Component Looks Like&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#from-the-dom&quot;&gt;From the DOM&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#under-the-hood&quot;&gt;Under the Hood&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#defining-the-schema&quot;&gt;Defining the Schema&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#property-types&quot;&gt;Property Types&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#single-property-schemas&quot;&gt;Single-Property Schemas&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#multiple-property-schemas&quot;&gt;Multiple-Property Schemas&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#defining-the-lifecycle-methods&quot;&gt;Defining the Lifecycle Methods&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-init-set-up&quot;&gt;Component.init() - Set Up&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-update-olddata-do-the-magic&quot;&gt;Component.update(oldData) - Do the Magic&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-remove-tear-down&quot;&gt;Component.remove() - Tear Down&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-tick-time-background-behavior&quot;&gt;Component.tick() - Background Behavior&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-pause-and-component-play-stop-and-go&quot;&gt;Component.pause() and Component.play() - Stop and Go&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#boilerplate&quot;&gt;Boilerplate&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#examples&quot;&gt;Examples&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#text-component&quot;&gt;Text Component&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#physics-components&quot;&gt;Physics Components&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#layout-component&quot;&gt;Layout Component&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;What a Component Looks Like&lt;/h3&gt;
+ &lt;p&gt;A component contains a bucket of data in the form of component properties. This
+ data is used to modify the entity. For example, we might have an &lt;em&gt;engine&lt;/em&gt;
+ component. Possible properties might be &lt;em&gt;horsepower&lt;/em&gt; or &lt;em&gt;cylinders&lt;/em&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://thevrjump.com/assets/img/articles/aframe-system/aframe-system.jpg&quot; /&gt;
+ &lt;/p&gt;&lt;div class=&quot;page-caption&quot;&gt;&lt;span&gt;
+ Abstract representation of a component by @rubenmueller of thevrjump.com.
+ &lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;h4&gt;From the DOM&lt;/h4&gt;
+ &lt;p&gt;Let's first see what a component looks like from the DOM.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light component&lt;/a&gt; has properties such as type, color,
+ and intensity. In A-Frame, we register and configure a component to an entity
+ using an HTML attribute and a style-like syntax:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;This would give us a light in the scene. To demonstrate composability, we could
+ give the light a spherical representation by mixing in the &lt;a href=&quot;https://aframe.io/docs/components/geometry.html&quot;&gt;geometry
+ component&lt;/a&gt;.&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;geometry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;primitive: sphere; radius: 5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Or we can configure the position component to move the light sphere a bit to the right.&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;geometry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;primitive: sphere; radius: 5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;5 0 0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Given the style-like syntax and that it modifies the appearance and behavior of
+ DOM nodes, component properties can be thought of as a rough analog to CSS. In
+ the near future, I can imagine component property stylesheets.&lt;/p&gt;
+ &lt;h4&gt;Under the Hood&lt;/h4&gt;
+ &lt;p&gt;Now let's see what a component looks like &lt;strong&gt;under the hood&lt;/strong&gt;. A-Frame's most
+ basic component is the &lt;a href=&quot;https://aframe.io/docs/components/position.html&quot;&gt;position component&lt;/a&gt;:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'position'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;The position component uses only a tiny subset of the component API, but what
+ this does is register the component with the name &quot;position&quot;, define a &lt;code&gt;schema&lt;/code&gt;
+ where the component's value with be parsed to an &lt;code&gt;{x, y, z}&lt;/code&gt; object, and when
+ the component initializes or the component's data updates, set the position of
+ the entity with the &lt;code&gt;update&lt;/code&gt; callback. &lt;code&gt;this.el&lt;/code&gt; is a reference from the
+ component to the DOM element, or entity, and &lt;code&gt;object3D&lt;/code&gt; is the entity's
+ &lt;a href=&quot;http://threejs.org/&quot;&gt;three.js&lt;/a&gt;. Note that A-Frame is built on top of three.js so many
+ components will be using the three.js API.&lt;/p&gt;
+ &lt;p&gt;So we see that components consist of a name and a definition, and then they can
+ be registered to A-Frame. We saw the the position component definition defined
+ a &lt;code&gt;schema&lt;/code&gt; and an &lt;code&gt;update&lt;/code&gt; handler. Components simply consist of the &lt;code&gt;schema&lt;/code&gt;,
+ which defines the shape of the data, and several handlers for the component to
+ modify the entity in reaction to different types of events.&lt;/p&gt;
+ &lt;p&gt;Here is the current list of properties and methods of a component definition:&lt;/p&gt;
+ &lt;table class=&quot;pure-table-striped&quot;&gt;
+ &lt;tbody&gt;&lt;tr&gt;
+ &lt;th&gt;Property&lt;/th&gt;
+ &lt;th&gt;Description&lt;/th&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;data&lt;/td&gt;
+ &lt;td&gt;Data of the component derived from the schema default values, mixins, and the entity's attributes.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;el&lt;/td&gt;
+ &lt;td&gt;Reference to the &lt;a href=&quot;https://aframe.io/docs/core/entity.html&quot;&gt;entity&lt;/a&gt; element.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;schema&lt;/td&gt;
+ &lt;td&gt;Names, types, and default values of the component property value(s)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;&lt;/table&gt;
+
+ &lt;table class=&quot;pure-table-striped&quot;&gt;
+ &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Method&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;init&lt;/td&gt;
+ &lt;td&gt;Called once when the component is initialized.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;update&lt;/td&gt;
+ &lt;td&gt;Called both when the component is initialized and whenever the component's data changes (e.g, via &lt;i&gt;setAttribute&lt;/i&gt;).&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;remove&lt;/td&gt;
+ &lt;td&gt;Called when the component detaches from the element (e.g., via &lt;i&gt;removeAttribute&lt;/i&gt;).&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;tick&lt;/td&gt;
+ &lt;td&gt;Called on each render loop or tick of the scene.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;play&lt;/td&gt;
+ &lt;td&gt;Called whenever the scene or entity plays to add any background or dynamic behavior.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;pause&lt;/td&gt;
+ &lt;td&gt;Called whenever the scene or entity pauses to remove any background or dynamic behavior.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;&lt;/table&gt;
+
+ &lt;h3&gt;Defining the Schema&lt;/h3&gt;
+ &lt;p&gt;The component's schema defines what type of data it takes. A component can
+ either be single-property or consist of multiple properties. And properties
+ have &lt;em&gt;property types&lt;/em&gt;. Note that single-property schemas and property types are
+ being released in A-Frame &lt;code&gt;v0.2.0&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;A property might look like:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'int'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;And a schema consisting of multiple properties might look like:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'#FFF'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'selector'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;uv&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'1 1'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;' '&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;parseFloat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Since components in the entity-component system are just buckets of data that
+ are used to affect the appearance or behavior of the entity, the schema plays a
+ crucial role in the definition of the component.&lt;/p&gt;
+ &lt;h4&gt;Property Types&lt;/h4&gt;
+ &lt;p&gt;A-Frame comes with several built-in property types such as &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;,
+ &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;selector&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, or &lt;code&gt;vec3&lt;/code&gt;. Every single property is assigned a
+ type, whether explicitly through the &lt;code&gt;type&lt;/code&gt; key or implictly via inferring the
+ value. And each type is used to assign &lt;code&gt;parse&lt;/code&gt; and &lt;code&gt;stringify&lt;/code&gt; functions. The
+ parser deserializes the incoming string value from the DOM to be put into the
+ component's data object. The stringifier is used when using &lt;code&gt;setAttribute&lt;/code&gt; to
+ serialize back to the DOM.&lt;/p&gt;
+ &lt;p&gt;We can actually define and register our own property types:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerPropertyType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'radians'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// Default stringify is .toString().&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Single-Property Schemas&lt;/h4&gt;
+ &lt;p&gt;If a component has only one property, then it must either have a &lt;code&gt;type&lt;/code&gt; or a
+ &lt;code&gt;default&lt;/code&gt; value. If the type is defined, then the type is used to parse and
+ coerce the string retrieved from the DOM (e.g., &lt;code&gt;getAttribute&lt;/code&gt;). Or if the
+ default value is defined, the default value is used to infer the type.&lt;/p&gt;
+ &lt;p&gt;Take for instance the &lt;a href=&quot;https://aframe.io/docs/components/visible.html&quot;&gt;visible component&lt;/a&gt;. The schema property
+ definition implicitly defines it as a boolean:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'visible'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// Type will be inferred to be boolean.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Or the &lt;a href=&quot;https://aframe.io/docs/components/rotation.html&quot;&gt;rotation component&lt;/a&gt; which explicitly defines the value as a &lt;code&gt;vec3&lt;/code&gt;:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'rotation'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// Default value will be 0, 0, 0 as defined by the vec3 property type.&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Using these defined property types, schemas are processed by
+ &lt;code&gt;registerComponent&lt;/code&gt; to inject default values, parsers, and stringifiers for
+ each property. So if a default value is not defined, the default value will be
+ whatever the property type defines as the &quot;default default value&quot;.&lt;/p&gt;
+ &lt;h4&gt;Multiple-Property Schemas&lt;/h4&gt;
+ &lt;p&gt;If a component has multiple properties (or one named property), then it consists of
+ one or more property definitions, in the form described above, in an object keyed by
+ property name. For instance, a physics body component might define a schema:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'physics-body'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;boundingBox&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;mass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;velocity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Having multiple properties is what makes the component take the syntax in the
+ form of &lt;code&gt;physics=&quot;mass: 2; velocity: 1 1 1&quot;&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;With the schema defined, all data coming into the component will be passed
+ through the schema for parsing. Then in the lifecycle methods, the component
+ has access to &lt;code&gt;this.data&lt;/code&gt; which in a single-property schema is a value and in a
+ multiple-propery schema is an object.&lt;/p&gt;
+ &lt;h3&gt;Defining the Lifecycle Methods&lt;/h3&gt;
+ &lt;h4&gt;Component.init() - Set Up&lt;/h4&gt;
+ &lt;p&gt;&lt;code&gt;init&lt;/code&gt; is called once in the component's lifecycle when it is mounted to the
+ entity. &lt;code&gt;init&lt;/code&gt; is generally used to set up variables or members that may used
+ throughout the component or to set up state. Though not every component will
+ need to define an &lt;code&gt;init&lt;/code&gt; handler. Sort of like the component-equivalent method
+ to &lt;code&gt;createdCallback&lt;/code&gt; or &lt;code&gt;React.ComponentDidMount&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;code&gt;look-at&lt;/code&gt; component's &lt;code&gt;init&lt;/code&gt; handler sets up some variables:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;vector&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;THREE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.update(oldData) - Do the Magic&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;update&lt;/code&gt; handler is called both at the beginning of the component's
+ lifecycle with the initial &lt;code&gt;this.data&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; every time the component's data
+ changes (generally during the entity's &lt;code&gt;attributeChangedCallback&lt;/code&gt; like with a
+ &lt;code&gt;setAttribute&lt;/code&gt;). The update handler gets access to the previous state of the
+ component data passed in through &lt;code&gt;oldData&lt;/code&gt;. The previous state of the component
+ can be used to tell exactly which properties changed to do more granular
+ updates.&lt;/p&gt;
+ &lt;p&gt;The update handler uses &lt;code&gt;this.data&lt;/code&gt; to modify the entity, usually interacting
+ with three.js APIs. One of the simplest update handlers is the
+ &lt;a href=&quot;https://aframe.io/docs/components/visible.html&quot;&gt;visible&lt;/a&gt; component's:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;visible&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;A slightly more complex update handler might be the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light&lt;/a&gt; component's,
+ which we'll show via abbreviated code:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oldData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;oldData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{});&lt;/span&gt;
+
+ &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'type'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// If there is an existing light and the type hasn't changed, update light.&lt;/span&gt;
+ &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// No light exists yet or the type of light has changed, create a new light.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getLight&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// Register the object3D of type `light` to the entity.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setObject3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'light'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;The entity's &lt;code&gt;object3D&lt;/code&gt; is a plain THREE.Object3D. Other three.js object types
+ such as meshes, lights, and cameras can be set with &lt;code&gt;setObject3D&lt;/code&gt; where they
+ will be appeneded to the entity's &lt;code&gt;object3D&lt;/code&gt;.&lt;/p&gt;
+ &lt;h4&gt;Component.remove() - Tear Down&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;remove&lt;/code&gt; handler is called when the component detaches from the entity such
+ as with &lt;code&gt;removeAttribute&lt;/code&gt;. This is generally used to remove all modifications,
+ listeners, and behaviors to the entity that the component added.&lt;/p&gt;
+ &lt;p&gt;For example, when the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light component&lt;/a&gt; detaches, it removes the light
+ it previously attached from the entity and thus the scene:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeObject3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'light'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.tick(time) - Background Behavior&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;tick&lt;/code&gt; handler is called on every single tick or render loop of the scene.
+ So expect it to run on the order of 60-120 times for second. The global uptime of
+ the scene in seconds is passed into the tick handler.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;a href=&quot;https://aframe.io/docs/components/look-at.html&quot;&gt;look-at&lt;/a&gt; component, which instructs an entity to
+ look at another target entity, uses the tick handler to update the rotation in
+ case the target entity changes its position:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;tick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// target3D and vector are set from the update handler.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;lookAt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setFromMatrixPosition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;matrixWorld&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.pause() and Component.play() - Stop and Go&lt;/h4&gt;
+ &lt;p&gt;To support pause and play, just as with a video game or to toggle entities for
+ performance, components can implement &lt;code&gt;play&lt;/code&gt; and &lt;code&gt;pause&lt;/code&gt; handlers. These are
+ invoked when the component's entity runs its &lt;code&gt;play&lt;/code&gt; or &lt;code&gt;pause&lt;/code&gt; method. When an
+ entity plays or pauses, all of its child entities are also played or paused.&lt;/p&gt;
+ &lt;p&gt;Components should implement play or pause handlers if they register any
+ dynamic, asynchronous, or background behavior such as animations, event
+ listeners, or tick handlers.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;code&gt;look-controls&lt;/code&gt; component simply removes its event listeners
+ such that the camera does not move when the scene is paused, and it adds its
+ event listeners when the scene starts playing or is resumed:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;pause&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeEventListeners&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;nx&quot;&gt;play&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListeners&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h3&gt;Boilerplate&lt;/h3&gt;
+ &lt;p&gt;I suggest that people start off with my &lt;a href=&quot;https://github.com/ngokevin/aframe-component-boilerplate&quot;&gt;component boilerplate&lt;/a&gt;,
+ even hardcore tool junkies. This will get you straight into building a
+ component and comes with everything you will need to publish your component
+ into the wild. The boilerplate handles creating a stubbed component, build
+ steps for both NPM and browser distribution files, and publishing to Github
+ Pages.&lt;/p&gt;
+ &lt;p&gt;Generally with boilerplates, it is better to start from scratch and build your
+ own boilerplate, but the A-Frame component boilerplate contains a lot of tribal
+ inside knowledge about A-Frame and is updated frequently to reflect new things
+ landing on A-Frame. The only possibly opinionated pieces about the boilerplate
+ is the development tools it internally uses that are hidden away by NPM
+ scripts.&lt;/p&gt;
+ &lt;h3&gt;Examples&lt;/h3&gt;
+ &lt;p&gt;Under construction. Stay tuned!&lt;/p&gt;
+ &lt;h4&gt;Text Component&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-text-component&quot;&gt;Text component&lt;/a&gt;&lt;/p&gt;
+ &lt;h4&gt;Physics Components&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-physics-components&quot;&gt;Physics components&lt;/a&gt;&lt;/p&gt;
+ &lt;h4&gt;Layout Component&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-layout-component&quot;&gt;Layout component&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-17T00:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="http://blog.gerv.net/?p=3527">
+ <title>Gervase Markham: Convenient… and Creepy</title>
+ <link>http://feedproxy.google.com/~r/HackingForChrist/~3/DN054t04_dE/</link>
+ <content:encoded>&lt;p&gt;The last Mozilla All-Hands was at one of the hotels in the Walt Disney World Resort in Florida. Every attendee was issued with one of these (although their use was optional):&lt;br /&gt;
+ &lt;a href=&quot;http://blog.gerv.net/files/2016/01/Disneys_MagicBand.jpg&quot;&gt;&lt;img class=&quot;alignnone size-large wp-image-3530&quot; src=&quot;http://blog.gerv.net/files/2016/01/Disneys_MagicBand-1024x832.jpg&quot; width=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;It’s called a “Magic Band”. You register it online and connect it to your Disney account, and then it can be used for park entry, entry to pre-booked rides so you don’t have to queue (called “FastPass+”), payment, picking up photos, as your room key, and all sorts of other convenient features. Note that it has no UI whatsoever – no lights, no buttons. Not even a battery compartment. (It does contain a battery, but it’s not replaceable.) These are specific design decisions – the aim is for ultra-simple convenience.&lt;/p&gt;
+ &lt;p&gt;One of the talks we had at the All Hands was from one of the Magic Band team. The audience reactions to some of the things he said was really interesting. He gave the example of Cinderella wishing you a Happy Birthday as you walk round the park. “Cinderella just knows”, he said. Of course, in fact, her costume’s tech prompts her when it silently reads your Magic Band from a distance. This got some initial impressed applause, but it was noticeable that after a few moments, it wavered – people were thinking “Cool… er, but creepy?”&lt;/p&gt;
+ &lt;p&gt;The Magic Band also has range sufficient that Disney can track you around the park. This enables some features which are good for both customers and Disney – for example, they can use it for load balancing. If one area of the park seems to be getting overcrowded, have some characters pop up in a neighbouring area to try and draw people away. But it means that they always know where you are and where you’ve been.&lt;/p&gt;
+ &lt;p&gt;My take-away from learning about the Magic Band is that it’s really hard to have a technical solution to this kind of requirement which allows all the Convenient features but not the Creepy features. Disney does offer an RFID-card-based solution for the privacy-conscious which does some of these things, but not all of them. And it’s easier to lose. It seems to me that the only way to distinguish the two types of feature, and get one and not the other, is policy – either the policy of the organization, or external restrictions on them (e.g. from a watchdog body’s code of conduct they sign up to, or from law). And it’s often not in the organization’s interest to limit themselves in this way.&lt;/p&gt;
+ &lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/HackingForChrist/~4/DN054t04_dE&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-16T12:18:38+00:00</dc:date>
+ <dc:creator>gerv</dc:creator>
+ </item>
+ <item rdf:about="https://www.christianheilmann.com/?p=4957">
+ <title>Christian Heilmann: Don’t tell me what my browser can’t do!</title>
+ <link>https://www.christianheilmann.com/2016/01/16/dont-tell-me-what-my-browser-cant-do/</link>
+ <content:encoded>&lt;p&gt;&lt;em class=&quot;markup--em markup--p-em&quot;&gt;Chances are, your guess is wrong!&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;you are obviously in the wrong place&quot; src=&quot;https://d262ilb51hltx0.cloudfront.net/max/800/1*l9jPbOyAl00kjPhyNYA-IQ.jpeg&quot; width=&quot;100%&quot; /&gt;Arrogance towards possible customers never pays out – as shown in “Pretty Woman”&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;There is nothing more frustrating than being capable of something and not getting a chance to do it. The same goes for being blocked out from something although you are capable of consuming it. Or you’re even willing to put some extra effort or even money in and you still don’t get to consume it.&lt;/p&gt;
+
+ &lt;p&gt;For example, I’d happily pay $50 a month to get access to Netflix’s world-wide library from any country I’m in. But the companies Netflix get their content from won’t go for that. Movies and TV show are budgeted by predicted revenue in different geographical markets with month-long breaks in between the releases. A world-wide network capable of delivering content in real time? Preposterous — let’s shut that down.&lt;/p&gt;
+
+ &lt;p&gt;On a less “let’s break a 100 year old monopoly” scale of annoyance, &lt;a href=&quot;https://twitter.com/codepo8/status/687616620529844224&quot;&gt;I tweeted yesterday something glib and apparently cruel&lt;/a&gt;:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;“Sorry, but your browser does not support WebGL!” – sorry, you are a shit coder.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;And I stand by this&lt;/strong&gt;. I went to a web site that promised me some cute, pointless animation and technological demo. I was using Firefox Nightly — a WebGL capable browser. I also went there with Microsoft Edge — another WebGL capable browser. Finally, using Chrome, I was able to delight in seeing an animation.&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;I’m not saying the creators of that thing lack in development capabilities&lt;/strong&gt;. The demo was slick, beautiful and well coded. They still do lack in two things developers of &lt;em&gt;web products &lt;/em&gt;(and I count apps into that) should have: empathy for the end user and an understanding that they are not in control.&lt;/p&gt;
+
+ &lt;p&gt;Now, I am a pretty capable technical person. When you tell me that I might be lacking WebGL, I know what you mean. I don’t lack WebGL. I was blocked out because the web site did browser sniffing instead of capability testing. But I know what could be the problem.&lt;/p&gt;
+
+ &lt;p&gt;A normal user of the web has no idea what WebGL is and — if you’re lucky — will try to find it on an app store. If you’re not lucky all you did is confuse a person. A person who went through the effort to click a link, open a browser and wait for your thing to load. A person that feels stupid for using your product as they have no clue what WebGL is and won’t ask. Humans hate feeling stupid and we do anything not to appear it or show it.&lt;/p&gt;
+
+ &lt;p&gt;This is what I mean by empathy for the end user. Our problems should never become theirs.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;A cryptic error message telling the user that they lack some technology helps nobody and is sloppy development at best, sheer arrogance at worst.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;The web is, sadly enough, littered with unhelpful error messages and assumptions that it is the user’s fault when they can’t consume the thing we built.&lt;/p&gt;
+
+ &lt;p&gt;Here’s a reality check — this is what our users should have to do to consume the things we build:&lt;/p&gt;
+
+ &lt;p&gt;&lt;img alt=&quot;&quot; height=&quot;600&quot; src=&quot;https://d262ilb51hltx0.cloudfront.net/max/800/1*DXtRIWTu-UzRb0YB-h8SmA.png&quot; width=&quot;10&quot; /&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;That’s right. Nothing&lt;/strong&gt;. This is the web. Everybody is invited to consume, contribute and create. This is what made it the success it is. This is what will make it outlive whatever other platform threatens it with shiny impressive interactions. Interactions at that time impossible to achieve with web technologies.&lt;/p&gt;
+
+ &lt;p&gt;Whenever I mention this, the knee-jerk reaction is the same:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote class=&quot;graf--blockquote graf-after--p&quot; id=&quot;79d6&quot; name=&quot;79d6&quot;&gt;How can you expect us to build delightful experiences close to magic (and whatever other soundbites were in the last Apple keynote) if we keep having to support old browsers and users with terrible setups?&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;You don’t have to support old browsers and terrible setups. But you are not allowed to block them out. It is a simple matter of giving a usable interface to end users. A button that does nothing when you click it is not a good experience. Test if the functionality is available, then create or show the button. &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;This is as simple as it is.&lt;/strong&gt;&lt;/p&gt;
+
+ &lt;p&gt;If you really have to rely on some technology then show people what they are missing out on and tell them how to upgrade. A screenshot or a video of a WebGL animation is still lovely to see. A message telling me I have no WebGL less so.&lt;/p&gt;
+
+ &lt;p&gt;Even more on the black and white scale, what the discussion boils down to is in essence:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote class=&quot;graf--blockquote graf-after--p&quot; id=&quot;a775&quot; name=&quot;a775&quot;&gt;But it is 2016 — surely we can expect people to have JavaScript enabled — it is after all “the assembly language of the web”&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Despite the cringe-worthy &lt;a href=&quot;http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageForTheWebSematicMarkupIsDeadCleanVsMachinecodedHTML.aspx&quot;&gt;misquote of the assembly language&lt;/a&gt; thing, here is a harsh truth:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;You can absolutely expect JavaScript to be available on your end users computers in 2016. At the same time it is painfully &lt;strong&gt;naive&lt;/strong&gt; to expect it to work under all circumstances.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;JavaScript is brittle&lt;/strong&gt;. &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; both are &lt;em&gt;fault tolerant&lt;/em&gt;. If something goes wrong in &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, browsers either display the content of the element or try to fix minor issues like unclosed elements for you. &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; skips lines of code it can’t understand and merrily goes on its way to show the rest of it. JavaScript breaks on errors and tells you that something went wrong. It will not execute the rest of the script, but throws in the towel and tells you to get your house in order first.&lt;/p&gt;
+
+ &lt;p&gt;There &lt;a href=&quot;http://kryogenix.org/code/browser/everyonehasjs.html&quot;&gt;are many outside influences&lt;/a&gt; that will interfere with the execution of your JavaScript. That’s why a non-naive and non-arrogant — a dedicated and seasoned web developer — will never rely on it. Instead, you treat it as an enhancement and in an almost paranoid fashion test for the availability of everything before you access it.&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;Sorry (not sorry) — this will never go away&lt;/strong&gt;. This is the nature of JavaScript. And it is a good thing. It means we can access new features of the language as they come along instead of getting stuck in a certain state. It means we have to think about using it every time instead of relying on libraries to do the work for us. It means that we need to keep evolving with the web — a living and constantly changing medium, and not a software platform. That’s just part of it.&lt;/p&gt;
+
+ &lt;p&gt;This is why the whole discussion about JavaScript enabled or disabled is a massive waste of time. It is not the availability of JavaScript we need to worry about. It is our products breaking in perfectly capable environments because we rely on perfect execution instead of writing defensive code. A tumblr like &lt;a class=&quot;markup--anchor markup--p-anchor&quot; href=&quot;http://sighjavascript.tumblr.com/&quot; rel=&quot;nofollow&quot;&gt;Sigh, JavaScript&lt;/a&gt; is fun, but is pithy finger-pointing.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;There is nothing wrong with using JavaScript to build things. Just be aware that the error handling is your responsibility.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Any message telling the user that they have to turn on JavaScript to use a certain product is a proof that you care more about your developer convenience than your users.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;It is damn hard these days to turn off JavaScript – you are complaining about a almost non-existent issue and tell the confused user to do something they don’t know how to.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;The chance that something in the JavaScript execution of any of your dozens of dependencies went wrong is much higher – and this is your job to fix. This is why advice like &lt;a href=&quot;http://webdesign.tutsplus.com/tutorials/quick-tip-dont-forget-the-noscript-element--cms-25498&quot;&gt;using noscript to provide alternative content&lt;/a&gt; is terrible. It means you double your workload instead of enhancing what works. Who knows? If you start with something not JavaScript dependent (or running it server side) you might find that you don’t need the complex solution you started with in the first place. Faster, smaller, easier. Sounds good, right?&lt;/p&gt;
+
+ &lt;p&gt;So, please, stop sniffing my browser, you will fail and tell me lies. Stop pretending that working with a brittle technology is the user’s fault when something goes wrong.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;As web developers we work in the service industry. We deliver products to people. And keeping these people happy and non-worried is our job. Nothing more, nothing less.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Without users, your product is nothing. Sure, we are better paid and well educated and we are not flipping burgers. But we have no right whatsoever to be arrogant and not understanding that our mistakes are not the fault of our end users.&lt;/p&gt;
+
+ &lt;p&gt;Our demeanor when complaining about how stupid our end users and their terrible setups are reminds me of &lt;a href=&quot;https://www.youtube.com/watch?v=CSj5stmFkQ0&quot;&gt;this Mitchell and Webb sketch&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Don’t be that person. &lt;/strong&gt;Our job is to enable people to consume, participate and create the web. This is magic. This is beautiful. This is incredibly rewarding. The next markets we should care about are ready to be as excited about the web as we were when we first encountered it. Browsers are good these days. Use what they offer after testing for it and enjoy what you can achieve. Don’t tell the user when things go wrong – they can not fix what you messed up.&lt;/p&gt;
+
+
+ &lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/chrisheilmann/~4/vqtqgcNQXy8&quot; width=&quot;1&quot; /&gt;</content:encoded>
+ <dc:date>2016-01-16T11:28:10+00:00</dc:date>
+ <dc:creator>Chris Heilmann</dc:creator>
+ </item>
+ <item rdf:about="http://glandium.org/blog/?p=3510">
+ <title>Mike Hommey: Announcing git-cinnabar 0.3.1</title>
+ <link>http://glandium.org/blog/?p=3510</link>
+ <content:encoded>&lt;p&gt;This is a brown paper bag release. It turns out I managed to break the upgrade&lt;br /&gt;
+ path only 10 commits before the release.&lt;/p&gt;
+ &lt;h3&gt;What’s new since 0.3.0?&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;code&gt;git cinnabar fsck&lt;/code&gt; doesn’t fail to upgrade metadata.&lt;/li&gt;
+ &lt;li&gt;The &lt;code&gt;remote.$remote.cinnabar-draft&lt;/code&gt; config works again.&lt;/li&gt;
+ &lt;li&gt;Don’t fail to clone an empty repository.&lt;/li&gt;
+ &lt;li&gt;Allow to specify mercurial configuration items in a .git/hgrc file.&lt;/li&gt;
+ &lt;/ul&gt;</content:encoded>
+ <dc:date>2016-01-16T11:26:45+00:00</dc:date>
+ <dc:creator>glandium</dc:creator>
+ </item>
+ <item rdf:about="http://edunham.net/2016/01/16/buildbot_and_eoferror.html">
+ <title>Emily Dunham: Buildbot and EOFError</title>
+ <link>http://edunham.net/2016/01/16/buildbot_and_eoferror.html</link>
+ <content:encoded>&lt;h3&gt;Buildbot and EOFError&lt;/h3&gt;
+ &lt;p&gt;More SEO-bait, after tracking down an poorly documented problem:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;# buildbot start master
+ Following twistd.log until startup finished..
+ 2016-01-17 04:35:49+0000 [-] Log opened.
+ 2016-01-17 04:35:49+0000 [-] twistd 14.0.2 (/usr/bin/python 2.7.6) starting up.
+ 2016-01-17 04:35:49+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
+ 2016-01-17 04:35:49+0000 [-] Starting BuildMaster -- buildbot.version: 0.8.12
+ 2016-01-17 04:35:49+0000 [-] Loading configuration from '/home/user/buildbot/master/master.cfg'
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file:
+ Traceback (most recent call last):
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 577, in _runCallbacks
+ current.result = callback(current.result, *args, **kw)
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 1155, in gotResult
+ _inlineCallbacks(r, g, deferred)
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 1099, in _inlineCallbacks
+ result = g.send(result)
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/master.py&quot;, line 189, in startService
+ self.configFileName)
+ --- &amp;lt;exception caught here&amp;gt; ---
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/config.py&quot;, line 156, in loadConfig
+ exec f in localDict
+ File &quot;/home/user/buildbot/master/master.cfg&quot;, line 415, in &amp;lt;module&amp;gt;
+ extra_post_params={'secret': HOMU_BUILDBOT_SECRET},
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/status_push.py&quot;, line 404, in __init__
+ secondaryQueue=DiskQueue(path, maxItems=maxDiskItems))
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py&quot;, line 286, in __init__
+ self.secondaryQueue.popChunk(self.primaryQueue.maxItems()))
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py&quot;, line 208, in popChunk
+ ret.append(self.unpickleFn(ReadFile(path)))
+ exceptions.EOFError:
+
+ 2016-01-17 04:35:53+0000 [-] Configuration Errors:
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file: (traceback in logfile)
+ 2016-01-17 04:35:53+0000 [-] Halting master.
+ 2016-01-17 04:35:53+0000 [-] Main loop terminated.
+ 2016-01-17 04:35:53+0000 [-] Server Shut Down.
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;This happened after the buildmaster’s disk filled up and a bunch of stuff was
+ manually deleted. There were no changes to master.cfg since it worked
+ perfectly.&lt;/p&gt;
+ &lt;p&gt;The fix was to examine &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;master.cfg&lt;/span&gt;&lt;/span&gt; to see &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/servo/saltfs/blob/master/buildbot/master/master.cfg#L413&quot;&gt;where the HttpStatusPush was
+ created&lt;/a&gt;,
+ of the form:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HttpStatusPush&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;serverUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'http://build.servo.org:54856/buildbot'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;extra_post_params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'secret'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HOMU_BUILDBOT_SECRET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Digging in the Buildbot source reveals that &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;persistent_queue.py&lt;/span&gt;&lt;/span&gt; wants to
+ unpickle a cache file from &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;/events_build.servo.org/-1&lt;/span&gt;&lt;/span&gt; if there was nothing
+ in &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;/events_build.servo.org/&lt;/span&gt;&lt;/span&gt;. To fix this the right way, create that file
+ and make sure Buildbot has &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;+rwx&lt;/span&gt;&lt;/span&gt; on it.&lt;/p&gt;
+ &lt;p&gt;Alternately, you can give up on writing your status push cache to disk
+ entirely by adding the line &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;maxDiskItems=0&lt;/span&gt;&lt;/span&gt; to the creation of the
+ HttpStatusPush, giving you:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HttpStatusPush&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;serverUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'http://build.servo.org:54856/buildbot'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;maxDiskItems&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;extra_post_params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'secret'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HOMU_BUILDBOT_SECRET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;The real moral of the story is “remember to use &lt;a class=&quot;reference external&quot; href=&quot;http://www.linuxcommand.org/man_pages/logrotate8.html&quot;&gt;logrotate&lt;/a&gt;.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-16T08:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="urn:md5:41d039bb28fb15c761578cba0b1454fa">
+ <title>Daniel Glazman: Ebook pagination and CSS</title>
+ <link>http://www.glazman.org/weblog/dotclear/index.php?post/2016/01/16/Ebook-pagination-and-CSS</link>
+ <content:encoded>&lt;p&gt;Let's suppose you have a rather long document, for instance a book chapter, and you want to render it in your browser &lt;em&gt;à la&lt;/em&gt; iBooks/Kindle. That's rather easy with just a dash of CSS:&lt;/p&gt;
+ &lt;pre&gt;body {
+ height: calc(100vh - 24px);
+ column-width: 45vw;
+ overflow: hidden;
+ margin-left: calc(-50vw * attr(currentpage integer));
+ }&lt;/pre&gt;
+ &lt;p&gt;Yes, yes, I know that no browser implements that &lt;code&gt;attr()&lt;/code&gt;extended syntax. So put an inline style on your body for &lt;code&gt;margin-left: calc(-50vw * &lt;em&gt;&amp;lt;n&amp;gt;&lt;/em&gt;)&lt;/code&gt; where &lt;em&gt;&lt;code&gt;&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/em&gt; is the page number you want minus 1.&lt;/p&gt;
+ &lt;p&gt;Then add the fixed positioned controls you need to let user change page, plus gesture detection. Add a transition on margin-left to make it nicer. Done. Works perfectly in Firefox, Safari, Chrome and Opera. I don't have a Windows box handy so I can't test on Edge.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-16T03:43:00+00:00</dc:date>
+ <dc:creator>glazou</dc:creator>
+ </item>
+ <item rdf:about="https://repeer.org/?p=48">
+ <title>Nicolas Mandil: Mozilla cultural revolution: from ‘radical participation’ to ‘radical user-centric’</title>
+ <link>https://repeer.org/2016/01/16/mozilla-cultural-revolution-from-radical-participation-to-radical-user-centric/</link>
+ <content:encoded>&lt;p&gt;This post has been written about the &lt;a href=&quot;http://marksurman.commons.ca/2015/12/21/mofo2020/&quot;&gt;Mozilla Foundation (MoFo) 2020 strategy&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;The ideas developed in this post are in different levels: some are global, some focus on particular points of the proposed draft. But in my point of view, they all carry a transversal meaning: articulation (as piece connected to a structure allowing movement) with others and consistency with our mission.&lt;/p&gt;
+ &lt;h3&gt;Summary&lt;/h3&gt;
+ &lt;p&gt;On the way to &lt;a href=&quot;http://marksurman.commons.ca/2015/01/09/what-is-radical-participation/&quot;&gt;radical participation&lt;/a&gt;, Mozilla should be radical &lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;https://repeer.org/tag/mozilla/feed/#fn-48-1&quot; id=&quot;fnref-48-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; user-centric. Mozilla should not go against the social understanding of the (tech and whole society) situation because it’s what is massively shared and what polarizes the prism of understanding of the society. &lt;strong&gt;We should built solutions for it and transform (develop and change) it on the way. Our responsibility is to build &lt;em&gt;inclusivity&lt;/em&gt; (inclusion strengths) everywhere, to gather for multiplying our impact.&lt;/strong&gt; We must build (progressive) victories instead of battles (of static positions and postures).&lt;br /&gt;
+ If we don’t do it, we go against users self-perceived need: use. We value our differences more than our commonalities and &lt;strong&gt;consider ethic more as an absolute objective than a concrete process&lt;/strong&gt;: we divide, separate, compete. Our solutions get irrelevant, we get rejected and marginalized, we reject compromises that improve the current situation for the ideal, we loose influence and therefore impact on the definition of the present and future. We already done it for the good and the bad in the past (H.264+Daala, pocket integration, Hello login, no Firefox for iOS, Google fishing vs Disconnect, FxOS Notes app which sync is evernote only, …).&lt;br /&gt;
+ To get a consistent and impactful ability to integrate and transform the social understanding, there are four domains where we can take and articulate (connected structure allowing movement) action:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;People&lt;/strong&gt;: identity is the key to grow consciousness, understanding, skills, voice, representation and to articulate global/local, personal/common. &lt;strong&gt;[Activate]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Technology&lt;/strong&gt;: universality is key for a platform (for resilience) with interfaces (for modularity) where services, features and front-ends can plug-in and communicate to provide (inter)active support ; Decouple conditions of fulfillment with execution (content/appearance/policy ; material/immaterial) to support remix (policy continuity, consistency thought providers, …). &lt;strong&gt;[Unlock]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Product&lt;/strong&gt;: persona and (current and emerging) use via user-agents are the keys. Be on all major platforms depending on use, ethical alignment and opportunities, emerging newness to provide continuity (task, device) to users and leading on new practices. Features should be about products parity and opening new possibilities carrying our values to the action at a massive scale. &lt;strong&gt;[Build]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Organizations/institutions&lt;/strong&gt;: sociological innovation for participation is the key. Research on historical (evolution) and sociological (human organizations, social institutions and social behaviors) analysis based on social networks (link as social interactions), in the perspective of producing commons. &lt;strong&gt;[Drive]&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Our front has two sides: &lt;strong&gt;propose and protect&lt;/strong&gt;. But each of them are connected and can have different strategic expressions, if our actions generate improving (progressive) curves:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;For the &lt;strong&gt;action taking&lt;/strong&gt;: consciousness, understanding, symbolic actions, behavior change, behavior advocacy (evangelism)&lt;/li&gt;
+ &lt;li&gt;For the &lt;strong&gt;action mode&lt;/strong&gt;: promotion (spreading the idea), incitement (giving a competitive advantage to people involved), collaboration (open interactions to make a win-win exchange; process-centric), contractualization (formalize domains where a win-win exchange is made; object-centric), coercion (giving a competitive disadvantage to people not involved).&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Social history is a history of social values.&lt;strong&gt; The way we understand and tell the problem determine the solution we can create&lt;/strong&gt;: we need, all the way long, a shared understanding. Tools and technologies are not tied, bound forever to their social value, which depends on people’s social representations that evolve over time.&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;The social behavior&lt;/strong&gt; is a first key. It is the narrative, and therefore its &lt;strong&gt;inclusion in the social history that we make, which converges the product with the values that it stands for&lt;/strong&gt;. Here is the articulation of product with people and technology, of product with leadership network and advocacy engine (it could be less persistent and inclusive: marketing).&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social organization&lt;/strong&gt; is a second key. It is about how the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla (org) and Mozillians (people). &lt;strong&gt;Here comes the question of being open&lt;/strong&gt;. It is not enough because it is about availability (passive) and not inclusivity (active). The high level of automation coming is a challenge. We should level-up the meaning to differentiate from others: &lt;strong&gt;Mozilla should activate and unlock societal progress to build fair technical progress&lt;/strong&gt;. Mozilla need to &lt;strong&gt;identify its resilient backbone&lt;/strong&gt; (not only a technology, the web, but something that articulate people, technology and products) and make it more universal (through people and products). But our goals can’t be absolutely achieved because they have to be considered in a dynamic context. However, the brand engagement is persistent, if it’s included in the product, visible, and centered on easing the user’s action.&lt;br /&gt;
+ Linked to the ‘being open’ question, the advocacy engine could be a thing to unlock societal progress. People are satisfied of narrow hills of choice until they understand it’s not socially neutral. It’s the case with technology: they accept things about technology to be build top-down. &lt;strong&gt;A successful advocacy, even one about technology, is always built bottom-up&lt;/strong&gt;, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric and administrative content centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. &lt;strong&gt;If we want to have an impact, we should listen to people needs, not tell them to listen to ours&lt;/strong&gt;. People want (first) to be empowered, not to empower an org. We need to have content and user centric (not org and it’s process) tools/platform for advocates and leaders: let’s build the technology advocacy plan together. Yes it’s slower, but much more massive, inclusive and persistent. The impact will be higher because it will carry a meaning for people and it wont be too org centric. So it will be qualitatively better: not just an amount, &lt;strong&gt;accumulation is not our goal, but impact, that comes from articulation&lt;/strong&gt;. Likewise we should be careful to not use best practice as absolute solutions, but as solutions in a context, if we want to transpose them massively: when we unify we should avoid to homogenize. On the narrative side, our preoccupation should be about building short, medium and long term narrative to get action.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social institutions&lt;/strong&gt; are the third key. Here is the articulation of the leadership network with the advocacy engine. &lt;strong&gt;Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.&lt;/strong&gt; Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved in creating (different) representations (institutions) and organizations (foundation/firms) but &lt;strong&gt;with a different DNA (values) processing&lt;/strong&gt;: from public good to personal benefit or from personal interest to public benefit. If Mozilla cares about public good resilience, &lt;strong&gt;the articulation of their domains of values is critical&lt;/strong&gt;. So, on the social organization side, their articulation’s expression and the revision process must be said and clear: from hierarchy or contract or different autonomy levels (internal incubation and external advocacy), or … to criteria to start a revision. About the narrative, and hence about the social behavior side, leaders carry a lot of legitimacy and avoid the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact. But this legitimacy is already present if we&lt;strong&gt; make clear that our actions are about commons&lt;/strong&gt;. We should name them creators (compositors or managers) to make it clear that the creative process is a collaboration, made by a team and that the public good do not have the same role in the process and outcome. Full circle.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social networks&lt;/strong&gt; are the keystone. Let’s shortly take an example based on social networks (link as social interactions) with the perspective of producing people, technological and product commons. &lt;strong&gt;We need better tools for collaboration and participation&lt;/strong&gt;: tools that merge discussion channels, capitalize on the discussion and preview the results to build a plan. From evolving the wiki discussion page to feature document production into peer-to-peer discussion.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;An analysis of the creation process is another way to the articulation of product with people and technology.&lt;br /&gt;
+ Platforms move closer to strict ‘walled garden’ ecosystems. We need bridges from lab to home that carry different mix of customization and reliability to support the emancipation curve. We need to build pathways thought audiences and thought IT layers (content, software, hardware, distant service). &lt;strong&gt;We should find a convergence between customization&lt;/strong&gt; (dev code patch to users add-ons) &lt;strong&gt;and reliability&lt;/strong&gt; (self made to mass product), &lt;strong&gt;between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways&lt;/strong&gt;. Mozilla should find ways to &lt;strong&gt;integrate learning&lt;/strong&gt; in its products, in-content, as we have code comment on code: on-boarding levels, progression from simple to high level techniques, reproducible/universal next task/skill building.&lt;/p&gt;
+ &lt;h3&gt;Detailed discussion content&lt;/h3&gt;
+ &lt;p&gt;Here are the developed ideas, with more reference to our allies and detractors’ products.&lt;/p&gt;
+ &lt;h4&gt;People, the sociological side&lt;/h4&gt;
+ &lt;h5&gt;From focused to systemic action&lt;/h5&gt;
+ &lt;p&gt;First of all, I think &lt;strong&gt;the strategy move Mozilla is doing is the right one&lt;/strong&gt; as it embraces more our real life. People are not defined by one characteristic, we are complex: ex. we can be pedestrian, car driver, biker, Public Transport user… we think and do simultaneously. So why Mozilla should restrict its strategy by targeting people on skills, through education, thought better material only (the Mozilla Academy program). Education, even popular education, can’t do everything for the people to build change. &lt;strong&gt;We need a plan that balance intellectual and practical (abstraction/action, think/do) integrating progressive paths to massively scale so we get an impact: build change.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h5&gt;Real life: Social history, individuals and institutions as an articulation founding the action.&lt;/h5&gt;
+ &lt;p&gt;Let’s start by some definitions based on my understanding of some &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sociologie&quot;&gt;Wikipedia articles&lt;/a&gt;. Sociology is the study of the evolution of societies: human organizations and social institutions. It is about &lt;strong&gt;the impact of the social dimension on humans representations (ways of thinking) and behaviors (ways of acting)&lt;/strong&gt;. It allows to study the conceptions of social relations according to fundamental criteria (structuralism, functionalism, conventionalism, etc.) and the hooks to reality (interactionism, institutionalism, regulationisme, actionism, etc.), to think and shape the modernity. Currently (and this is key for Mozilla’s positioning), the combination of models replace the models’ unity, which aims to assume the multidimensionality. There are three major sociological paradigms, including one emerging:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;The holistic paradigm&lt;/strong&gt;: Society is a whole that is greater than the sum of its parts, it exists before the individual and individuals are governed by it. In this context, the Society includes the individual and the individual consciousness is seen only as a fragment of the collective consciousness. The emphasis is on the social fact, whose cause must be sought in earlier social facts. The social fact is part of a system of interlocking institutions that govern individuals. It is external to the individual and constraint it. Sociology is then the science of institutional invariants in which are the observable phenomenas.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The atomistic paradigm&lt;/strong&gt;: each individual is a social atom. The atoms act according to self motives, interests, emotions and are linked to other atoms. A system of constant interaction between atoms produces and reproduces Society. The emphasis is on the cause of social actions and the meaning given by individuals to their actions. A horizon of meanings serve as reference instead of the arrangements of institutions. The institution is there but it serves the motives and interests of agents. Sociology is then the study of the social action.&lt;/li&gt;
+ &lt;li&gt;The recent emergence of a sociological analysis based on &lt;strong&gt;social networks&lt;/strong&gt; (which are a collection of individuals or organizations connected by regular social interactions) suggest lines of research &lt;strong&gt;beyond the opposition between the holistic and the atomistic approaches&lt;/strong&gt;. The theory of social networks conceives social relationships in terms of nodes and links. The nodes are usually social actors in the network but can also represent institutions, and links are the relationships between these nodes. There may be several kinds of links between nodes and their analysis determines social capital of the social actors.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Consequently, Mozilla should build its strategy on &lt;strong&gt;historical&lt;/strong&gt; (evolution) and &lt;strong&gt;sociological&lt;/strong&gt; (human organizations, social institutions and social behaviors) analysis based on &lt;strong&gt;social networks&lt;/strong&gt; (links as social interactions), in the perspective of producing &lt;strong&gt;commons&lt;/strong&gt;. That is to say as an &lt;strong&gt;engine of transition from a model of value&lt;/strong&gt; on its last leg (rarity capitalism) to the emerging one (new articulation of the individual and the collective: commons).&lt;br /&gt;
+ It is important and strategic to propose a sociological articulation supporting our mission and its purpose (commons) since &lt;strong&gt;the sociological concept (the paradigm) reveals an ideological characteristic&lt;/strong&gt;: because it participates in societal movements made in the Society, it serves an ideal. The societal domain, what’s making society, a political object, should be a stake for Mozilla.&lt;/p&gt;
+ &lt;h5&gt;Build on a basement: current tech challenge articulated with current social meaning/perception&lt;/h5&gt;
+ &lt;p&gt;&lt;strong&gt;We should articulate ‘our real life’ with the nowadays tech challenge&lt;/strong&gt;: how to get back control over our data at the time of IoT, cloud, big data, convergence (multi-devices/form factor)? From a user point of view, we have devices and want them convenient, easy and nice. The big moves in the tech industry (IoT, cloud, big data, convergence) free us for somethings and lock us for others. The lock key is that our devices don’t compute anymore our data that are in silos. From a developer point of view, the innovation is going very fast and it’s hard to have a complete open source toolbox that we can share, mostly because we don’t lead: Open has turn to be more open-releasing.&lt;br /&gt;
+ We should articulate our new strategy with the tech industry moves: for example, &lt;strong&gt;as a user, how can I get (email) encryption on all my devices?&lt;/strong&gt; Should I follow (fragmented) different kind of howtos/tools/apps to achieve that? How do I know these are consistent together? How can I be sure it won’t brake my continuous workflow? (app silo? social silo? level of trust and reliability?)&lt;br /&gt;
+ Mozilla have the skills to answer this as we already faced and solved some of these issues on particular points: like how to ease the installation of Firefox for Android for Firefox desktop users, open and discoverable choice of search engines, synchronization across devices, …&lt;br /&gt;
+ &lt;strong&gt;Mozilla’s challenge is to not be marginalized by the change of practices. Having an impact is embracing the new practice and give it an alternative.&lt;/strong&gt; Mozilla already made that move by saying « &lt;em&gt;Firefox will go where users are&lt;/em&gt;« , by trying to balance the advertisement practice between adds companies and users, by integrating H.264 and developing Daala. But &lt;strong&gt;Mozilla never stated that clearly as a strategy&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;A backbone to make our mission resilient in it expressions&lt;/h5&gt;
+ &lt;p&gt;If we think about the &lt;strong&gt;Facebook’s strategy, they first built a network of people whiling to share&lt;/strong&gt; (no matter what they share) and then use this &lt;strong&gt;transversal backbone to power vertical business segments&lt;/strong&gt; (search, donation, local market selling, …). Google with its search engine and its open source policy have a similar (in a way) strategy. The difference here is that the backbone is people’s data and control over digital formats. In both cases, the level of use (of the social network, search engine, mobile OS, …) is the key (with fast innovation) to have an impact. And that’s a major obstacle to build successful alternatives.&lt;br /&gt;
+ The proposed Mozilla’s strategy is built in the opposite way, and that’s questioning. &lt;strong&gt;We try to build people network depending on some shared matters&lt;/strong&gt;. Then, is our strategy able to scale enough to compete against GAFAM, or are we trying to build a third way ?&lt;br /&gt;
+ For the products, the Mozilla’s strategy is still (and has always been) inclusive: everybody can use the product and then benefit of its open web values. A good product that answer people needs, plus giving people back/new power (allow new use) build a big community. For the network, should we build our global force of people based on concentric circles (of shared matters) or based on a (Mozilla own) transversal backbone (matter agnostic)? It seems to me the actual presentation of the strategy do not answer clearly enough this big question: &lt;strong&gt;which &lt;em&gt;inclusivity&lt;/em&gt; (inclusion strengths) mechanism in the strategy?&lt;/strong&gt;&lt;br /&gt;
+ And that &lt;strong&gt;call back to our product strategy&lt;/strong&gt;: build a community that shares values, that is used to spread outcomes (product) OR build a community that shares a product, that is used to spread values. This is not a question on what matters more (product VS values) but on the strategy to get to a point, an objective (many web citizens). Shouldn’t we use our product to built a people network backbone ? Back to GAFAM: what can we learn from the Google try with Google+?&lt;br /&gt;
+ If our core is not enough transversal (the backbone), more new web/tech market there will be, more we will be marginalized, because focused on our circles center not taking in account that the war front (the context) have changed. &lt;strong&gt;Mozilla have to be resilient: mutability of the means, stability in the objectives.&lt;/strong&gt;&lt;br /&gt;
+ The document is the MoFo strategy, and so it doesn’t say anything about ‘build Firefox’ (aka the product strategy) and so don’t articulate our main product (Firefox) with our main people network building effort and values sharing engine. We should do it: at a strategic scale and a particular scale (articulating the agenda-setting with main product features).&lt;/p&gt;
+ &lt;h5&gt;Brand engagement, a psychological backbone on the user side ?&lt;/h5&gt;
+ &lt;p&gt;It seems that our GAFAM challengers get big and have impact by not educating (that much) people, and that’s what makes them not involved in the web citizenship. Or only when they are pushed by their customers. At the opposite, making people aware about web citizenship at first, makes it hard to have that much people involved and so to have impact. However, there is &lt;strong&gt;an other prism that drive people: the brand perceived values&lt;/strong&gt;. Google is seen as a tech pioneer innovator and doing the good because of its open policy, free model, fast innovation… Facebook is seen as really cool firm trying to help people by connecting them…&lt;br /&gt;
+ Is the increase of marketing of Mozilla doing good enough to gains back users ? Is this resilient compared to the next-tech-thing coming ?&lt;br /&gt;
+ Most of the time when I meet Goggle Chrome users and ask then why they use it and don’t switch to Firefox, they answer about use allowed (sync thought devices, apps everywhere that run only on GC, …). Sometimes, they argue that they make effort on other areas, and that they want to keep they digital life simple. They &lt;strong&gt;experience is not centered in a product/brand, but more on the person&lt;/strong&gt;: on that Google Chrome with its Person (with one click ‘auto-login’ to all Google services) is far superior than Firefox.&lt;/p&gt;
+ &lt;h5&gt;User-agent or products ?&lt;/h5&gt;
+ &lt;p&gt;A user-agent is an intermediary acting on behalf of a supplier. As a representative, it is the contact point with customers; It’s role is to manage, to administer the affairs; it is entrusted with a mission by one or more persons; it both acts and produce an effect.&lt;br /&gt;
+ So, the user-agent can be describe with three criteria. It is: an intermediate (user/technology) ; a tool (used to manage and administrate depending on the user’s skills) ; a representative (mission bearer, values vector, for a group of people). It exceeds partly the contradiction between being active and passive.&lt;br /&gt;
+ A &lt;strong&gt;user-agent articulate personal-identity with technology-identity&lt;/strong&gt; and give informations about available skills over these domains. It’s much more universal than a product that is about featuring a user-agent. &lt;strong&gt;If we target resilience, user-agent should be the target&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h4&gt;Social history, marketing: how we understand things to make choices&lt;/h4&gt;
+ &lt;h5&gt;History of the social value&lt;/h5&gt;
+ &lt;p&gt;The way we look at the past and current facts shape our understanding and determine if we open new ways to solve the issues identified. That’s the way to understand the challenges that come on the way and to agree on an adaptation of the strategy instead of splitting things. The way we understand and tell the problem determine the solution we can create: we need, all the way long, &lt;strong&gt;a shared understanding.&lt;/strong&gt;&lt;br /&gt;
+ &lt;strong&gt;Tools and technologies are not necessarily tied to their social value, which depends on social representations. The social value can be built upstream and evolve downstream.&lt;/strong&gt; It also depends on the perspective in which we look at it, on the understanding of the action and therefore on past or current history. Example: the social value of a weapon can be a potential danger or defense, creative (liberating) or destructive. The nuclear bomb is a weapon of mass destruction (negative), whose social value was (ingeniously built as) freedom (positive).&lt;/p&gt;
+ &lt;h5&gt;Impact in our strategy: a missing root&lt;/h5&gt;
+ &lt;p&gt;To engage the public, before to « &lt;em&gt;Focus on creative campaigns that use media + software to engage the public.&lt;/em&gt; » we need to step back, in our speeding world, for understanding together the big picture and the big movement.&lt;br /&gt;
+ Mozilla want to fuel a movement and propose a strong and consistent strategy. However, I think &lt;strong&gt;this plan miss a key point, a root point: build a common (hi)story.&lt;/strong&gt; This should be an objective, not just an action.&lt;br /&gt;
+ Also, that’s maybe a missing root for the State of the web report: how do we understand what we want to evaluate? But it’s not only a missing root for an (annual?) report (a ‘Reporters without borders’ Press-Freedom like?), it’s a missing root for a new grow of our products’ market share.&lt;br /&gt;
+ For example, I do think that most users don’t know and understand that Mozilla is a foundation, Firefox build by a community as a product to keep the web healthy: &lt;strong&gt;they don’t imagine any meaning about technology&lt;/strong&gt;, because they see it as a neutral tool at its root, so as a tool that should just fit they producing needs.&lt;br /&gt;
+ Firefox, its technologies and its features are not bound for ever. It is the narrative, and therefore their inclusion in the social history that we make, which converges Firefox with the values that it stand for. &lt;strong&gt;Stoping or changing the deep narrative means cutting the source of common understanding and making stronger other consistencies captured by other objects, turning as centrifugal forces for Firefox.&lt;/strong&gt;&lt;br /&gt;
+ Marketing is a way to change what we socially say about things: that’s why Google Chrome marketing campaign (and consistent features maturity) has been the decreasing starting point of Firefox. &lt;strong&gt;Our message has been scrambled.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h4&gt;From participation to emancipation: values, people and org relationships&lt;/h4&gt;
+ &lt;p&gt;How to emancipate people in the digital world ?&lt;/p&gt;
+ &lt;h5&gt;Keeping the open open&lt;/h5&gt;
+ &lt;p&gt;Being open is not a thing we can achieve, it’s a constant process. « &lt;em&gt;Mozilla needs to engage on both fronts, tackling the big problems but also fuelling the next wave of open.&lt;/em&gt; » Yes, but &lt;strong&gt;Mozilla should say too how the next wave of open can stay under people’s control and rally new people&lt;/strong&gt;. Not only open code, but open participation, open governance, open organization. Being open is not a releasing policy about objects, it’s a mutation to participation process: a metamorphosis. It’s not reached by expanding, but by shifting. It’s not only about an amount, but about values: it’s qualitative.&lt;br /&gt;
+ Maybe &lt;strong&gt;open is not enough&lt;/strong&gt;, because it doesn’t say enough about who control and how, about the governance, and says too much about &lt;strong&gt;availability (passive)&lt;/strong&gt; and not enough &lt;strong&gt;about &lt;em&gt;inclusivity&lt;/em&gt; (active ; inclusion strengths)&lt;/strong&gt;. It doesn’t say how the power is organized and articulated to the people (ex. think about how closed is the open Android). We may need to change the wording: indie web, the web that fuel autonomy, is a try, but it doesn’t say enough about &lt;em&gt;inclusivity&lt;/em&gt; compared to openness &amp;amp; opportunity. Emancipation is the concept. It’s strategic because it says what is aligned to what, especially how to articulate values and uses. It’s important because it tells what are the sufficient conditions of realization to ‘open/indie’. That’s key to get ‘open/indie at small and large scales, from Internet people to Internet institutions, thought all ‘open/indie’ detractors in the always-current situation: a resilient ecosystem.&lt;br /&gt;
+ My intuition is that &lt;strong&gt;the leadership network and advocacy engine promoting open will be efficient if we clarify ‘open’ while keeping it universal&lt;/strong&gt;. We can do it by looking back at the raw material that we have worked for years, our DNA in action. Because after all, we are experts about it and wish others to become experts too. It does not mean to essentialize it (opposing its nature and its culture), &lt;strong&gt;but to define its conditions of continuous achievement in our social context&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;Starting point: exemplary projects that tell a lot about the evolution of our DNA in action&lt;/h5&gt;
+ &lt;p&gt;Clarifying the idea of ‘open’ is strategic to our action because it outlines the constitution of ‘open’, its high ‘rules’, like with laws in political regimes. It clarifies for all, if you are part of it or not, and it tells you what to change to get in. It can reinforce the brand by differentiating from the big players that are the GAFAM: &lt;strong&gt;it’s a way to drive, not to be driven by others lowering the meaning to catch the social impact. We should say that ‘open’ at Mozilla means more than ‘open’ at GAFAM&lt;/strong&gt;. I wish Mozilla to speak about its openness, not as an ‘equal in opportunity’ but as an ‘equal in participation’, because it fits openness not only for a moment (on boarding) or for a person, but during the whole process of people’s interaction.&lt;br /&gt;
+ &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://servo.org/&quot;&gt;Servo&lt;/a&gt; or &lt;a href=&quot;https://firefoxos.mozilla.community/&quot;&gt;Firefox OS&lt;/a&gt; (since the Mozilla’s shift to radical participation) seem to be very good examples of projects with participation &amp;amp; impact centric rules, tools, process (RFC, new team and owners, …). Think about how Rust and &lt;a href=&quot;http://arc.applause.com/2015/03/27/google-dart-virtual-machine-chrome/&quot;&gt;Dart emerged and are evolving&lt;/a&gt;. Think about how stronger has been the locked-open Android with partnership than the open-locked FxOS. We should tell those stories, not as recipes that can be reproduced, but as process based on a Constitution (inclusive rules) that make a political regime (open) and define a mode of government (participation). That’s key to social understanding and therefore to transpose and advocate for it.&lt;br /&gt;
+ As projects&lt;strong&gt; compared to ‘original Mozilla’, Rust, Servo and FxOS could say a lot&lt;/strong&gt; about how different they implemented learning/interaction/participation at the roots of the project. How the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla and participants. This could definitely help to setup our curriculum resources, database and workshop at a personal (e.g., “How to teach / facilitate / organize / lead in the open like Mozilla.”) and orgs levels, with personal and orgs policies.&lt;/p&gt;
+ &lt;h5&gt;Spreading the high meanings in our strategy to consolidate it consistency&lt;/h5&gt;
+ &lt;p&gt;Clarifying the constitution of ‘open’ calls to clarify other related wordings.&lt;br /&gt;
+ I’m satisfied to read back (social) ‘movement’ instead of ‘community’, because it means that our goal can’t be achieve forever (is static), but we should protect it by acting. And it seems more inclusive, less ‘folds on itself’ and less ‘build the alternative beside’ than ‘community’: the alternative can be everywhere the actual system is. It can make a system. It can get global, convergent, continuous, … all at the same time. Because it’s roots are decentralized _and_ consistent, collaborating, …&lt;/p&gt;
+ &lt;p&gt;About participation, we should think too (again) about engagement VS contribute VS participate: how much am I engaged ? Free about defining and receiving cost/gains? What is the impact of my actions ? … &lt;strong&gt;These different words carry different ideas about how we connect the ‘open’&lt;/strong&gt;: spread is not enough because it diffuses, _be_ everywhere is more permanent. Applied to Mozilla’s own actions, &lt;strong&gt;funding open projects and leaders, is maybe not enough and there should be others areas where we can connect&lt;/strong&gt; inside products, technology, people and organizations that build emancipation. So that say something about getting control (who, how, …).&lt;/p&gt;
+ &lt;h5&gt;IA: a challenge for ‘open’&lt;/h5&gt;
+ &lt;p&gt;IA is first developed to help us by improving our interactions. However, this seems to start to shift into taking decisions instead of us. This is problematic because these are indirect and direct ways for us to loose control, to be locked. And that can be as far as computers smarter than humans. The problem is that technical progress is made without any consideration of the societal progress it should made.&lt;br /&gt;
+ That’s an other point, why open is not enough: automation should be build-in with superior humanization. &lt;strong&gt;Mozilla should activate and unlock societal progress to build fair technical progress.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h5&gt;Digital integration &amp;amp; democracy&lt;/h5&gt;
+ &lt;p&gt;The digital (&amp;amp; virtual) world is gaining control over the physical world in many domains of our society (economy to finance, mail to email, automatic car, voting machine, …). It’s getting more and more integrated to our lives without getting back our (imperfect) democracy integrated into them. Public benefit and public good are turning ‘self benefit’ and ‘own sake’ because citizens don’t have control over private companies. &lt;strong&gt;We should build a digital democracy if we don’t want to loose at all the democratic governing of society.&lt;/strong&gt; We must overcome the poses and postures battles about private and public. We need to build.&lt;/p&gt;
+ &lt;h4&gt;‘Leader’ &amp;amp; ‘Leadership’ need a clarification&lt;/h4&gt;
+ &lt;h5&gt;Why a clarification?&lt;/h5&gt;
+ &lt;p&gt;At some level, I’m not the only one to ask this question:&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;How do CRM requirements for Leadership and Advocacy overlap / differ? What’s our email management / communications platform for Leadership?&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;Connect leaders to lead what ? How ? To whose benefit ? Do we want to connect leaders or initiatives (people or orgs) ? Will the leaders be emerging ones (building new networks) or established ones (use they influence to rally more people)? Are Leaders leaders of something part of Mozilla (like can be Reps) or outside of Mozilla (leaders of project, companies, newspaper: tech leaders, news leaders, …) ? This is especially important depending on what is the desire for the leaders to become in the future. &lt;strong&gt;The MoFo’s document should be more precise&lt;/strong&gt; about this and go forward than « &lt;em&gt;Mozilla must attract, develop, and support a global network of diverse leaders who use their expertise to collaboratively advance points-of-view, policies and practices that maintain the overall health of the Internet.&lt;/em&gt; »&lt;br /&gt;
+ We should do it because &lt;strong&gt;the confusion about the leadership impact the advocacy engine&lt;/strong&gt;: « &lt;em&gt;The shared themes also provide explicit opportunities for our Leadership and Advocacy efforts to work together.&lt;/em&gt; » Regarding Mozilla, is the leaders role to be advocacy leaders ? It seems as they share themes and key initiatives (even if not worded the same sometimes). Or in other words, who Drives the Advocacy engine?&lt;/p&gt;
+ &lt;h5&gt;Iterations with the actual definition: creators&lt;/h5&gt;
+ &lt;p&gt;Here are my iterations on the definition of ‘Leaders’:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The Leaders could be the people platform (the community) and the advocacy engine the tool/themes/actions platform (the product).&lt;/li&gt;
+ &lt;li&gt;Leaders could build at the end new solutions (products) and Advocates new voices (rallying), that could be translated in a learning area divided like Leadership=learn+create and advocacy=teach+spread.&lt;/li&gt;
+ &lt;li&gt;Leadership: personal development to produce (turn into) new commons or add new facets to commons. Advocacy: personal development to protect established/identified commons.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;With these definitions, then Leaders are maybe more a Lab, R&amp;amp;D place, incubation tool (if we think about start-up incubators, then it shows a tool-set that we will need to inspire for the future). But if we want to keep the emphasis on people, &lt;strong&gt;we could name them ‘creators’&lt;/strong&gt; (compositors or managers ; not commoners, because leaders and advocates are commoners ; yes, traditionally creators are craftspersons and intellectual designers). This make sens with the examples given in the MoFo 2020 strategy 0.8 document, where all persona are involved in a building-something-new process.&lt;/p&gt;
+ &lt;p&gt;However, it’s interesting to understand why we choose at first ‘Leaders’. &lt;strong&gt;Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.&lt;/strong&gt; Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved to create (different) representation (institutions) and organization (foundation/firms) but &lt;strong&gt;with a different DNA (values) processing&lt;/strong&gt;: from public good to personal interest or the opposite. If Mozilla cares about public good resilience, &lt;strong&gt;the articulation of they domains of values is critical. So their articulation’s expression and the revision process must be said and clear&lt;/strong&gt;: from hierarchy vs contract vs different autonomy levels (internal incubation and external advocacy), vs … to criteria to start a revision.&lt;/p&gt;
+ &lt;h5&gt;The network effect&lt;/h5&gt;
+ &lt;p&gt;Another argument for the switch from Leader to Creator is that the Leader word it too much tight to a single-person-made innovation. &lt;strong&gt;Creator make more clear that the innovation is possible not because of one genius, but because of a team&lt;/strong&gt;, a group, a collective: personS (where there could also be genius). The value is made by the collaboration of people (especially in an open project, especially in a network).&lt;br /&gt;
+ That’s important because that could impact how well we do the convening part: not self-promoting, not-advertising, but sharing skills and knowledge for people and catalysing projects.&lt;br /&gt;
+ &lt;strong&gt;The same for the wording ‘talent’&lt;/strong&gt;: alone, a talent can do nothing that has an impact. At least, we need two talents, a team (plus some assistants at some point).&lt;/p&gt;
+ &lt;h5&gt;The cultural prism&lt;/h5&gt;
+ &lt;p&gt;Again, this seems to be an open question:&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;Define and articulate “leadership.” Hone our story, ethos and definition for what we mean by “leadership development” (including cultural / localization aspects).&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;In my culture, Leader carry positive (take action) and negative (dominate) meanings. That’s another reason why I prefer another naming.&lt;br /&gt;
+ I understand too that it carries a lot of legitimacy (ex. market leader) in our societies and it avoids the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact.&lt;br /&gt;
+ But the way Mozilla has an impact thought all cultures, its &lt;strong&gt;legitimacy, is by creating or expanding a common&lt;/strong&gt;. To do this, depending on the maturity, Mozilla could follow the market proposing an alternative with superior usability OR opening a new market by adding a vertical segment.&lt;/p&gt;
+ &lt;h5&gt;Existing tool-set opportunities&lt;/h5&gt;
+ &lt;p&gt;If Leadership is « &lt;em&gt;a year-round MozFest + Lab&lt;/em&gt;« , so it’s a social network + an incubation place. Then, we already have a social network for people involved with Mozilla: Which kind of link should have the leadership network with &lt;strong&gt;mozillians.org&lt;/strong&gt; ? What can we learn from this project and other specialized social network projects (linkedin, viadeo, …) to build the leadership network ?&lt;/p&gt;
+ &lt;h4&gt;Advocacy engine: make it clear&lt;/h4&gt;
+ &lt;h5&gt;What it is &amp;amp; how it works&lt;/h5&gt;
+ &lt;p&gt;Mozilla is doing a great effort to build its advocacy engine on collaboration (« &lt;em&gt;Develop new partnerships and build on current partnerships&lt;/em&gt;« , « &lt;em&gt;begin collaboration&lt;/em&gt;« , « &lt;em&gt;build alliances with similar orgs&lt;/em&gt;« ) but at the same time affirms that Mozilla should be « &lt;em&gt;Part of a broader movement, be the boldest, loudest and most effective advocates&lt;/em&gt; » that could be seen as too centralized, too exclusive.&lt;br /&gt;
+ While this can be consistent (or contradictory), &lt;strong&gt;the consistency has to be explained&lt;/strong&gt; looking at orgs and people, global and local, abstract and real, with a complementarity/competitive grid.&lt;br /&gt;
+ First, &lt;strong&gt;the articulation with other orgs has to be explained&lt;/strong&gt;. What about others orgs doing things global (&lt;a href=&quot;https://eff.org/&quot;&gt;EFF&lt;/a&gt;, &lt;a href=&quot;https://fsf.org/&quot;&gt;FSF&lt;/a&gt;, …) and local (&lt;a href=&quot;http://www.laquadrature.net/&quot;&gt;Quadrature du net&lt;/a&gt;, CCC, …) ? What about the value they give and that Mozilla doesn’t have (juridic expertise for example) ? What about other advocate engines (&lt;a href=&quot;https://change.org/&quot;&gt;change.org&lt;/a&gt;, &lt;a href=&quot;https://secure.avaaz.org/&quot;&gt;Avaaz&lt;/a&gt;…) ? That should not be at an administrative level only like « &lt;em&gt;Develop an affiliate policy. Defining what MoFo does / does not offer to effectively govern relationships w. affiliated partners and networks (e.g., for issues like branding, fundraising, incentives, participation guidelines, in-kind resources.)&lt;/em&gt; »&lt;br /&gt;
+ Second, this is key for users to understand and &lt;strong&gt;articulate the global level of the brand engagement and their local preoccupations and engagement&lt;/strong&gt;. How the engine will be used for local (non-US) battles ? In the past Mozilla totally involved against PIPA, SOPA by taking action, and hesitate a lot to take position and just published a blog post (and too late to gain traction and get impact) against French spying law for example.&lt;br /&gt;
+ Third, &lt;strong&gt;the articulation ‘action(own agenda)/reaction’ should be clarified&lt;/strong&gt; in the objectives and functioning of the advocacy engine. Especially because other orgs, allies or detractors, try to to setup the social agenda. It’s important because it can change the social perception of our narrative (alternative promotion/issue fighting) and therefore people’s contributions.&lt;br /&gt;
+ People think the technology is socially neutral. People are satisfied of narrow hills of choice (not the meaning, the aim, but only the ability to show your favorite avatar). &lt;strong&gt;People don’t want to feel guilty or oppressed&lt;/strong&gt;, they don’t want new constraints, they are looking for solution only: they want to use, not to do more, they want they things to be done. Part of the problem is about understanding (literacy, education), part of it is about the personal/common duality, part of it is about being hopeless about having an impact, part of it is about expressing change as a positive goal and a new possible way (alternative), not a fight against an issue. About the advocacy engine, I think &lt;strong&gt;our preoccupation should be people-centric and the aim to give them a short, medium and long term narrative to get action without being individuals-centric&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;How we build it ?&lt;/h5&gt;
+ &lt;p&gt;How to build a social movement ? How it has been built in the past ? Is it the same today ? Can it be transposed to the digital domain from others social domains ? How strong are the cultural differences between nations? These are the main questions we should answer, and our pivot era gives us many examples in diverse domains (climate change advocates, Syriza &amp;amp; Podemos, NSA &amp;amp; surveillance services in Europe, empowered syndicates in Venezuela, &lt;a href=&quot;http://blogs.valvesoftware.com/economics/why-valve-or-what-do-we-need-corporations-for-and-how-does-valves-management-structure-fit-into-todays-corporate-world/#more-252&quot;&gt;Valve corp. internal organization&lt;/a&gt;…) to set a search terrain. However, I will go strait to my intuitive understanding below.&lt;br /&gt;
+ I’m kind of worried that it’s imagined to build the advocacy engine themes by a top-down method. &lt;strong&gt;I think a successful advocacy is always built bottom-up&lt;/strong&gt;, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. If we want to have impact, &lt;strong&gt;we should listen to people needs, not tell them to listen to ours. People want (first) to be empowered, not to empower an org&lt;/strong&gt;. So let’s organize the infrastructure, set the agenda and draw the horizon (strategic understanding) participative: make people fill them with content of their experience. It seems to me it is the only way, the only successful method, if we want to build a movement, and not just a shifting moment (that could be built by the top, with a good press campaign locally relayed for example ; that’s what happen in old style politics: the aim is short term, to cleave).&lt;br /&gt;
+ &lt;strong&gt;Isn’t the advocacy engine a new Drumbeat ?&lt;/strong&gt; We shifted from Drumbeat to Webmaker+web literacy to Mozilla Academy and now to Leadership plus advocacy: it could be good to tell that story now that we are shifting again and learn from it.&lt;br /&gt;
+ &lt;strong&gt;Mozilla should support, behave as a platform&lt;/strong&gt;, not define, not focus. Letting the people set the agenda makes them more involved and is a good way to build a network of shared aims with other orgs, that is not invasive or alienating, but a support relationship in a win-win move. The strength comes from the all agendas sewed. So at an org level, let’s on-board allies organizations as soon as plan building-time (now), to build it together. Yes it’s slower, but much more massive, inclusive and persistent.&lt;/p&gt;
+ &lt;h5&gt;How we evaluate it: cultural bias &amp;amp; qualitative analysis&lt;/h5&gt;
+ &lt;p&gt;First, about the agenda-setting KPI for 2016, should these KPI be an evaluation of the inclusion and rank in others strategic agendas, governance systems and productions (outcome/products) ? Others org could be from different domains: political, social, economy orgs.&lt;br /&gt;
+ Then, as a wide size audience KPI, Mozilla wants « &lt;em&gt;celebration of our campaigns with ‘headline KPIs’ including number of actions, and number of advocates.&lt;/em&gt;« . While doing this could be the right thing to do for some cultures, it could be the worst for others. I think that these KPI don’t carry a meaning for people and are too org centric. In a way, they are to generic: it’s just an amount. &lt;strong&gt;Accumulation is not our goal: we want impact that is the grow of articulated actions&lt;/strong&gt; made by diverse people toward the same aim. &lt;strong&gt;We need our massive KPI to be more qualitative&lt;/strong&gt;, or at least find a way to present them in a more qualitative way: interactive map ? a global to local prism that engages people for the next step ?&lt;/p&gt;
+ &lt;h5&gt;Best practices &amp;amp; massive impact&lt;/h5&gt;
+ &lt;p&gt;Selecting best practices are an appealing method when we want to have a fast and strong impact in a wide area. However, &lt;strong&gt;when we unify we should avoid to homogenize&lt;/strong&gt;. The gain in area by scaling-up is always at the cost of loosing local impact because it is not corresponding to local specificities, hence to local expectations. Federating instead of scaling-up is a way to solve this challenge. So we should be careful to not &lt;strong&gt;use best practice as absolute solutions, but as solutions in a context&lt;/strong&gt; if we want to transpose them massively.&lt;/p&gt;
+ &lt;h5&gt;Tools &amp;amp; platform balanced between user-centric and org-centric outcomes&lt;/h5&gt;
+ &lt;p&gt;It’s good to hear that we will build a advocacy platform. As we ‘had’ bugzilla+svn then mercurial (hg)+… and are going to the &lt;strong&gt;integrated&lt;/strong&gt;, &lt;strong&gt;pluggable&lt;/strong&gt; and &lt;strong&gt;content-centric&lt;/strong&gt; (but non-free; admin tools are closed source) github (targeting more coder than users, but with a lower entry price for users still), we need to be able to have the same kind of tool for advocates and leaders. Something inspired maybe at some levels by the remixing tools we built in Webmakers for web users.&lt;/p&gt;
+ &lt;h4&gt;From experiment to production: support (self made to mass product) + modularity (dev code patch to users add-ons).&lt;/h4&gt;
+ &lt;p&gt;&lt;strong&gt;We need pathways from lab to home that carry different mix of customization and reliability to support the emancipation curve.&lt;/strong&gt;&lt;br /&gt;
+ Users want things to work, because they want to use it. Geeks want to be able to modify a lot and accept to put their hands in the engine to build growing reliability. Advanced users want to customize their experience and keep control and understanding on working status. They want to be able to fix the reliability at a medium/low technical cost. They are OK to gain more control at these prices. Users want to use things to do what they need and want to trust a reliability maintained for them. They are OK to gain control at a no technical cost. Depending on the matter we all have different skill levels, so we are all geeks, advanced users and users depending on our position or on the moment. And depending on our aspirations, we all want to be able to move from one category to an other. That’s what we need to build: we don’t just need to « &lt;em&gt;better articulate the value to our audiences&lt;/em&gt;« , &lt;strong&gt;we need to build pathways thought audiences and thought IT layers&lt;/strong&gt; (content, software, hardware, distant service). &lt;strong&gt;We should find a convergence between customization and reliability, between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways&lt;/strong&gt;. So, « &lt;em&gt;better articulate the value to our audiences&lt;/em&gt; » should not be restrained in our minds to the Mozilla Leadership Network.&lt;br /&gt;
+ &lt;strong&gt;Part of this is being done in other projects outside of Mozilla in the commons movement.&lt;/strong&gt; There are many, but let’s take just one example, the &lt;a href=&quot;https://www.fairphone.com/&quot;&gt;Fairphone&lt;/a&gt; project: modularity, howtos, … all this help to break the product-to-use walls and drive appropriation/emancipation. &lt;strong&gt;Products are less product and brand centric and more people/user centric&lt;/strong&gt;.&lt;br /&gt;
+ Part of this has been done inside Mozilla, like integrating learning in our products, in-content, as we have code comment on code. I think &lt;strong&gt;the &lt;a href=&quot;https://wiki.mozilla.org/Firefox_OS/Spark&quot;&gt;Spark&lt;/a&gt; project on Firefox OS is on a promising path&lt;/strong&gt;, even if maybe immature: it maybe has not been released mainstream because it misses bridges/pathways (on-boarding levels, progression from simple to high level techniques, and no or not enough reproducible/universal next task/skill building).&lt;br /&gt;
+ So some solutions start to emerge, the direction is here, but has never been conceived and implemented that globally, as there isn’t integrated pathways with choice and opportunity and a strategy embracing all products and technologies (platform, tools, …).&lt;/p&gt;
+ &lt;h4&gt;Better tools for collaboration and participation: task-centric to process-centric (use) infrastructure&lt;/h4&gt;
+ &lt;p&gt;&lt;strong&gt;The open community should definitely improve the collaboration tools and infrastructure to ease participation.&lt;/strong&gt;&lt;br /&gt;
+ &lt;strong&gt;&lt;a href=&quot;http://www.discourse.org&quot;&gt;Discourse&lt;/a&gt; ‘merged’ discussion channels&lt;/strong&gt;: email+forum(+instant, messaging, … and others peer-to-peer discussion?). &lt;strong&gt;&lt;a href=&quot;http://stackexchange.com&quot;&gt;Stack exchange&lt;/a&gt; merged the questioning/solving process&lt;/strong&gt; and added a vote mechanism to rank answers: it eased the collaboration on editing the statement and the results while staying synchronous with the discussion and keeping the discussion history. We need such kind of possibilities with discourse: &lt;strong&gt;capitalize on the discussion and preview the results to build a plan.&lt;/strong&gt;&lt;br /&gt;
+ This exist in document oriented software (that added collaboration editing tools), but not that much in collaboration software (that don’t produce documents). For example, while discussing the future plan for Fx/FxOS be supported to keep track on a doc about the proposals plans + criteria &amp;amp; dependencies. In action, it is from &lt;a href=&quot;https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003063.html&quot;&gt;this&lt;/a&gt; plus all the discussion taking place to &lt;a href=&quot;https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003119.html&quot;&gt;that&lt;/a&gt;.&lt;br /&gt;
+ This is maybe something like integrating Discourse+Wiki, maybe with the need to have competing and ranked (both for content and underlaying meaning of content=strategy?) plan/page proposals. &lt;strong&gt;From evolving the wiki discussion page to featuring document production into peer-to-peer discussion.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h4&gt;A recovering strategy: from fail to win&lt;/h4&gt;
+ &lt;p&gt;There is maybe one thing that is in the shadow in this plan: &lt;strong&gt;what do we do when/if we (partially) fail ?&lt;/strong&gt;&lt;br /&gt;
+ I think at least we should say that &lt;strong&gt;we document&lt;/strong&gt; (keep research going on) to be able to outline and spread the outcomes of what we tried to fight against. So we still try to built consciousness to be ready for the next round.&lt;/p&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;If you see some contradiction in my thoughts, let’s say it’s my state of thinking right now: please voice them so we can go forward.&lt;/em&gt;&lt;br /&gt;
+ &lt;em&gt; The same for thoughts that are voiced definitive (like users are): take it as a first attempt with my bias: let’s state these bias to go forward.&lt;/em&gt;&lt;/p&gt;
+ &lt;div class=&quot;footnotes&quot; id=&quot;footnotes-48&quot;&gt;
+ &lt;div class=&quot;footnotedivider&quot;&gt;&lt;/div&gt;
+ &lt;ol&gt;
+ &lt;li id=&quot;fn-48-1&quot;&gt; ‘&lt;em&gt;Radical&lt;/em&gt;‘ can be in some cultures an euphemism to ‘&lt;em&gt;violent&lt;/em&gt;‘. Let’s be clear that the change by increasing violence is done to make a popular uprising of some part against others. While it does not help the majority to magically understand that the minority is right, it stigmatize the radical-violent-changers and in the way it discredits the alternative proposed. &lt;span class=&quot;footnotereverse&quot;&gt;&lt;a href=&quot;https://repeer.org/tag/mozilla/feed/#fnref-48-1&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;/div&gt;</content:encoded>
+ <dc:date>2016-01-16T00:27:13+00:00</dc:date>
+ <dc:creator>Nicolas</dc:creator>
+ </item>
+ <item rdf:about="http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html">
+ <title>Will Kahn-Greene: pyvideo status: January 15th, 2016</title>
+ <link>http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html</link>
+ <content:encoded>&lt;div class=&quot;section&quot; id=&quot;what-is-pyvideo-org&quot;&gt;
+ &lt;h3&gt;What is pyvideo.org&lt;/h3&gt;
+ &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://pyvideo.org/&quot;&gt;pyvideo.org&lt;/a&gt; is an index of Python-related conference and user-group videos on
+ the Internet. Saw a session you liked and want to share it? It's likely you can
+ find it, watch it, and share it with pyvideo.org.&lt;/p&gt;
+ &lt;p&gt;This is the latest status report for all things happening on the site.&lt;/p&gt;
+ &lt;p&gt;It's also an announcement about the end.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://bluesock.org/~willkg/blog/pyvideo/status_20160115.html&quot;&gt;Read more…&lt;/a&gt; (5 mins to read)&lt;/p&gt;&lt;/div&gt;</content:encoded>
+ <dc:date>2016-01-15T23:30:00+00:00</dc:date>
+ <dc:creator>Will Kahn-Greene</dc:creator>
+ </item>
+ <item rdf:about="http://coopcoopbware.tumblr.com/post/137371863755">
+ <title>Chris Cooper: RelEng &amp; RelOps Weekly Highlights - January 15, 2016</title>
+ <link>http://coopcoopbware.tumblr.com/post/137371863755</link>
+ <content:encoded>&lt;p&gt;One of releng’s big goals for Q1 is to deliver a beta via &lt;a href=&quot;https://bugzil.la/release-promotion&quot; target=&quot;_blank&quot;&gt;build promotion&lt;/a&gt;. It was great to have some tangible progress there this week with bouncer submission.&lt;/p&gt;
+
+ &lt;p&gt;Lots of other stuff in-flight, more details below!
+ &lt;/p&gt;&lt;p&gt;&lt;b&gt;Modernize infrastructure&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Dustin worked with Armen and Joel Maher to run Firefox tests in TaskCluster on an older EC2 instance type where the tests seem to fail less often, perhaps because they are single-CPU or slower.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Improve CI pipeline&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;We turned off automation for b2g 2.2 builds this week, which allowed us to remove some code, reduce some complexity, and regain some small amount of capacity. Thanks to Vlad and Alin on buildduty for helping to land those patches. (&lt;a href=&quot;https://bugzil.la/1236835&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1236835&lt;/a&gt; and &lt;a href=&quot;https://bugzil.la/1237985&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1237985&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;In a similar vein, Callek landed code to disable all b2g desktop builds and tests on all trees. Another win for increased capacity and reduced complexity! (&lt;a href=&quot;https://bugzil.la/1236835&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1236835&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Release&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Kim finished integrating bouncer submission with our release promotion project. That’s one more blocker out of the way! (&lt;a href=&quot;https://bugzil.la/1215204&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1215204&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;Ben landed several enhancements to our update server: adding aliases to update rules (&lt;a href=&quot;https://bugzil.la/1067402&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1067402&lt;/a&gt;), and allowing fallbacks for rules with whitelists (&lt;a href=&quot;https://bugzil.la/1235073&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1235073&lt;/a&gt;).&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Operational&lt;/b&gt;:&lt;/p&gt;
+ &lt;p&gt;There was some excitement last Sunday when all the trees were closed due to timeouts connectivity issues between our SCL3 datacentre and AWS. (&lt;a href=&quot;https://bugzil.la/238369&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/238369&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Build config&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Mike released v0.7.4 of &lt;a href=&quot;http://gittup.org/tup/&quot; target=&quot;_blank&quot;&gt;tup&lt;/a&gt;, and is working on generating the tup backend from moz.build. We hope to offer tup as an alternative build backend sometime soon.&lt;/p&gt;
+
+ &lt;p&gt;See you all next week!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T22:44:13+00:00</dc:date>
+ </item>
+ <item rdf:about="https://air.mozilla.org/webdev-beer-and-tell-january-2016/">
+ <title>Air Mozilla: Webdev Beer and Tell: January 2016</title>
+ <link>https://air.mozilla.org/webdev-beer-and-tell-january-2016/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Webdev Beer and Tell: January 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/35/0f/350f246037ead3bab95fdbd4c2b77484.png&quot; width=&quot;160&quot; /&gt;
+ Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on in...
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T22:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="http://blog.mozilla.org/sumo/?p=3665">
+ <title>Support.Mozilla.Org: What’s up with SUMO – 15th January</title>
+ <link>https://blog.mozilla.org/sumo/2016/01/15/whats-up-with-sumo-15th-january/</link>
+ <content:encoded>&lt;p&gt;&lt;strong&gt;Hello, SUMO Nation!&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;The second post of the year is here. Have you had a good time in 2016 so far? Let us know in the comments!&lt;/p&gt;
+ &lt;p&gt;Now, let’s get going with the updates and activity summaries. It will be brief today, I promise.&lt;/p&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-name&quot;&gt;Welcome, new contributors!&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li class=&quot;author&quot;&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;a class=&quot;username&quot; href=&quot;https://support.mozilla.org/en-US/user/Andy.Yang&quot;&gt;Andy.Yang&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;author&quot;&gt;After the massive influx over the last few weeks, we only had Andy introducing himself recently – the warmer the welcome for him!&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;If you just joined us, don’t hesitate – come over and &lt;a href=&quot;https://support.mozilla.org/forums/buddies&quot; target=&quot;_blank&quot;&gt;say “hi” in the forums!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Contributors of the week&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/sumo/2016/01/08/whats-up-with-sumo-8th-january/&quot; target=&quot;_blank&quot;&gt;All the people who joined us in the winter season so far!&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid64&quot;&gt;
+ &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;We salute you!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can &lt;a href=&quot;https://support.mozilla.org/forums/buddies/711364?last=65670&quot; target=&quot;_blank&quot;&gt;nominate them for the Buddy of the Month!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;h3&gt;&lt;strong&gt;Most recent SUMO Community meeting&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-11&quot; target=&quot;_blank&quot;&gt;You can read the notes here&lt;/a&gt; and see the video on our &lt;a href=&quot;https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos&quot; target=&quot;_blank&quot;&gt;YouTube channel&lt;/a&gt; and &lt;a href=&quot;https://air.mozilla.org/search/?q=sumo&quot; target=&quot;_blank&quot;&gt;at AirMozilla&lt;/a&gt;.&lt;del&gt; &lt;/del&gt;&lt;del&gt;&lt;br /&gt;
+ &lt;/del&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/711752?last=67873&quot;&gt;(Monday) Community Meetings in 2016&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;The next SUMO Community meeting… &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;is happening on &lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-18&quot; target=&quot;_blank&quot;&gt;Monday the 18th – join us&lt;/a&gt;!&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Reminder: if you want to add a discussion topic to the upcoming meeting agenda:&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Start a thread in the &lt;a href=&quot;https://support.mozilla.org/forums/contributors&quot; target=&quot;_blank&quot;&gt;Community Forums&lt;/a&gt;, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Developers&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The new version of the Ask A Question page is here!&lt;/li&gt;
+ &lt;li&gt;The 2.0 version of the KPI dashboard is in the works.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://edwin.mozilla.io/t/sumo&quot; target=&quot;_blank&quot;&gt;You can see the current state of the backlog our developers are working on here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-p-2016-01-14&quot; target=&quot;_blank&quot;&gt;The latest SUMO Platform meeting notes can be found here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Interested in learning how Kitsune (the engine behind SUMO) works? &lt;a href=&quot;http://kitsune.readthedocs.org/&quot; target=&quot;_blank&quot;&gt;Read more about it here&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/kitsune/&quot; target=&quot;_blank&quot;&gt;fork it on GitHub&lt;/a&gt;!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Our awesome Bangladesh SUMO Warriors are on the road again! Follow their adventures on Twitter under this tag: &lt;a href=&quot;https://twitter.com/search?q=%23sumotourctg&quot; target=&quot;_blank&quot;&gt;#sumotourctg&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711729?last=67763&quot;&gt;Reminder: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;Ongoing reminder: if you think you can benefit from getting &lt;a href=&quot;https://wiki.mozilla.org/Community_Hardware&quot; target=&quot;_blank&quot;&gt;a second-hand device&lt;/a&gt; to help you with contributing to SUMO, you know where to find us.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;user-chip&quot; title=&quot;adriel0415&quot;&gt;Support Forum&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Say hello to the new people on the forums!
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/Tomi55&quot; target=&quot;_blank&quot;&gt;Tomi55&lt;/a&gt; (Hungarian)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/jdc20181&quot; target=&quot;_blank&quot;&gt;jdc20181&lt;/a&gt; (English)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/andexi&quot; target=&quot;_blank&quot;&gt;andexi&lt;/a&gt; (Spanish)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/Qantas94Heavy&quot; target=&quot;_blank&quot;&gt;Qantas94Heavy&lt;/a&gt; (English)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/samuelms79&quot; target=&quot;_blank&quot;&gt;samuelms79&lt;/a&gt; (Brazilian-PT)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/jorgecomun&quot; target=&quot;_blank&quot;&gt;jorgecomun&lt;/a&gt; (Spanish)&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Knowledge Base&lt;/strong&gt;&lt;/h3&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid90&quot;&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid82&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zjz80zxwjz85z4z65zytdpz68zoz69z&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/knowledge-base-articles/711304#post-65289&quot; target=&quot;_blank&quot;&gt;Thanks to everyone who took part in the most recent KB Day!&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;Version 44 updates should be live now.&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-w2dz70zaz70z7z89zqz78ziz69zz78zz85zz90zj&quot;&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1lkpRPJp9P1P5MRU-c9dwbDC0w5bMmrMdu-BNMp1xe8w/edit#gid=6&quot; target=&quot;_blank&quot;&gt;Ongoing reminder: learn more about upcoming English article updates by clicking here&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Ongoing reminder #2:&lt;a href=&quot;https://support.mozilla.org/forums/knowledge-base-articles/&quot; target=&quot;_blank&quot;&gt; do you have ideas about improving the KB guidelines and training materials? Let us know in the forums&lt;/a&gt;!&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid83&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Localization&lt;/strong&gt;&lt;/h3&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid95&quot;&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Thanks to everyone writing in with problems, ideas, reports of bugs – all your feedback matters!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid75&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Firefox&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Android&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711712?last=67653&quot;&gt;Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711718?last=67822&quot;&gt;Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions&lt;/a&gt; with everyone in the forum.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Desktop&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238620&quot; target=&quot;_blank&quot;&gt;uploading issues reported by many users are being tracked here.&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/questions/firefox?tagged=bug1208145&amp;amp;show=all&quot; target=&quot;_blank&quot;&gt;The “show passwords” button has been removed from the password manager for the Beta of Version 44&lt;/a&gt;. The developers are looking into &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208145&quot; target=&quot;_blank&quot;&gt;last minute fixes for that in this bug&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Also in Version 44, the &lt;span class=&quot;author-a-kz88zz80zhz89z6hlz81znytez70zz66zz68z&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=606655&quot; target=&quot;_blank&quot;&gt;“ask me everytime” option for cookies will be removed from the privacy panel.&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for iOS&lt;/strong&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid85&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/firefox/ios/1.4/releasenotes/&quot; target=&quot;_blank&quot;&gt;Firefox for iOS 1.4 primarily with features for China is here&lt;/a&gt;.&lt;br /&gt;
+ &lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid86&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;Firefox for iOS 2.0 is after 1.4 and hopefully sometime this quarter!&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Not that many updates this week, since we’re coming out of our winter slumber (even though winter will be here for a while, still) and plotting an awesome 2016 with you and for you. Take it easy, have a great weekend and see you around SUMO.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T19:38:51+00:00</dc:date>
+ <dc:creator>Michał</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/paris-firefox-os-hackathon-presentations/">
+ <title>Air Mozilla: Paris Firefox OS Hackathon Presentations</title>
+ <link>https://air.mozilla.org/paris-firefox-os-hackathon-presentations/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Paris Firefox OS Hackathon Presentations&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/35/83/358305bfa246fff07d707061082134aa.png&quot; width=&quot;160&quot; /&gt;
+ As an introduction to this weekend's Firefox OS Hackathon in Paris we'll have two presentations: - Guillaume Marty will talk about the current state of...
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T18:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item rdf:about="https://tacticalsecret.com/tag/mozilla/rss/db7fec0c-34d3-4633-9904-79b98aab34e7">
+ <title>J.C. Jones: Renewing Let's Encrypt Certs (Nginx)</title>
+ <link>https://tacticalsecret.com/renewing-lets-encrypt-certs-nginx/</link>
+ <content:encoded>&lt;p&gt;All the first &lt;a href=&quot;https://crt.sh/?id=10172479&quot;&gt;Let's Encrypt certs for my websites&lt;/a&gt; from the LE private beta began expiring last week, so it was time to work through the renewal tooling. I wanted a script that:&lt;/p&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Would be okay to run daily, so there'd be plenty of retries if something went wrong, &lt;/li&gt;
+ &lt;li&gt;Wouldn't require extra config for me to forget about if I add a new site, &lt;/li&gt;
+ &lt;li&gt;Would only renew certificates expiring in the next few weeks.&lt;/li&gt;
+ &lt;/ol&gt;
+
+ &lt;p&gt;The official Let's Encrypt client team is hard at work producing a great renew tool to handle all this, but it's not released yet. Of course I could use &lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy Server&lt;/a&gt; that &lt;a href=&quot;https://www.youtube.com/watch?v=nk4EWHvvZtI&quot;&gt;just handles all this&lt;/a&gt;, but I have a lot invested in Nginx here.&lt;/p&gt;
+
+ &lt;p&gt;So I wrote a short script and &lt;a href=&quot;https://gist.github.com/jcjones/432eeaa6a2bf25e2c746&quot;&gt;put it up in a Gist&lt;/a&gt;. &lt;/p&gt;
+
+ &lt;p&gt;The script is designed to run daily, with a random start between 00:00 and 02:00 to protect against load spikes at Let's Encrypt's infrastructure. It doesn't do any real reporting, though, except to maintain &lt;code&gt;/var/log/letsencrypt/renew.log&lt;/code&gt; as the most-recent failure if one fails.&lt;/p&gt;
+
+ &lt;p&gt;It's written to handle Nginx with Upstart's &lt;code&gt;service&lt;/code&gt; command. It's pretty modular though; you could make this operate any webserver, or use the webroot method quite easily. Feel free to use the OpenSSL SubjectAlternativeName processing code for whatever purposes you have.&lt;/p&gt;
+
+ &lt;p&gt;Happy renewing!&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T16:01:19+00:00</dc:date>
+ <dc:creator>James 'J.C.' Jones</dc:creator>
+ </item>
+ <item rdf:about="http://firefoxmania.uci.cu/?p=15521">
+ <title>Yunier José Sosa Vázquez: Conoce los complementos destacados para enero</title>
+ <link>http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/</link>
+ <content:encoded>&lt;p style=&quot;text-align: left;&quot;&gt;Comenzó un nuevo año y con él, te traemos nuevos e interesantes complementos para tu navegador preferido que mejoran con creces tu experiencia de navegación. Durante los próximos 6 meses estará trabajando nuevos miembros en el Add-ons Board Team, en la próxima selección desde Firefoxmanía te avisaremos.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;Elección del mes: uMatrix&lt;/h3&gt;
+ &lt;p&gt;uMatrix es muy parecido a un &lt;em&gt;firewall&lt;/em&gt; y desde una ventana fácilmente podrás controlar todos los lugares a donde tu navegador tiene permitido conectarse, qué tipo de datos pueden descargarse y cual puede ejecutar.&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;Esta puede ser la extensión perfecta para el control avanzado de los usuarios.&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;span id=&quot;more-15521&quot;&gt;&lt;/span&gt;&lt;/p&gt;
+
+ &lt;a href=&quot;http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix/&quot;&gt;&lt;img alt=&quot;Interfaz principal de uMatrix&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; height=&quot;160&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix-160x160.png&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;
+ &lt;a href=&quot;http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix2/&quot;&gt;&lt;img alt=&quot;Opciones de configuración de uMatrix&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; height=&quot;160&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix2-160x160.png&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;
+
+ &lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/umatrix/&quot; target=&quot;_blank&quot;&gt;Instalar uMatrix »&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;También te recomendamos&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/https-everywhere/&quot; target=&quot;_blank&quot;&gt;⇒ HTTPS Everywhere&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/user/eff-technologists/&quot; title=&quot;EFF Technologists&quot;&gt;EFF Technologists&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Protege tus comunicaciones habilitando la encriptación HTTPS automáticamente en los sitios conocidos que la soportan, incluso cuando navegas mediante sitios que no incluyen el prefijo “https” en la URL.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/add-to-search-bar/&quot; target=&quot;_blank&quot;&gt;⇒ Add to Search Bar&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/firefox/user/dr-evil/&quot; target=&quot;_blank&quot; title=&quot;AdblockLite&quot;&gt;Dr. Evil&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Hace posible que cualquier página con un formulario de búsqueda disponible pueda ser añadido fácilmente a la barra de búsqueda de Firefox.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_15528&quot; style=&quot;width: 262px;&quot;&gt;&lt;a href=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar.png&quot; rel=&quot;attachment wp-att-15528&quot;&gt;&lt;img alt=&quot;add_to_search_bar&quot; class=&quot;wp-image-15528 size-medium&quot; height=&quot;226&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar-252x226.png&quot; width=&quot;252&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Añadiendo la búsqueda de un sitio web a la barra de búsqueda&lt;/p&gt;&lt;/div&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/duplicate-tabs-closer/&quot; target=&quot;_blank&quot;&gt;⇒ Duplicate Tabs Closer&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/firefox/user/peuj/&quot; target=&quot;_blank&quot; title=&quot;The 1-Click YouTube Video Download Team&quot;&gt;Peuj&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Detecta las pestañas duplicadas en tu navegador y automáticamente las cierra.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;Nomina tus complementos favoritos&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;A nosotros nos encantaría que &lt;strong&gt;fueras parte del proceso&lt;/strong&gt; de seleccionar los mejores complementos para Firefox y nos gustaría escucharte. &lt;em&gt;¿No sabes cómo?&lt;/em&gt; Sólo tienes que &lt;em&gt;enviar un correo electrónico&lt;/em&gt; a la dirección &lt;strong&gt;amo-featured@mozilla.org&lt;/strong&gt; con el nombre del complemento o el archivo de instalación y los miembros evaluarán tu recomendación.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Fuente:&lt;/strong&gt; &lt;a href=&quot;https://blog.mozilla.org/addons/2016/01/01/january-2016-featured-add-ons/&quot; target=&quot;_blank&quot;&gt;Mozilla Add-ons Blog&lt;/a&gt;&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T15:10:26+00:00</dc:date>
+ <dc:creator>Yunier J</dc:creator>
+ </item>
+ <item rdf:about="https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop">
+ <title>Tim Taubert: Build Your Own Signal Desktop</title>
+ <link>https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop/</link>
+ <content:encoded>&lt;p&gt;The Signal Private Messenger is great. &lt;strong&gt;Use it.&lt;/strong&gt; It’s probably the best secure
+ messenger on the market. When recently a desktop app was announced people were
+ eager to join the beta and even happier when an invite finally showed up in
+ their inbox. So was I, it’s a great app and works surprisingly well for an early
+ version.&lt;/p&gt;
+
+ &lt;p&gt;The only problem is that it’s a Chrome App. Apart from excluding folks with
+ other browsers it’s also a shitty user experience. If you too want your
+ messaging app not tied to a browser then let’s just build our own standalone
+ variant of Signal Desktop.&lt;/p&gt;
+
+ &lt;h3&gt;NW.js beta with Chrome App support&lt;/h3&gt;
+
+ &lt;p&gt;Signal Desktop is a Chrome App, so the easiest way to turn it into a standalone
+ app is to use &lt;a href=&quot;http://nwjs.io/&quot;&gt;NW.js&lt;/a&gt;. Conveniently, their next release v0.13
+ will ship with Chrome App support and is available for download as a beta
+ version.&lt;/p&gt;
+
+ &lt;p&gt;First, make sure you have &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; installed. Then open a terminal and
+ prepare a temporary build directory to which we can download a few things and
+ where we can build the app:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ mkdir signal-build
+ $ cd signal-build
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;h3&gt;[OS X] Packaging Signal and NW.js&lt;/h3&gt;
+
+ &lt;p&gt;Download the latest beta of NW.js and &lt;code&gt;unzip&lt;/code&gt; it. We’ll extract the application
+ and use it as a template for our Signal clone. The NW.js project does
+ unfortunately not seem to provide a secure source (or at least hashes)
+ for their downloads.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ unzip nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ cp -r nwjs-sdk-v0.13.0-beta3-osx-x64/nwjs.app SignalPrivateMessenger.app
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Next, clone the Signal repository and use NPM to install the necessary modules.
+ Run the &lt;code&gt;grunt&lt;/code&gt; automation tool to build the application.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Finally, simply to copy the &lt;code&gt;dist&lt;/code&gt; folder containing all the juicy Signal files
+ into the application template we created a few moments ago.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cp -r dist ../SignalPrivateMessenger.app/Contents/Resources/app.nw
+ $ open ..
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;The last command opens a Finder window. Move &lt;code&gt;SignalPrivateMessenger.app&lt;/code&gt; to
+ your Applications folder and launch it as usual. You should now see a welcome
+ page!&lt;/p&gt;
+
+ &lt;h3&gt;[Linux] Packaging Signal and NW.js&lt;/h3&gt;
+
+ &lt;p&gt;The build instructions for Linux aren’t too different but I’ll write them down,
+ if just for convenience. Start by cloning the Signal Desktop repository and
+ build.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;The &lt;code&gt;dist&lt;/code&gt; folder contains the app, ready to be launched. &lt;code&gt;zip&lt;/code&gt; it and place
+ the resulting package somewhere handy.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cd dist
+ $ zip -r ../../package.nw *
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Back to the top. Download the NW.js binary, extract it, and change into the
+ newly created directory. Move the &lt;code&gt;package.nw&lt;/code&gt; file we created earlier next to
+ the &lt;code&gt;nw&lt;/code&gt; binary and we’re done. The &lt;code&gt;nwjs-sdk-v0.13.0-beta3-linux-x64&lt;/code&gt; folder
+ does now contain the standalone Signal app.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cd ../..
+ $ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ tar xfz nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ cd nwjs-sdk-v0.13.0-beta3-linux-x64
+ $ mv ../package.nw .
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Finally, launch NW.js. You should see a welcome page!&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ ./nw
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;h3&gt;If you see something, file something&lt;/h3&gt;
+
+ &lt;p&gt;Our standalone Signal clone mostly works, but it’s far from perfect. We’re
+ pulling from master and that might bring breaking changes that weren’t
+ sufficiently tested.&lt;/p&gt;
+
+ &lt;p&gt;We don’t have the right icons. The app crashes when you click a media message.
+ It opens a blank popup when you click a link. It’s quite big because also NW.js
+ has bugs and so we have to use the SDK build for now. In the future it would be
+ great to have automatic updates, and maybe even signed builds.&lt;/p&gt;
+
+ &lt;p&gt;Remember, Signal Desktop is beta, and completely untested with NW.js. If you
+ want to help file bugs, but only after checking that those affect the Chrome
+ App too. If you want to fix a bug only occurring in the standalone version
+ it’s probably best to file a pull request and cross fingers.&lt;/p&gt;
+
+ &lt;h3&gt;Is this secure?&lt;/h3&gt;
+
+ &lt;p&gt;Great question! I don’t know. I would love to get some more insights from people
+ that know more about the NW.js security model and whether it comes with all the
+ protections Chromium can offer. Another interesting question is whether bundling
+ Signal Desktop with NW.js is in any way worse (from a security perspective) than
+ installing it as a Chrome extension. If you happen to have an opinion about
+ that, I would love to hear it.&lt;/p&gt;
+
+ &lt;p&gt;Another important thing to keep in mind is that when building Signal on your
+ own you will possibly miss automatic and signed security updates from the
+ Chrome Web Store. Keep an eye on the repository and rebuild your app from
+ time to time to not fall behind too much.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T14:00:00+00:00</dc:date>
+ </item>
+ <item rdf:about="http://glandium.org/blog/?p=3579">
+ <title>Mike Hommey: Announcing git-cinnabar 0.3.0</title>
+ <link>http://glandium.org/blog/?p=3579</link>
+ <content:encoded>&lt;p&gt;Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;Get it on github&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;These release notes are also &lt;a href=&quot;https://github.com/glandium/git-cinnabar/wiki/Release-Notes:-0.3.0&quot;&gt;available on the git-cinnabar wiki&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Development had been stalled for a few months, with many improvements in the&lt;br /&gt;
+ &lt;code&gt;next&lt;/code&gt; branch without any new release. I used some time during the new year&lt;br /&gt;
+ break and after in order to straighten things up in order to create a new&lt;br /&gt;
+ release, delaying many of the originally planned changes to a future 0.4.0&lt;br /&gt;
+ release.&lt;/p&gt;
+ &lt;h3&gt;What’s new since 0.2.2?&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Speed and memory usage were improved when doing &lt;code&gt;git push&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;Now works on Windows, at least to some extent. See &lt;a href=&quot;http://glandium.org/blog/Windows-Support&quot;&gt;details&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Support for pre-0.1.0 git-cinnabar repositories was removed. You must first&lt;br /&gt;
+ use a git-cinnabar version between 0.1.0 and 0.2.2 to upgrade its metadata.&lt;/li&gt;
+ &lt;li&gt;It is now possible to attach/graft git-cinnabar metadata to existing commits&lt;br /&gt;
+ matching mercurial changesets. This allows to migrate from some other&lt;br /&gt;
+ hg-to-git tool to git-cinnabar while preserving the existing git commits.&lt;br /&gt;
+ See &lt;a href=&quot;http://glandium.org/blog/Mozilla%3A-Using-a-git-clone-of-gecko%E2%80%90dev-to-push-to-mercurial&quot;&gt;an example of how this works with the git clone of the Gecko mercurial&lt;br /&gt;
+ repository&lt;/a&gt;
+ &lt;/li&gt;
+ &lt;li&gt;Avoid mercurial printing its progress bar, messing up with git-cinnabar’s&lt;br /&gt;
+ output.&lt;/li&gt;
+ &lt;li&gt;It is now possible to fetch from an incremental mercurial bundle (without&lt;br /&gt;
+ a root changeset).&lt;/li&gt;
+ &lt;li&gt;It is now possible to push to a new mercurial repository without &lt;code&gt;-f&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;By default, reject pushing a new root to a mercurial repository.&lt;/li&gt;
+ &lt;li&gt;Make the connection to a mercurial repository through ssh respect the&lt;br /&gt;
+ &lt;code&gt;GIT_SSH&lt;/code&gt; and &lt;code&gt;GIT_SSH_COMMAND&lt;/code&gt; environment variables.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;code&gt;git cinnabar&lt;/code&gt; now has a proper argument parser for all its subcommands.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;/li&gt;
+ &lt;li&gt;A new &lt;code&gt;git cinnabar python&lt;/code&gt; command allows to run python scripts or open a&lt;br /&gt;
+ python shell with the right sys.path to import the cinnabar module.&lt;/li&gt;
+ &lt;li&gt;All git-cinnabar metadata is now kept under a single ref (although for&lt;br /&gt;
+ convenience, other refs are created, but they can be derived if necessary).&lt;/li&gt;
+ &lt;li&gt;Consequently, a new &lt;code&gt;git cinnabar rollback&lt;/code&gt; command allows to roll back to&lt;br /&gt;
+ previous metadata states.&lt;/li&gt;
+ &lt;li&gt;git-cinnabar metadata now tracks the manifests DAG.&lt;/li&gt;
+ &lt;li&gt;A new &lt;code&gt;git cinnabar bundle&lt;/code&gt; command allows to create mercurial bundles,&lt;br /&gt;
+ mostly for debugging purposes, without requiring to hit a mercurial server.&lt;/li&gt;
+ &lt;li&gt;Updated git to 2.7.0 for the native helper.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Development process changes&lt;/h3&gt;
+ &lt;p&gt;Up to before this release closing in, the &lt;code&gt;master&lt;/code&gt; branch was dedicated to&lt;br /&gt;
+ releases, and development was happening on the &lt;code&gt;next&lt;/code&gt; branch, until a new&lt;br /&gt;
+ release happens.&lt;/p&gt;
+ &lt;p&gt;From now on, the &lt;code&gt;release&lt;/code&gt; branch will take dot-release fixes and new&lt;br /&gt;
+ releases, while the &lt;code&gt;master&lt;/code&gt; branch will receive all changes that are&lt;br /&gt;
+ validated through testing (currently semi-automatically tested with&lt;br /&gt;
+ out-of-tree tests based on four real-life mercurial repositories, with&lt;br /&gt;
+ some automated CI based on in-tree tests used in the future).&lt;/p&gt;
+ &lt;p&gt;The &lt;code&gt;next&lt;/code&gt; branch will receive changes to be tested in CI when things&lt;br /&gt;
+ will be hooked up, and may have rewritten history as a consequence of&lt;br /&gt;
+ wanting passing tests on every commit on &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-15T08:56:40+00:00</dc:date>
+ <dc:creator>glandium</dc:creator>
+ </item>
+ <item rdf:about="https://air.mozilla.org/web-qa-weekly-meeting-20160114/">
+ <title>Air Mozilla: Web QA Weekly Meeting, 14 Jan 2016</title>
+ <link>https://air.mozilla.org/web-qa-weekly-meeting-20160114/</link>
+ <content:encoded>&lt;p&gt;
+ &lt;img alt=&quot;Web QA Weekly Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png&quot; width=&quot;160&quot; /&gt;
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ &lt;/p&gt;</content:encoded>
+ <dc:date>2016-01-14T17:00:00+00:00</dc:date>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+
+</rdf:RDF>
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss20_planetmozilla.xml b/mobile/android/tests/background/junit4/resources/feed_rss20_planetmozilla.xml
new file mode 100644
index 000000000..a3447ab8a
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss20_planetmozilla.xml
@@ -0,0 +1,3853 @@
+<?xml version="1.0"?>
+<rss version="2.0"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ >
+
+ <channel>
+ <title>Planet Mozilla</title>
+ <link>http://planet.mozilla.org/</link>
+ <language>en</language>
+ <description>Planet Mozilla - http://planet.mozilla.org/</description>
+ <atom:link rel="self" href="http://planet.mozilla.org/rss20.xml" type="application/rss+xml"/>
+
+ <item>
+ <title>Aaron Klotz: Announcing Mozdbgext</title>
+ <guid isPermaLink="false">http://dblohm7.ca/blog/2016/01/26/announcing-mozdbgext</guid>
+ <link>http://dblohm7.ca/blog/2016/01/26/announcing-mozdbgext/</link>
+ <description>&lt;p&gt;A well-known problem at Mozilla is that, while most of our desktop users run
+ Windows, most of Mozilla’s developers do not. There are a lot of problems that
+ result from that, but one of the most frustrating to me is that sometimes
+ those of us that actually use Windows for development find ourselves at a
+ disadvantage when it comes to tooling or other productivity enhancers.&lt;/p&gt;
+
+ &lt;p&gt;In many ways this problem is also a Catch-22: People don’t want to use Windows
+ for many reasons, but tooling is big part of the problem. OTOH, nobody is
+ motivated to improve the tooling situation if nobody is actually going to
+ use them.&lt;/p&gt;
+
+ &lt;p&gt;A couple of weeks ago my frustrations with the situation boiled over when I
+ learned that our &lt;code&gt;Cpp&lt;/code&gt; unit test suite could not log symbolicated call stacks,
+ resulting in my filing of &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238305&quot; title=&quot;cppunittests do not look up breakpad symbols for logged stack traces&quot;&gt;bug 1238305&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240605&quot; title=&quot;Set _NT_SYMBOL_PATH on Windows test machines&quot;&gt;bug 1240605&lt;/a&gt;. Not only could we
+ not log those stacks, in many situations we could not view them in a debugger
+ either.&lt;/p&gt;
+
+ &lt;p&gt;Due to the fact that PDB files consume a large amount of disk space, we don’t
+ keep those when building from integration or try repositories. Unfortunately
+ they are be quite useful to have when there is a build failure. Most of our
+ integration builds, however, do include breakpad symbols. Developers may also
+ explicitly &lt;a href=&quot;https://wiki.mozilla.org/ReleaseEngineering/TryServer#Getting_debug_symbols&quot;&gt;request symbols&lt;/a&gt;
+ for their try builds.&lt;/p&gt;
+
+ &lt;p&gt;A couple of years ago I had begun working on a WinDbg debugger extension that
+ was tailored to Mozilla development. It had mostly bitrotted over time, but I
+ decided to resurrect it for a new purpose: to help WinDbg&lt;sup&gt;&lt;a href=&quot;http://dblohm7.ca/atom.xml#fn1&quot; id=&quot;r1&quot;&gt;*&lt;/a&gt;&lt;/sup&gt;
+ grok breakpad.&lt;/p&gt;
+
+ &lt;h3&gt;Enter mozdbgext&lt;/h3&gt;
+
+ &lt;p&gt;&lt;a href=&quot;https://github.com/dblohm7/mozdbgext&quot;&gt;&lt;code&gt;mozdbgext&lt;/code&gt;&lt;/a&gt; is the result. This extension
+ adds a few commands that makes Win32 debugging with breakpad a little bit easier.&lt;/p&gt;
+
+ &lt;p&gt;The original plan was that I wanted &lt;code&gt;mozdbgext&lt;/code&gt; to load breakpad symbols and then
+ insert them into the debugger’s symbol table via the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/hardware/ff537943%28v=vs.85%29.aspx&quot;&gt;&lt;code&gt;IDebugSymbols3::AddSyntheticSymbol&lt;/code&gt;&lt;/a&gt;
+ API. Unfortunately the design of this API is not well equipped for bulk loading
+ of synthetic symbols: each individual symbol insertion causes the debugger to
+ re-sort its entire symbol table. Since &lt;code&gt;xul.dll&lt;/code&gt;’s quantity of symbols is in the
+ six-figure range, using this API to load that quantity of symbols is
+ prohibitively expensive. I tweeted a Microsoft PM who works on Debugging Tools
+ for Windows, asking if there would be any improvements there, but it sounds like
+ this is not going to be happening any time soon.&lt;/p&gt;
+
+ &lt;p&gt;My original plan would have been ideal from a UX perspective: the breakpad
+ symbols would look just like any other symbols in the debugger and could be
+ accessed and manipulated using the same set of commands. Since synthetic symbols
+ would not work for me in this case, I went for “Plan B:” Extension commands that
+ are separate from, but analagous to, regular WinDbg commands.&lt;/p&gt;
+
+ &lt;p&gt;I plan to continuously improve the commands that are available. Until I have a
+ proper README checked in, I’ll introduce the commands here.&lt;/p&gt;
+
+ &lt;h4&gt;Loading the Extension&lt;/h4&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Use the &lt;code&gt;.load&lt;/code&gt; command: &lt;code&gt;.load &amp;lt;path_to_mozdbgext_dll&amp;gt;&lt;/code&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+
+
+ &lt;h4&gt;Loading the Breakpad Symbols&lt;/h4&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Extract the breakpad symbols into a directory.&lt;/li&gt;
+ &lt;li&gt;In the debugger, enter &lt;code&gt;!bploadsyms &amp;lt;path_to_breakpad_symbol_directory&amp;gt;&lt;/code&gt;&lt;/li&gt;
+ &lt;li&gt;Note that this command will take some time to load all the relevant symbols.&lt;/li&gt;
+ &lt;/ol&gt;
+
+
+ &lt;h4&gt;Working with Breakpad Symbols&lt;/h4&gt;
+
+ &lt;p&gt;&lt;strong&gt;Note: You must have successfully run the &lt;code&gt;!bploadsyms&lt;/code&gt; command first!&lt;/strong&gt;&lt;/p&gt;
+
+ &lt;p&gt;As a general guide, I am attempting to name each breakpad command similarly to
+ the native WinDbg command, except that the command name is prefixed by &lt;code&gt;!bp&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;Stack trace: &lt;code&gt;!bpk&lt;/code&gt;&lt;/li&gt;
+ &lt;li&gt;Find nearest symbol to address: &lt;code&gt;!bpln &amp;lt;address&amp;gt;&lt;/code&gt; where &lt;em&gt;address&lt;/em&gt; is specified
+ as a hexadecimal value.&lt;/li&gt;
+ &lt;/ul&gt;
+
+
+ &lt;h4&gt;Downloading windbgext&lt;/h4&gt;
+
+ &lt;p&gt;I have pre-built a &lt;a href=&quot;https://github.com/dblohm7/mozdbgext/blob/master/bin/mozdbgext.dll?raw=true&quot;&gt;32-bit binary&lt;/a&gt;
+ (which obviously requires 32-bit WinDbg). I have not built a 64-bit binary yet,
+ but the code should be source compatible.&lt;/p&gt;
+
+ &lt;p&gt;Note that there are several other commands that are “roughed-in” at this point
+ and do not work correctly yet. Please stick to the documented commands at this
+ time.&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;sup&gt;&lt;a href=&quot;http://dblohm7.ca/atom.xml#r1&quot; id=&quot;fn1&quot;&gt;*&lt;/a&gt;&lt;/sup&gt; When I write “WinDbg”, I am really
+ referring to any debugger in the &lt;em&gt;Debugging Tools for Windows&lt;/em&gt; package,
+ including &lt;code&gt;cdb&lt;/code&gt;.&lt;/p&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 19:45:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Yunier José Sosa Vázquez: Soporte para WebM/VP9, más seguridad y nuevas herramientas para desarrolladores en el nuevo Firefox</title>
+ <guid isPermaLink="false">http://firefoxmania.uci.cu/?p=15548</guid>
+ <link>http://firefoxmania.uci.cu/soporte-para-webmvp9-mas-seguridad-y-nuevas-herramientas-para-desarrolladores-en-el-nuevo-firefox/</link>
+ <description>&lt;p style=&quot;text-align: left;&quot;&gt;¡Como pasa el tiempo amigos! Casi sin darnos cuenta han transcurrido 6 semanas y hasta hemos comenzado un año nuevo, un año en el que Mozilla prepara nuevas funcionalidades que harán de Firefox un mejor como por ejemplo: la &lt;a href=&quot;http://firefoxmania.uci.cu/como-se-hace-activar-electrolysis-en-firefox/&quot; target=&quot;_blank&quot;&gt;separación de procesos&lt;/a&gt;, el uso de vías alternas para &lt;a href=&quot;http://firefoxmania.uci.cu/el-futuro-de-los-plugins-npapi-en-firefox/&quot; target=&quot;_blank&quot;&gt;ejecutar plugins&lt;/a&gt; y la nueva API para desarrollar &lt;a href=&quot;http://firefoxmania.uci.cu/el-futuro-de-los-complementos-en-firefox/&quot; target=&quot;_blank&quot;&gt;complementos “multi navegador”&lt;/a&gt;.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Desde el anuncio en 2010 del formato de video WebM, &lt;a href=&quot;https://blog.mozilla.org/blog/2010/05/19/open-web-open-video-and-webm/&quot; target=&quot;_blank&quot;&gt;Mozilla ha mostrado un especial interés&lt;/a&gt; al ser una alternativa potente frente a los formatos propietarios del mercado que existían en aquel momento y de esta forma mejorar la experiencia de los usuarios al reproducir videos en la web. Con esta liberación se ha habilitado el &lt;strong&gt;soporte para WebM/VP9 en aquellos sistemas que no soportan MP4/H.264&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Desde algunas versiones atrás, Firefox incluye el plugin &lt;a href=&quot;http://andreasgal.com/2014/10/14/openh264-now-in-firefox/&quot; target=&quot;_blank&quot;&gt;OpenH264 proveído por Cisco&lt;/a&gt; para cumplir las especificaciones de WebRTC y habilitar las llamadas con dispositivos que lo requieran. Ahora, si el &lt;strong&gt;decodificador de H.264 está disponible&lt;/strong&gt; en el sistema, entonces se habilita este codec de video.&lt;span id=&quot;more-15548&quot;&gt;&lt;/span&gt;&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;em&gt;Novedades para desarrolladores&lt;/em&gt;&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;En esta oportunidad, los desarrolladores podrán contar con herramientas de animación y filtros CSS, informes sobre consumo de memoria, depuración de WebSocket y más. Todo esto puedes leerlo en &lt;a href=&quot;https://www.mozilla-hispano.org/edicion-para-desarrolladores-44-editor-visual-manejo-de-memoria/&quot; target=&quot;_blank&quot;&gt;el blog de Labs&lt;/a&gt; de Mozilla Hispano.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;em&gt;Novedades en Android&lt;/em&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Los usuarios pueden elegir la página de inicio a mostrar, en vez de los sitios más visitados.&lt;/li&gt;
+ &lt;li&gt;El servicio de impresión de Android permite activar la impresión en la nube.&lt;/li&gt;
+ &lt;li&gt;Al &lt;a href=&quot;https://developer.chrome.com/multidevice/android/intents&quot; target=&quot;_blank&quot;&gt;intentar abrir una URIs&lt;/a&gt;, se le pregunta al usuario si desea abrirla en una pestaña privada.&lt;/li&gt;
+ &lt;li&gt;Adicionado el soporte para ejecutar URIs con el protocolo mms.&lt;/li&gt;
+ &lt;li&gt;Fácil acceso a la configuración de la búsqueda mientras buscamos en Internet.&lt;/li&gt;
+ &lt;li&gt;Ahora se muestran las sugerencias del historial de búsqueda.&lt;/li&gt;
+ &lt;li&gt;La página Cuentas Firefox ahora está basada en la web.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;em&gt;Otras novedades&lt;/em&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;El soporte para el algoritmo criptográfico RC4 ha sido removido.&lt;/li&gt;
+ &lt;li&gt;Soporte para el formato de compresión brotli cuando se usa HTTPS.&lt;/li&gt;
+ &lt;li&gt;Uso de un certificado de firmado SHA256 para las versiones de Windows en aras de adaptarse a los nuevos requerimientos.&lt;/li&gt;
+ &lt;li&gt;Para soportar el descriptor unicode-range de las fuentes web, el algoritmo de concordancia en Linux usa el mismo código como en las demás plataformas.&lt;/li&gt;
+ &lt;li&gt;Firefox no confiará más en la autoridad de certificación Equifax Secure Certificate Authority 1024-bit root o UTN – DATACorp SGC para validar &lt;a href=&quot;https://support.mozilla.org/ta/kb/secure-website-certificate&quot; target=&quot;_blank&quot;&gt;certificados web seguros&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;El soporte para el teclado en pantalla ha sido temporalmente desactivado en Windows 8 y 8.1.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Si deseas conocer más, puedes leer las &lt;a href=&quot;http://www.mozilla.org/en-US/firefox/44.0/releasenotes/&quot; target=&quot;_blank&quot;&gt;notas de lanzamiento&lt;/a&gt; (en inglés) para conocer más novedades.&lt;/p&gt;
+ &lt;p&gt;&lt;strong&gt;Aclaración para la versión móvil.&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;En las descargas se pueden encontrar 3 versiones para Android. El archivo que contiene &lt;strong&gt;i386&lt;/strong&gt; es para los dispositivos que tengan la &lt;strong&gt;arquitectura de Intel&lt;/strong&gt;. Mientras que en los nombrados &lt;strong&gt;arm&lt;/strong&gt;, el que dice &lt;strong&gt;api11 funciona con Honeycomb (3.0) o superior&lt;/strong&gt; y el de &lt;strong&gt;api9 es para Gingerbread (2.3)&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;Puedes obtener esta versión desde nuestra &lt;a href=&quot;http://firefoxmania.uci.cu/download/&quot; target=&quot;_blank&quot;&gt;zona de Descargas&lt;/a&gt; en español e inglés para Linux, Mac, Windows y Android. Recuerda que para navegar a través de servidores proxy debes modificar la preferencia &lt;strong&gt;network.auth.force-generic-ntlm&lt;/strong&gt; a &lt;code&gt;true&lt;/code&gt; desde &lt;a target=&quot;_blank&quot;&gt;about:config&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Si te ha gustado, por favor comparte con tus amigos esta noticia en las redes sociales. No dudes en dejarnos un comentario.&lt;/p&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 18:56:54 +0000</pubDate>
+ <dc:creator>Yunier J</dc:creator>
+ </item>
+ <item>
+ <title>QMO: Firefox 45.0 Beta 3 Testday, February 5th</title>
+ <guid isPermaLink="false">https://quality.mozilla.org/?p=49454</guid>
+ <link>https://quality.mozilla.org/2016/01/firefox-45-0-beta-3-testday-february-5th/</link>
+ <description>&lt;p&gt;Hello Mozillians,&lt;/p&gt;
+ &lt;p&gt;We are happy to announce that &lt;strong&gt;Friday, February 5th&lt;/strong&gt;, we are organizing &lt;strong&gt;Firefox 45.0 Beta 3 Testday&lt;/strong&gt;. We will be focusing our testing on the following features: &lt;em&gt;Search Refactoring, Synced Tabs Menu, Text to Speech and Grouped Tabs Migration&lt;/em&gt;. Check out the detailed instructions via &lt;a href=&quot;https://public.etherpad-mozilla.org/p/testday-20160205&quot; target=&quot;_blank&quot;&gt;this etherpad&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;No previous testing experience is required, so feel free to join us on &lt;strong&gt;&lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot;&gt;#qa IRC channel&lt;/a&gt;&lt;/strong&gt; where our moderators will offer you guidance and answer your questions.&lt;/p&gt;
+ &lt;p&gt;Join us and help us make Firefox better! See you on &lt;strong&gt;Friday&lt;/strong&gt;!&lt;/p&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 14:40:55 +0000</pubDate>
+ <dc:creator>vasilica.mihasca</dc:creator>
+ </item>
+ <item>
+ <title>David Lawrence: Happy BMO Push Day!</title>
+ <guid isPermaLink="false">http://dlawrence.wordpress.com/?p=29</guid>
+ <link>https://dlawrence.wordpress.com/2016/01/26/happy-bmo-push-day-4/</link>
+ <description>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240575&quot; target=&quot;_blank&quot;&gt;1240575&lt;/a&gt;] Update form.reps.budget&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1226028&quot; target=&quot;_blank&quot;&gt;1226028&lt;/a&gt;] API for batching MozReview requests&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;amp;blog=58816&amp;amp;post=29&amp;amp;subd=dlawrence&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 14:27:50 +0000</pubDate>
+ <dc:creator>dlawrence</dc:creator>
+ </item>
+ <item>
+ <title>Tanvi Vyas: Updated Firefox Security Indicators</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/tanvi/?p=198</guid>
+ <link>https://blog.mozilla.org/tanvi/2016/01/26/updated-firefox-security-indicators/</link>
+ <description>&lt;p&gt;&lt;em&gt;This article has been coauthored by Aislinn Grigas, Senior Interaction Designer, Firefox Desktop&lt;/em&gt;&lt;br /&gt;
+ &lt;em&gt;Cross posting with &lt;a href=&quot;https://blog.mozilla.org/security/2015/11/03/updated-firefox-security-indicators-2/&quot;&gt;Mozilla’s Security Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;November 3, 2015&lt;/p&gt;
+ &lt;p&gt;Over the past few months, Mozilla has been improving the user experience of our privacy and security features in Firefox. One specific initiative has focused on the feedback shown in our address bar around a site’s security. The major changes are highlighted below along with the rationale behind each change.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/combo-graph21.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-2045 size-full&quot; height=&quot;914&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/combo-graph21.png&quot; width=&quot;1518&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;Change to DV Certificate treatment in the address bar&lt;/h3&gt;
+ &lt;p&gt;Color and iconography is commonly used today to communicate to users when a site is secure. The most widely used patterns are coloring a lock icon and parts of the address bar green. This treatment has a straightforward rationale given green = good in most cultures. Firefox has historically used two different color treatments for the lock icon – a gray lock for &lt;a href=&quot;https://en.wikipedia.org/wiki/Domain-validated_certificate&quot;&gt;Domain-validated (DV) certificates&lt;/a&gt; and a green lock for &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Validation_Certificate&quot;&gt;Extended Validation (EV) certificates&lt;/a&gt;. The average user is likely not going to understand this color distinction between EV and DV certificates. The overarching message we want users to take from both certificate states is that their connection to the site is secure. We’re therefore updating the color of the lock when a DV certificate is used to match that of an EV certificate.&lt;/p&gt;
+ &lt;p&gt;Although the same green icon will be used, the UI for a site using EV certificates will continue to differ from a site using a DV certificate. Specifically, EV certificates are used when &lt;a href=&quot;https://en.wikipedia.org/wiki/Certificate_authority&quot;&gt;Certificate Authorities (CA)&lt;/a&gt; verify the owner of a domain. Hence, we will continue to include the organization name verified by the CA in the address bar.&lt;/p&gt;
+ &lt;h3&gt;Changes to Mixed Content Blocker UI on HTTPS sites&lt;/h3&gt;
+ &lt;p&gt;A second change we’re introducing addresses what happens when a page served over a secure connection contains &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent&quot;&gt;Mixed Content&lt;/a&gt;. Firefox’s Mixed Content Blocker proactively blocks &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_active_content&quot;&gt;Mixed Active Content&lt;/a&gt; by default. Users historically saw a &lt;a href=&quot;https://people.mozilla.org/~tvyas/FigureA.jpg&quot;&gt;shield icon&lt;/a&gt; when Mixed Active Content was blocked and were given the option to disable the protection.&lt;/p&gt;
+ &lt;p&gt;Since the Mixed Content state is closely tied to site security, the information should be communicated in one place instead of having two separate icons. Moreover, we have seen that the &lt;a href=&quot;https://telemetry.mozilla.org/new-pipeline/dist.html#!cumulative=0&amp;amp;end_date=2015-09-17&amp;amp;keys=__none__!__none__!__none__&amp;amp;max_channel_version=beta%252F41&amp;amp;measure=MIXED_CONTENT_UNBLOCK_COUNTER&amp;amp;min_channel_version=null&amp;amp;product=Firefox&amp;amp;sanitize=1&amp;amp;sort_keys=submissions&amp;amp;start_date=2015-08-11&amp;amp;table=0&amp;amp;trim=1&amp;amp;use_submission_date=0&quot;&gt;number of times users override mixed content protection&lt;/a&gt; is slim, and hence the need for dedicated mixed content iconography is diminishing. Firefox is also using the shield icon for another feature in &lt;a href=&quot;https://support.mozilla.org/en-US/kb/private-browsing-use-firefox-without-history&quot;&gt;Private Browsing Mode&lt;/a&gt; and we want to avoid making the iconography ambiguous.&lt;/p&gt;
+ &lt;p&gt;The updated design that ships with Firefox 42 combines the lock icon with a warning sign which represents Mixed Content. When Firefox blocks Mixed Active Content, we retain the green lock since the HTTP content is blocked and hence the site remains secure.&lt;/p&gt;
+ &lt;p&gt;For users who want to learn more about a site’s security state, we have added an informational panel to further explain differences in page security. This panel appears anytime a user clicks on the lock icon in the address bar.&lt;/p&gt;
+ &lt;p&gt;Previously users could &lt;a href=&quot;https://people.mozilla.org/~tvyas/FigureB.jpg&quot;&gt;click on the shield icon&lt;/a&gt; in the rare case they needed to override mixed content protection. With this new UI, users can still do this by clicking the arrow icon to expose more information about the site security, along with a disable protection button.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_2034&quot; style=&quot;width: 557px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png&quot;&gt;&lt;img alt=&quot;mixed active content click and subpanel&quot; class=&quot;wp-image-2034 &quot; height=&quot;176&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-active-content-click-and-subpanel.png&quot; width=&quot;547&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Users can click the lock with warning icon and proceed to disable Mixed Content Protection.&lt;/p&gt;&lt;/div&gt;
+ &lt;h3&gt;&lt;/h3&gt;
+ &lt;h3&gt;Loading Mixed Passive Content on HTTPS sites&lt;/h3&gt;
+ &lt;p&gt;There is a second category of Mixed Content called &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/MixedContent#Mixed_passivedisplay_content&quot;&gt;Mixed Passive Content&lt;/a&gt;. Firefox does not block Mixed Passive Content by default. However, when it is loaded on an HTTPS page, we let the user know with iconography and text. In previous versions of Firefox, we used a gray warning sign to reflect this case.&lt;/p&gt;
+ &lt;p&gt;We have updated this iconography in Firefox 42 to a gray lock with a yellow warning sign. We degrade the lock from green to gray to emphasize that the site is no longer completely secure. In addition, we use a vibrant color for the warning icon to amplify that there is something wrong with the security state of the page.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-2042 &quot; height=&quot;100&quot; src=&quot;https://blog.mozilla.org/security/files/2015/10/mixed-passive-click1-600x221.png&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;We also use this iconography when the certificate or TLS connection used by the website relies on deprecated cryptographic algorithms.&lt;/p&gt;
+ &lt;p&gt;The above changes will be rolled out in Firefox 42. Overall, the design improvements make it simpler for our users to understand whether or not their interactions with a site are secure.&lt;/p&gt;
+ &lt;h3&gt;Firefox Mobile&lt;/h3&gt;
+ &lt;p&gt;We have made similar changes to the site security indicators in Firefox for Android, which you can learn more about &lt;a href=&quot;https://support.mozilla.org/en-US/kb/mixed-content-blocker-firefox-android#w_how-do-i-know-if-a-page-has-mixed-content&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 05:58:29 +0000</pubDate>
+ <dc:creator>Tanvi Vyas</dc:creator>
+ </item>
+ <item>
+ <title>The Mozilla Blog: Firefox Can Now Get Push Notifications From Your Favorite Sites</title>
+ <guid isPermaLink="false">https://blog.mozilla.org/?p=9166</guid>
+ <link>https://blog.mozilla.org/blog/2016/01/25/firefox-can-now-get-push-notifications-from-your-favorite-sites/</link>
+ <description>&lt;p&gt;UPDATED TO CLARIFY HOW TO MANAGE PUSH NOTIFICATIONS&lt;/p&gt;
+ &lt;p&gt;Firefox for Windows, Mac and Linux now lets you choose to receive push notifications from websites if you give them permission. This is similar to Web notifications, except now you can receive notifications for websites even when they’re not loaded in a tab. This is super useful for websites like email, weather, social networks and shopping, which you might check frequently for updates.&lt;/p&gt;
+ &lt;p&gt;You can manage your notifications in the Control Center by clicking the green lock icon on the left side of the address bar. You can learn more about how to manage push notifications&lt;a href=&quot;https://support.mozilla.org/en-US/kb/push-notifications-firefox?as=u&amp;amp;utm_source=inproduct#w_upgraded-notifications&quot;&gt; here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Push Notifications for Web Developers&lt;/b&gt;&lt;br /&gt;
+ To make this functionality possible, Mozilla helped establish the Web Push W3C standard that’s gaining momentum across the Web. We also continue to explore the new design pattern known as&lt;a href=&quot;https://blog.mozilla.org/futurereleases/2015/11/17/extending-the-webs-capabilities-in-firefox-and-beyond/&quot;&gt; Progressive Web Apps&lt;/a&gt;. If you’re a developer who wants to implement push notifications on your site, you can learn more in this&lt;a href=&quot;https://hacks.mozilla.org/2016/01/web-push-arrives-in-firefox-44/&quot;&gt; Hacks blog post&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;More information:&lt;/b&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Download&lt;a href=&quot;https://www.mozilla.org/firefox/new/&quot;&gt; Firefox for Windows, Mac, Linux&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Release Notes for&lt;a href=&quot;https://www.mozilla.org/firefox/44.0/releasenotes/&quot;&gt; Firefox for Windows, Mac, Linux&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Download&lt;a href=&quot;https://play.google.com/store/apps/details?id=org.mozilla.firefox&amp;amp;referrer=utm_source%3Dmozilla%26utm_medium&quot;&gt; Firefox for Android&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Release Notes for&lt;a href=&quot;https://www.mozilla.org/firefox/android/44.0/releasenotes/&quot;&gt; Firefox for Android&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 01:56:50 +0000</pubDate>
+ <dc:creator>Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Benoit Girard: Using RecordReplay to investigate intermittent oranges</title>
+ <guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=651</guid>
+ <link>https://benoitgirard.wordpress.com/2016/01/25/using-recordreplay-to-investigate-intermittent-oranges/</link>
+ <description>&lt;p&gt;This is a quick write up to summarize my, and Jeff’s, experience, using RR to debug a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1226748&quot;&gt;fairly rare intermittent reftest failure&lt;/a&gt;. There’s still a lot of be learned about how to use RR effectively so I’m hoping sharing this will help others.&lt;/p&gt;
+ &lt;h3&gt;Finding the root of the bad pixel&lt;/h3&gt;
+ &lt;p&gt;First given a offending pixel I was able to set a breakpoint on it using &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Hacking_Tips#rr_with_reftest&quot;&gt;these instructions&lt;/a&gt;. Next using &lt;a href=&quot;https://github.com/jrmuizel/rr-dataflow&quot;&gt;rr-dataflow&lt;/a&gt; I was able to step from the offending bad pixel to the display item responsible for this pixel. Let me emphasize this for a second since it’s incredibly impressive. rr + rr-dataflow allows you to go from a buffer, through an intermediate surface, to the compositor on another thread, through another intermediate surface, back to the main thread and eventually back to the relevant display item. All of this was automated except for when the two pixels are blended together which is logically ambiguous. The speed at which rr was able to reverse continue through this execution was very impressive!&lt;/p&gt;
+ &lt;p&gt;Here’s the trace of this part: &lt;a href=&quot;https://gist.github.com/bgirard/e707e9b97556b500d9ae&quot;&gt;rr-trace-reftest-pixel-origin&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;Understanding the decoding step&lt;/h3&gt;
+ &lt;p&gt;From here I started comparing a replay of a failing test and a non failing step and it was clear that the DisplayList was different. In one we have a nsDisplayBackgroundColor in the other we don’t. From here I was able to step through the decoder and compare the sequence. This was very useful in ruling out possible theories. It was easy to step forward and backwards in the good and bad replay debugging sessions to test out various theories about race conditions and understanding at which part of the decode process the image was rejected. It turned out that we sent two decodes, one for the metadata that is used to sized the frame tree and the other one for the image data itself.&lt;/p&gt;
+ &lt;h3&gt;Comparing the frame tree&lt;/h3&gt;
+ &lt;p&gt;In hindsight, it would have been more effective to start debugging this test by looking at the frame tree (and I imagine for other tests looking at the display list and layer tree) first would have been a quicker start. It works even better if you have a good and a bad trace to compare the difference in the frame tree. From here, I found that the difference in the layer tree came from a change hint that wasn’t guaranteed to come in before the draw.&lt;/p&gt;
+ &lt;p&gt;The problem is now well understood: When we do a sync decode on reftest draw, if there’s an image error we wont flush the style hints since we’re already too deep in the painting pipeline.&lt;/p&gt;
+ &lt;h3&gt;Take away&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Finding the root cause of a bad pixel is very easy, and fast, to do using rr-dataflow.&lt;/li&gt;
+ &lt;li&gt;However it might be better to look for obvious frame tree/display list/layer tree difference(s) first.&lt;/li&gt;
+ &lt;li&gt;Debugging a replay is a lot simpler then debugging against non-determinist re-runs and a lot less frustrating too.&lt;/li&gt;
+ &lt;li&gt;rr is really useful for race conditions, especially rare ones.&lt;/li&gt;
+ &lt;/ul&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/651/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/651/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=651&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 22:16:01 +0000</pubDate>
+ <dc:creator>benoitgirard</dc:creator>
+ </item>
+ <item>
+ <title>The Servo Blog: These Weeks In Servo 48</title>
+ <guid isPermaLink="true">http://blog.servo.org/2016/01/25/twis-48/</guid>
+ <link>http://blog.servo.org/2016/01/25/twis-48/</link>
+ <description>&lt;p&gt;In the &lt;a href=&quot;https://github.com/pulls?page=1&amp;amp;q=is%3Apr+is%3Amerged+closed%3A2016-01-11..2016-01-25+user%3Aservo&quot;&gt;last two weeks&lt;/a&gt;, we landed 130 PRs in the Servo organization’s repositories.&lt;/p&gt;
+
+ &lt;p&gt;After months of work by vlad and many others, Windows support &lt;a href=&quot;https://github.com/servo/servo/pull/9385&quot;&gt;landed&lt;/a&gt;! Thanks to everyone who contributed fixes, tests, reviews, and even encouragement (or impatience!) to help us make this happen.&lt;/p&gt;
+
+ &lt;h3 id=&quot;notable-additions&quot;&gt;Notable Additions&lt;/h3&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;nikki &lt;a href=&quot;https://github.com/servo/servo/pull/9391&quot;&gt;added&lt;/a&gt; tests and support for checking the Fetch redirect count&lt;/li&gt;
+ &lt;li&gt;glennw &lt;a href=&quot;https://github.com/servo/servo/pull/9359&quot;&gt;implemented&lt;/a&gt; horizontal scrolling with arrow keys&lt;/li&gt;
+ &lt;li&gt;simon &lt;a href=&quot;https://github.com/servo/servo/pull/9333&quot;&gt;created&lt;/a&gt; a script that parses all of the CSS properties parsed by Servo&lt;/li&gt;
+ &lt;li&gt;ms2ger &lt;a href=&quot;https://github.com/servo/servo/pull/9293&quot;&gt;removed&lt;/a&gt; the legacy reftest framework&lt;/li&gt;
+ &lt;li&gt;fernando &lt;a href=&quot;https://github.com/servo/crowbot/pull/33&quot;&gt;made&lt;/a&gt; crowbot able to rejoin IRC after it accidentally floods the channel&lt;/li&gt;
+ &lt;li&gt;jack &lt;a href=&quot;https://github.com/servo/saltfs/pull/193&quot;&gt;added&lt;/a&gt; testing the &lt;code&gt;geckolib&lt;/code&gt; target to our CI&lt;/li&gt;
+ &lt;li&gt;antrik &lt;a href=&quot;https://github.com/servo/ipc-channel/pull/25&quot;&gt;fixed&lt;/a&gt; transfer corruption in ipc-channel on 32-bit&lt;/li&gt;
+ &lt;li&gt;valentin &lt;a href=&quot;https://github.com/servo/rust-url/pull/119&quot;&gt;added&lt;/a&gt; and simon &lt;a href=&quot;https://github.com/servo/rust-url/pull/152&quot;&gt;extended&lt;/a&gt; IDNA support in rust-url, which is required for both web and Gecko compatibility&lt;/li&gt;
+ &lt;/ul&gt;
+
+ &lt;h3 id=&quot;new-contributors&quot;&gt;New Contributors&lt;/h3&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/Chandler&quot;&gt;Chandler Abraham&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/DarinM223&quot;&gt;Darin Minamoto&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/coder543&quot;&gt;Josh Leverette&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/shssoichiro&quot;&gt;Joshua Holmer&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/therealkbhat&quot;&gt;Kishor Bhat&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/MonsieurLanza&quot;&gt;Lanza&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/mattkuo&quot;&gt;Matthew Kuo&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/waterlink&quot;&gt;Oleksii Fedorov&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/stspyder&quot;&gt;St.Spyder&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/vvuk&quot;&gt;Vladimir Vukicevic&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/apopiak&quot;&gt;apopiak&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/askalski&quot;&gt;askalski&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+
+ &lt;h3 id=&quot;screenshot&quot;&gt;Screenshot&lt;/h3&gt;
+
+ &lt;p&gt;Screencast of this post being upvoted on reddit… from Windows!&lt;/p&gt;
+
+ &lt;p&gt;&lt;img alt=&quot;(screencast)&quot; src=&quot;http://blog.servo.org/images/upvote-windows.gif&quot; title=&quot;Screencast of upvoting on Reddit on Windows.&quot; /&gt;&lt;/p&gt;
+
+ &lt;h3 id=&quot;meetings&quot;&gt;Meetings&lt;/h3&gt;
+
+ &lt;p&gt;We had a &lt;a href=&quot;https://github.com/servo/servo/wiki/Meeting-2016-01-11&quot;&gt;meeting&lt;/a&gt; on some CI-related woes, documenting tags and mentoring, and dependencies for the style subsystem.&lt;/p&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 20:30:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Air Mozilla: Mozilla Weekly Project Meeting, 25 Jan 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/</guid>
+ <link>https://air.mozilla.org/mozilla-weekly-project-meeting-20160125/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Mozilla Weekly Project Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/e9/4f/e94fbd7f8df916c75a60e63a85b9168c.png&quot; width=&quot;160&quot; /&gt;
+ The Monday Project Meeting
+ &lt;/p&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 19:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>About:Community: Firefox 44 new contributors</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/community/?p=2292</guid>
+ <link>http://blog.mozilla.org/community/2016/01/25/firefox-44-new-contributors/</link>
+ <description>&lt;p&gt;With the release of Firefox 44, we are pleased to welcome the &lt;strong&gt;28 developers&lt;/strong&gt; who contributed their first code change to Firefox in this release, &lt;strong&gt;23&lt;/strong&gt; of whom were brand new volunteers! Please join us in thanking each of these diligent and enthusiastic individuals, and take a look at their contributions:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;mkm: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208124&quot;&gt;1208124&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Aditya Motwani: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209087&quot;&gt;1209087&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Aniket Vyas: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1197309&quot;&gt;1197309&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1197315&quot;&gt;1197315&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Chirath R: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1216941&quot;&gt;1216941&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Christiane Ruetten: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209091&quot;&gt;1209091&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Fernando Campo: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1199815&quot;&gt;1199815&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Grisha Pushkov: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=994555&quot;&gt;994555&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Guang-De Lin: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1150305&quot;&gt;1150305&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Hassen ben tanfous: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1074804&quot;&gt;1074804&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Helen V. Holmes: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205046&quot;&gt;1205046&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Henrik Tjäder: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1161698&quot;&gt;1161698&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209912&quot;&gt;1209912&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Johann Hofmann: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1192432&quot;&gt;1192432&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1198405&quot;&gt;1198405&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1204072&quot;&gt;1204072&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Kapeel Sable: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212171&quot;&gt;1212171&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Manav Batra: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1202618&quot;&gt;1202618&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212280&quot;&gt;1212280&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1214626&quot;&gt;1214626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Manuel Casas Barrado: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1172662&quot;&gt;1172662&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1193674&quot;&gt;1193674&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1200693&quot;&gt;1200693&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1203298&quot;&gt;1203298&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205684&quot;&gt;1205684&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212331&quot;&gt;1212331&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1212338&quot;&gt;1212338&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1214582&quot;&gt;1214582&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Matt Howell: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208626&quot;&gt;1208626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Matthew Turnbull: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213620&quot;&gt;1213620&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Olivier Yiptong: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210936&quot;&gt;1210936&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210940&quot;&gt;1210940&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213078&quot;&gt;1213078&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Piotr Tworek: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1209446&quot;&gt;1209446&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Rocik: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1070719&quot;&gt;1070719&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Roland Sako: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1207733&quot;&gt;1207733&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Ronald Claveau: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1207266&quot;&gt;1207266&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Sanchit Nevgi: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205181&quot;&gt;1205181&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Shaif Chowdhury: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1185606&quot;&gt;1185606&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208121&quot;&gt;1208121&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Shubham Jain: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208470&quot;&gt;1208470&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208705&quot;&gt;1208705&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Stanislas Daniel Claude Dolcini: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1147197&quot;&gt;1147197&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Stephanie Ouillon: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1178533&quot;&gt;1178533&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1201626&quot;&gt;1201626&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Tim Huang: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1181489&quot;&gt;1181489&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;simplyblue24: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1218204&quot;&gt;1218204&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 16:21:33 +0000</pubDate>
+ <dc:creator>Josh Matthews</dc:creator>
+ </item>
+ <item>
+ <title>Doug Belshaw: 3 things to consider when designing a digital skills framework</title>
+ <guid isPermaLink="false">tag:literaci.es,2014:Post/digital-skills-curriculum</guid>
+ <link>http://literaci.es/digital-skills-curriculum</link>
+ <description>&lt;p&gt;&lt;img alt=&quot;Learning to credential&quot; src=&quot;http://bryanmmathers.com/wp-content/uploads/2016/01/learning-to-credential.png&quot; /&gt;&lt;/p&gt;
+
+ &lt;p&gt;The image above was created by &lt;a href=&quot;http://bryanmmathers.com/learning-to-credential&quot; rel=&quot;nofollow&quot;&gt;Bryan Mathers&lt;/a&gt; for our &lt;a href=&quot;https://goo.gl/QqwUKP&quot; rel=&quot;nofollow&quot;&gt;presentation&lt;/a&gt; at &lt;a href=&quot;http://bettshow.com&quot; rel=&quot;nofollow&quot;&gt;BETT&lt;/a&gt; last week. It shows the way that, in broad brushstrokes, learning design &lt;em&gt;should&lt;/em&gt; happen. Before microcredentials such as &lt;a href=&quot;http://openbadges.org&quot; rel=&quot;nofollow&quot;&gt;Open Badges&lt;/a&gt; this was a difficult thing to do as both the credential and the assessment are usually given to educators. The flow tends to go &lt;em&gt;backwards&lt;/em&gt; from credentials instead of forwards from what we want people to learn.&lt;/p&gt;
+
+ &lt;p&gt;But what if you really &lt;em&gt;were&lt;/em&gt; starting from scratch? How could you design a digital skills framework that contains knowledge, skills, and behaviours worth learning? Having written my &lt;a href=&quot;http://neverendingthesis.com&quot; rel=&quot;nofollow&quot;&gt;thesis&lt;/a&gt; on digital literacies and led Mozilla’s &lt;a href=&quot;https://teach.mozilla.org/activities/web-literacy/&quot; rel=&quot;nofollow&quot;&gt;Web Literacy Map&lt;/a&gt; for a couple of years, I’ve got some suggestions. &lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#1-define-your-audience&quot; name=&quot;1-define-your-audience&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;1. Define your audience&lt;/h3&gt;
+ &lt;p&gt;One of the most important things to define is who your audience is for your digital skills framework. Is it for learners to read? Who are they? How old are they? Are you excluding anyone on purpose? Why / why not?&lt;/p&gt;
+
+ &lt;p&gt;You might want to do some research and work around &lt;a href=&quot;https://en.wikipedia.org/wiki/Persona_(user_experience)&quot; rel=&quot;nofollow&quot;&gt;user personas&lt;/a&gt; as part of a user-centred design approach. This ensures you’re designing for real people instead of figments of your imagination (or, worse still, in line with your prejudices).&lt;/p&gt;
+
+ &lt;p&gt;It’s also good practice to make the language used in the skills framework as precise as possible. Jargon is technical language used for the sake of it. There may be times when it’s impossible not to use a word (e.g. ’&lt;a href=&quot;https://en.wikipedia.org/wiki/Meme&quot; rel=&quot;nofollow&quot;&gt;meme&lt;/a&gt;’). If you do this then link to a definition or include a glossary. It’s also useful to check the ‘reading level’ of your framework and, if you really want a challenge, try using &lt;a href=&quot;http://splasho.com/upgoer5/&quot; rel=&quot;nofollow&quot;&gt;Up-Goer Five&lt;/a&gt; language.&lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#2-focus-on-verbs&quot; name=&quot;2-focus-on-verbs&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;2. Focus on verbs&lt;/h3&gt;
+ &lt;p&gt;It’s extremely easy, when creating a framework for learning, to fall into the 'knowledge trap’. Our aim when creating the raw materials from which someone can build a curriculum is to focus on &lt;em&gt;action&lt;/em&gt;. Knowledge should make a difference in practice.&lt;/p&gt;
+
+ &lt;p&gt;One straightforward way to ensure that you’re focusing on action rather than head knowledge is to use &lt;strong&gt;verbs&lt;/strong&gt; when constructing your digital skills framework. If you’re familiar with &lt;a href=&quot;https://en.wikipedia.org/wiki/Bloom%27s_taxonomy&quot; rel=&quot;nofollow&quot;&gt;Bloom’s Taxonomy&lt;/a&gt;, then you may find &lt;a href=&quot;http://byrdseed.com/differentiator/&quot; rel=&quot;nofollow&quot;&gt;The Differentiator&lt;/a&gt; useful. This pairs verbs with the various levels of Bloom’s.&lt;/p&gt;
+ &lt;h3&gt;
+ &lt;a class=&quot;head_anchor&quot; href=&quot;http://literaci.es/feed#3-add-version-numbers&quot; name=&quot;3-add-version-numbers&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;3. Add version numbers&lt;/h3&gt;
+ &lt;p&gt;A framework needs to be a living, breathing thing. It should be subject to revision and updated often. For this reason, you should add version numbers to your documentation. Ideally, the latest version should be at a canonical URL and you should archive previous versions to static URLs. &lt;/p&gt;
+
+ &lt;p&gt;I would also advise releasing the first version of your framework not as 'version 1.0’ but as 'v0.1’. This shows that you’re willing for others to provide input, that there will be further versions, and that you know you haven’t got it right first time (and forevermore). &lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;strong&gt;Questions? Comments?&lt;/strong&gt; Ask me on Twitter (&lt;a href=&quot;http://twitter.com/dajbelshaw&quot; rel=&quot;nofollow&quot;&gt;@dajbelshaw&lt;/a&gt;). I also consult around this kind of thing, so hit me up on &lt;a href=&quot;http://literaci.es/hello@dynamicskillset.com&quot; rel=&quot;nofollow&quot;&gt;hello@dynamicskillset.com&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 14:46:34 +0000</pubDate>
+ </item>
+ <item>
+ <title>Mozilla Fundraising: Why did you decide to donate today?</title>
+ <guid isPermaLink="false">https://fundraising.mozilla.org/?p=800</guid>
+ <link>https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/</link>
+ <description>This year, we asked some of our donors why they decided to donate to our end of year fundraising campaign. The Survey The Audience The survey was shown to a random sample of donors whose browser language was set to … &lt;a class=&quot;go&quot; href=&quot;https://fundraising.mozilla.org/why-did-you-decide-to-donate-today/&quot;&gt;Continue reading&lt;/a&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 13:31:34 +0000</pubDate>
+ <dc:creator>Adam Lofting</dc:creator>
+ </item>
+ <item>
+ <title>Andy McKay: Robbie Burns</title>
+ <guid isPermaLink="false">http://www.agmweb.ca/robbie-burns</guid>
+ <link>http://www.agmweb.ca/2016-01-25-robbie-burns/</link>
+ <description>&lt;p&gt;Tonight is Robbie Burns night, in honour of that great Scottish poet. But tonight had me thinking about another night in my past.&lt;/p&gt;
+
+ &lt;p&gt;It was about 5 years ago, maybe less, I struggle to remember now. I was in the UK visiting family and my Dad was sick. Cancer and it's treatment is tough, you have good weeks, you have bad weeks and you have really fucking bad weeks. This was a good week and for some reason I was in the UK.&lt;/p&gt;
+
+ &lt;p&gt;Myself, my brother and my sister-in-law went down to see him that night. It was Robbie Burns night and that meant an excuse for haggis, really, truly terrible scotch, Scottish dancing and all that. There are many times when I look back at time with my Dad in those last few years. This was definitely one of those times. He was my Dad at his best, cracking jokes and having fun. Living life to the absolute fullest, while you still have that chance.&lt;/p&gt;
+
+ &lt;p&gt;We had a great night. That ended way too soon.&lt;/p&gt;
+
+ &lt;p&gt;Not long after that the cancer came back and that was that.&lt;/p&gt;
+
+ &lt;p&gt;But suddenly tonight, in a bar in Portland I had these memories of my Dad in a waistcoat cracking jokes and having fun on Robbie Burns night. No-one else in the bar seemed to know what night it was. You'd think Robbie Burns night might get a little bit more appreciation, but hey.&lt;/p&gt;
+
+ &lt;p&gt;In the many years I've been running this blog I've never written about my Dad passing away. Here's the first time. I miss him.&lt;/p&gt;
+
+ &lt;p&gt;Hey Robbie Burns? Thanks for making me remember that night.&lt;/p&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 08:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>This Week In Rust: This Week in Rust 115</title>
+ <guid isPermaLink="false">tag:this-week-in-rust.org,2016-01-25:blog/2016/01/25/this-week-in-rust-115/</guid>
+ <link>http://this-week-in-rust.org/blog/2016/01/25/this-week-in-rust-115/</link>
+ <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
+ &lt;a href=&quot;http://rust-lang.org&quot;&gt;Rust&lt;/a&gt; is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; or &lt;a href=&quot;mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion&quot;&gt;send us an
+ email&lt;/a&gt;!
+ Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love
+ contributions&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/cmr/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt;.
+ If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/cmr/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;This week's edition was edited by: &lt;a href=&quot;https://github.com/nasa42&quot;&gt;nasa42&lt;/a&gt;, &lt;a href=&quot;https://github.com/brson&quot;&gt;brson&lt;/a&gt;, and &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;Updates from Rust Community&lt;/h3&gt;
+ &lt;h4&gt;News &amp;amp; Blog Posts&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;img alt=&quot;balloon&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0&quot; title=&quot;:balloon:&quot; /&gt;&lt;img alt=&quot;tada&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0&quot; title=&quot;:tada:&quot; /&gt; &lt;a href=&quot;http://blog.rust-lang.org/2016/01/21/Rust-1.6.html&quot;&gt;Announcing Rust 1.6&lt;/a&gt;. &lt;img alt=&quot;tada&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/tada.png?v=0&quot; title=&quot;:tada:&quot; /&gt;&lt;img alt=&quot;balloon&quot; class=&quot;emoji&quot; src=&quot;https://cdn.discourse.org/business/images/emoji/emoji_one/balloon.png?v=0&quot; title=&quot;:balloon:&quot; /&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.poumeyrol.fr/2016/01/15/Awkward-zone/&quot;&gt;Rust, BigData and my laptop&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[pdf]&lt;a href=&quot;https://cdn.rawgit.com/Gankro/thesis/master/thesis.pdf&quot;&gt;You can't spell trust without Rust&lt;/a&gt;. Analysis of the semantics and expressiveness of Rust’s type system.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.ncameron.org/blog/libmacro/&quot;&gt;Libmacro - an API for procedural macros to interact with the compiler&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.jonathanturner.org/2016/01/rust-and-blub-paradox.html&quot;&gt;Rust and the Blub Paradox&lt;/a&gt;. And the &lt;a href=&quot;http://www.jonathanturner.org/2016/01/rethinking-the-blub-paradox.html&quot;&gt;follow-up&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/channel/UC4mpLlHn0FOekNg05yCnkzQ/videos&quot;&gt;Ferris Makes Emulators&lt;/a&gt;. Live stream of Ferris developing a N64 emulator in Rust (also on &lt;a href=&quot;http://www.twitch.tv/ferrisstreamsstuff/profile&quot;&gt;Twitch&lt;/a&gt;).&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Notable New Crates &amp;amp; Project Updates&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://areweconcurrentyet.com/&quot;&gt;Are we concurrent yet&lt;/a&gt;?&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/gfx-rs/gfx&quot;&gt;GFX&lt;/a&gt; epic rewrite for the Pipeline State Objects paradigm has &lt;a href=&quot;https://github.com/gfx-rs/gfx/pull/828&quot;&gt;landed&lt;/a&gt;, described &lt;a href=&quot;http://gfx-rs.github.io/2016/01/22/pso.html&quot;&gt;on the blog&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/mcarton/rust-herbie-lint&quot;&gt;Herbie&lt;/a&gt;. A rustc plugin to check for numerical instability.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://blog.piston.rs/2016/01/23/dynamo/&quot;&gt;Dynamo&lt;/a&gt;. A rusty dynamically typed scripting language.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/whitequark/rust-vnc&quot;&gt;rust-vnc&lt;/a&gt;. An implementation of VNC protocol, client state machine and a client.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Updates from Rust Core&lt;/h3&gt;
+ &lt;p&gt;129 pull requests were &lt;a href=&quot;https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-18..2016-01-25&quot;&gt;merged in the last week&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;See the &lt;a href=&quot;https://internals.rust-lang.org/t/triage-digest-mon-jan-25-2016/3111&quot;&gt;triage digest&lt;/a&gt; and &lt;a href=&quot;https://internals.rust-lang.org/t/subteam-reports-2016-01-22/3106&quot;&gt;subteam reports&lt;/a&gt; for more details.&lt;/p&gt;
+ &lt;h4&gt;Notable changes&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30872&quot;&gt;Implement RFC 1252 expanding the OpenOptions structure&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/book/pull/58&quot;&gt;Book: First draft of 'ownership'&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2205&quot;&gt;Cargo: Add convenience syntax to install current crate&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2196&quot;&gt;Cargo: Introduce cargo metadata subcommand&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2081&quot;&gt;Cargo: Implement &lt;code&gt;cargo init&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/2270&quot;&gt;Cargo: Emit a warning when manifest specifies empty dependency constraints&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/29520&quot;&gt;Change name when outputting staticlibs on Windows&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30998&quot;&gt;Make &lt;code&gt;btree_set::{IntoIter, Iter, Range}&lt;/code&gt; covariant&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30917&quot;&gt;Avoid bounds checking at &lt;code&gt;slice::binary_search&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30894&quot;&gt;&lt;code&gt;std::sync::mpsc&lt;/code&gt;: Add &lt;code&gt;fmt::Debug&lt;/code&gt; stubs&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30882&quot;&gt;resolve: Fix variant namespacing&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New Contributors&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Adrian Heine&lt;/li&gt;
+ &lt;li&gt;Andrea Bedini&lt;/li&gt;
+ &lt;li&gt;Guillaume Bonnet&lt;/li&gt;
+ &lt;li&gt;Kamal Marhubi&lt;/li&gt;
+ &lt;li&gt;Keith Yeung&lt;/li&gt;
+ &lt;li&gt;Marc Bowes&lt;/li&gt;
+ &lt;li&gt;Martin&lt;/li&gt;
+ &lt;li&gt;mopp&lt;/li&gt;
+ &lt;li&gt;Olaf Buddenhagen&lt;/li&gt;
+ &lt;li&gt;Paul Dicker&lt;/li&gt;
+ &lt;li&gt;Peter Kolloch&lt;/li&gt;
+ &lt;li&gt;Stephen (Ziyun) Li&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Approved RFCs&lt;/h4&gt;
+ &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments)
+ process&lt;/a&gt;. These
+ are the RFCs that were approved for implementation this week:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1462&quot;&gt;Amendment to RFC 550: Add &lt;code&gt;[&lt;/code&gt; to the FOLLOW(ty) in macro future-proofing rules&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1320&quot;&gt;Amendment to RFC 1192: Amend &lt;code&gt;RangeInclusive&lt;/code&gt; to use an enum&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Final Comment Period&lt;/h4&gt;
+ &lt;p&gt;Every week &lt;a href=&quot;https://rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. &lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;This week's FCPs&lt;/a&gt; are:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/243&quot;&gt;Trait-based exception handling&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1361&quot;&gt;Improve Cargo target-specific dependencies&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1129&quot;&gt;Add a &lt;code&gt;IndexAssign&lt;/code&gt; trait that allows overloading &quot;indexed assignment&quot; expressions like &lt;code&gt;a[b] = c&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1196&quot;&gt;Allow eliding more type parameters&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1296&quot;&gt;Add an &lt;code&gt;alias&lt;/code&gt; attribute to &lt;code&gt;#[link]&lt;/code&gt; and &lt;code&gt;-l&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New RFCs&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1477&quot;&gt;Add compiler support for generic atomic operations&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1478&quot;&gt;Translate undefined generic intrinsics to an LLVM &lt;code&gt;unreachable&lt;/code&gt; and a lint&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Upcoming Events&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/opentechschool-berlin/&quot;&gt;1/27. OpenTechSchool Berlin: Rust Hack and Learn&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Tokyo-Rust-Meetup/events/227871840/&quot;&gt;1/28. Tokyo Rust Meetup #2&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Berlin/events/227321071/&quot;&gt;2/3. Rust Berlin: Leaf and Collenchyma&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/de/Rust-Cologne-Bonn/events/227534456/&quot;&gt;2/3. Rust Meetup in Cologne / Germany&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg&quot;&gt;2/8. Seattle Rust Meetup&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/de-DE/Rust-Rhein-Main/events/228170051/&quot;&gt;2/12. Embedded Rust Workshop Frankfurt&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
+ it mentioned here. Email &lt;a href=&quot;mailto:erick.tryzelaar@gmail.com&quot;&gt;Erick Tryzelaar&lt;/a&gt; or &lt;a href=&quot;mailto:banderson@mozilla.com&quot;&gt;Brian
+ Anderson&lt;/a&gt; for access.&lt;/p&gt;
+ &lt;h3&gt;fn work(on: RustProject) -&amp;gt; Money&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://maidsafe.net/rust_engineer.html&quot;&gt;Rust Engineer&lt;/a&gt; at MaidSafe.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/ozy21fwU&quot;&gt;Research Engineer - Servo&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/o0H41fww&quot;&gt;Senior Research Engineer - Rust&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://plv.mpi-sws.org/rustbelt/&quot;&gt;PhD and postdoc positions&lt;/a&gt; at MPI-SWS.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;em&gt;Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; to get your job offers listed here!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;Crate of the Week&lt;/h3&gt;
+ &lt;p&gt;This week's Crate of the Week is &lt;a href=&quot;https://github.com/phildawes/racer&quot;&gt;racer&lt;/a&gt; which powers code completion in all Rust development environments.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/stebalien&quot;&gt;Steven Allen&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Submit your suggestions for next week&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;Quote of the Week&lt;/h3&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Memory errors are fundamentally state errors, and Rust's move semantics, borrowing, and aliasing XOR mutating help enormously for me to reason about how my program changes state as it executes, to avoid accidental shared state and side effects at a distance. Rust more than any other language I know enables me to do compiler driven design. And internalizing its rules has helped me design better systems, even in other languages.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;p&gt;— &lt;a href=&quot;https://www.reddit.com/r/rust/comments/4275gz/rust_and_the_blub_paradox/cz8akv9&quot;&gt;desiringmachines on /r/rust&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/dikaiosune&quot;&gt;dikaiosune&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Submit your quotes for next week&lt;/a&gt;!&lt;/p&gt;</description>
+ <pubDate>Mon, 25 Jan 2016 05:00:00 +0000</pubDate>
+ <dc:creator>Corey Richardson</dc:creator>
+ </item>
+ <item>
+ <title>Cameron Kaiser: 38.6.0 available</title>
+ <guid isPermaLink="false">tag:blogger.com,1999:blog-1015214236289077798.post-7056349209464984020</guid>
+ <link>http://tenfourfox.blogspot.com/2016/01/3860-available.html</link>
+ <description>TenFourFox 38.6.0 is available for testing (&lt;a href=&quot;https://sourceforge.net/projects/tenfourfox/files/38.6.0/&quot;&gt;downloads&lt;/a&gt;, &lt;a href=&quot;https://github.com/classilla/tenfourfox/wiki/Hashes&quot;&gt;hashes&lt;/a&gt;, &lt;a href=&quot;https://github.com/classilla/tenfourfox/wiki/ZZReleaseNotes3860&quot;&gt;release notes&lt;/a&gt;). I'm sorry it's been so quiet around here; I'm in the middle of a backbreaking Master's course, my last one before I'm finally done with the lousy thing, and I haven't had any time to start on 45 so far. 38.6 does have some other fixes in it, though: I think I found the last place where bookmark backups were being mistakenly saved in LZ4 based on Chris Trusch's report, and the problematic fonts on the iCloud login page are now blacklisted, so you should be able to login again. I can't do much more testing than that, however, since I don't use iCloud personally, so other lapses in font functionality will require the font URL and I'll add them to the blacklist in 38.7. The browser will go live Monday Pacific time as usual. (The temporary workaround is to set &lt;tt&gt;gfx.downloadable_fonts.enabled&lt;/tt&gt; to &lt;tt&gt;false&lt;/tt&gt;, and switch the setting back when you don't need it anymore.) &lt;p&gt;Speaking of, downloadable fonts were exactly the same problem on the Sun Ultra-3 laptop I've been refurbishing; Oracle still provides a free Solaris 10 build of 38ESR, but it crashes on web fonts for reasons I have yet to diagnose, so I just have them turned off. Yes, it really is a SPARC laptop, a rebranded Tadpole Viper, and I think the fastest one ever made in this form factor (a 1.2GHz UltraSPARC IIIi). It's pretty much what I expected the PowerBook G5 would have been -- hot, overthrottled and power-hungry -- but Tadpole actually built the thing and it's not a disaster, relatively speaking. There's no JIT in this Firefox build, the brand new battery gets only 70 minutes of runtime even with the CPU clock-skewed to hell, it stands a very good chance of rendering me sterile and/or medium rare if I actually use it in my lap and it had at least one sudden overtemp shutdown and pooped all over the filesystem, but between Firefox, Star Office and &lt;tt&gt;pkgsrc&lt;/tt&gt; I can actually use it. More on that for laughs in a future post. &lt;/p&gt;&lt;p&gt;It has been pointed out to me that Leopard Webkit has not made an update in over three months, so hopefully Tobias is still doing okay with his port.&lt;/p&gt;</description>
+ <pubDate>Sat, 23 Jan 2016 06:02:00 +0000</pubDate>
+ <author>noreply@blogger.com (ClassicHasClass)</author>
+ </item>
+ <item>
+ <title>Mozilla Privacy Blog: Addressing the Chilling Effect of Patent Damages</title>
+ <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=907</guid>
+ <link>https://blog.mozilla.org/netpolicy/2016/01/22/addressing-the-chilling-effect-of-patent-damages/</link>
+ <description>&lt;p&gt;Last year, we unveiled the &lt;a href=&quot;https://www.mozilla.org/about/patents/license/&quot;&gt;Mozilla Open Software Patent License&lt;/a&gt; as part of our &lt;a href=&quot;https://www.mozilla.org/about/patents/&quot;&gt;Initiative&lt;/a&gt; to help limit the negative impacts that patents have on open source software. While those were an important first step for us, we continue to do more. This past Wednesday, Mozilla joined several other tech and software companies in filing an &lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2016/01/Halo-Stryker-Internet-Companies-brief.pdf&quot;&gt;amicus brief&lt;/a&gt; with the Supreme Court of the United States in the &lt;i&gt;Halo&lt;/i&gt; and &lt;i&gt;Stryker&lt;/i&gt; cases.&lt;/p&gt;
+ &lt;p&gt;In the brief, we urge the Court to limit the availability of treble damages. Treble damages are significant because they greatly increase the amount of money owed if a defendant is found to “willfully infringe” a patent. As a result, many open source projects and technology companies will refuse to look into or engage in discussions about patents, in order to avoid even a remote possibility of willful infringement. This makes it very hard to address the chilling effects that patents can have on open source software development, open innovation, and collaborative efforts.&lt;/p&gt;
+ &lt;p&gt;We hope that our brief will help the Court see how this legal standard has affected technology companies and persuade the Court to limit treble damages.&lt;/p&gt;</description>
+ <pubDate>Sat, 23 Jan 2016 00:17:34 +0000</pubDate>
+ <dc:creator>Elvin Lee</dc:creator>
+ </item>
+ <item>
+ <title>Mozilla Addons Blog: Add-on Signing Update</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/addons/?p=7640</guid>
+ <link>https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/</link>
+ <description>&lt;p&gt;In Firefox 43, we made it a default requirement for add-ons to be signed. This requirement can be disabled by &lt;a href=&quot;https://wiki.mozilla.org/Addons/Extension_Signing#FAQ&quot;&gt;toggling a preference&lt;/a&gt; that was originally scheduled to be removed in Firefox 44 for release and beta versions (this preference will continue to be available in the Nightly, Developer, and ESR Editions of Firefox for the foreseeable future). &lt;/p&gt;
+ &lt;p&gt;We are delaying the removal of this preference to Firefox 46 for a couple of reasons: We’re adding a feature in Firefox 45 that allows &lt;a href=&quot;https://blog.mozilla.org/addons/2015/12/23/loading-temporary-add-ons/&quot;&gt;temporarily loading unsigned restartless add-ons&lt;/a&gt; in release, which will allow developers of those add-ons to use Firefox for testing, and we’d like this option to be available when we remove the preference. We also want to ensure that developers have adequate time to finish the transition to signed add-ons. &lt;/p&gt;
+ &lt;p&gt;The &lt;a href=&quot;https://wiki.mozilla.org/Addons/Extension_Signing#Timeline&quot;&gt;updated timeline&lt;/a&gt; is available on the signing wiki, and you can look up &lt;a href=&quot;https://wiki.mozilla.org/RapidRelease/Calendar&quot;&gt;release dates for Firefox versions&lt;/a&gt; on the releases wiki. Signing will be mandatory in the beta and release versions of Firefox from 46 onwards, at which point unbranded builds based on beta and release will be provided for testing.&lt;/p&gt;</description>
+ <pubDate>Fri, 22 Jan 2016 22:40:59 +0000</pubDate>
+ <dc:creator>Kev Needham</dc:creator>
+ </item>
+ <item>
+ <title>Chris Cooper: RelEng &amp; RelOps Weekly Highlights - January 22, 2016</title>
+ <guid isPermaLink="true">http://coopcoopbware.tumblr.com/post/137832199980</guid>
+ <link>http://coopcoopbware.tumblr.com/post/137832199980</link>
+ <description>&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;alignright&quot;&gt;&lt;a href=&quot;https://www.flickr.com/photos/proud2bcan8dn/1150097247/in/faves-19934681@N00/&quot; target=&quot;_blank&quot; title=&quot;wine-and-pies&quot;&gt;&lt;img alt=&quot;wine-and-pies&quot; src=&quot;https://farm2.staticflickr.com/1216/1150097247_2f11cb4c2d_z.jpg?zz=1&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt;Releng: drinkin’ wine and makin’ pies.&lt;/figure&gt;It’s encouraging to see more progress this week on both the build/release promotion and TaskCluster migration fronts, our two major efforts for this quarter.&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Modernize infrastructure:&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;In a continuing effort to enable faster, more reliable, and more easily-run tests for TaskCluster components, Dustin landed support for an in-memory, credential-free mock of Azure Table Storage in the &lt;a href=&quot;https://www.npmjs.com/package/azure-entities&quot; target=&quot;_blank&quot;&gt;azure-entities&lt;/a&gt; package. Together with the fake mock support he added to &lt;a href=&quot;https://github.com/djmitche/taskcluster-lib-testing&quot; target=&quot;_blank&quot;&gt;taskcluster-lib-testing&lt;/a&gt;, this allows tests for components like taskcluster-hooks to run without network access and without the need for any credentials, substantially decreasing the barrier to external contributions.&lt;/p&gt;
+
+ &lt;p&gt;All release promotion tasks are now signed by default. Thanks to Rail for his work here to help improve verifiability and chain-of-custody in our upcoming release process. (&lt;a href=&quot;https://bugzil.la/1239682&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239682&lt;/a&gt;)
+ Beetmover has been spotted in the wild! Jordan has been working on this new tool as part of our release promotion project. Beetmover helps move build artifacts from one place to another (generally between S3 buckets these days), but can also be extended to perform validation actions inline, e.g. checksums and anti-virus. (&lt;a href=&quot;https://bugzil.la/1225899&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1225899&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;Dustin configured the “desktop-test” and “desktop-build” docker images to build automatically on push. That means that you can modify the Dockerfile under `testing/docker`, push to try, and have the try job run in the resulting image, all without pushing any images. This should enable much quicker iteration on tweaks to the docker images. Note, however, that updates to the base OS images (ubuntu1204-build and centos6-build) still require manual pushes.&lt;/p&gt;
+
+ &lt;p&gt;Mark landed Puppet code for base windows 10 support including secrets and ssh keys management.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Improve CI pipeline:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Vlad and Amy repurposed 10 Windows XP machines as Windows 7 to improve the wait times in that test pool (&lt;a href=&quot;https://bugzil.la/1239785&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239785&lt;/a&gt;)
+ Armen and Joel have been working on porting the Gecko tests to run under TaskCluster, and have narrowed the failures down to the single digits. This puts us on-track to enable Linux debug builds and tests in TaskCluster as the canonical build/test process.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Release:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Ben finished up work on enhanced Release Blob validation in Balrog (&lt;a href=&quot;https://bugzil.la/703040&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/703040&lt;/a&gt;), which makes it much more difficult to enter bad data into our update server.&lt;/p&gt;
+
+ &lt;p&gt;You may recall Mihai, our former intern who &lt;a href=&quot;http://coopcoopbware.tumblr.com/post/133490693210/welcome-back-mihai&quot; target=&quot;_blank&quot;&gt;we just hired back in November&lt;/a&gt;. Shortly after joining the team, he jumped into the &lt;a href=&quot;https://wiki.mozilla.org/ReleaseEngineering/Releaseduty&quot; target=&quot;_blank&quot;&gt;releaseduty&lt;/a&gt; rotation to provide much-needed extra bandwidth. The learning curve here is steep, but over the course of the Firefox 44 release cycle, he’s taken on more and more responsibility. He’s even volunteered to do releaseduty for the Firefox 45 release cycle as well. Perhaps the most impressive thing is that he’s also taken the time to update (or write) the releaseduty docs so that the next person who joins the rotation will be that much further ahead of the game. Thanks for your hard work here, Mihai!&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Operational:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;Hal did some cleanup work to remove unused mozharness configs and directories from the build mercurial repos. These resources have long-since moved into the main mozilla-central tree. Hopefully this will make it easier for contributors to find the canonical copy! (&lt;a href=&quot;https://bugzil.la/1239003&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1239003&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Hiring:&lt;/b&gt;&lt;/p&gt;
+
+ &lt;p&gt;We’re still hiring for a full-time &lt;a href=&quot;https://careers.mozilla.org/position/oi8b2fwn&quot; target=&quot;_blank&quot;&gt;Build &amp;amp; Release Engineer&lt;/a&gt;, and we are still accepting applications for &lt;a href=&quot;https://careers.mozilla.org/position/ofA51fwF&quot; target=&quot;_blank&quot;&gt;interns for 2016&lt;/a&gt;. Come join us!&lt;/p&gt;
+
+ &lt;p&gt;Well, I don’t know about you, but all that hard work makes me hungry for pie. See you next week!&lt;/p&gt;</description>
+ <pubDate>Fri, 22 Jan 2016 20:49:38 +0000</pubDate>
+ </item>
+ <item>
+ <title>Air Mozilla: Foundation Demos January 22 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/foundation-demos-january-22-2016/</guid>
+ <link>https://air.mozilla.org/foundation-demos-january-22-2016/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Foundation Demos January 22 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/1c/a0/1ca0b9b2609cdd4e6e3577a8c3df8cfc.jpg&quot; width=&quot;160&quot; /&gt;
+ Mozilla Foundation Demos January 22 2016
+ &lt;/p&gt;</description>
+ <pubDate>Fri, 22 Jan 2016 18:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Support.Mozilla.Org: What’s up with SUMO – 22nd January</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/sumo/?p=3667</guid>
+ <link>https://blog.mozilla.org/sumo/2016/01/22/whats-up-with-sumo-22nd-january/</link>
+ <description>&lt;p&gt;&lt;strong&gt;Hello, SUMO Nation!&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png&quot;&gt;&lt;img alt=&quot;sumo_logo&quot; class=&quot;aligncenter size-full wp-image-3670&quot; height=&quot;387&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/sumo_logo.png&quot; width=&quot;383&quot; /&gt;&lt;/a&gt;The third week of the new year is already behind us. Time flies when you’re not paying attention… What are you going to do this weekend? Let us know in the comments, if you feel like sharing :-) I hope to be in the mountains, getting some fresh (bracing) air, and enjoying nature.&lt;/p&gt;
+ &lt;h3&gt;&lt;strong class=&quot;username&quot;&gt;Welcome, new contributors!&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li class=&quot;author&quot;&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;a class=&quot;username&quot; href=&quot;https://support.mozilla.org/user/johnmwc2&quot; target=&quot;_blank&quot;&gt;johnmwc2&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/myanesp&quot; target=&quot;_blank&quot;&gt;myanesp&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/Harish.A&quot; target=&quot;_blank&quot;&gt;Harish.A&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/hoolibob&quot; target=&quot;_blank&quot;&gt;hoolibob&lt;/a&gt;&lt;/li&gt;
+ &lt;li class=&quot;author&quot;&gt;&lt;a class=&quot;author-name&quot; href=&quot;https://support.mozilla.org/user/Meteoro890&quot; target=&quot;_blank&quot;&gt;Meteoro890&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;author&quot;&gt;If you just joined us, don’t hesitate – come over and &lt;a href=&quot;https://support.mozilla.org/forums/buddies&quot; target=&quot;_blank&quot;&gt;say “hi” in the forums!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Contributors of the week&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z74z1rz89z69z76zbz72zz69zz67z9z82zniz71z&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/safwan.rahman&quot; target=&quot;_blank&quot;&gt;Safwan&lt;/a&gt; for his work on the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=619284&quot; target=&quot;_blank&quot;&gt;draft feature for l10n / KB editing&lt;/a&gt; – rock on!&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/artist&quot; target=&quot;_blank&quot;&gt;Artist&lt;/a&gt; and &lt;a href=&quot;https://support.mozilla.org/user/pollti&quot; target=&quot;_blank&quot;&gt;Pollti&lt;/a&gt; for their the work on updating important articles for Focus with limited time – woot!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid64&quot;&gt;
+ &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;We salute you!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can &lt;a href=&quot;https://support.mozilla.org/forums/buddies/711364?last=65670&quot; target=&quot;_blank&quot;&gt;nominate them for the Buddy of the Month!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;h3&gt;&lt;strong&gt;Most recent SUMO Community meeting&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-18&quot; target=&quot;_blank&quot;&gt;You can read the notes here&lt;/a&gt; (most of the staff members were AFK due to MLK Day in the US) and see the video on our &lt;a href=&quot;https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos&quot; target=&quot;_blank&quot;&gt;YouTube channel&lt;/a&gt; and &lt;a href=&quot;https://air.mozilla.org/search/?q=sumo&quot; target=&quot;_blank&quot;&gt;at AirMozilla&lt;/a&gt;.&lt;del&gt; &lt;/del&gt;&lt;del&gt;&lt;br /&gt;
+ &lt;/del&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/711752?last=67873&quot;&gt;(Monday) Community Meetings in 2016&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;The next SUMO Community meeting… &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;is happening on &lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-25&quot; target=&quot;_blank&quot;&gt;Monday the 25th – join us&lt;/a&gt;!&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Reminder: if you want to add a discussion topic to the upcoming meeting agenda:&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Start a thread in the &lt;a href=&quot;https://support.mozilla.org/forums/contributors&quot; target=&quot;_blank&quot;&gt;Community Forums&lt;/a&gt;, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Developers&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://edwin.mozilla.io/t/sumo&quot; target=&quot;_blank&quot;&gt;You can see the current state of the backlog our developers are working on here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-p-2016-01-21&quot; target=&quot;_blank&quot;&gt;The latest SUMO Platform meeting notes can be found here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Interested in learning how Kitsune (the engine behind SUMO) works? &lt;a href=&quot;http://kitsune.readthedocs.org/&quot; target=&quot;_blank&quot;&gt;Read more about it here&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/kitsune/&quot; target=&quot;_blank&quot;&gt;fork it on GitHub&lt;/a&gt;!&lt;/li&gt;
+ &lt;li&gt;We have a new link for promoting contributions to Kitsune’s code. Please use &lt;strong&gt;http://mzl.la/SUMOdev&lt;/strong&gt; whenever you want to show interested people to see what Kitsune is all about – thanks!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png&quot;&gt;&lt;img alt=&quot;mission_developers&quot; class=&quot;aligncenter size-full wp-image-3668&quot; height=&quot;406&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/mission_developers.png&quot; width=&quot;437&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;h3&gt;&lt;strong&gt;Social&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Next week, there will be a kick-off meeting for the rethinking of Mozilla’s general support strategy through social networks. &lt;a href=&quot;https://support.mozilla.org/user/Madasan&quot; target=&quot;_blank&quot;&gt;Are you interested in taking part? Let Madalina know!&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The NDA process and list is currently being reworked under the leadership of the Participation Team. Expect to see messaging on this subject in the coming days.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711729?last=67763&quot;&gt;IMPORTANT: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li&gt;Are you going to FOSDEM next week? Would you like to have a small SUMO-meetup? &lt;a href=&quot;https://support.mozilla.org/user/vesper&quot; target=&quot;_blank&quot;&gt;Let me know&lt;/a&gt;!&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;Ongoing reminder: if you think you can benefit from getting &lt;a href=&quot;https://wiki.mozilla.org/Community_Hardware&quot; target=&quot;_blank&quot;&gt;a second-hand device&lt;/a&gt; to help you with contributing to SUMO, you know where to find us.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2016/01/hero_support.png&quot;&gt;&lt;img alt=&quot;hero_support&quot; class=&quot;aligncenter size-full wp-image-3669&quot; height=&quot;383&quot; src=&quot;http://blog.mozilla.org/sumo/files/2016/01/hero_support.png&quot; width=&quot;367&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;div class=&quot;&quot;&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid83&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Localization&lt;/strong&gt;&lt;/h3&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid95&quot;&gt;
+ &lt;ul&gt;
+ &lt;li&gt;You can &lt;a href=&quot;https://support.mozilla.org/forums/l10n-forum/711781&quot; target=&quot;_blank&quot;&gt;read more about the recent “infrequent contributor survey” in this thread&lt;/a&gt;. In short: the good news is that we’re doing a good job at making it easy enough for everyone to contribute. The bad news – we’re not doing enough to make sure they know what to do after their first contribution. Expect some changes in the messaging for first-time contributors to the KB :-)&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1012384&quot; target=&quot;_blank&quot;&gt;Our magical l10n dashboards keep being magical&lt;/a&gt; ;-) Thank you for your patience. If you see any discrepancies between the number of localized articles and the percentage shown in the bar, file a bug!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid75&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Firefox&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Android&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711712?last=67653&quot;&gt;Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711718?last=67822&quot;&gt;Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions&lt;/a&gt; with everyone in the forum.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Desktop&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Heads up – next week should be release week! Keep your eyes peeled ;-)&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for iOS&lt;/strong&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid85&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;No news from the world of Firefox for iOS this week.&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Thank you for reading all the way down here… More to come next week! You know where to find us, so see you around – keep rocking the open &amp;amp; helpful web!&lt;/p&gt;</description>
+ <pubDate>Fri, 22 Jan 2016 17:43:56 +0000</pubDate>
+ <dc:creator>Michał</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: Bay Area Rust Meetup January 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/bay-area-rust-meetup-january-2016/</guid>
+ <link>https://air.mozilla.org/bay-area-rust-meetup-january-2016/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Bay Area Rust Meetup January 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/87/4f/874f4abef76f55213d50e43d6417ed99.png&quot; width=&quot;160&quot; /&gt;
+ Bay Area Rust meetup for January 2016. Topics TBD.
+ &lt;/p&gt;</description>
+ <pubDate>Fri, 22 Jan 2016 03:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Mitchell Baker: Honored to Participate in New UN Panel on Women’s Economic Empowerment</title>
+ <guid isPermaLink="false">https://blog.lizardwrangler.com/?p=3953</guid>
+ <link>http://blog.lizardwrangler.com/2016/01/22/honored-to-participate-in-new-un-panel-on-womens-economic-empowerment/</link>
+ <description>Women’s economic empowerment is necessary for many reasons. It is necessary to bring health, safety and opportunity to half of humanity. It is necessary to bring investment and health to families and communities. It is necessary to unlock economic growth and build more stable societies. Today the UN Secretary General Ban Ki-moon launched the first […]</description>
+ <pubDate>Fri, 22 Jan 2016 02:45:58 +0000</pubDate>
+ <dc:creator>Mitchell Baker</dc:creator>
+ </item>
+ <item>
+ <title>Mozilla WebDev Community: Beer and Tell – January 2016</title>
+ <guid isPermaLink="false">https://blog.mozilla.org/webdev/?p=4082</guid>
+ <link>https://blog.mozilla.org/webdev/2016/01/21/beer-and-tell-january-2016/</link>
+ <description>&lt;p&gt;Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call “Beer and Tell”.&lt;/p&gt;
+ &lt;p&gt;There’s a &lt;a href=&quot;https://wiki.mozilla.org/Webdev/Beer_And_Tell/January_2016&quot;&gt;wiki page available&lt;/a&gt; with a list of the presenters, as well as links to their presentation materials. There’s also a &lt;a href=&quot;https://air.mozilla.org/webdev-beer-and-tell-january-2016/&quot;&gt;recording available&lt;/a&gt; courtesy of Air Mozilla.&lt;/p&gt;
+ &lt;h3&gt;shobson: CSS-Only Disco Ball&lt;/h3&gt;
+ &lt;p&gt;First up was &lt;a href=&quot;https://mozillians.org/en-US/u/stephaniehobson/&quot;&gt;shobson&lt;/a&gt; with a cool demo of an &lt;a href=&quot;http://codepen.io/stephaniehobson/pen/ZGZBVW?editors=110&quot;&gt;animated disco ball made entirely with CSS&lt;/a&gt;. The demo uses a repeated radial gradient for the background, and linear gradients plus a border radius for the disco ball itself. The demo was made for use in shobson’s &lt;a href=&quot;https://www.youtube.com/watch?v=7poVasAQjos&quot;&gt;WordCamp talk&lt;/a&gt; about debugging CSS. A &lt;a href=&quot;http://stephaniehobson.ca/wordpress/2015/08/15/how-to-debug-css/&quot;&gt;blog post&lt;/a&gt; with notes from the talk is available as well.&lt;/p&gt;
+ &lt;h3&gt;craigcook: Proton – A CSS Framework for Prototyping&lt;/h3&gt;
+ &lt;p&gt;Next was &lt;a href=&quot;https://mozillians.org/en-US/u/craigcook/&quot;&gt;craigcook&lt;/a&gt;, who presented &lt;a href=&quot;http://craigcook.github.io/proton/&quot;&gt;Proton&lt;/a&gt;. It’s a CSS framework that is intentionally ugly to encourage use for prototypes only. Unlike other CSS frameworks, the temptation to reuse the classes from the framework in your final page doesn’t occur, which helps avoid the presentational classes that plague sites built using a framework normally.&lt;/p&gt;
+ &lt;p&gt;Proton’s website includes an overview of the layout and components provided, as well as examples of prototypes made using the framework.&lt;/p&gt;
+ &lt;hr /&gt;
+ &lt;p&gt;If you’re interested in attending the next Beer and Tell, sign up for the &lt;a href=&quot;https://lists.mozilla.org/listinfo/dev-webdev&quot;&gt;dev-webdev@lists.mozilla.org mailing list&lt;/a&gt;. An email is sent out a week beforehand with connection details. You could even add yourself to the wiki and show off your side-project!&lt;/p&gt;
+ &lt;p&gt;See you next month!&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 18:56:46 +0000</pubDate>
+ <dc:creator>Michael Kelly</dc:creator>
+ </item>
+ <item>
+ <title>About:Community: This Month at Mozilla</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/community/?p=2287</guid>
+ <link>http://blog.mozilla.org/community/2016/01/21/this-month-at-mozilla/</link>
+ <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;A lot of exciting things are happening with Participation at Mozilla this month. Here’s a quick round-up of some of the things that are going on!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;Mozillians Profiles Got a Facelift: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;Since the start of this year, the Participation Infrastructure team has had a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs.&lt;/p&gt;
+ &lt;p&gt;Their first target for 2016 was to improve the UX on the profile edit interface.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/community/files/2016/01/new-profile-768x548.png&quot;&gt;&lt;img alt=&quot;new-profile-768x548&quot; class=&quot;aligncenter wp-image-2288 size-large&quot; height=&quot;428&quot; src=&quot;https://blog.mozilla.org/community/files/2016/01/new-profile-768x548-600x428.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
+ ”We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.”&lt;/p&gt;
+ &lt;p&gt;Read the full blog &lt;a href=&quot;http://pierros.papadeas.gr/?p=447&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;There are New Ways to Bring Your Design Skills to Mozilla: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;Are you a passionate designer looking to contribute to Mozilla? You’ll be happy to hear there is a new way to contribute to the many design projects around Mozilla! Submit issues, find collaborators, and work on open source projects by getting involved!&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;You can check out the projects looking for help, or submit your own on the &lt;a href=&quot;https://github.com/mozilla/Community-Design/issues&quot;&gt;GitHub Repo&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://docs.google.com/a/mozilla.com/forms/d/1Tw3Mw_CMiqcIQrJF7TB1yIETGYec__NiVhaSz0CAaE8/viewform&quot;&gt;Sign-up to the mailing list&lt;/a&gt; to be added as a contributor to the Repo, added to the regular meeting list, and to get emails about GitHub trainings and more!&lt;/li&gt;
+ &lt;li&gt;And read&lt;a href=&quot;http://elioqoshi.me/en/2016/01/mozilla-community-design-kickoff/&quot;&gt; a blogpost&lt;/a&gt; about the project and its first meeting.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Learn more &lt;a href=&quot;https://discourse.mozilla-community.org/c/community-design&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;136 Volunteers Are Going to Singapore: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;This weekend 136 participation leaders from all over the world are&lt;a href=&quot;https://twitter.com/thephoenixbird/status/690181985222926336&quot;&gt; heading to Singapore&lt;/a&gt; to undergo two days of&lt;a href=&quot;https://wiki.mozilla.org/Participation/Global_Gatherings_2015&quot;&gt; leadership training&lt;/a&gt; to develop the skills, knowledge and attitude to lead Participation in 2016.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_2289&quot; style=&quot;width: 609px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg&quot;&gt;&lt;img alt=&quot;Photo credit @thephoenixbird on Twitter&quot; class=&quot;wp-image-2289 size-full&quot; height=&quot;337&quot; src=&quot;https://blog.mozilla.org/community/files/2016/01/CZQE241WIAA6R2J.jpg&quot; width=&quot;599&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Photo credit @&lt;a href=&quot;https://twitter.com/thephoenixbird/status/690181985222926336&quot; target=&quot;_blank&quot;&gt;thephoenixbird&lt;/a&gt; on Twitter&lt;/p&gt;&lt;/div&gt;
+ &lt;p&gt;If you know someone attending don’t forget to share your questions and goals with them, and follow along over the weekend by watching the hashtag&lt;a href=&quot;https://twitter.com/search?q=%23mozsummit&quot;&gt; #MozSummit&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Stay tuned after the event for a debrief of the weekend!&lt;/p&gt;
+ &lt;h3&gt;&lt;b&gt;Friday’s Plenary from Mozlando is now public on Air Mozilla: &lt;/b&gt;&lt;/h3&gt;
+ &lt;p&gt;If you’re interested in learning more about all the exciting new features, projects, and plans that were presented at Mozlando look no further! You can now watch the final plenary sessions on Air Mozilla (it’s a lot of fun so I highly recommend it!) &lt;a href=&quot;https://air.mozilla.org/channels/mozlando/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Share your questions and comments on discourse &lt;a href=&quot;https://discourse.mozilla-community.org/t/friday-plenary-from-mozlando-now-public-on-air-mozilla/6659&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Look forward to more updates like these in the coming months!&lt;/em&gt;&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 17:58:33 +0000</pubDate>
+ <dc:creator>Lucy Harris</dc:creator>
+ </item>
+ <item>
+ <title>Mozilla Privacy Blog: Prioritizing privacy: Good for business</title>
+ <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=912</guid>
+ <link>https://blog.mozilla.org/netpolicy/2016/01/21/prioritizing-privacy-good-for-business/</link>
+ <description>&lt;p&gt;&lt;em&gt;This was originally posted at &lt;a href=&quot;http://staysafeonline.org/blog/prioritizing-privacy-good-for-business/&quot;&gt;StaySafeOnline.org&lt;/a&gt; in advance of &lt;a href=&quot;http://www.staysafeonline.org/data-privacy-day/events/&quot;&gt;Data Privacy Day&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;Data Privacy Day – which arrives in just a week – is a day designed to raise awareness and promote best practices for privacy and data protection. It is a day that looks to the future and recognizes that we can and should do better as an industry. It reminds us that we need to focus on the importance of having the trust of our users.&lt;/p&gt;
+ &lt;p&gt;We seek to build trust so we can collectively create the Web our users want – the Web we all want.&lt;/p&gt;
+ &lt;p&gt;That Web is based on relationships, the same way that the offline world is. When I log in to a social media account, schedule a grocery delivery online or browse the news, I’m relying on those services to respect my data. While companies are innovating their products and services, they need to be innovating on user trust as well, which means designing to address privacy concerns – and making smart choices (early!) about how to manage data.&lt;/p&gt;
+ &lt;p&gt;A &lt;a href=&quot;http://www.pewinternet.org/2016/01/14/privacy-and-information-sharing/&quot;&gt;recent survey by Pew&lt;/a&gt; highlights the thought that each user puts into their choices – and the contextual considerations in various scenarios. They concluded that many participants were annoyed and uncertain by how their information was used, and they are choosing not to interact with those services that they don’t trust. This is a clear call to businesses to foster more trust with their users, which starts by making sure that there are people empowered within your company to ask the right questions: what do your users expect? What data do you need to collect? How can you communicate about that data collection? How should you protect their data? Is holding on to data a risk, or should you delete it?&lt;/p&gt;
+ &lt;p&gt;It’s crucial that users are a part of this process – consumers’ data is needed to offer cool, new experiences and a user needs to trust you in order to choose to give you their data. Pro-user innovation can’t happen in a vacuum – the system as it stands today isn’t doing a good job of aligning user interests with business incentives. Good user decisions can be good business decisions, but only if we create thoughtful user-centric products in a way that closes the feedback loop so that positive user experiences are rewarded with better business outcomes.&lt;/p&gt;
+ &lt;p&gt;Not prioritizing privacy in product decisions will impact the bottom line. From the many data breaches over the last few years to increasing evidence of eroding trust in online services, data practices are proving to be the dark horse in the online economy. When a company loses user trust, whether on privacy or &lt;a href=&quot;https://medium.com/@davidamerland/the-cost-of-losing-trust-97d764a1e696&quot;&gt;anything else&lt;/a&gt;, it loses customers and the potential for growth.&lt;/p&gt;
+ &lt;p&gt;Privacy means different things to different people but what’s clear is that people make decisions about the products and services that they use based on how those companies choose to treat their users. Over this time, the Internet ecosystem has evolved, as has its relationship with users – and some aspects of this evolution threaten the trust that lies at the heart of that relationship. Treating a user as a target – whether for an ad, purchase, or service – undermines the trust and relationship that a business may have with a consumer.&lt;/p&gt;
+ &lt;p&gt;The solution is not to abandon the massive value that robust data can bring to users, but rather, to collect and use data leanly, productively and transparently. At Mozilla, we have created a strong set of internal data practices to ensure that data decisions align with our &lt;a href=&quot;https://www.mozilla.org/en-US/privacy/principles/&quot;&gt;privacy principles&lt;/a&gt;. As an industry, we need to keep users at the center of the product vision rather than viewing them as targets of the product – it’s the only way to stay true to consumers and deliver the best, most trusted experiences possible.&lt;/p&gt;
+ &lt;p&gt;Want to hear more about how businesses can build relationships with their users by focusing on trust and privacy? We’re holding events in Washington, D.C., and &lt;a href=&quot;https://www.eventbrite.com/e/january-privacy-lab-privacy-for-startups-tickets-19849219550?aff=es2&quot;&gt;San Francisco&lt;/a&gt; with some of our partners to talk about it. Please join us!&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 17:42:00 +0000</pubDate>
+ <dc:creator>Heather West</dc:creator>
+ </item>
+ <item>
+ <title>J.C. Jones: Issuance Rate for Let's Encrypt</title>
+ <guid isPermaLink="false">https://tacticalsecret.com/tag/mozilla/rss/9c39ad13-14ae-4456-a84e-13612637d832</guid>
+ <link>https://tacticalsecret.com/issuance-rate-for-lets-encrypt/</link>
+ <description>&lt;p&gt;Gathering data from &lt;a href=&quot;https://github.com/jcjones/letsencrypt_statistics&quot;&gt;Certificate Transparency logs&lt;/a&gt;, here's a snapshot in time of Let's Encrypt's certificate issuance rate per minute from 7-21 January 2016. On 20 January, DreamHost launched formal support for Let's Encrypt, which coincides with a rate increase.&lt;/p&gt;
+
+ &lt;p&gt;Note: This is mostly an experimental post with embedding charts; I've more data in the queue.&lt;/p&gt;
+
+ &lt;h3&gt;Let's Encrypt Issuance Rate per Minute&lt;/h3&gt;
+
+ &lt;div id=&quot;rate_hours&quot;&gt;&lt;/div&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 17:07:25 +0000</pubDate>
+ <dc:creator>James 'J.C.' Jones</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: Web QA Weekly Meeting, 21 Jan 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/web-qa-weekly-meeting-20160121/</guid>
+ <link>https://air.mozilla.org/web-qa-weekly-meeting-20160121/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Web QA Weekly Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png&quot; width=&quot;160&quot; /&gt;
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ &lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 17:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Soledad Penades: No more tap tap tap sounds: yay!</title>
+ <guid isPermaLink="false">http://soledadpenades.com/?p=6379</guid>
+ <link>http://soledadpenades.com/2016/01/21/no-more-tap-tap-tap-sounds-yay/</link>
+ <description>&lt;p&gt;A few days ago the fantastic Fritz from the Netherlands told me that my &lt;a href=&quot;http://soledadpenades.com/files/t/2015_howa/&quot;&gt;Hands On Web Audio slides&lt;/a&gt; had stopping working and there was no sound coming out from them in Firefox.&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; width=&quot;550&quot;&gt;&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;&lt;a href=&quot;https://twitter.com/supersole&quot;&gt;@supersole&lt;/a&gt; oh noes! I reopened your slides: &lt;a href=&quot;https://t.co/SO35UfljMI&quot;&gt;https://t.co/SO35UfljMI&lt;/a&gt; and it doesn't work in &lt;a href=&quot;https://twitter.com/firefox&quot;&gt;@firefox&lt;/a&gt; anymore &lt;img alt=&quot;😱&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f631.png&quot; style=&quot;height: 1em;&quot; /&gt; (works in chrome though.. &lt;img alt=&quot;😢&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f622.png&quot; style=&quot;height: 1em;&quot; /&gt;)&lt;/p&gt;
+ &lt;p&gt;— Boring Stranger (@fritzvd) &lt;a href=&quot;https://twitter.com/fritzvd/status/686481500611735552&quot;&gt;January 11, 2016&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Which is pretty disappointing for a slide deck that is built to teach you about Web Audio!&lt;/p&gt;
+ &lt;p&gt;I noticed that the issue was only on the introductory slide which uses a modified version of Stuart Memo’s &lt;a href=&quot;https://blog.stuartmemo.com/thx-deep-note-in-javascript/&quot;&gt;fantastic THX sound recreation&lt;/a&gt;-the rest of slides did play sound.&lt;/p&gt;
+ &lt;p&gt;I built &lt;a href=&quot;http://sole.github.io/test_cases/web_audio/thx_cutting_out/&quot;&gt;an isolated test case&lt;/a&gt; &lt;small&gt;&lt;a href=&quot;https://github.com/sole/test_cases/tree/gh-pages/web_audio/thx_cutting_out&quot;&gt;(source)&lt;/a&gt;&lt;/small&gt; that used a parameter-capable version of the THX sound code, just in case the issue depended on the number of oscillators, and submitted this funnily titled bug to the Web Audio component: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240054&quot;&gt;Entirely Web Audio generated sound cuts out after a little while, or emits random tap tap tap sounds then silence&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;I can happily confirm that the bug has been fixed in Nightly and the fix will hopefully be “uplifted” to DevEdition very soon, as it was due to a regression.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://paul.cx/&quot;&gt;Paul Adenot&lt;/a&gt; (who works in Web Audio and is a Web Audio spec editor, amongst a couple tons of other cool things) was really excited about the bug, saying it was very edge-casey! Yay! And he also explained what did actually happen in lay terms: “you’d have to have a frequency that goes down very very slowly so that the FFT code could not keep up”, which is what the THX sound is doing with the filter frequency automation.&lt;/p&gt;
+ &lt;p&gt;I want to thank both Fritz for spotting this out and letting me know and also Stuart for sharing his THX code. It’s amazing what happens when you put stuff on the net and lots of different people use it in different ways and configurations. Together we make everything more robust &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Of course also sending thanks to Paul and Ben for identifying and fixing the issue so fast! It’s not been even a week! Woohoo!&lt;/p&gt;
+ &lt;p&gt;Well done everyone! &lt;img alt=&quot;👏&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f44f.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;img alt=&quot;🏼&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.w.org/images/core/emoji/72x72/1f3fc.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://soledadpenades.com/?flattrss_redirect&amp;amp;id=6379&amp;amp;md5=57babe624711830f95e4b8fbd6e52c91&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img alt=&quot;flattr this!&quot; src=&quot;http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 15:49:05 +0000</pubDate>
+ <dc:creator>sole</dc:creator>
+ </item>
+ <item>
+ <title>Pierros Papadeas: Mozillians.org Profile Edit refresh</title>
+ <guid isPermaLink="true">http://pierros.papadeas.gr/?p=447</guid>
+ <link>http://pierros.papadeas.gr/?p=447</link>
+ <description>&lt;p&gt;Since the start of this year, Participation Infrastructure team has a renewed focus on making mozillians.org a modern community directory to meet Mozilla’s growing needs. This will not be an one-time effort. We need to invest technically and programmatically in order to deliver a first-class product that will be the foundation for identity management across the Mozilla ecosystem.&lt;/p&gt;
+ &lt;p&gt;Mozillians.org is full of functionality as it is today, but is paying the debt of being developed by 5 different teams over the past 5 years. We started simple this time. Updated all core technology pieces, did privacy and security reviews, and started the process of consolidating and modernizing many of the things we do in the site.&lt;/p&gt;
+ &lt;p&gt;Our first target was Profile Edit. We chose it due to relatively self-contained nature of it, and cause many people were not happy with the current UX. After research of existing tools and applying latest best practices, we designed, coded and deployed a new profile edit interface (which by the way is renamed to Settings now) that we are happy to deliver to all Mozillians.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile.png&quot; rel=&quot;attachment wp-att-448&quot;&gt;&lt;img alt=&quot;new-profile&quot; class=&quot;aligncenter size-large wp-image-448&quot; height=&quot;417&quot; src=&quot;http://pierros.papadeas.gr/wp-content/uploads/2016/01/new-profile-1024x731.png&quot; width=&quot;584&quot; /&gt;&lt;/a&gt;Have a&lt;a href=&quot;https://mozillians.org/en-US/user/edit/&quot;&gt; look for yourself &lt;/a&gt;and don’t miss the chance to update your profile while you do it!&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://mozillians.org/en-US/u/comzeradd/&quot;&gt;Nikos&lt;/a&gt; (on the front-end), &lt;a href=&quot;https://mozillians.org/en-US/u/akatsoulas/&quot;&gt;Tasos&lt;/a&gt; and &lt;a href=&quot;https://mozillians.org/en-US/u/jgiannelos/&quot;&gt;Nemo&lt;/a&gt; (on the back-end) worked hard to deliver this in a speedy manner (as they are used to), and the end result is a testament to what is coming next on Mozillians.org.&lt;/p&gt;
+ &lt;p&gt;Our next target? Groups. Currently it is obscure and unclear what all those settings in groups are, what is the functionality and how teams within Mozilla will be using it. We will be tackling this soon. After that, search and stats will be our attention, in an ongoing effort to fortify mozillians.org functionality. Stay tuned, and as always feel free to &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Participation%20Infrastructure&amp;amp;component=Phonebook&quot;&gt;file bugs&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/mozillians&quot;&gt;contribute &lt;/a&gt;in the process.&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 11:41:39 +0000</pubDate>
+ <dc:creator>Pierros Papadeas</dc:creator>
+ </item>
+ <item>
+ <title>Adam Lofting: Blog posts I haven’t written lately</title>
+ <guid isPermaLink="false">http://adamlofting.com/?p=1396</guid>
+ <link>http://feedproxy.google.com/~r/adamlofting/blog/~3/DoEWpBapwiw/</link>
+ <description>&lt;p&gt;Last year I joked…&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;
+ &lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;Thinking about writing a blog post listing the blog posts I’ve been meaning to write… Maybe that will save some time&lt;/p&gt;
+ &lt;p&gt;— Adam Lofting (@adamlofting) &lt;a href=&quot;https://twitter.com/adamlofting/status/667657889817956352&quot;&gt;November 20, 2015&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Now, it has come to this.&lt;/p&gt;
+ &lt;h4&gt;9 blog posts I’ve not been writing&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Working on working on the impact of impact&lt;/li&gt;
+ &lt;li&gt;Designing Games in &lt;a href=&quot;https://en.wikipedia.org/wiki/Amateur&quot; target=&quot;_blank&quot;&gt;my free time&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Moving Out (the board game)&lt;/li&gt;
+ &lt;li&gt;Mozilla Foundation 2016 KPIs&lt;/li&gt;
+ &lt;li&gt;Studying Network Science&lt;/li&gt;
+ &lt;li&gt;Learning Analytics plans for 2016&lt;/li&gt;
+ &lt;li&gt;Daily practice / you are what you do every day&lt;/li&gt;
+ &lt;li&gt;Several more A/B tests to write up from &lt;a href=&quot;http://fundraising.mozilla.org/&quot;&gt;the fundraising campaign&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;CRM Progress in 2015&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;But my most requested blog by far, is an update on the status of my shed / office that I was tagging on to the end my blog posts at this time last year. Many people at Mozfest wanted to know about the shed… so here it is.&lt;/p&gt;
+ &lt;p&gt;This time last year:&lt;/p&gt;
+ &lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;
+ Starting in the new office today. It will take time to make it *nice* but it works for now. &lt;a href=&quot;http://t.co/sWoC4kFNLc&quot;&gt;pic.twitter.com/sWoC4kFNLc&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;— Adam Lofting (@adamlofting) &lt;a href=&quot;https://twitter.com/adamlofting/status/560361913339899904&quot;&gt;January 28, 2015&lt;/a&gt;
+ &lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;Some pictures from this morning:&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;office1&quot; class=&quot;alignright size-large wp-image-1398&quot; height=&quot;282&quot; src=&quot;http://adamlofting.com/wp-content/uploads/2016/01/office1-750x320.jpg&quot; width=&quot;660&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;office2&quot; class=&quot;aligncenter size-large wp-image-1399&quot; height=&quot;237&quot; src=&quot;http://adamlofting.com/wp-content/uploads/2016/01/office2-750x269.jpg&quot; width=&quot;660&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;It’s a pretty nice place to work now and it doubles as useful workshop on the weekends. It needs a few finishing touches, but the law of diminishing returns means those finishing touches are lower priority than work that needs to be done elsewhere in the house and garden. So it’ll stay like this a while longer.&lt;/p&gt;
+ &lt;div class=&quot;feedflare&quot;&gt;
+ &lt;a href=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?a=DoEWpBapwiw:VxTJGXwqhlI:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?a=DoEWpBapwiw:VxTJGXwqhlI:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/adamlofting/blog?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt;
+ &lt;/div&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/adamlofting/blog/~4/DoEWpBapwiw&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 09:44:24 +0000</pubDate>
+ <dc:creator>Adam</dc:creator>
+ </item>
+ <item>
+ <title>Tarek Ziadé: A Pelican web editor</title>
+ <guid isPermaLink="true">http://blog.ziade.org/2016/01/21/a-pelican-web-editor/</guid>
+ <link>http://blog.ziade.org/2016/01/21/a-pelican-web-editor/</link>
+ <description>&lt;p&gt;The benefit of being a father again (Freya my 3rd child, was born last week) is
+ that while on paternity leave &amp;amp; between two baby bottles, I can hack on fun stuff.&lt;/p&gt;
+ &lt;p&gt;A few months ago, I've built for my running club a Pelican-based website, check it out
+ at : &lt;a class=&quot;reference external&quot; href=&quot;http://acr-dijon.org&quot;&gt;http://acr-dijon.org&lt;/a&gt;. Nothing's special about it, except that I am not
+ the one feeding it. The content is added by people from the club that have zero
+ knowledge about softwares, let alone stuff like vim or command line tools.&lt;/p&gt;
+ &lt;p&gt;I set up a github-based flow for them, where they add content through the
+ github UI and its minimal reStructuredText preview feature - and then a few
+ of my crons update the website on the server I host.
+ For images and other media, they are uploading them via FTP using FireSSH in Firefox.&lt;/p&gt;
+ &lt;p&gt;For the comments, I've switched from Disqus to &lt;a class=&quot;reference external&quot; href=&quot;https://posativ.org/isso/&quot;&gt;ISSO&lt;/a&gt;
+ after I got annoyed by the fact that it was impossible to display a simple Disqus
+ UI for people to comment without having to log in.&lt;/p&gt;
+ &lt;p&gt;I had to make my club friends go through a minimal
+ reStructuredText syntax training, and things are more of less working now.&lt;/p&gt;
+ &lt;p&gt;The system has a few caveats though:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;it's dependent on Github. I'd rather have everything hosted on my server.&lt;/li&gt;
+ &lt;li&gt;the github restTRucturedText preview will not display syntax errors and warnings
+ and very often, articles get broken&lt;/li&gt;
+ &lt;li&gt;the resulting reST is ugly, and it's a bit hard to force my editors to be stricter
+ about details like empty lines, not using tabs etc.&lt;/li&gt;
+ &lt;li&gt;adding folders or organizing articles from Github is a pain&lt;/li&gt;
+ &lt;li&gt;editing the metadata tags is prone to many mistakes&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;So I've decided to build my own web editing tool with the following features:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;resTructuredText cleanup&lt;/li&gt;
+ &lt;li&gt;content browsing&lt;/li&gt;
+ &lt;li&gt;resTructuredText web editor with live preview that shows warnings &amp;amp; errors&lt;/li&gt;
+ &lt;li&gt;a little bit of wsgi glue and a few forms to create articles without
+ having to worry about metadata syntax.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;section&quot; id=&quot;restructuredtext-cleanup&quot;&gt;
+ &lt;h3&gt;resTructuredText cleanup&lt;/h3&gt;
+ &lt;p&gt;The first step was to build a reStructuredText parser that would read some
+ reStructuredText and render it back into a cleaner version.&lt;/p&gt;
+ &lt;p&gt;We've imported almost 2000 articles in Pelican from the old blog, so I had
+ a &lt;strong&gt;lot&lt;/strong&gt; of samples to make my parser work well.&lt;/p&gt;
+ &lt;p&gt;I first tried &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/benoitbryon/rst2rst&quot;&gt;rst2rst&lt;/a&gt; but that
+ parser was built for a very specific use case (text wrapping) and was
+ incomplete. It was not parsing all of the reStructuredText syntax.&lt;/p&gt;
+ &lt;p&gt;Inspired by it, I wrote my own little parser using &lt;strong&gt;docutils&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;Understanding docutils is not a small task. This project is very powerfull
+ but quite complex. One thing that cruelly misses in docutils parser tools
+ is the ability to get the source text from any node, including its children,
+ so you can render back the same source.&lt;/p&gt;
+ &lt;p&gt;That's roughly what I had to add in my code. It's ugly but it does the job:
+ it will parse rst files and render the same content, minus all the extraneous
+ empty lines, spaces, tabs etc.&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;content-browsing&quot;&gt;
+ &lt;h3&gt;Content browsing&lt;/h3&gt;
+ &lt;p&gt;Content browsing is pretty straightforward: my admin tool let you browse
+ the Pelican &lt;em&gt;content&lt;/em&gt; directory and lists all articles, organized by categories.&lt;/p&gt;
+ &lt;p&gt;In our case, each category has a top directory in &lt;em&gt;content&lt;/em&gt;. The browser
+ parses the articles using my parser and displays paginated lists.&lt;/p&gt;
+ &lt;p&gt;I had to add a cache system for the parser, because one of the directory
+ contains over 1000 articles -- and browsing was kind of slow :)&lt;/p&gt;
+ &lt;img alt=&quot;http://ziade.org/henet-browsing.png&quot; src=&quot;http://ziade.org/henet-browsing.png&quot; /&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;restructuredtext-web-editor&quot;&gt;
+ &lt;h3&gt;resTructuredText web editor&lt;/h3&gt;
+ &lt;p&gt;The last big bit was the live editor. I've stumbled on a neat little tool
+ called &lt;strong&gt;rsted&lt;/strong&gt;, that provides a live preview of the reStructuredText
+ as you are typing it. And it includes warnings !&lt;/p&gt;
+ &lt;p&gt;Check it out: &lt;a class=&quot;reference external&quot; href=&quot;http://rst.ninjs.org/&quot;&gt;http://rst.ninjs.org/&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I've stripped it and kept what I needed, and included it in my app.&lt;/p&gt;
+ &lt;img alt=&quot;http://ziade.org/henet.png&quot; src=&quot;http://ziade.org/henet.png&quot; /&gt;
+ &lt;p&gt;I am quite happy with the result so far. I need to add real tests and
+ a bit of documentation, and I will start to train my club friends on it.&lt;/p&gt;
+ &lt;p&gt;The next features I'd like to add are:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;comments management, to replace Isso (working on it now)&lt;/li&gt;
+ &lt;li&gt;smart Pelican builds. e.g. if a comment is added I don't want to rebuild the whole
+ blog (~1500 articles)&lt;/li&gt;
+ &lt;li&gt;media management&lt;/li&gt;
+ &lt;li&gt;spell checker&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;The project lives here: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/AcrDijon/henet&quot;&gt;https://github.com/AcrDijon/henet&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I am not going to release it, but if someone finds it useful, I could.&lt;/p&gt;
+ &lt;p&gt;It's built with Bottle &amp;amp; Bootstrap as well.&lt;/p&gt;
+ &lt;/div&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 09:40:00 +0000</pubDate>
+ <dc:creator>Tarek Ziade</dc:creator>
+ </item>
+ <item>
+ <title>Nick Cameron: Closures and first-class functions</title>
+ <guid isPermaLink="false">http://www.ncameron.org/blog/rss/631106eb-e7b1-47d5-82f9-cb6ad210ea89</guid>
+ <link>http://www.ncameron.org/blog/closures-and-first-class-functions/</link>
+ <description>&lt;p&gt;I wrote a long and probably dull chapter on closures and first-class and higher-order functions in Rust. It goes into some detail on the implementation and some of the subtleties like higher-ranked lifetime bounds.&lt;/p&gt;
+
+ &lt;p&gt;I was going to post it here too, but it is really too long. Instead, pop over to the 'Rust for C++ programmers' repo and read it &lt;a href=&quot;https://github.com/nrc/r4cppp/blob/master/closures.md&quot;&gt;there&lt;/a&gt;.&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 08:36:21 +0000</pubDate>
+ <dc:creator>Nick Cameron</dc:creator>
+ </item>
+ <item>
+ <title>Nick Desaulniers: Intro to Debugging x86-64 Assembly</title>
+ <guid isPermaLink="false">http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace</guid>
+ <link>http://nickdesaulniers.github.io/blog/2016/01/20/debugging-x86-64-assembly-with-lldb-and-dtrace/</link>
+ <description>&lt;p&gt;I’m hacking on an assembly project, and wanted to document some of the tricks I
+ was using for figuring out what was going on. This post might seem a little
+ basic for folks who spend all day heads down in gdb or who do this stuff
+ professionally, but I just wanted to share a quick intro to some tools that
+ others may find useful.
+ (&lt;a href=&quot;https://pchiusano.github.io/2014-10-11/defensive-writing.html&quot;&gt;oh god, I’m doing it&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;If your coming from gdb to lldb, there’s a few differences in commands. LLDB
+ has
+ &lt;a href=&quot;http://lldb.llvm.org/lldb-gdb.html&quot;&gt;great documentation&lt;/a&gt;
+ on some of the differences. Everything in this post about LLDB is pretty much
+ there.&lt;/p&gt;
+
+ &lt;p&gt;The bread and butter commands when working with gdb or lldb are:&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;r (run the program)&lt;/li&gt;
+ &lt;li&gt;s (step in)&lt;/li&gt;
+ &lt;li&gt;n (step over)&lt;/li&gt;
+ &lt;li&gt;finish (step out)&lt;/li&gt;
+ &lt;li&gt;c (continue)&lt;/li&gt;
+ &lt;li&gt;q (quit the program)&lt;/li&gt;
+ &lt;/ul&gt;
+
+
+ &lt;p&gt;You can hit enter if you want to run the last command again, which is really
+ useful if you want to keep stepping over statements repeatedly.&lt;/p&gt;
+
+ &lt;p&gt;I’ve been using LLDB on OSX. Let’s say I want to debug a program I can build,
+ but is crashing or something:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo lldb ./asmttpd web_root
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Setting a breakpoint on jump to label:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; b sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Breakpoint 3: &lt;span class=&quot;nv&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write, &lt;span class=&quot;nv&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000029ae
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Running the program until breakpoint hit:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; r
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 32236 launched: &lt;span class=&quot;s1&quot;&gt;'./asmttpd'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 32236 stopped
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Seeing more of the current stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;24&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; d
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b3 &amp;lt;+5&amp;gt;: pushq %r8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b5 &amp;lt;+7&amp;gt;: pushq %r9
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b7 &amp;lt;+9&amp;gt;: pushq %rbx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b8 &amp;lt;+10&amp;gt;: pushq %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b9 &amp;lt;+11&amp;gt;: movq %rsi, %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29bc &amp;lt;+14&amp;gt;: movq %rdi, %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29bf &amp;lt;+17&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x1&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29c6 &amp;lt;+24&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x2000004&lt;/span&gt;, %rax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29cd &amp;lt;+31&amp;gt;: syscall
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29cf &amp;lt;+33&amp;gt;: popq %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d0 &amp;lt;+34&amp;gt;: popq %rbx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d1 &amp;lt;+35&amp;gt;: popq %r9
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d3 &amp;lt;+37&amp;gt;: popq %r8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29 &amp;lt;+39&amp;gt;: popq %r10
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d7 &amp;lt;+41&amp;gt;: popq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d8 &amp;lt;+42&amp;gt;: popq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29d9 &amp;lt;+43&amp;gt;: popq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29da &amp;lt;+44&amp;gt;: retq
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Getting a back trace (call stack):&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; bt
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xe69b9, 0x00000000000029ae asmttpd`sys_write, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; * frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#1: 0x00000000000021b6 asmttpd`print_line + 16&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#2: 0x0000000000002ab3 asmttpd`start + 35&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#3: 0x00007fff9900c5ad libdyld.dylib`start + 1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#4: 0x00007fff9900c5ad libdyld.dylib`start + 1&lt;/span&gt;
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;peeking at the upper stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; up
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;frame &lt;span class=&quot;c&quot;&gt;#1: 0x00000000000021b6 asmttpd`print_line + 16&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;print_line:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21b6 &amp;lt;+16&amp;gt;: movabsq &lt;span class=&quot;nv&quot;&gt;$0x30cb&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21c0 &amp;lt;+26&amp;gt;: movq &lt;span class=&quot;nv&quot;&gt;$0x1&lt;/span&gt;, %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21c7 &amp;lt;+33&amp;gt;: callq 0x29ae ; sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x21cc &amp;lt;+38&amp;gt;: popq %rcx
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;back down to the breakpoint-halted stack frame:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; down
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;frame &lt;span class=&quot;c&quot;&gt;#0: 0x00000000000029ae asmttpd`sys_write&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x29ae &amp;lt;+0&amp;gt;: pushq %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29af &amp;lt;+1&amp;gt;: pushq %rsi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b0 &amp;lt;+2&amp;gt;: pushq %rdx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x29b1 &amp;lt;+3&amp;gt;: pushq %r10
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;dumping the values of registers:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; register &lt;span class=&quot;nb&quot;&gt;read&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;General Purpose Registers:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rax&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000002a90 asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;start
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rbx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rcx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffaf8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffa40
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000030cc start_text
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rsi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x000000000000000f
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rbp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbffa18
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rsp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff5fbff9b8
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r8&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r9&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00007fff7b1670c8 atexit_mutex + 24
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r10&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000ffffffff
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0xffffffff00000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r12&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r13&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r14&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;r15&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rip&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000029ae asmttpd&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;sys_write
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rflags&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000246
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;cs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x000000000000002b
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;fs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000000000000
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;read just one register:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; register &lt;span class=&quot;nb&quot;&gt;read &lt;/span&gt;rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;nv&quot;&gt;rdi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x00000000000030cc start_text
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;When you’re trying to figure out what system calls are made by some C code,
+ using dtruss is very helpful. dtruss is available on OSX and seems to be some
+ kind of wrapper around DTrace.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cat sleep.c
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;c&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;int main &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; struct timespec &lt;span class=&quot;nv&quot;&gt;rqtp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 2,
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; nanosleep&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&amp;amp;rqtp, NULL&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;clang sleep.c
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo dtruss ./a.out
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;...all kinds of fun stuff
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;__semwait_signal&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;0xB03, 0x0, 0x1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; -1 Err#60
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;If you compile with &lt;code&gt;-g&lt;/code&gt; to emit debug symbols, you can use lldb’s disassemble
+ command to get the equivalent assembly:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;24&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;25&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;26&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;27&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;28&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;29&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;30&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;31&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;32&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;33&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;34&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;35&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;36&lt;/span&gt;
+ &lt;span class=&quot;line-number&quot;&gt;37&lt;/span&gt;
+ &lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;clang sleep.c -g
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;lldb a.out
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; target create &lt;span class=&quot;s2&quot;&gt;&quot;a.out&quot;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Current executable &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;to &lt;span class=&quot;s1&quot;&gt;'a.out'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;.
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; b main
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Breakpoint 1: &lt;span class=&quot;nv&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; a.out&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;main + 16 at sleep.c:3, &lt;span class=&quot;nv&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0x0000000100000f40
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; r
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 33213 launched: &lt;span class=&quot;s1&quot;&gt;'/Users/Nicholas/code/assembly/asmttpd/a.out'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x86_64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;Process 33213 stopped
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;* thread &lt;span class=&quot;c&quot;&gt;#1: tid = 0xeca04, 0x0000000100000f40 a.out`main + 16 at sleep.c:3, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; frame &lt;span class=&quot;c&quot;&gt;#0: 0x0000000100000f40 a.out`main + 16 at sleep.c:3&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 1 &lt;span class=&quot;c&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 2 int main &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 3 struct timespec &lt;span class=&quot;nv&quot;&gt;rqtp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 4 2,
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 5 0
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 6 &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 7
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lldb&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; disassemble
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;a.out&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;main:
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f30 &amp;lt;+0&amp;gt;: pushq %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f31 &amp;lt;+1&amp;gt;: movq %rsp, %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f34 &amp;lt;+4&amp;gt;: subq &lt;span class=&quot;nv&quot;&gt;$0x20&lt;/span&gt;, %rsp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f38 &amp;lt;+8&amp;gt;: leaq -0x10&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rdi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f3c &amp;lt;+12&amp;gt;: xorl %eax, %eax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f3e &amp;lt;+14&amp;gt;: movl %eax, %esi
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt;-&amp;gt; 0x100000f40 &amp;lt;+16&amp;gt;: movq 0x49&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rip&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f47 &amp;lt;+23&amp;gt;: movq %rcx, -0x10&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f4b &amp;lt;+27&amp;gt;: movq 0x46&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rip&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, %rcx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f52 &amp;lt;+34&amp;gt;: movq %rcx, -0x8&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f56 &amp;lt;+38&amp;gt;: callq 0x100000f68 ; symbol stub &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;: nanosleep
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f5b &amp;lt;+43&amp;gt;: xorl %edx, %edx
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f5d &amp;lt;+45&amp;gt;: movl %eax, -0x14&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;%rbp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f60 &amp;lt;+48&amp;gt;: movl %edx, %eax
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f62 &amp;lt;+50&amp;gt;: addq &lt;span class=&quot;nv&quot;&gt;$0x20&lt;/span&gt;, %rsp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f66 &amp;lt;+54&amp;gt;: popq %rbp
+ &lt;/span&gt;&lt;span class=&quot;line&quot;&gt; 0x100000f67 &amp;lt;+55&amp;gt;: retq
+ &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Anyways, I’ve been learning some interesting things about OSX that I’ll be
+ sharing soon. If you’d like to learn more about x86-64 assembly programming,
+ you should read my other posts about
+ &lt;a href=&quot;http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/&quot;&gt;writing x86-64&lt;/a&gt;
+ and a toy
+ &lt;a href=&quot;http://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler-jit/&quot;&gt;JIT for Brainfuck&lt;/a&gt;
+ (&lt;a href=&quot;https://www.reddit.com/r/programming/comments/377ov9/interpreter_compiler_jit/crkkrz4&quot;&gt;the creator of Brainfuck liked it&lt;/a&gt;).&lt;/p&gt;
+
+ &lt;p&gt;I should also do a post on
+ &lt;a href=&quot;http://rr-project.org/&quot;&gt;Mozilla’s rr&lt;/a&gt;,
+ because it can do amazing things like step backwards. Another day…&lt;/p&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 04:04:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Rail Aliiev: Rebooting productivity</title>
+ <guid isPermaLink="true">https://rail.merail.ca/posts/rebooting-productivity.html</guid>
+ <link>https://rail.merail.ca/posts/rebooting-productivity.html</link>
+ <description>&lt;div&gt;&lt;p&gt;Every new year gives you an opportunity to sit back, relax,
+ &lt;span class=&quot;strike&quot;&gt;have some scotch&lt;/span&gt; and re-think the passed year. Holidays give
+ you enough free time. Even if you decide to not take a vacation around
+ the holidays, it's usually calm and peaceful.&lt;/p&gt;
+ &lt;p&gt;This time, I found myself thinking mostly about productivity, being
+ effective, feeling busy, overwhelmed with work and other related topics.&lt;/p&gt;
+ &lt;p&gt;When I started at Mozilla (almost 6 years ago!), I tried to apply all my
+ GTD and time management knowledge and techniques. Working remotely and
+ in a different time zone was an advantage - I had close to zero
+ interruptions. It worked perfect.&lt;/p&gt;
+ &lt;p&gt;Last year I realized that my productivity skills had faded away somehow.
+ 40h+ workweeks, working on weekends, delivering goals in the last week
+ of quarter don't sound like good signs. Instead of being productive I
+ felt busy.&lt;/p&gt;
+ &lt;p&gt;&quot;Every crisis is an opportunity&quot;. Time to make a step back and reboot
+ myself. Burning out at work is not a good idea. :)&lt;/p&gt;
+ &lt;p&gt;Here are some ideas/tips that I wrote down for myself you may found
+ useful.&lt;/p&gt;
+ &lt;div class=&quot;section&quot; id=&quot;health-related&quot;&gt;
+ &lt;h3&gt;Health related&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Morning exercises. A 20-minute walk will wake your brain up and
+ generate enough endorphins for the first half of the day.&lt;/li&gt;
+ &lt;li&gt;Meditation. 2x20min a day is ideal; 2x10min would work too. Something
+ like &lt;a class=&quot;reference external&quot; href=&quot;http://www.calm.com/&quot;&gt;calm.com&lt;/a&gt; makes this a peace of cake.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;concentration&quot;&gt;
+ &lt;h3&gt;Concentration&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Task #1: make a daily plan. No plan - no work.&lt;/li&gt;
+ &lt;li&gt;Don't start your day by reading emails. Get one (little) thing done
+ first - THEN check your email.&lt;/li&gt;
+ &lt;li&gt;Try to define outcomes, not tasks. &quot;Ship XYZ&quot; instead of &quot;Work on XYZ&quot;.&lt;/li&gt;
+ &lt;li&gt;Meetings are time consuming, so &quot;Set a goal for each meeting&quot;.
+ Consider skipping a meeting if you don't have any goal set, unless it's a
+ beer-and-tell meeting! :)&lt;/li&gt;
+ &lt;li&gt;Constantly ask yourself if what you're working on is important.&lt;/li&gt;
+ &lt;li&gt;3-4 times a day ask yourself whether you are doing something towards
+ your goal or just finding something else to keep you busy. If you want
+ to look busy, take your phone and walk around the office with some
+ papers in your hand. Everybody will think that you are a busy person!
+ This way you can take a break and look busy at the same time!&lt;/li&gt;
+ &lt;li&gt;Take breaks! &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Pomodoro_Technique&quot;&gt;Pomodoro technique&lt;/a&gt; has this option
+ built-in. Taking breaks helps not only to avoid &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Repetitive_strain_injury&quot;&gt;RSI&lt;/a&gt;, but also
+ keeps your brain sane and gives you time to ask yourself the questions
+ mentioned above. I use &lt;a class=&quot;reference external&quot; href=&quot;http://www.workrave.org/&quot;&gt;Workrave&lt;/a&gt; on my
+ laptop, but you can use a real kitchen timer instead.&lt;/li&gt;
+ &lt;li&gt;Wear headphones, especially at office. Noise cancelling ones are even
+ better. White noise, nature sounds, or instrumental music are your
+ friends.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;home-office&quot;&gt;
+ &lt;h3&gt;(Home) Office&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Make sure you enjoy your work environment. Why on the earth would you
+ spend your valuable time working without joy?!&lt;/li&gt;
+ &lt;li&gt;De-clutter and organize your desk. Less things around - less
+ distractions.&lt;/li&gt;
+ &lt;li&gt;Desk, chair, monitor, keyboard, mouse, etc - don't cheap out on them.
+ Your health is more important and expensive. Thanks to &lt;a class=&quot;reference external&quot; href=&quot;https://twitter.com/mhoye&quot;&gt;mhoye&lt;/a&gt; for this advice!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;section&quot; id=&quot;other&quot;&gt;
+ &lt;h3&gt;Other&lt;/h3&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Don't check email every 30 seconds. If there is an emergency, they
+ will call you! :)&lt;/li&gt;
+ &lt;li&gt;Reward yourself at a certain time. &quot;I'm going to have a chocolate at
+ 11am&quot;, or &quot;MFBT at 4pm sharp!&quot; are good examples. Don't forget, you
+ are &lt;a class=&quot;reference external&quot; href=&quot;https://en.wikipedia.org/wiki/Classical_conditioning&quot;&gt;Pavlov's dog&lt;/a&gt; too!&lt;/li&gt;
+ &lt;li&gt;Don't try to read everything NOW. Save it for later and read in a
+ batch.&lt;/li&gt;
+ &lt;li&gt;Capture all creative ideas. You can delete them later. ;)&lt;/li&gt;
+ &lt;li&gt;Prepare for next task before break. Make sure you know what's next, so
+ you can think about it during the break.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;This is my list of things that I try to use everyday. Looking forward to
+ see improvements!&lt;/p&gt;
+ &lt;p&gt;I would appreciate your thoughts this topic. Feel free to comment or
+ send a private email.&lt;/p&gt;
+ &lt;p&gt;Happy Productive New Year!&lt;/p&gt;
+ &lt;/div&gt;&lt;/div&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 02:06:37 +0000</pubDate>
+ <dc:creator>Rail Aliiev</dc:creator>
+ </item>
+ <item>
+ <title>The Rust Programming Language Blog: Announcing Rust 1.6</title>
+ <guid isPermaLink="true">http://blog.rust-lang.org/2016/01/21/Rust-1.6.html</guid>
+ <link>http://blog.rust-lang.org/2016/01/21/Rust-1.6.html</link>
+ <description>&lt;p&gt;Hello 2016! We’re happy to announce the first Rust release of the year, 1.6.
+ Rust is a systems programming language focused on safety, speed, and
+ concurrency.&lt;/p&gt;
+
+ &lt;p&gt;As always, you can &lt;a href=&quot;http://www.rust-lang.org/install.html&quot;&gt;install Rust 1.6&lt;/a&gt; from the appropriate page on our
+ website, and check out the &lt;a href=&quot;https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21&quot;&gt;detailed release notes for 1.6&lt;/a&gt; on GitHub.
+ About 1100 patches were landed in this release.&lt;/p&gt;
+
+ &lt;h3 id=&quot;what-39-s-in-1-6-stable&quot;&gt;What’s in 1.6 stable&lt;/h3&gt;
+
+ &lt;p&gt;This release contains a number of small refinements, one major feature, and
+ a change to &lt;a href=&quot;https://crates.io&quot;&gt;Crates.io&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;h4 id=&quot;libcore-stabilization&quot;&gt;libcore stabilization&lt;/h4&gt;
+
+ &lt;p&gt;The largest new feature in 1.6 is that &lt;a href=&quot;http://doc.rust-lang.org/nightly/core/&quot;&gt;&lt;code&gt;libcore&lt;/code&gt;&lt;/a&gt; is now stable! Rust’s
+ standard library is two-tiered: there’s a small core library, &lt;code&gt;libcore&lt;/code&gt;, and
+ the full standard library, &lt;code&gt;libstd&lt;/code&gt;, that builds on top of it. &lt;code&gt;libcore&lt;/code&gt; is
+ completely platform agnostic, and requires only a handful of external symbols
+ to be defined. Rust’s &lt;code&gt;libstd&lt;/code&gt; builds on top of &lt;code&gt;libcore&lt;/code&gt;, adding support for
+ memory allocation, I/O, and concurrency. Applications using Rust in the
+ embedded space, as well as those writing operating systems, often eschew
+ &lt;code&gt;libstd&lt;/code&gt;, using only &lt;code&gt;libcore&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;libcore&lt;/code&gt; being stabilized is a major step towards being able to write the
+ lowest levels of software using stable Rust. There’s still future work to be
+ done, however. This will allow for a library ecosystem to develop around
+ &lt;code&gt;libcore&lt;/code&gt;, but &lt;em&gt;applications&lt;/em&gt; are not fully supported yet. Expect to hear more
+ about this in future release notes.&lt;/p&gt;
+
+ &lt;h4 id=&quot;library-stabilizations&quot;&gt;Library stabilizations&lt;/h4&gt;
+
+ &lt;p&gt;About 30 library functions and methods are now stable in 1.6. Notable
+ improvements include:&lt;/p&gt;
+
+ &lt;p&gt;The &lt;code&gt;drain()&lt;/code&gt; family of functions on collections. These methods let you move
+ elements out of a collection while allowing them to retain their backing
+ memory, reducing allocation in certain situations.&lt;/p&gt;
+
+ &lt;p&gt;A number of implementations of &lt;code&gt;From&lt;/code&gt; for converting between standard library
+ types, mainly between various integral and floating-point types.&lt;/p&gt;
+
+ &lt;p&gt;Finally, &lt;code&gt;Vec::extend_from_slice()&lt;/code&gt;, which was previously known as
+ &lt;code&gt;push_all()&lt;/code&gt;. This method has a significantly faster implementation than the
+ more general &lt;code&gt;extend()&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;See the &lt;a href=&quot;https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21&quot;&gt;detailed release notes&lt;/a&gt; for more.&lt;/p&gt;
+
+ &lt;h4 id=&quot;crates-io-disallows-wildcards&quot;&gt;Crates.io disallows wildcards&lt;/h4&gt;
+
+ &lt;p&gt;If you maintain a crate on &lt;a href=&quot;https://crates.io&quot;&gt;Crates.io&lt;/a&gt;, you might have seen
+ a warning: newly uploaded crates are no longer allowed to use a wildcard when
+ describing their dependencies. In other words, this is not allowed:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*&quot;&lt;/span&gt;
+ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
+ &lt;p&gt;Instead, you must actually specify &lt;a href=&quot;http://doc.crates.io/crates-io.html#using-cratesio-based-crates&quot;&gt;a specific version or range of
+ versions&lt;/a&gt;, using one of the &lt;code&gt;semver&lt;/code&gt; crate’s various options: &lt;code&gt;^&lt;/code&gt;,
+ &lt;code&gt;~&lt;/code&gt;, or &lt;code&gt;=&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;A wildcard dependency means that you work with any possible version of your
+ dependency. This is highly unlikely to be true, and causes unnecessary breakage
+ in the ecosystem. We’ve been advertising this change as a warning for some time;
+ now it’s time to turn it into an error.&lt;/p&gt;
+
+ &lt;h3 id=&quot;contributors-to-1-6&quot;&gt;Contributors to 1.6&lt;/h3&gt;
+
+ &lt;p&gt;We had 132 individuals contribute to 1.6. Thank you so much!&lt;/p&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;Aaron Turon&lt;/li&gt;
+ &lt;li&gt;Adam Badawy&lt;/li&gt;
+ &lt;li&gt;Aleksey Kladov&lt;/li&gt;
+ &lt;li&gt;Alexander Bulaev&lt;/li&gt;
+ &lt;li&gt;Alex Burka&lt;/li&gt;
+ &lt;li&gt;Alex Crichton&lt;/li&gt;
+ &lt;li&gt;Alex Gaynor&lt;/li&gt;
+ &lt;li&gt;Alexis Beingessner&lt;/li&gt;
+ &lt;li&gt;Amanieu d'Antras&lt;/li&gt;
+ &lt;li&gt;Amit Saha&lt;/li&gt;
+ &lt;li&gt;Andrea Canciani&lt;/li&gt;
+ &lt;li&gt;Andrew Paseltiner&lt;/li&gt;
+ &lt;li&gt;androm3da&lt;/li&gt;
+ &lt;li&gt;angelsl&lt;/li&gt;
+ &lt;li&gt;Angus Lees&lt;/li&gt;
+ &lt;li&gt;Antti Keränen&lt;/li&gt;
+ &lt;li&gt;arcnmx&lt;/li&gt;
+ &lt;li&gt;Ariel Ben-Yehuda&lt;/li&gt;
+ &lt;li&gt;Ashkan Kiani&lt;/li&gt;
+ &lt;li&gt;Barosl Lee&lt;/li&gt;
+ &lt;li&gt;Benjamin Herr&lt;/li&gt;
+ &lt;li&gt;Ben Striegel&lt;/li&gt;
+ &lt;li&gt;Bhargav Patel&lt;/li&gt;
+ &lt;li&gt;Björn Steinbrink&lt;/li&gt;
+ &lt;li&gt;Boris Egorov&lt;/li&gt;
+ &lt;li&gt;bors&lt;/li&gt;
+ &lt;li&gt;Brian Anderson&lt;/li&gt;
+ &lt;li&gt;Bruno Tavares&lt;/li&gt;
+ &lt;li&gt;Bryce Van Dyk&lt;/li&gt;
+ &lt;li&gt;Cameron Sun&lt;/li&gt;
+ &lt;li&gt;Christopher Sumnicht&lt;/li&gt;
+ &lt;li&gt;Cole Reynolds&lt;/li&gt;
+ &lt;li&gt;corentih&lt;/li&gt;
+ &lt;li&gt;Daniel Campbell&lt;/li&gt;
+ &lt;li&gt;Daniel Keep&lt;/li&gt;
+ &lt;li&gt;Daniel Rollins&lt;/li&gt;
+ &lt;li&gt;Daniel Trebbien&lt;/li&gt;
+ &lt;li&gt;Danilo Bargen&lt;/li&gt;
+ &lt;li&gt;Devon Hollowood&lt;/li&gt;
+ &lt;li&gt;Doug Goldstein&lt;/li&gt;
+ &lt;li&gt;Dylan McKay&lt;/li&gt;
+ &lt;li&gt;ebadf&lt;/li&gt;
+ &lt;li&gt;Eli Friedman&lt;/li&gt;
+ &lt;li&gt;Eric Findlay&lt;/li&gt;
+ &lt;li&gt;Erik Davidson&lt;/li&gt;
+ &lt;li&gt;Felix S. Klock II&lt;/li&gt;
+ &lt;li&gt;Florian Hahn&lt;/li&gt;
+ &lt;li&gt;Florian Hartwig&lt;/li&gt;
+ &lt;li&gt;Gleb Kozyrev&lt;/li&gt;
+ &lt;li&gt;Guillaume Gomez&lt;/li&gt;
+ &lt;li&gt;Huon Wilson&lt;/li&gt;
+ &lt;li&gt;Igor Shuvalov&lt;/li&gt;
+ &lt;li&gt;Ivan Ivaschenko&lt;/li&gt;
+ &lt;li&gt;Ivan Kozik&lt;/li&gt;
+ &lt;li&gt;Ivan Stankovic&lt;/li&gt;
+ &lt;li&gt;Jack Fransham&lt;/li&gt;
+ &lt;li&gt;Jake Goulding&lt;/li&gt;
+ &lt;li&gt;Jake Worth&lt;/li&gt;
+ &lt;li&gt;James Miller&lt;/li&gt;
+ &lt;li&gt;Jan Likar&lt;/li&gt;
+ &lt;li&gt;Jean Maillard&lt;/li&gt;
+ &lt;li&gt;Jeffrey Seyfried&lt;/li&gt;
+ &lt;li&gt;Jethro Beekman&lt;/li&gt;
+ &lt;li&gt;John Kåre Alsaker&lt;/li&gt;
+ &lt;li&gt;John Talling&lt;/li&gt;
+ &lt;li&gt;Jonas Schievink&lt;/li&gt;
+ &lt;li&gt;Jonathan S&lt;/li&gt;
+ &lt;li&gt;Jose Narvaez&lt;/li&gt;
+ &lt;li&gt;Josh Austin&lt;/li&gt;
+ &lt;li&gt;Josh Stone&lt;/li&gt;
+ &lt;li&gt;Joshua Holmer&lt;/li&gt;
+ &lt;li&gt;JP Sugarbroad&lt;/li&gt;
+ &lt;li&gt;jrburke&lt;/li&gt;
+ &lt;li&gt;Kevin Butler&lt;/li&gt;
+ &lt;li&gt;Kevin Yeh&lt;/li&gt;
+ &lt;li&gt;Kohei Hasegawa&lt;/li&gt;
+ &lt;li&gt;Kyle Mayes&lt;/li&gt;
+ &lt;li&gt;Lee Jeffery&lt;/li&gt;
+ &lt;li&gt;Manish Goregaokar&lt;/li&gt;
+ &lt;li&gt;Marcell Pardavi&lt;/li&gt;
+ &lt;li&gt;Markus Unterwaditzer&lt;/li&gt;
+ &lt;li&gt;Martin Pool&lt;/li&gt;
+ &lt;li&gt;Marvin Löbel&lt;/li&gt;
+ &lt;li&gt;Matt Brubeck&lt;/li&gt;
+ &lt;li&gt;Matthias Bussonnier&lt;/li&gt;
+ &lt;li&gt;Matthias Kauer&lt;/li&gt;
+ &lt;li&gt;mdinger&lt;/li&gt;
+ &lt;li&gt;Michael Layzell&lt;/li&gt;
+ &lt;li&gt;Michael Neumann&lt;/li&gt;
+ &lt;li&gt;Michael Sproul&lt;/li&gt;
+ &lt;li&gt;Michael Woerister&lt;/li&gt;
+ &lt;li&gt;Mihaly Barasz&lt;/li&gt;
+ &lt;li&gt;Mika Attila&lt;/li&gt;
+ &lt;li&gt;mitaa&lt;/li&gt;
+ &lt;li&gt;Ms2ger&lt;/li&gt;
+ &lt;li&gt;Nicholas Mazzuca&lt;/li&gt;
+ &lt;li&gt;Nick Cameron&lt;/li&gt;
+ &lt;li&gt;Niko Matsakis&lt;/li&gt;
+ &lt;li&gt;Ole Krüger&lt;/li&gt;
+ &lt;li&gt;Oliver Middleton&lt;/li&gt;
+ &lt;li&gt;Oliver Schneider&lt;/li&gt;
+ &lt;li&gt;Ori Avtalion&lt;/li&gt;
+ &lt;li&gt;Paul A. Jungwirth&lt;/li&gt;
+ &lt;li&gt;Peter Atashian&lt;/li&gt;
+ &lt;li&gt;Philipp Matthias Schäfer&lt;/li&gt;
+ &lt;li&gt;pierzchalski&lt;/li&gt;
+ &lt;li&gt;Ravi Shankar&lt;/li&gt;
+ &lt;li&gt;Ricardo Martins&lt;/li&gt;
+ &lt;li&gt;Ricardo Signes&lt;/li&gt;
+ &lt;li&gt;Richard Diamond&lt;/li&gt;
+ &lt;li&gt;Rizky Luthfianto&lt;/li&gt;
+ &lt;li&gt;Ryan Scheel&lt;/li&gt;
+ &lt;li&gt;Scott Olson&lt;/li&gt;
+ &lt;li&gt;Sean Griffin&lt;/li&gt;
+ &lt;li&gt;Sebastian Hahn&lt;/li&gt;
+ &lt;li&gt;Sébastien Marie&lt;/li&gt;
+ &lt;li&gt;Seo Sanghyeon&lt;/li&gt;
+ &lt;li&gt;Simonas Kazlauskas&lt;/li&gt;
+ &lt;li&gt;Simon Sapin&lt;/li&gt;
+ &lt;li&gt;Stepan Koltsov&lt;/li&gt;
+ &lt;li&gt;Steve Klabnik&lt;/li&gt;
+ &lt;li&gt;Steven Fackler&lt;/li&gt;
+ &lt;li&gt;Tamir Duberstein&lt;/li&gt;
+ &lt;li&gt;Tobias Bucher&lt;/li&gt;
+ &lt;li&gt;Toby Scrace&lt;/li&gt;
+ &lt;li&gt;Tshepang Lekhonkhobe&lt;/li&gt;
+ &lt;li&gt;Ulrik Sverdrup&lt;/li&gt;
+ &lt;li&gt;Vadim Chugunov&lt;/li&gt;
+ &lt;li&gt;Vadim Petrochenkov&lt;/li&gt;
+ &lt;li&gt;William Throwe&lt;/li&gt;
+ &lt;li&gt;xd1le&lt;/li&gt;
+ &lt;li&gt;Xmasreturns&lt;/li&gt;
+ &lt;/ul&gt;</description>
+ <pubDate>Thu, 21 Jan 2016 00:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Mozilla Addons Blog: Archiving AMO Stats</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/addons/?p=7644</guid>
+ <link>https://blog.mozilla.org/addons/2016/01/20/archiving-amo-stats/</link>
+ <description>&lt;p&gt;One of the advantages of listing an add-on or theme on &lt;a href=&quot;https://addons.mozilla.org&quot; target=&quot;_blank&quot;&gt;addons.mozilla.org&lt;/a&gt; (AMO) is that you’ll get statistics on your add-on’s usage. These stats, which are covered by the &lt;a href=&quot;https://www.mozilla.org/privacy/&quot; target=&quot;_blank&quot;&gt;Mozilla privacy policy&lt;/a&gt;, provide add-on developers with information such as the number of downloads and daily users, among other insights.&lt;/p&gt;
+ &lt;p&gt;Currently, the data that generates these statistics can go back as far as 2007, as we haven’t had an archiving policy. As a result, statistics take up the vast majority of disk space in our database and require a significant amount of processing and operations time. Statistics over a year old are very rarely accessed, and the value of their generation is very low, while the costs are increasing.&lt;/p&gt;
+ &lt;p&gt;To reduce our operating and development costs, and increase the site’s reliability for developers, we are introducing an archiving policy.&lt;/p&gt;
+ &lt;p&gt;In the coming weeks, statistics data &lt;strong&gt;over one year old&lt;/strong&gt; will no longer be stored in the AMO database, and reports generated from them will no longer be accessible through AMO’s add-on statistics pages. Instead, the data will be archived and maintained as plain text files, which developers can download. We will write a follow-up post when these archives become available.&lt;/p&gt;
+ &lt;p&gt;If you’ve chosen to keep your add-on’s statistics private, they will remain private when stats are archived. You can check your privacy settings by going to your add-on in the &lt;a href=&quot;https://addons.mozilla.org/developers/addons&quot; target=&quot;_blank&quot;&gt;Developer Hub&lt;/a&gt;, clicking on &lt;strong&gt;Edit Listing&lt;/strong&gt;, and then &lt;strong&gt;Technical Details&lt;/strong&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33.png&quot;&gt;&lt;img alt=&quot;editlisting&quot; class=&quot;alignnone size-large wp-image-7645&quot; height=&quot;389&quot; src=&quot;https://blog.mozilla.org/addons/files/2016/01/Screenshot-2016-01-20-14.52.33-600x389.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;The total number of users and other cumulative counts on add-ons and themes will not be affected and these will continue to function.&lt;/p&gt;
+ &lt;p&gt;If you have feedback or concerns, please head to our &lt;a href=&quot;https://discourse.mozilla-community.org/t/archiving-of-add-on-statistics/6573&quot; target=&quot;_blank&quot;&gt;forum post&lt;/a&gt; on this topic.&lt;/p&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 23:54:09 +0000</pubDate>
+ <dc:creator>Andy McKay</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: The Joy of Coding - Episode 41</title>
+ <guid isPermaLink="true">https://air.mozilla.org/the-joy-of-coding-episode-41/</guid>
+ <link>https://air.mozilla.org/the-joy-of-coding-episode-41/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;The Joy of Coding - Episode 41&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/cb/68/cb68b6ac48452be7e7f25ddc7b63c959.png&quot; width=&quot;160&quot; /&gt;
+ mconley livehacks on real Firefox bugs while thinking aloud.
+ &lt;/p&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 18:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Nathan Froyd: gecko and c++ onboarding presentation</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/nfroyd/?p=452</guid>
+ <link>https://blog.mozilla.org/nfroyd/2016/01/20/gecko-and-c-onboarding-presentation/</link>
+ <description>&lt;p&gt;One of the things the Firefox team has been doing recently is having onboarding sessions for new hires. This onboarding currently covers:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;1st day setup&lt;/li&gt;
+ &lt;li&gt;Bugzilla&lt;/li&gt;
+ &lt;li&gt;Building Firefox&lt;/li&gt;
+ &lt;li&gt;Desktop Firefox Architecture / Product&lt;/li&gt;
+ &lt;li&gt;Communication and Community&lt;/li&gt;
+ &lt;li&gt;Javascript and the DOM&lt;/li&gt;
+ &lt;li&gt;C++ and Gecko&lt;/li&gt;
+ &lt;li&gt;Shipping Software&lt;/li&gt;
+ &lt;li&gt;Telemetry&lt;/li&gt;
+ &lt;li&gt;Org structure and career development&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;My first day consisted of some useful HR presentations and then I was given my laptop and a pointer to a wiki page on building Firefox. Needless to say, it took me a while to get started! It would have been super convenient to have an introduction to all the stuff above.&lt;/p&gt;
+ &lt;p&gt;I’ve been asked to do the C++ and Gecko session three times. All of the sessions are open to whoever wants to come, not just the new hires, and I think yesterday’s session was easily the most well-attended yet: somewhere between 10 and 20 people showed up. Yesterday’s session was the first session where I made the slides available to attendees (should have been doing that from the start…) and it seemed equally useful to make the slides available to a broader audience as well. The &lt;a href=&quot;https://docs.google.com/presentation/d/1ZHUkNzZK2TrF5_4MWd_lqEq7Ph5B6CDbNsizIkBxbnQ/edit?usp=sharing&quot;&gt;Gecko and C++ Onboarding slides&lt;/a&gt; are up now!&lt;/p&gt;
+ &lt;p&gt;This presentation is a “living” presentation; it will get updated for future sessions with feedback and as I think of things that should have been in the presentation or better ways to set things up (some diagrams would be nice…). If you have feedback (good, bad, or ugly) on particular things in the slides or you have suggestions on what other things should be covered, please contact me! Next time I do this I’ll try to record the presentation so folks can watch that if they prefer.&lt;/p&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 16:48:29 +0000</pubDate>
+ <dc:creator>Nathan Froyd</dc:creator>
+ </item>
+ <item>
+ <title>Andreas Gal: Brendan is back to save the Web</title>
+ <guid isPermaLink="false">http://andreasgal.com/?p=573</guid>
+ <link>http://andreasgal.com/2016/01/20/brendan-is-back-to-save-the-web/</link>
+ <description>&lt;p class=&quot;p1&quot;&gt;Brendan is &lt;a href=&quot;https://github.com/brave&quot;&gt;back&lt;/a&gt;, and he has a &lt;a href=&quot;http://brave.com/&quot;&gt;plan&lt;/a&gt; to save the Web. Its a big and bold plan, and it may just work. I am pretty excited about this. If you have 5 minutes to read along I’ll explain why I think you should be as well.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;The Web is broken&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Lets face it, the Web today is a mess. Everywhere we go online we are constantly inundated with annoying ads. Often pages are more ads than content, and the more ads the industry throws at us, the more we ignore them, the more obnoxious ads get, trying to catch our attention. As Brendan explains in his blog post, the browser used to be on the user’s side—we call browsers the user agent for a reason. Part of the early success of Firefox was that it blocked popup ads. But somewhere over the last 10 years of modern Web browsers, browsers lost their way and stopped being the user’s agent alone. Why?&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Browsers aren’t free&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Making a modern Web browser is not free. It takes hundreds of engineers to make a competitive modern browser engine. Someone has to pay for that, and that someone needs to have a reason to pay for it. Google doesn’t make Chrome for the good of mankind. Google makes Chrome so you can consume more Web and along with it, more Google ads. Each time you click on one, Google makes more money. Chrome is a billion dollar business for Google. And the same is true for pretty much every other browser. Every major browser out there is funded through advertisement. No browser maker can escape this dilemma. Maybe now you understand why no major browser ships with a builtin enabled by default ad-blocker, even though ad-blockers are by far the most popular add-ons.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Our privacy is at stake&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;It’s not just the unregulated flood of advertisement that needs a solution. Every ad you see is often selected based on sensitive private information advertisement networks have extracted from your browsing behavior through tracking. Remember how the FBI used to track what books Americans read at the library, and it was a big scandal? Today the Googles and Facebooks of the world know almost every site you visit, everything you buy online, and they use this data to target you with advertisement. I am often puzzled why people are so afraid of the NSA spying on us but show so little concern about all the deeply personal data Google and Facebook are amassing about everyone.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Blocking alone doesn’t scale&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;I wish the solution was as easy as just blocking all ads. There is a lot of great Web content out there: news, entertainment, educational content. It’s not free to make all this content, but we have gotten used to consuming it “for free”. Banning all ads without an alternative mechanism would break the economic backbone of the Web. This dilemma has existed for many years, and the big browser vendors seem to have given up on it. It’s hard to blame them. How do you disrupt the status quo without sawing off the (ad revenue) branch you are sitting on?&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;It takes an newcomer to fix this mess&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;I think its unlikely that the incumbent browser vendors will make any bold moves to solve this mess. There is too much money at stake. I am excited to see a startup take a swipe at this problem, because they have little to lose (seed money aside). Brave is getting the user agent back into the game. Browsers have intentionally remained silent onlookers to the ad industry invading users’ privacy. With Brave, Brendan makes the user agent step up and fight for the user as it was always intended to do.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;Brave basically consists of two parts: part one blocks third party ad content and tracking signals. Instead of these Brave inserts alternative ad content. Sites can sign up to get a fair share of any ads that Brave displays for them. The big change in comparison to the status quo is that the Brave user agent is in control and can regulate what you see. It’s like a speed limit for advertisement on the Web, with the goal to restore balance and give sites a fair way to monetize while giving the user control through the user agent.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Making money with a better Web&lt;/strong&gt;&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;The ironic part of Brave is that its for-profit. Brave can make money by reducing obnoxious ads and protecting your privacy at the same time. If Brave succeeds, it’s going to drain money away from the crappy privacy-invasive obnoxious advertisement world we have today, and publishers and sites will start transacting in the new Brave world that is regulated by the user agent. Brave will take a cut of these transactions. And I think this is key. It aligns the incentives right. The current funding structure of major browsers encourages them to keep things as they are. Brave’s incentive is to bring down the whole diseased temple and usher in a better Web. Exciting.&lt;/p&gt;
+ &lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Quick update:&lt;/strong&gt; I had a chance to look over the Brave GitHub repo. It looks like the Brave Desktop browser is based on Chromium, not Gecko. Yes, you read that right. &lt;span style=&quot;text-decoration: underline;&quot;&gt;Brave is using Google’s rendering engine, not Mozilla’s.&lt;/span&gt; Much to write about this one, but it will definitely help Brave “hide” better in the large volume of Chrome users, making it harder for sites to identify and block Brave users. Brave for iOS seems to be a &lt;span style=&quot;text-decoration: underline;&quot;&gt;fork of Firefox for iOS, but it manages to block ads&lt;/span&gt; (Mozilla says they can’t).&lt;/p&gt;&lt;br /&gt;Filed under: &lt;a href=&quot;http://andreasgal.com/category/mozilla/&quot;&gt;Mozilla&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/andreasgal.wordpress.com/573/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/andreasgal.wordpress.com/573/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://pixel.wp.com/b.gif?host=andreasgal.com&amp;amp;blog=891661&amp;amp;post=573&amp;amp;subd=andreasgal&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 16:00:00 +0000</pubDate>
+ <dc:creator>Andreas</dc:creator>
+ </item>
+ <item>
+ <title>Mike Taylor: 🙅 @media (-webkit-transform-3d)</title>
+ <guid isPermaLink="true">https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html</guid>
+ <link>https://miketaylr.com/posts/2016/01/at-media-webkit-transform-three-dee.html</link>
+ <description>&lt;p&gt;&lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; is a funny thing that exists on the web.&lt;/p&gt;
+
+ &lt;p&gt;It's like, a &lt;a href=&quot;https://drafts.csswg.org/mediaqueries-4/#mq-features&quot;&gt;media query feature&lt;/a&gt; in the form of a prefixed CSS property, which should tell you if your (once upon a time probably Safari-only) browser supports 3D transforms, invented back in the day before we had &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@supports&quot;&gt;&lt;code&gt;@supports&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;(According to &lt;a href=&quot;https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/OtherStandardCSS3Features.html#//apple_ref/doc/uid/TP40007601-SW3&quot;&gt;Apple docs&lt;/a&gt; it first appeared in Safari 4, along side the other &lt;code&gt;-webkit-transition&lt;/code&gt; and &lt;code&gt;-webkit-transform-2d&lt;/code&gt; hybrid-media-query-feature-prefixed-css-properties-things that you should immediately forget exist.)&lt;/p&gt;
+
+ &lt;p&gt;Older versions of Modernizr &lt;a href=&quot;https://github.com/Modernizr/Modernizr/blob/66c694d136241d356e0d24fcbaa5c068b0b0cdae/feature-detects/css/transforms3d.js#L26-L27&quot;&gt;used this (and only this)&lt;/a&gt; to detect support for 3D transforms, and that seemed pretty OK. (They also did the polite thing and tested &lt;code&gt;@media (transform-3d)&lt;/code&gt;, but no browser has ever actually supported that, as it turns out). And because they're so consistently polite, they've since &lt;a href=&quot;https://github.com/patrickkettner/Modernizr/commit/a54308e47e269a058472854b1ef417bd54f4e616&quot;&gt;updated the test&lt;/a&gt; to prefer &lt;code&gt;@supports&lt;/code&gt; too (via a pull request from Edge developer Jacob Rossi).&lt;/p&gt;
+
+ &lt;p&gt;As it turns out other browsers have been &lt;a href=&quot;http://caniuse.com/#feat=transforms3d&quot;&gt;updated to support 3D CSS transforms&lt;/a&gt;, but sites didn't go back and update their version of Modernizr. So unless you support &lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; these sites break. Niche websites like &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239136&quot;&gt;yahoo.com&lt;/a&gt; and &lt;a href=&quot;https://github.com/webcompat/web-bugs/issues/2151&quot;&gt;about.com&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;So, anyways. I added &lt;a href=&quot;https://compat.spec.whatwg.org/#css-media-queries-webkit-transform-3d&quot;&gt;&lt;code&gt;@media (-webkit-transform-3d)&lt;/code&gt; to the Compat Standard&lt;/a&gt; and we &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239799&quot;&gt;added support for it Firefox&lt;/a&gt; so websites stop breaking.&lt;/p&gt;
+
+ &lt;p&gt;But you shouldn't ever use it—use &lt;code&gt;@supports&lt;/code&gt;. In fact, don't even share this blog post. Maybe delete it from your browser history just in case.&lt;/p&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 08:00:00 +0000</pubDate>
+ <dc:creator>Mike Taylor</dc:creator>
+ </item>
+ <item>
+ <title>Byron Jones: happy bmo push day!</title>
+ <guid isPermaLink="false">http://globau.wordpress.com/?p=881</guid>
+ <link>https://globau.wordpress.com/2016/01/20/happy-bmo-push-day-166/</link>
+ <description>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1236161&quot; target=&quot;_blank&quot;&gt;1236161&lt;/a&gt;] when converting a BMP attachment to PNG fails a zero byte attachment is created&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1231918&quot; target=&quot;_blank&quot;&gt;1231918&lt;/a&gt;] error handler doesn’t close multi-part responses&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;Filed under: &lt;a href=&quot;https://globau.wordpress.com/category/mozilla/bmo/&quot;&gt;bmo&lt;/a&gt;, &lt;a href=&quot;https://globau.wordpress.com/category/mozilla/&quot;&gt;mozilla&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=globau.wordpress.com&amp;amp;blog=25718030&amp;amp;post=881&amp;amp;subd=globau&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 07:33:46 +0000</pubDate>
+ <dc:creator>glob</dc:creator>
+ </item>
+ <item>
+ <title>Alex Johnson: Removing Honeycomb Code</title>
+ <guid isPermaLink="false">https://www.alex-johnson.net/tag/mozilla/rss/85d84c54-ed0c-4ee5-beb3-8823edb3c074</guid>
+ <link>https://www.alex-johnson.net/removing-honeycomb-code/</link>
+ <description>&lt;p&gt;As an effort to reduce the APK size of Firefox for Android and to remove unnecessary code, I will be helping remove the Honeycomb code throughout the Fennec project. Honeycomb will not be supported since Firefox 46, so this code is not necessary. &lt;br /&gt;
+ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1217675&quot;&gt;Bug 1217675&lt;/a&gt; will keep track of the progress. &lt;br /&gt;
+ Hopefully this will help reduce the APK size some and clean up the road for &lt;a href=&quot;https://www.youtube.com/watch?v=NJ6kzW5t02Y&quot;&gt;killing Gingerbread&lt;/a&gt; hopefully sometime in the near future.&lt;/p&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 04:59:34 +0000</pubDate>
+ <dc:creator>Alex Johnson</dc:creator>
+ </item>
+ <item>
+ <title>Brian R. Bondy: Brave Software</title>
+ <guid isPermaLink="false">http://www.brianbondy.com/blog/id/172</guid>
+ <link>http://www.brianbondy.com/blog/172/brave-software</link>
+ <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;Since June of last year, I’ve been co-founding a new startup called &lt;a href=&quot;https://brave.com/&quot;&gt;Brave Software&lt;/a&gt; with &lt;a href=&quot;https://en.wikipedia.org/wiki/Brendan_Eich&quot;&gt;Brendan Eich&lt;/a&gt;.
+ With our amazing team, we're developing something pretty epic.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;We're building the next-generation of browsers for smartphones and laptops as part of our new ad-tech platform.
+ Our terms of use give our users control over their personal data by blocking ad trackers and third party cookies.
+ We re-integrate fewer and better ads directly into programmatic ad positions, paying revenue shares to users and publishers to support both of these essential parties in the web ecosystem.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;Coming built in, we have new faster engines for tracking protection, ad block, HTTPS Everywhere, safe ads with rev-share, and more.
+ We're seeing massive web page load time speedups.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+
+
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;We're starting to bring people in for early developer build access on all platforms.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;I’m happy to share that the browsers we’re developing were made fully open sourced.
+ We welcome contributors, and would love your help.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;/p&gt;&lt;p&gt;Some of the repositories include:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/browser-laptop&quot;&gt;Brave OSX and Windows x64 browsers&lt;/a&gt;: Prototyped as a Gecko based browser, but now replaced with a powerful new browser built on top of the electron framework. The electron framework is the same one in use by Slack and the Atom editor. It uses the latest libchromiumcontent and Node.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/link-bubble&quot;&gt;Brave for Android&lt;/a&gt;: Formerly Link Bubble, working as a background service so you can use other apps as your pages load.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/brave/browser-ios&quot;&gt;Brave for iOS&lt;/a&gt;: Originally forked from Firefox for iOS but with all of the built-in greatness described above.&lt;/li&gt;
+ &lt;li&gt;And many others: Website, updater code, vault, electron fork, and others.&lt;/li&gt;
+ &lt;/ul&gt;</description>
+ <pubDate>Wed, 20 Jan 2016 00:00:00 +0000</pubDate>
+ <dc:creator>Brian R. Bondy</dc:creator>
+ </item>
+ <item>
+ <title>James Socol: PIEfection Slides Up</title>
+ <guid isPermaLink="false">http://coffeeonthekeyboard.com/rss/0388d8a6-fc86-477e-a161-1b356e01fe77</guid>
+ <link>http://coffeeonthekeyboard.com/piefection-slides-up/</link>
+ <description>&lt;p&gt;I put &lt;a href=&quot;https://github.com/jsocol/talks/tree/master/2016-01-13-manhattanjs-pie&quot;&gt;the slides for my ManhattanJS talk, &quot;PIEfection&quot;&lt;/a&gt; up on GitHub the other day (sans images, but there are links in the source for all of those).&lt;/p&gt;
+
+ &lt;p&gt;I completely neglected to talk about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Maillard_reaction&quot;&gt;Maillard reaction&lt;/a&gt;, which is responsible for food tasting good, and specifically for browning pie crusts. tl;dr: Amino acid (protein) + sugar + ~300°F (~150°C) = delicious. There are innumerable and poorly understood combinations of amino acids and sugars, but this class of reaction is responsible for everything from searing stakes to browning crusts to toasting marshmallows.&lt;/p&gt;
+
+ &lt;p&gt;Above ~330°F, you get caramelization, which is also a delicious part of the pie and crust, but you don't want to overdo it. Starting around ~400°F, you get pyrolysis (burning, charring, carbonization) and below 285°F the reaction won't occur (at least not quickly) so you won't get the delicious compounds.&lt;/p&gt;
+
+ &lt;p&gt;(All of these are, of course, temperatures measured in the material, not in the air of the oven.)&lt;/p&gt;
+
+ &lt;p&gt;So, instead of an egg wash on your top crust, try whole milk, which has more sugar to react with the gluten in the crust.&lt;/p&gt;
+
+ &lt;p&gt;I also didn't get a chance to mention a rolling technique I use, that I learned from a &lt;a href=&quot;https://www.facebook.com/ellenspirerstaffing&quot;&gt;cousin of mine&lt;/a&gt;, in whose baking shadow I happily live.&lt;/p&gt;
+
+ &lt;p&gt;When rolling out a crust after it's been in the fridge, first roll it out in a long stretch, then fold it in thirds; do it again; then start rolling it out into a round. Not only do you add more layer structure (mmm, flaky, delicious layers) but it'll fill in the cracks that often form if you try to roll it out directly, resulting in a stronger crust.&lt;/p&gt;
+
+ &lt;p&gt;Those &lt;a href=&quot;http://www.amazon.com/Cheese-Shaker-Pepper-Perforated-Stainless/dp/B007T40P28/ref=sr_1_1?ie=UTF8&amp;amp;qid=1453236391&amp;amp;sr=8-1&amp;amp;keywords=pizza+shaker&quot;&gt;pepper flake shakers&lt;/a&gt;, filled with flour, are a great way to keep adding flour to the workspace without worrying about your buttery hands.&lt;/p&gt;
+
+ &lt;p&gt;For transferring the crust to the pie plate, try rolling it up onto your rolling pin and unrolling it on the plate. &lt;a href=&quot;http://www.amazon.com/Ateco-20-Inch-Length-French-Rolling/dp/B000KESQ1G&quot;&gt;Tapered (or &quot;French&quot;) rolling pins&lt;/a&gt; (or wine bottle) are particularly good at this since they don't have moving parts.&lt;/p&gt;
+
+ &lt;p&gt;Finally, thanks again to &lt;a href=&quot;https://twitter.com/renrutnnej&quot;&gt;Jenn&lt;/a&gt; for helping me get pies from one island to another. It would not have been possible without her!&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 20:45:34 +0000</pubDate>
+ <dc:creator>James Socol</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: Reprendre le contrôle de sa vie privée sur Internet</title>
+ <guid isPermaLink="true">https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/</guid>
+ <link>https://air.mozilla.org/reprendre-le-controle-de-sa-vie-privee-sur-internet/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Reprendre le contrôle de sa vie privée sur Internet&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/be/f6/bef62897fb87e08dc8392fe61d10bcfa.png&quot; width=&quot;160&quot; /&gt;
+ L'omniprésence des réseaux sociaux, des moteurs de recherches et de la publicité est-elle compatible avec notre droit à la vie privée ?
+ &lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 18:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Myk Melez: New Year, New Blogware</title>
+ <guid isPermaLink="false">https://mykzilla.org/?p=245</guid>
+ <link>https://mykzilla.org/2016/01/19/new-year-new-blogware/</link>
+ <description>&lt;p&gt;Four score and many moons ago, I decided to move this blog from Blogger to WordPress. The transition took longer than expected, but it’s finally done.&lt;/p&gt;
+ &lt;p&gt;If you’ve been following along at the old address, &lt;a href=&quot;https://mykzilla.blogspot.com/&quot;&gt;https://mykzilla.blogspot.com/&lt;/a&gt;, now’s the time to update your address book! If you’ve been going to &lt;a href=&quot;https://mykzilla.org/&quot;&gt;https://mykzilla.org/&lt;/a&gt;, however, or you read the blog on &lt;a href=&quot;http://planet.mozilla.org/&quot;&gt;Planet Mozilla&lt;/a&gt;, then there’s nothing to do, as that’s the new address, and Planet Mozilla has been updated to syndicate posts from it.&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 16:56:05 +0000</pubDate>
+ <dc:creator>Myk Melez</dc:creator>
+ </item>
+ <item>
+ <title>Michael Kohler: Mozillas strategische Leitlinien für 2016 und danach</title>
+ <guid isPermaLink="false">http://michaelkohler.info/?p=348</guid>
+ <link>https://michaelkohler.info/2016/mozillas-strategische-leitlinien-fur-2016-und-danach</link>
+ <description>&lt;p&gt;Dieser Beitrag wurde zuerst im Blog auf&lt;a href=&quot;https://blog.mozilla.org/community&quot;&gt; https://blog.mozilla.org/community&lt;/a&gt; veröffentlicht. Herzlichen Dank an Aryx und Coce für die Übersetzung!&lt;/p&gt;
+ &lt;p&gt;Auf der ganzen Welt arbeiten leidenschaftliche Mozillianer am Fortschritt für Mozillas Mission. Aber fragt man fünf verschiedene Mozillianer, was die Mission ist, erhält man womöglich sieben verschiedene Antworten.&lt;/p&gt;
+ &lt;p&gt;Am Ende des letzten Jahres legte Mozillas CEO Chris Beard klare Vorstellungen über Mozillas Mission, Vision und Rolle dar und zeigte auf, wie unsere Produkte uns diesem Ziel in den nächsten fünf Jahren näher bringen. Das Ziel dieser strategischen Leitlinien besteht darin, für Mozilla insgesamt ein prägnantes, gemeinsames Verständnis unserer Ziele zu entwickeln, die uns als Individuen das Treffen von Entscheidungen und Erkennen von Möglichkeiten erleichtert, mit denen wir Mozilla voranbringen.&lt;/p&gt;
+ &lt;p&gt;Mozillas Mission können wir nicht alleine erreichen. Die Tausenden von Mozillianern auf der ganzen Welt müssen dahinter stehen, damit wir zügig und mit lauterer Stimme als je zuvor Unglaubliches erreichen können.&lt;/p&gt;
+ &lt;p&gt;Deswegen ist eine der sechs&lt;a href=&quot;https://docs.google.com/presentation/d/1A3Ma9gNawAYYGbYC2bUW0wUwcpHuvyMiZvHNiMLriw0/edit#slide=id.gdaa7a0bd0_1_0&quot;&gt; strategischen Initiativen&lt;/a&gt; des Participation Teams für die erste Jahreshälfte, möglichst viele Mozillianer über diese Leitlinien aufzuklären, damit wir 2016 den bisher wesentlichsten Einfluss erzielen können. Wir werden einen weiteren Beitrag veröffentlichen, der sich näher mit der Strategie des Participation Teams für das Jahr 2016 befassen wird.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone&quot; height=&quot;335&quot; src=&quot;https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/community/files/2016/01/Screen-Shot-2015-12-18-at-2.02.07-PM-600x335.png&quot; width=&quot;600&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Das Verstehen dieser Strategie wird unabdingbar sein für jeden, der bei Mozilla in diesem Jahr etwas bewirken möchte, denn sie wird bestimmen, wofür wir eintreten, wo wir unsere Ressourcen einsetzen und auf welche Projekte wir uns 2016 konzentrieren werden.&lt;/p&gt;
+ &lt;p&gt;Zu Jahresbeginn werden wir näher auf diese Strategie eingehen und weitere Details dazu bekanntgeben, wie die diversen Teams und Projekte bei Mozilla auf diese Ziele hinarbeiten.&lt;/p&gt;
+ &lt;p&gt;Der aktuelle Aufruf zum Handeln besteht darin, im Kontext Ihrer Arbeit über diese Ziele nachzudenken und darüber, wie Sie im kommenden Jahr bei Mozilla mitwirken möchten. Dies hilft, Ihre Innovationen, Ambitionen und Ihren Einfluss im Jahr 2016 zu gestalten.&lt;/p&gt;
+ &lt;p&gt;Wir hoffen, dass Sie mitdiskutieren und Ihre Fragen, Kommentare und Pläne für das Vorantreiben der strategischen Leitlinien im Jahr 2016&lt;a href=&quot;https://discourse.mozilla-community.org/t/mozillas-strategic-narrative-2016/6397&quot;&gt; hier&lt;/a&gt; auf Discourse teilen und Ihre Gedanken auf Twitter mit dem Hashtag &lt;a href=&quot;https://twitter.com/search?q=%23mozilla2016strategy&amp;amp;src=typd&quot;&gt;#Mozilla2016Strategy&lt;/a&gt; mitteilen.&lt;/p&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;h3&gt;Mission, Vision &amp;amp; Strategie&lt;/h3&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Mission&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Dafür zu sorgen, dass das Internet eine weltweite öffentliche Ressource ist, die allen zugänglich ist.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Vision&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Ein Internet, für das Menschen tatsächlich an erster Stelle stehen. Ein Internet, in dem Menschen ihr eigenes Erlebnis gestalten können. Ein Internet, in dem die Menschen selbst entscheiden können sowie sicher und unabhängig sind.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Rolle&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Mozilla setzt sich im wahrsten Sinne des Wortes in Ihrem Online-Leben für Sie ein. Wir setzen uns für Sie ein, sowohl in Ihrem Online-Erlebnis als auch für Ihre Interessen beim Zustand des Internets.&lt;/p&gt;
+ &lt;p&gt;&lt;b&gt;Unsere Arbeit&lt;/b&gt;&lt;/p&gt;
+ &lt;p&gt;Unsere Säulen&lt;/p&gt;
+ &lt;ol&gt;
+ &lt;li&gt;&lt;b&gt;Produkte:&lt;/b&gt; Wir entwickeln Produkte mit Menschen im Mittelpunkt sowie Bildungsprogramme, mit deren Hilfe Menschen online ihr gesamtes Potential ausschöpfen können.&lt;/li&gt;
+ &lt;li&gt;&lt;b&gt;Technologie:&lt;/b&gt; Wir entwickeln robuste technische Lösungen, die das Internet über verschiedene Plattformen hinweg zum Leben erwecken.&lt;/li&gt;
+ &lt;li&gt;&lt;b&gt;Menschen:&lt;/b&gt; Wir entwickeln Führungspersonen und Mitwirkende in der Gemeinschaft, die das Internet erfinden, gestalten und verteidigen.&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;p&gt;Wir wir positive Veränderungen in Zukunft anpacken wollen&lt;/p&gt;
+ &lt;p&gt;Die Arbeitsweise ist ebensowichtig wie das Ziel. Unsere Gesundheit und bleibender Einfluss hängen davon ab, wie sehr unsere Produkte und Aktivitäten:&lt;/p&gt;
+ &lt;ol&gt;
+ &lt;li&gt;Interoperabilität, Open Source und offene Standards fördern,&lt;/li&gt;
+ &lt;li&gt;Gemeinschaften aufbauen und fördern,&lt;/li&gt;
+ &lt;li&gt;Für politische Veränderungen und rechtlichen Schutz eintreten sowie&lt;/li&gt;
+ &lt;li&gt;Netzbürger bilden und einbeziehen.&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;img alt=&quot;&quot; height=&quot;0&quot; src=&quot;http://piwik.michaelkohler.info/piwik.php?idsite=1&amp;amp;rec=1&amp;amp;url=https%3A%2F%2Fmichaelkohler.info%2F2016%2Fmozillas-strategische-leitlinien-fur-2016-und-danach&amp;amp;action_name=Mozillas+strategische+Leitlinien+f%C3%BCr+2016+und+danach&amp;amp;urlref=https%3A%2F%2Fmichaelkohler.info%2Ffeed&quot; style=&quot;border: 0; width: 0; height: 0;&quot; width=&quot;0&quot; /&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 15:27:24 +0000</pubDate>
+ <dc:creator>Michael Kohler</dc:creator>
+ </item>
+ <item>
+ <title>David Lawrence: happy bmo push day!</title>
+ <guid isPermaLink="false">http://dlawrence.wordpress.com/?p=27</guid>
+ <link>https://dlawrence.wordpress.com/2016/01/19/happy-bmo-push-day-3/</link>
+ <description>&lt;p&gt;the following changes have been pushed to bugzilla.mozilla.org:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238573&quot; target=&quot;_blank&quot;&gt;1238573&lt;/a&gt;] Change label of “New Bug” menu to “New/Clone Bug”&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1239065&quot; target=&quot;_blank&quot;&gt;1239065&lt;/a&gt;] Project Kickoff Form: Adjustments needed to Mozilla Infosec review portion&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1240157&quot; target=&quot;_blank&quot;&gt;1240157&lt;/a&gt;] Fix a typo in bug.rst&lt;/li&gt;
+ &lt;li&gt;[&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1236461&quot; target=&quot;_blank&quot;&gt;1236461&lt;/a&gt;] Mass update mozilla-reps group&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;discuss these changes on &lt;a href=&quot;https://lists.mozilla.org/listinfo/tools-bmo&quot; target=&quot;_blank&quot;&gt;mozilla.tools.bmo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dlawrence.wordpress.com/27/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/dlawrence.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://pixel.wp.com/b.gif?host=dlawrence.wordpress.com&amp;amp;blog=58816&amp;amp;post=27&amp;amp;subd=dlawrence&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 14:49:59 +0000</pubDate>
+ <dc:creator>dlawrence</dc:creator>
+ </item>
+ <item>
+ <title>Soledad Penades: Hardware Hack Day @ MozLDN, 1</title>
+ <guid isPermaLink="false">http://soledadpenades.com/?p=6335</guid>
+ <link>http://soledadpenades.com/2016/01/19/hardware-hack-day-mozldn-1/</link>
+ <description>&lt;p&gt;Last week we ran an internal “hack day” here at the Mozilla space in London. It was just a bunch of &lt;em&gt;software&lt;/em&gt; engineers looking at various &lt;em&gt;hardware&lt;/em&gt; boards and things and learning about them &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://soledadpenades.com/wp-includes/images/smilies/simple-smile.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;Here’s what we did!&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://soledadpenades.com/&quot;&gt;Sole&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;I essentially &lt;a href=&quot;http://soledadpenades.com/2016/01/19/kind-of-bricking-an-arduino-duemilanove-by-exhausting-its-memory/&quot;&gt;kind of bricked my Arduino Duemilanove&lt;/a&gt; trying to get it working with Johnny Five, but it was fine–apparently there’s a way to recover it using another Arduino, and someone offered to help with that in the next &lt;a href=&quot;http://www.meetup.com/NodeBots-of-London/events/227890374/&quot;&gt;NodeBots&lt;/a&gt; London, which I’m going to attend.&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://ardeenelinfierno.com/&quot;&gt;Francisco&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Thinks he’s having issues with cables. It seems like the boards are not reset automatically by the Arduino IDE nowadays? He found the button in the board actually resets the board when pressed i.e. it’s the RESET button.&lt;/p&gt;
+ &lt;p&gt;On the Raspberry Pi side of things, he was very happy to put all his old-school Linux skills in action configuring network interfaces without GUIs!&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://gu.illau.me/&quot;&gt;Guillaume&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Played with mDNS advertising and listening to services on Raspberry Pi.&lt;/p&gt;
+ &lt;p&gt;(He was very quiet)&lt;/p&gt;
+ &lt;p&gt;(He also built a very nice LEGO case for the Raspberry Pi, but I do not have a picture, so just imagine it).&lt;/p&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://wilsonpage.co.uk/&quot;&gt;Wilson&lt;/a&gt;&lt;/h3&gt;
+ &lt;blockquote&gt;&lt;p&gt;
+ Wilson: “I got my Raspberry Pi on the Wi-Fi”&lt;/p&gt;
+ &lt;p&gt;Francisco: “Sorry?”&lt;/p&gt;
+ &lt;p&gt;Wilson: “I mean, you got my Raspberry Pi on the network. And now I’m trying to build a web app on the Pi…”&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;h3&gt;&lt;a href=&quot;http://chrislord.net/&quot;&gt;Chris&lt;/a&gt;&lt;/h3&gt;
+ &lt;p&gt;Exploring the Pebble with Linux. There’s a libpebble, and he managed to connect…&lt;/p&gt;
+ &lt;p&gt;&lt;del datetime=&quot;2016-01-20T11:22:33+00:00&quot;&gt;&lt;em&gt;&lt;small&gt;(sorry, I had to leave early so I do not know what else did Chris do!)&lt;/small&gt;&lt;/em&gt;&lt;/del&gt;&lt;/p&gt;
+ &lt;p&gt;Updated, 20 January: Chris told me he just managed to successfully connect to the Pebble watch using the bluetooth WebAPI. It requires two Gecko patches (one regression patch and one obvious logic error that he hasn’t filed yet). PROGRESS!&lt;/p&gt;
+ &lt;p&gt;~~~&lt;/p&gt;
+ &lt;p&gt;So as you can see we didn’t really get super far in just a day, and I even ended up with unusable hardware. BUT! we all learned something, and next time we know what NOT to do (or at least I DO KNOW what NOT to do!).&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://soledadpenades.com/?flattrss_redirect&amp;amp;id=6335&amp;amp;md5=40427d69faa3b9c2d1530732fd78e66d&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img alt=&quot;flattr this!&quot; src=&quot;http://soledadpenades.com/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 13:31:55 +0000</pubDate>
+ <dc:creator>sole</dc:creator>
+ </item>
+ <item>
+ <title>Daniel Stenberg: “Subject: Urgent Warning”</title>
+ <guid isPermaLink="false">http://daniel.haxx.se/blog/?p=8544</guid>
+ <link>http://daniel.haxx.se/blog/2016/01/19/subject-urgent-warning/</link>
+ <description>&lt;p&gt;Back in December I got a desperate email from this person. A woman who said her Instagram had been hacked and since she found my contact info in the app she mailed me and asked for help. I of course replied and said that I have nothing to do with her being hacked but I also have nothing to do with Instagram other than that they use software I’ve written.&lt;/p&gt;
+ &lt;p&gt;Today she writes back. Clearly not convinced I told the truth before, and now she strikes back with more “evidence” of my wrongdoings.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Dear Daniel,&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;I had emailed you a couple months ago about my “screen dumps” aka screenshots and asked for your help with restoring my Instagram account since it had been hacked, my photos changed, and your name was included in the coding. You claimed to have no involvement whatsoever in developing a third party app for Instagram and could not help me salvage my original Instagram photos, pre-hacked, despite Instagram serving as my Photography portfolio and my career is a Photographer.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Since you weren’t aware that your name was attached to Instagram related hacking code, I thought you might want to know, in case you weren’t already aware, that your name is also included in Spotify terms and conditions. I came across this information using my Spotify which has also been hacked into and would love your help hacking out of Spotify. Also, I have yet to figure out how to unhack the hackers from my Instagram so if you change your mind and want to restore my Instagram to its original form as well as help me secure my account from future privacy breaches, I’d be extremely grateful. As you know, changing my passwords did nothing to resolve the problem. Please keep in mind that Facebook owns Instagram and these are big companies that you likely don’t want to have a trail of evidence that you are a part of an Instagram and Spotify hacking ring. Also, Spotify is a major partner of Spotify so you are likely familiar with the coding for all of these illegally developed third party apps. I’d be grateful for your help fixing this error immediately.&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;Thank you,&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;[name redacted]&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;P.S. Please see attached screen dump for a screen shot of your contact info included in Spotify (or what more likely seems to be a hacked Spotify developed illegally by a third party).&lt;/em&gt;&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393.png&quot; rel=&quot;attachment wp-att-8545&quot;&gt;&lt;img alt=&quot;Spotify credits screenshot&quot; class=&quot;aligncenter size-medium wp-image-8545&quot; height=&quot;450&quot; src=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_7393-253x450.png&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;Here’s the Instagram screenshot she sent me in a previous email:&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156.jpg&quot; rel=&quot;attachment wp-att-8546&quot;&gt;&lt;img alt=&quot;Instagram credits screenshot&quot; class=&quot;aligncenter size-medium wp-image-8546&quot; height=&quot;450&quot; src=&quot;http://daniel.haxx.se/blog/wp-content/uploads/2016/01/IMG_2156-253x450.jpg&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;I’ve tried to respond with calm and clear reasonable logic and technical details on why she’s seeing my name there. That clearly failed. What do I try next?&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 08:37:32 +0000</pubDate>
+ <dc:creator>Daniel Stenberg</dc:creator>
+ </item>
+ <item>
+ <title>Emily Dunham: How much knowledge do you need to give a conference talk?</title>
+ <guid isPermaLink="true">http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html</guid>
+ <link>http://edunham.net/2016/01/19/how_much_knowledge_do_you_need_to_give_a_conference_talk.html</link>
+ <description>&lt;h3&gt;How much knowledge do you need to give a conference talk?&lt;/h3&gt;
+ &lt;p&gt;I was recently asked an excellent question when I promoted the &lt;a class=&quot;reference external&quot; href=&quot;http://www.linuxfestnorthwest.org/2016/present&quot;&gt;LFNW CFP&lt;/a&gt; on
+ IRC:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;div&gt;As someone who has never done a talk, but wants to, what kind of knowledge
+ do you need about a subject to give a talk on it?&lt;/div&gt;&lt;/blockquote&gt;
+ &lt;p&gt;If you answer “yes” to any of the following questions, you know enough to
+ propose a talk:&lt;/p&gt;
+ &lt;ul class=&quot;simple&quot;&gt;
+ &lt;li&gt;Do you have a &lt;strong&gt;hobby&lt;/strong&gt; that most tech people aren’t experts on? Talk
+ about applying a lesson or skill from that hobby to tech! For instance, I
+ turned a habit of reading about psychology into my &lt;a class=&quot;reference external&quot; href=&quot;http://talks.edunham.net/scale13x/#1&quot;&gt;Human Hacking&lt;/a&gt; talk.&lt;/li&gt;
+ &lt;li&gt;Have you ever spent a bunch of hours forcing two tools to work with each
+ other, because the documentation wasn’t very helpful and Googling didn’t get
+ you very far, and built something useful? “How to build ___ with ___” makes
+ a catchy talk title, if the &lt;strong&gt;thing you built&lt;/strong&gt; solves a common problem.&lt;/li&gt;
+ &lt;li&gt;Have you ever had a mentor sit down with you and explain a tool or
+ technique, and the new understanding improved the quality of your work or
+ code? Passing along useful &lt;strong&gt;lessons from your mentors&lt;/strong&gt; is a valuable talk,
+ because it allows others to benefit from the knowledge without taking as
+ much of your mentor’s time.&lt;/li&gt;
+ &lt;li&gt;Have you seen a dozen newbies ask the same question over the course of a few
+ months? When your &lt;strong&gt;answer to a common question&lt;/strong&gt; starts to feel like a
+ broken record, it’s time to compose it into a talk then link the newbies to
+ your slides or recording!&lt;/li&gt;
+ &lt;li&gt;Have you taken a really &lt;strong&gt;interesting class&lt;/strong&gt; lately? Can you distill part of it
+ into a 1-hour lesson that would appeal to nerds who don’t have the time or
+ resources to take the class themselves? (thanks &lt;a class=&quot;reference external&quot; href=&quot;http://lucywyman.me/&quot;&gt;lucyw&lt;/a&gt; for adding this to
+ the list!)&lt;/li&gt;
+ &lt;li&gt;Have you built a cool thing that over a dozen other people use? A &lt;strong&gt;tutorial
+ talk&lt;/strong&gt; can not only expand your community, but its recording can augment your
+ documentation and make the project more accessible for those who prefer to
+ learn directly from humans!&lt;/li&gt;
+ &lt;li&gt;Did you benefit from a really great introductory talk when you were learning
+ a tool? Consider doing your own tutorial! Any conference with beginners in
+ their target audience needs at least one Git lesson, an IRC talk, and some
+ discussions of how to use basic Unix utilities. These &lt;strong&gt;introductory talks&lt;/strong&gt;
+ are actually better when given by someone who learned the technology
+ relatively recently, because newer users remember what it’s like not to know
+ how to use it. Just remember to have a more expert user look over your slides
+ before you present, in case you made an incorrect assumption about the tool’s
+ more advanced functionality.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;I personally try to propose talks I want to hear, because the dealine of a
+ CFP or conference is great motivation to prioritize a cool project over
+ ordinary chores.&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 08:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>QMO: Aurora 45.0 Testday Results</title>
+ <guid isPermaLink="false">https://quality.mozilla.org/?p=49441</guid>
+ <link>https://quality.mozilla.org/2016/01/aurora-45-0-testday-results/</link>
+ <description>&lt;p&gt;Howdy mozillians!&lt;/p&gt;
+ &lt;p&gt;Last week – on &lt;em&gt;Friday, January 15th&lt;/em&gt; – we held &lt;a href=&quot;https://quality.mozilla.org/2016/01/firefox-45-0-aurora-testday-january-15th/&quot;&gt;Aurora 45.0 Testday&lt;/a&gt;; and, of course, it was another outstanding event!&lt;/p&gt;
+ &lt;p&gt;&lt;strong&gt;Thank you&lt;/strong&gt; all – &lt;span class=&quot;author-a-oz90z4z89zz89za7qfz70zda5z87zxz85z i&quot;&gt;&lt;i&gt;Mahmoudi Dris, Iryna Thompson, Chandrakant Dhutadmal, Preethi Dhinesh, Moin Shaikh, Ilse Macías, Hossain Al Ikram, Rezaul Huque Nayeem, Tahsan Chowdhury Akash, Kazi Nuzhat Tasnem, Fahmida Noor, Tazin Ahmed, Md. Ehsanul Hassan, Mohammad Maruf Islam, Kazi Sakib Ahmad, Khalid Syfullah Zaman, Asiful Kabir, Tabassum Mehnaz, Hasibul Hasan, Saddam Hossain, Mohammad Kamran Hossain, Amlan Biswas, Fazle Rabbi, Mohammed Jawad Ibne Ishaque, Asif Mahmud Shuvo, Nazir Ahmed Sabbir, Md. Raihan Ali, Md. Almas Hossain, Sadik Khan, Md. Faysal Alam Riyad, Faisal Mahmud, Md. Oliullah Sizan, Asif Mahmud Rony, Forhad Hossain &lt;/i&gt;and&lt;i&gt; Tanvir Rahman &lt;/i&gt;&lt;/span&gt;– for the participation!&lt;/p&gt;
+ &lt;p&gt;A big &lt;strong&gt;thank you&lt;/strong&gt; to all our active moderators too!&lt;/p&gt;
+ &lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;u&gt;Results:&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;15&lt;/strong&gt; issues were verified: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Open Sans', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; &lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1235821&quot;&gt;1235821&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1228518&quot;&gt;1228518&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1165637&quot;&gt;1165637&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1232647&quot;&gt;1232647&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1235379&quot;&gt;1235379&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=842356&quot;&gt;842356&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222971&quot;&gt;1222971&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=915962&quot;&gt;915962&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1180761&quot;&gt;1180761&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1218455&quot;&gt;1218455&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222747&quot;&gt;1222747&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1210752&quot;&gt;1210752&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1198450&quot;&gt;1198450&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1222820&quot;&gt;1222820&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1225514&quot;&gt;1225514&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; bug was triaged: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1230789&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;1230789&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;some failures were mentioned for &lt;i&gt;Search Refactoring &lt;/i&gt;feature in the etherpads (&lt;a href=&quot;https://public.etherpad-mozilla.org/p/testday-20160115&quot;&gt;link 1&lt;/a&gt; and &lt;a href=&quot;https://public.etherpad-mozilla.org/p/bangladesh.testday-15012016&quot;&gt;link 2&lt;/a&gt;); please feel free to add the requested details in the etherpads or, even better, join us on &lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot; target=&quot;_blank&quot;&gt;#qa IRC channel&lt;/a&gt; and let’s figure them out&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;I &lt;strong&gt;strongly&lt;/strong&gt; advise everyone of you to reach out to us, the moderators, via &lt;a href=&quot;http://widget01.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23qa&quot;&gt;#qa&lt;/a&gt; during the events when you encountered any kind of failures. Keep up the great work! \o/&lt;/p&gt;
+ &lt;p&gt;And keep an eye on QMO for upcoming events! &lt;img alt=&quot;😉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/72x72/1f609.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;</description>
+ <pubDate>Tue, 19 Jan 2016 07:51:57 +0000</pubDate>
+ <dc:creator>Alexandra Lucinet</dc:creator>
+ </item>
+ <item>
+ <title>Eitan Isaacson: It’s MLK Day and It’s Not Too Late to Do Something About It</title>
+ <guid isPermaLink="false">http://blog.monotonous.org/?p=678</guid>
+ <link>http://blog.monotonous.org/2016/01/18/its-mlk-day-and-its-not-too-late-to-do-something-about-it/</link>
+ <description>&lt;p&gt;For the last three years I have had the opportunity to send out a reminder to Mozilla staff that Martin Luther King Jr. Day is coming up, and that U.S. employees get the day off. It has turned into my MLK Day eve ritual. I read his letters, listen to speeches, and then I compose a belabored paragraph about Dr. King with some choice quotes.&lt;/p&gt;
+ &lt;p&gt;If you didn’t get a chance to celebrate Dr. King’s legacy and the movements he was a part of, you still have a chance:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Watch &lt;a href=&quot;http://www.imdb.com/title/tt1020072/&quot; target=&quot;_blank&quot;&gt;Selma.&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;Watch &lt;a href=&quot;http://www.imdb.com/title/tt1592527/&quot; target=&quot;_blank&quot;&gt;The Black Power Mixtape&lt;/a&gt; (it’s on Netflix).&lt;/li&gt;
+ &lt;li&gt;Read &lt;a href=&quot;http://www.africa.upenn.edu/Articles_Gen/Letter_Birmingham.html&quot; target=&quot;_blank&quot;&gt;A Letter from a Birmingham Jail&lt;/a&gt; (it’s really really good).&lt;/li&gt;
+ &lt;li&gt;Listen to his speech &lt;a href=&quot;https://www.youtube.com/watch?v=3Qf6x9_MLD0&quot; target=&quot;_blank&quot;&gt;Beyond Vietnam&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Listen to his last speech &lt;a href=&quot;https://www.youtube.com/watch?v=IDl84vusXos&quot; target=&quot;_blank&quot;&gt;I Have Been To The Mountaintop&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;&lt;br /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/blogdotmonotonousdotorg.wordpress.com/678/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/blogdotmonotonousdotorg.wordpress.com/678/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://pixel.wp.com/b.gif?host=blog.monotonous.org&amp;amp;blog=34885741&amp;amp;post=678&amp;amp;subd=blogdotmonotonousdotorg&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Mon, 18 Jan 2016 23:35:19 +0000</pubDate>
+ <dc:creator>Eitan</dc:creator>
+ </item>
+ <item>
+ <title>Nick Cameron: Libmacro</title>
+ <guid isPermaLink="false">http://www.ncameron.org/blog/rss/0e4d587c-380c-40ce-954a-7206f69bc1dd</guid>
+ <link>http://www.ncameron.org/blog/libmacro/</link>
+ <description>&lt;p&gt;As I outlined in an &lt;a href=&quot;http://ncameron.org/blog/procedural-macros-framework/&quot;&gt;earlier post&lt;/a&gt;, libmacro is a new crate designed to be used by procedural macro authors. It provides the basic API for procedural macros to interact with the compiler. I expect higher level functionality to be provided by library crates. In this post I'll go into a bit more detail about the API I think should be exposed here.&lt;/p&gt;
+
+ &lt;p&gt;This is a lot of stuff. I've probably missed something. If you use syntax extensions today and do something with libsyntax that would not be possible with libmacro, please let me know!&lt;/p&gt;
+
+ &lt;p&gt;I previously introduced &lt;code&gt;MacroContext&lt;/code&gt; as one of the gateways to libmacro. All procedural macros will have access to a &lt;code&gt;&amp;amp;mut MacroContext&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;h3&gt;Tokens&lt;/h3&gt;
+
+ &lt;p&gt;I described the &lt;code&gt;tokens&lt;/code&gt; module in the last post, I won't repeat that here.&lt;/p&gt;
+
+ &lt;p&gt;There are a few more things I thought of. I mentioned a &lt;code&gt;TokenStream&lt;/code&gt; which is a sequence of tokens. We should also have &lt;code&gt;TokenSlice&lt;/code&gt; which is a borrowed slice of tokens (the slice to &lt;code&gt;TokenStream&lt;/code&gt;'s &lt;code&gt;Vec&lt;/code&gt;). These should implement the standard methods for sequences, in particular they support iteration, so can be &lt;code&gt;map&lt;/code&gt;ed, etc.&lt;/p&gt;
+
+ &lt;p&gt;In the earlier blog post, I talked about a token kind called &lt;code&gt;Delimited&lt;/code&gt; which contains a delimited sequence of tokens. I would like to rename that to &lt;code&gt;Sequence&lt;/code&gt; and add a &lt;code&gt;None&lt;/code&gt; variant to the &lt;code&gt;Delimiter&lt;/code&gt; enum. The &lt;code&gt;None&lt;/code&gt; option is so that we can have blocks of tokens without using delimiters. It will be used for noting unsafety and other properties of tokens. Furthermore, it is useful for macro expansion (replacing the interpolated AST tokens currently present). Although &lt;code&gt;None&lt;/code&gt; blocks do not affect scoping, they do affect precedence and parsing.&lt;/p&gt;
+
+ &lt;p&gt;We should provide API for creating tokens. By default these have no hygiene information and come with a span which has no place in the source code, but shows the source of the token to be the procedural macro itself (see below for how this interacts with expansion of the current macro). I expect a &lt;code&gt;make_&lt;/code&gt; function for each kind of token. We should also have API for creating macros in a given scope (which do the same thing but with provided hygiene information). This could be considered an over-rich API, since the hygiene information could be set after construction. However, since hygiene is fiddly and annoying to get right, we should make it as easy as possible to work with.&lt;/p&gt;
+
+ &lt;p&gt;There should also be a function for creating a token which is just a fresh name. This is useful for creating new identifiers. Although this can be done by interning a string and then creating a token around it, it is used frequently enough to deserve a helper function.&lt;/p&gt;
+
+ &lt;h3&gt;Emitting errors and warnings&lt;/h3&gt;
+
+ &lt;p&gt;Procedural macros should report errors, warnings, etc. via the &lt;code&gt;MacroContext&lt;/code&gt;. They should avoid panicking as much as possible since this will crash the compiler (once &lt;code&gt;catch_panic&lt;/code&gt; is available, we should use it to catch such panics and exit gracefully, however, they will certainly still meaning aborting compilation).&lt;/p&gt;
+
+ &lt;p&gt;Libmacro will 're-export' &lt;code&gt;DiagnosticBuilder&lt;/code&gt; from &lt;a href=&quot;https://dxr.mozilla.org/rust/source/src/libsyntax/errors/mod.rs&quot;&gt;syntax::errors&lt;/a&gt;. I don't actually expect this to be a literal re-export. We will use libmacro's version of &lt;code&gt;Span&lt;/code&gt;, for example.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;impl MacroContext {
+ pub fn struct_error(&amp;amp;self, &amp;amp;str) -&amp;gt; DiagnosticBuilder;
+ pub fn error(&amp;amp;self, Option&amp;lt;Span&amp;gt;, &amp;amp;str);
+ }
+
+ pub mod errors {
+ pub struct DiagnosticBuilder { ... }
+ impl DiagnosticBuilder { ... }
+ pub enum ErrorLevel { ... }
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;There should be a macro &lt;code&gt;try_emit!&lt;/code&gt;, which reduces a &lt;code&gt;Result&amp;lt;T, ErrStruct&amp;gt;&lt;/code&gt; to a T or calls &lt;code&gt;emit()&lt;/code&gt; and then calls &lt;code&gt;unreachable!()&lt;/code&gt; (if the error is not fatal, then it should be upgraded to a fatal error).&lt;/p&gt;
+
+ &lt;h3&gt;Tokenising and quasi-quoting&lt;/h3&gt;
+
+ &lt;p&gt;The simplest function here is &lt;code&gt;tokenize&lt;/code&gt; which takes a string (&lt;code&gt;&amp;amp;str&lt;/code&gt;) and returns a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt;. The string is treated like source text. The success option is the tokenised version of the string. I expect this function must take a &lt;code&gt;MacroContext&lt;/code&gt; argument.&lt;/p&gt;
+
+ &lt;p&gt;We will offer a quasi-quoting macro. This will return a &lt;code&gt;TokenStream&lt;/code&gt; (in contrast to today's quasi-quoting which returns AST nodes), to be precise a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt;. The string which is quoted may include metavariables (&lt;code&gt;$x&lt;/code&gt;), and these are filled in with variables from the environment. The type of the variables should be either a &lt;code&gt;TokenStream&lt;/code&gt;, a &lt;code&gt;TokenTree&lt;/code&gt;, or a &lt;code&gt;Result&amp;lt;TokenStream, ErrStruct&amp;gt;&lt;/code&gt; (in this last case, if the variable is an error, then it is just returned by the macro). For example,&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;fn foo(cx: &amp;amp;mut MacroContext, tokens: TokenStream) -&amp;gt; TokenStream {
+ quote!(cx, fn foo() { $tokens }).unwrap()
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;quote!&lt;/code&gt; macro can also handle multiple tokens when the variable corresponding with the metavariable has type &lt;code&gt;[TokenStream]&lt;/code&gt; (or is dereferencable to it). In this case, the same syntax as used in macros-by-example can be used. For example, if &lt;code&gt;x: Vec&amp;lt;TokenStream&amp;gt;&lt;/code&gt; then &lt;code&gt;quote!(cx, ($x),*)&lt;/code&gt; will produce a &lt;code&gt;TokenStream&lt;/code&gt; of a comma-separated list of tokens from the elements of &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;Since the &lt;code&gt;tokenize&lt;/code&gt; function is a degenerate case of quasi-quoting, an alternative would be to always use &lt;code&gt;quote!&lt;/code&gt; and remove &lt;code&gt;tokenize&lt;/code&gt;. I believe there is utility in the simple function, and it must be used internally in any case.&lt;/p&gt;
+
+ &lt;p&gt;These functions and macros should create tokens with spans and hygiene information set as described above for making new tokens. We might also offer versions which takes a scope and uses that as the context for tokenising.&lt;/p&gt;
+
+ &lt;h3&gt;Parsing helper functions&lt;/h3&gt;
+
+ &lt;p&gt;There are some common patterns for tokens to follow in macros. In particular those used as arguments for attribute-like macros. We will offer some functions which attempt to parse tokens into these patterns. I expect there will be more of these in time; to start with:&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod parsing {
+ // Expects `(foo = &quot;bar&quot;),*`
+ pub fn parse_keyed_values(&amp;amp;TokenSlice, &amp;amp;mut MacroContext) -&amp;gt; Result&amp;lt;Vec&amp;lt;(InternedString, String)&amp;gt;, ErrStruct&amp;gt;;
+ // Expects `&quot;bar&quot;`
+ pub fn parse_string(&amp;amp;TokenSlice, &amp;amp;mut MacroContext) -&amp;gt; Result&amp;lt;String, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;To be honest, given the token design in the last post, I think &lt;code&gt;parse_string&lt;/code&gt; is unnecessary, but I wanted to give more than one example of this kind of function. If &lt;code&gt;parse_keyed_values&lt;/code&gt; is the only one we end up with, then that is fine.&lt;/p&gt;
+
+ &lt;h3&gt;Pattern matching&lt;/h3&gt;
+
+ &lt;p&gt;The goal with the pattern matching API is to allow procedural macros to operate on tokens in the same way as macros-by-example. The pattern language is thus the same as that for macros-by-example.&lt;/p&gt;
+
+ &lt;p&gt;There is a single macro, which I propose calling &lt;code&gt;matches&lt;/code&gt;. Its first argument is the name of a &lt;code&gt;MacroContext&lt;/code&gt;. Its second argument is the input, which must be a &lt;code&gt;TokenSlice&lt;/code&gt; (or dereferencable to one). The third argument is a pattern definition. The macro produces a &lt;code&gt;Result&amp;lt;T, ErrStruct&amp;gt;&lt;/code&gt; where &lt;code&gt;T&lt;/code&gt; is the type produced by the pattern arms. If the pattern has multiple arms, then each arm must have the same type. An error is produced if none of the arms in the pattern are matched.&lt;/p&gt;
+
+ &lt;p&gt;The pattern language follows the language for defining macros-by-example (but is slightly stricter). There are two forms, a single pattern form and a multiple pattern form. If the first character is a &lt;code&gt;{&lt;/code&gt; then the pattern is treated as a multiple pattern form, if it starts with &lt;code&gt;(&lt;/code&gt; then as a single pattern form, otherwise an error (causes a panic with a &lt;code&gt;Bug&lt;/code&gt; error, as opposed to returning an &lt;code&gt;Err&lt;/code&gt;).&lt;/p&gt;
+
+ &lt;p&gt;The single pattern form is &lt;code&gt;(pattern) =&amp;gt; { code }&lt;/code&gt;. The multiple pattern form is &lt;code&gt;{(pattern) =&amp;gt; { code } (pattern) =&amp;gt; { code } ... (pattern) =&amp;gt; { code }}&lt;/code&gt;. &lt;code&gt;code&lt;/code&gt; is any old Rust code which is executed when the corresponding pattern is matched. The pattern follows from macros-by-example - it is a series of characters treated as literals, meta-variables indicated with &lt;code&gt;$&lt;/code&gt;, and the syntax for matching multiple variables. Any meta-variables are available as variables in the righthand side, e.g., &lt;code&gt;$x&lt;/code&gt; becomes available as &lt;code&gt;x&lt;/code&gt;. These variables have type &lt;code&gt;TokenStream&lt;/code&gt; if they appear singly or &lt;code&gt;Vec&amp;lt;TokenStream&amp;gt;&lt;/code&gt; if they appear multiply (or &lt;code&gt;Vec&amp;lt;Vec&amp;lt;TokenStream&amp;gt;&amp;gt;&lt;/code&gt; and so forth).&lt;/p&gt;
+
+ &lt;p&gt;Examples:&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;matches!(cx, input, (foo($x:expr) bar) =&amp;gt; {quote(cx, foo_bar($x).unwrap()}).unwrap()
+
+ matches!(cx, input, {
+ () =&amp;gt; {
+ cx.err(&quot;No input?&quot;);
+ }
+ (foo($($x:ident),+ bar) =&amp;gt; {
+ println!(&quot;found {} idents&quot;, x.len());
+ quote!(($x);*).unwrap()
+ }
+ }
+ })
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;Note that since we match AST items here, our backwards compatibility story is a bit complicated (though hopefully not much more so than with current macros).&lt;/p&gt;
+
+ &lt;h3&gt;Hygiene&lt;/h3&gt;
+
+ &lt;p&gt;The intention of the design is that the actual hygiene algorithm applied is irrelevant. Procedural macros should be able to use the same API if the hygiene algorithm changes (of course the result of applying the API might change). To this end, all hygiene objects are opaque and cannot be directly manipulated by macros.&lt;/p&gt;
+
+ &lt;p&gt;I propose one module (&lt;code&gt;hygiene&lt;/code&gt;) and two types: &lt;code&gt;Context&lt;/code&gt; and &lt;code&gt;Scope&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;A &lt;code&gt;Context&lt;/code&gt; is attached to each token and contains all hygiene information about that token. If two tokens have the same &lt;code&gt;Context&lt;/code&gt;, then they may be compared syntactically. The reverse is not true - two tokens can have different &lt;code&gt;Context&lt;/code&gt;s and still be equal. &lt;code&gt;Context&lt;/code&gt;s can only be created by applying the hygiene algorithm and cannot be manipulated, only moved and stored.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;fresh_hygiene_context&lt;/code&gt; for creating a new, fresh &lt;code&gt;Context&lt;/code&gt; (i.e., a &lt;code&gt;Context&lt;/code&gt; not shared with any other tokens).&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;expansion_hygiene_context&lt;/code&gt; for getting the &lt;code&gt;Context&lt;/code&gt; where the macro is defined. This is equivalent to &lt;code&gt;.expansion_scope().direct_context()&lt;/code&gt;, but might be more efficient (and I expect it to be used a lot).&lt;/p&gt;
+
+ &lt;p&gt;A &lt;code&gt;Scope&lt;/code&gt; provides information about a position within an AST at a certain point during macro expansion. For example,&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;fn foo() {
+ a
+ {
+ b
+ c
+ }
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; will have different &lt;code&gt;Scope&lt;/code&gt;s. &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; will have the same &lt;code&gt;Scope&lt;/code&gt;s, even if &lt;code&gt;b&lt;/code&gt; was written in this position and &lt;code&gt;c&lt;/code&gt; is due to macro expansion. However, a &lt;code&gt;Scope&lt;/code&gt; may contain more information than just the syntactic scopes, for example, it may contain information about pending scopes yet to be applied by the hygiene algorithm (i.e., information about &lt;code&gt;let&lt;/code&gt; expressions which are in scope).&lt;/p&gt;
+
+ &lt;p&gt;Note that a &lt;code&gt;Scope&lt;/code&gt; means a scope in the macro hygiene sense, not the commonly used sense of a scope declared with &lt;code&gt;{}&lt;/code&gt;. In particular, each &lt;code&gt;let&lt;/code&gt; statement starts a new scope and the items and statements in a function body are in different scopes.&lt;/p&gt;
+
+ &lt;p&gt;The functions &lt;code&gt;lookup_item_scope&lt;/code&gt; and &lt;code&gt;lookup_statement_scope&lt;/code&gt; take a &lt;code&gt;MacroContext&lt;/code&gt; and a path, represented as a &lt;code&gt;TokenSlice&lt;/code&gt;, and return the &lt;code&gt;Scope&lt;/code&gt; which that item defines or an error if the path does not refer to an item, or the item does not define a scope of the right kind.&lt;/p&gt;
+
+ &lt;p&gt;The function &lt;code&gt;lookup_scope_for&lt;/code&gt; is similar, but returns the &lt;code&gt;Scope&lt;/code&gt; in which an item is declared.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;MacroContext&lt;/code&gt; has a method &lt;code&gt;expansion_scope&lt;/code&gt; for getting the scope in which the current macro is being expanded.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a method &lt;code&gt;direct_context&lt;/code&gt; which returns a &lt;code&gt;Context&lt;/code&gt; for items declared directly (c.f., via macro expansion) in that &lt;code&gt;Scope&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a method &lt;code&gt;nested&lt;/code&gt; which creates a fresh &lt;code&gt;Scope&lt;/code&gt; nested within the receiver scope.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Scope&lt;/code&gt; has a static method &lt;code&gt;empty&lt;/code&gt; for creating an empty scope, that is one with no scope information at all (note that this is different from a top-level scope).&lt;/p&gt;
+
+ &lt;p&gt;I expect the exact API around &lt;code&gt;Scope&lt;/code&gt;s and &lt;code&gt;Context&lt;/code&gt;s will need some work. &lt;code&gt;Scope&lt;/code&gt; seems halfway between an intuitive, algorithm-neutral abstraction, and the scopes from the sets of scopes hygiene algorithm. I would prefer a &lt;code&gt;Scope&lt;/code&gt; should be more abstract, on the other hand, macro authors may want fine-grained control over hygiene application.&lt;/p&gt;
+
+ &lt;h4&gt;Manipulating hygiene information on tokens,&lt;/h4&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod hygiene {
+ pub fn add(cx: &amp;amp;mut MacroContext, t: &amp;amp;Token, scope: &amp;amp;Scope) -&amp;gt; Token;
+ // Maybe unnecessary if we have direct access to Tokens.
+ pub fn set(t: &amp;amp;Token, cx: &amp;amp;Context) -&amp;gt; Token;
+ // Maybe unnecessary - can use set with cx.expansion_hygiene_context().
+ // Also, bad name.
+ pub fn current(cx: &amp;amp;MacroContext, t: &amp;amp;Token) -&amp;gt; Token;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;add&lt;/code&gt; adds &lt;code&gt;scope&lt;/code&gt; to any context already on &lt;code&gt;t&lt;/code&gt; (&lt;code&gt;Context&lt;/code&gt; should have a similar method). Note that the implementation is a bit complex - the nature of the &lt;code&gt;Scope&lt;/code&gt; might mean we replace the old context completely, or add to it.&lt;/p&gt;
+
+ &lt;h4&gt;Applying hygiene when expanding the current macro&lt;/h4&gt;
+
+ &lt;p&gt;By default, the current macro will be expanded in the standard way, having hygiene applied as expected. Mechanically, hygiene information is added to tokens when the macro is expanded. Assuming the sets of scopes algorithm, scopes (for example, for the macro's definition, and for the introduction) are added to any scopes already present on the token. A token with no hygiene information will thus behave like a token in a macro-by-example macro. Hygiene due to nested scopes created by the macro do not need to be taken into account by the macro author, this is handled at expansion time.&lt;/p&gt;
+
+ &lt;p&gt;Procedural macro authors may want to customise hygiene application (it is common in Racket), for example, to introduce items that can be referred to by code in the call-site scope.&lt;/p&gt;
+
+ &lt;p&gt;We must provide an option to expand the current macro without applying hygiene; the macro author must then handle hygiene. For this to work, the macro must be able to access information about the scope in which it is applied (see &lt;code&gt;MacroContext::expansion_scope&lt;/code&gt;, above) and to supply a &lt;code&gt;Scope&lt;/code&gt; indicating scopes that should be added to tokens following the macro expansion.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod hygiene {
+ pub enum ExpansionMode {
+ Automatic,
+ Manual(Scope),
+ }
+ }
+
+ impl MacroContext {
+ pub fn set_hygienic_expansion(hygiene::ExpansionMode);
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;We may wish to offer other modes for expansion which allow for tweaking hygiene application without requiring full manual application. One possible mode is where the author provides a &lt;code&gt;Scope&lt;/code&gt; for the macro definition (rather than using the scope where the macro is actually defined), but hygiene is otherwise applied automatically. We might wish to give the author the option of applying scopes due to the macro definition, but not the introduction scopes.&lt;/p&gt;
+
+ &lt;p&gt;On a related note, might we want to affect how spans are applied when the current macro is expanded? I can't think of a use case right now, but it seems like something that might be wanted.&lt;/p&gt;
+
+ &lt;p&gt;Blocks of tokens (that is a &lt;code&gt;Sequence&lt;/code&gt; token) may be marked (not sure how, exactly, perhaps using a distinguished context) such that it is expanded without any hygiene being applied or spans changed. There should be a function for creating such a &lt;code&gt;Sequence&lt;/code&gt; from a &lt;code&gt;TokenSlice&lt;/code&gt; in the &lt;code&gt;tokens&lt;/code&gt; module. The primary motivation for this is to handle the tokens representing the body on which an annotation-like macro is present. For a 'decorator' macro, these tokens will be untouched (passed through by the macro), and since they are not touched by the macro, they should appear untouched by it (in terms of hygiene and spans).&lt;/p&gt;
+
+ &lt;h3&gt;Applying macros&lt;/h3&gt;
+
+ &lt;p&gt;We provide functionality to expand a provided macro or to lookup and expand a macro.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod apply {
+ pub fn expand_macro(cx: &amp;amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;amp;TokenSlice,
+ macro_scope: Scope,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;(TokenStream, Scope), ErrStruct&amp;gt;;
+ pub fn lookup_and_expand_macro(cx: &amp;amp;mut MacroContext,
+ expansion_scope: Scope,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;(TokenStream, Scope), ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;These functions apply macro hygiene in the usual way, with &lt;code&gt;expansion_scope&lt;/code&gt; dictating the scope into which the macro is expanded. Other spans and hygiene information is taken from the tokens. &lt;code&gt;expand_macro&lt;/code&gt; takes pending scopes from &lt;code&gt;macro_scope&lt;/code&gt;, &lt;code&gt;lookup_and_expand_macro&lt;/code&gt; uses the proper pending scopes. In order to apply the hygiene algorithm, the result of the macro must be parsable. The returned scope will contain pending scopes that can be applied by the macro to subsequent tokens.&lt;/p&gt;
+
+ &lt;p&gt;We could provide versions that don't take an &lt;code&gt;expansion_scope&lt;/code&gt; and use &lt;code&gt;cx.expansion_scope()&lt;/code&gt;. Probably unnecessary.&lt;/p&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod apply {
+ pub fn expand_macro_unhygienic(cx: &amp;amp;mut MacroContext,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;TokenStream, ErrStruct&amp;gt;;
+ pub fn lookup_and_expand_macro_unhygienic(cx: &amp;amp;mut MacroContext,
+ macro: &amp;amp;TokenSlice,
+ input: &amp;amp;TokenSlice)
+ -&amp;gt; Result&amp;lt;TokenStream, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;_unhygienic&lt;/code&gt; variants expand a macro as in the first functions, but do not apply the hygiene algorithm or change any hygiene information. Any hygiene information on tokens is preserved. I'm not sure if &lt;code&gt;_unhygienic&lt;/code&gt; are the right names - using these is not necessarily unhygienic, just that we are automatically applying the hygiene algorithm.&lt;/p&gt;
+
+ &lt;p&gt;Note that all these functions are doing an eager expansion of macros, or in Scheme terms they are &lt;code&gt;local-expand&lt;/code&gt; functions. &lt;/p&gt;
+
+ &lt;h3&gt;Looking up items&lt;/h3&gt;
+
+ &lt;p&gt;The function &lt;code&gt;lookup_item&lt;/code&gt; takes a &lt;code&gt;MacroContext&lt;/code&gt; and a path represented as a &lt;code&gt;TokenSlice&lt;/code&gt; and returns a &lt;code&gt;TokenStream&lt;/code&gt; for the item referred to by the path, or an error if name resolution failed. I'm not sure where this function should live.&lt;/p&gt;
+
+ &lt;h3&gt;Interned strings&lt;/h3&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod strings {
+ pub struct InternedString;
+
+ impl InternedString {
+ pub fn get(&amp;amp;self) -&amp;gt; String;
+ }
+
+ pub fn intern(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ pub fn find(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ pub fn find_or_intern(cx: &amp;amp;mut MacroContext, s: &amp;amp;str) -&amp;gt; Result&amp;lt;InternedString, ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;&lt;code&gt;intern&lt;/code&gt; interns a string and returns a fresh &lt;code&gt;InternedString&lt;/code&gt;. &lt;code&gt;find&lt;/code&gt; tries to find &lt;em&gt;an&lt;/em&gt; existing &lt;code&gt;InternedString&lt;/code&gt;.&lt;/p&gt;
+
+ &lt;h3&gt;Spans&lt;/h3&gt;
+
+ &lt;p&gt;A span gives information about where in the source code a token is defined. It also gives information about where the token came from (how it was generated, if it was generated code).&lt;/p&gt;
+
+ &lt;p&gt;There should be a &lt;code&gt;spans&lt;/code&gt; module in libmacro, which will include a &lt;code&gt;Span&lt;/code&gt; type which can be easily inter-converted with the &lt;code&gt;Span&lt;/code&gt; defined in libsyntax. Libsyntax spans currently include information about stability, this will not be present in libmacro spans.&lt;/p&gt;
+
+ &lt;p&gt;If the programmer does nothing special with spans, then they will be 'correct' by default. There are two important cases: tokens passed to the macro and tokens made fresh by the macro. The former will have the source span indicating where they were written and will include their history. The latter will have no source span and indicate they were created by the current macro. All tokens will have the history relating to expansion of the current macro added when the macro is expanded. At macro expansion, tokens with no source span will be given the macro use-site as their source.&lt;/p&gt;
+
+ &lt;p&gt;&lt;code&gt;Span&lt;/code&gt;s can be freely copied between tokens.&lt;/p&gt;
+
+ &lt;p&gt;It will probably useful to make it easy to manipulate spans. For example, rather than point at the macro's defining function, point at a helper function where the token is made. Or to set the origin to the current macro when the token was produced by another which should an implementation detail. I'm not sure what such an interface should look like (and is probably not necessary in an initial library).&lt;/p&gt;
+
+ &lt;h3&gt;Feature gates&lt;/h3&gt;
+
+ &lt;pre&gt;&lt;code&gt;pub mod features {
+ pub enum FeatureStatus {
+ // The feature gate is allowed.
+ Allowed,
+ // The feature gate has not been enabled.
+ Disallowed,
+ // Use of the feature is forbidden by the compiler.
+ Forbidden,
+ }
+
+ pub fn query_feature(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_unused(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+ pub fn query_feature_by_str_unused(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;FeatureStatus, ErrStruct&amp;gt;;
+
+ pub fn used_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn used_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+
+ pub fn allow_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn allow_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn disallow_feature_gate(cx: &amp;amp;MacroContext, feature: Token) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ pub fn disallow_feature_by_str(cx: &amp;amp;MacroContext, feature: &amp;amp;str) -&amp;gt; Result&amp;lt;(), ErrStruct&amp;gt;;
+ }
+ &lt;/code&gt;&lt;/pre&gt;
+
+ &lt;p&gt;The &lt;code&gt;query_*&lt;/code&gt; functions query if a feature gate has been set. They return an error if the feature gate does not exist. The &lt;code&gt;_unused&lt;/code&gt; variants do not mark the feature gate as used. The &lt;code&gt;used_&lt;/code&gt; functions mark a feature gate as used, or return an error if it does not exist.&lt;/p&gt;
+
+ &lt;p&gt;The &lt;code&gt;allow_&lt;/code&gt; and &lt;code&gt;disallow_&lt;/code&gt; functions set a feature gate as allowed or disallowed for the current crate. These functions will only affect feature gates which take affect after parsing and expansion are complete. They do not affect feature gates which are checked during parsing or expansion.&lt;/p&gt;
+
+ &lt;p&gt;Question: do we need the &lt;code&gt;used_&lt;/code&gt; functions? Could just call &lt;code&gt;query_&lt;/code&gt; and ignore the result.&lt;/p&gt;
+
+ &lt;h3&gt;Attributes&lt;/h3&gt;
+
+ &lt;p&gt;We need some mechanism for setting attributes as used. I don't actually know how the unused attribute checking in the compiler works, so I can't spec this area. But, I expect &lt;code&gt;MacroContext&lt;/code&gt; to make available some interface for reading attributes on a macro use and marking them as used.&lt;/p&gt;</description>
+ <pubDate>Mon, 18 Jan 2016 21:40:42 +0000</pubDate>
+ <dc:creator>Nick Cameron</dc:creator>
+ </item>
+ <item>
+ <title>Seif Lotfy: Skizze progress and REPL</title>
+ <guid isPermaLink="false">http://geekyogre.com/rss/63eb682d-66b4-447d-8fb6-f4ed448019df</guid>
+ <link>http://geekyogre.com/skizze-progress-and-repl/</link>
+ <description>&lt;p&gt;&lt;img align=&quot;center&quot; height=&quot;190&quot; src=&quot;http://i.imgur.com/9z47NdA.png&quot; width=&quot;600&quot; /&gt; &lt;br /&gt;
+ &lt;br /&gt; &lt;br /&gt;
+ Over the last 3 weeks, based on feedback we proceeded fledging out the concepts and the code behind &lt;a href=&quot;https://github.com/skizzehq/skizze&quot;&gt;Skizze&lt;/a&gt;. &lt;br /&gt;
+ &lt;a href=&quot;https://medium.com/@njpatel/&quot;&gt;Neil Patel&lt;/a&gt; suggested the following:&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;&lt;em&gt;So I've been thinking about the server API. I think we want to choose one thing and do it as well as possible, instead of having six ways to talk to the server. I think that helps to keep things sane and simple overall.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;Thinking about usage, I can only really imagine Skizze in an environment like &lt;a href=&quot;https://xamarin.com/insights&quot;&gt;ours&lt;/a&gt;, which is high-throughput. I think that is it's 'home' and we should be optimising for that all day long.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;Taking that into account, I believe we have two options:&lt;/em&gt;&lt;/p&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;&lt;p&gt;&lt;em&gt;We go the gRPC route, provide .proto files and let people use the existing gRPC tooling to build support for their favourite language. That means we can happily give Ruby/Node/C#/etc devs a real way to get started up with Skizze almost immediately, piggy-backing on the gRPC docs etc.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;p&gt;&lt;em&gt;We absorb the Redis Protocol. It does everything we need, is very lean, and we can (mostly) easily adapt it for what we need to do. The downside is that to get support from other libs, there will have to be actual libraries for every language. This could slow adoption, or it might be easy enough if people can reuse existing REDIS code. It's hard to tell how that would end up.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+
+ &lt;p&gt;&lt;em&gt;gRPC is interesting because it's built already for distributed systems, across bad networks, and obviously is bi-directional etc. Without us having to spend time on the protocol, gRPC let's us easily add features that require streaming. Like, imagine a client being able to listen for changes in count/size and be notified instantly. That's something that gRPC is built for right now.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;I think gRPC is a bit verbose, but I think it'll pay off for ease of third-party lib support and as things grow.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;em&gt;The CLI could easily be built to work with gRPC, including adding support for streaming stuff etc. Which could be pretty exciting.&lt;/em&gt;&lt;/p&gt;
+
+ &lt;hr /&gt;
+
+ &lt;p&gt;That being said, we gave Skizze &lt;a href=&quot;https://github.com/skizzehq/&quot;&gt;a new home&lt;/a&gt;, where based on feedback we developed .proto files and started rewriting big chunks of the code.&lt;/p&gt;
+
+ &lt;p&gt;We added a new wrapper called &quot;domain&quot; which represents a stream. It wraps around Count-Min-Log, Bloom Filter, Top-K and HyperLogLog++, so when feeding it values it feeds all the sketches. Later we intend to allow attaching and detaching sketches from &quot;domains&quot; (We need a better name).&lt;/p&gt;
+
+ &lt;p&gt;We also implemented a gRPC API which should allow easy wrapper creation in other languages.&lt;/p&gt;
+
+ &lt;p&gt;Special thanks go to &lt;a href=&quot;https://twitter.com/martinpintob&quot;&gt;Martin Pinto&lt;/a&gt; for helping out with unit tests and &lt;a href=&quot;http://dopeness.org&quot;&gt;Soren Macbeth&lt;/a&gt; for thorough feedback and ideas about the &quot;domain&quot; concept. &lt;br /&gt;
+ Take a look at our initial REPL work there:&lt;/p&gt;
+
+ &lt;p&gt;&lt;a href=&quot;http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif&quot;&gt;&lt;img alt=&quot;Link to this page&quot; border=&quot;0&quot; src=&quot;http://geekyogre.com/content/images/2016/01/skizze-1.png&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
+ &lt;a href=&quot;http://geekyogre.com/content/images/2016/01/MBCY64aaKL.gif&quot;&gt;click for GIF&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Mon, 18 Jan 2016 17:41:43 +0000</pubDate>
+ <dc:creator>Seif Lotfy</dc:creator>
+ </item>
+ <item>
+ <title>Doug Belshaw: What a post-Persona landscape means for Open Badges</title>
+ <guid isPermaLink="false">http://dougbelshaw.com/blog/?p=39986</guid>
+ <link>http://dougbelshaw.com/blog/2016/01/18/open-badges-persona/</link>
+ <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; I don’t work for Mozilla any more, so (like &lt;a href=&quot;https://www.youtube.com/watch?v=YQHsXMglC9A&quot;&gt;Adele&lt;/a&gt;) these are my thoughts ‘from the outside’…&lt;/em&gt;&lt;/p&gt;
+ &lt;hr /&gt;
+ &lt;h3&gt;Introduction&lt;/h3&gt;
+ &lt;p&gt;&lt;a href=&quot;http://openbadges.org&quot;&gt;Open Badges&lt;/a&gt; is no longer a &lt;a href=&quot;http://mozilla.org&quot;&gt;Mozilla&lt;/a&gt; project. In fact, it hasn’t been for a while — the &lt;a href=&quot;http://badgealliance.org&quot;&gt;Badge Alliance&lt;/a&gt; was set up a couple of years ago to promote the specification on a both a technical and community basis. As I stated in a recent post, this is a &lt;strong&gt;good&lt;/strong&gt; thing and means that &lt;a href=&quot;http://dougbelshaw.com/blog/2015/11/08/bright-future-badges/&quot;&gt;the future is bright for Open Badges&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;However, Mozilla &lt;em&gt;is&lt;/em&gt; still involved with the Open Badges project: Mark Surman, Executive Director of the Mozilla Foundation, sits on the board of the Badge Alliance. Mozilla also pays for contractors to work on the &lt;a href=&quot;http://backpack.openbadges.org&quot;&gt;Open Badges backpack&lt;/a&gt; and there were badges earned at the &lt;a href=&quot;http://mozillafestival.org&quot;&gt;Mozilla Festival&lt;/a&gt; a few months ago.&lt;/p&gt;
+ &lt;p&gt;Although it may seem strange for those used to corporates interested purely in profit, Mozilla creates what the open web needs at any given time. Like any organisation, sometimes it gets these wrong, either because the concept was flawed, or because the execution was poor. Other times, I’d argue, Mozilla doesn’t give ideas and concepts enough time to gain traction.&lt;/p&gt;
+ &lt;h3&gt;The end of Persona at Mozilla&lt;/h3&gt;
+ &lt;p&gt;Open Badges, at its very essence, is a technical specification. It allows credentials with metadata hard-coded into them to be issued, exchanged, and displayed. This is done in a secure, standardised manner.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;OBI diagram&quot; class=&quot;alignnone wp-image-39987 size-full&quot; src=&quot;http://i1.wp.com/dougbelshaw.com/blog/wp-content/uploads/2016/01/obi-diagram.png?w=100%25&quot; /&gt;&lt;/p&gt;
+ &lt;p&gt;For users to be able to access their ‘backpack’ (i.e. the place they store badges) they needed a secure login system.Back in 2011 at the start of the Open Badges project it made sense to make use of Mozilla’s nascent &lt;a href=&quot;https://www.mozilla.org/en-US/persona/&quot;&gt;Persona&lt;/a&gt; project. This aimed to provide a way for users to easily sign into sites around the web without using their Facebook/Google logins. These ‘social’ sign-in methods mean that users are tracked around the web — something that Mozilla was obviously against.&lt;/p&gt;
+ &lt;p&gt;By 2014, Persona wasn’t seen to be having the kind of ‘growth trajectory’ that Mozilla wanted. The project was transferred to &lt;a href=&quot;http://identity.mozilla.com/post/78873831485/transitioning-persona-to-community-ownership&quot;&gt;community ownership&lt;/a&gt; and most of the team left Mozilla in 2015. It was &lt;a href=&quot;https://groups.google.com/forum/#!msg/mozilla.dev.identity/mibOQrD6K0c/kt0NdMWbEQAJ&quot;&gt;announced&lt;/a&gt; that Persona would be shutting down as a Mozilla service in November 2016. While Persona will exist as an open source project, it won’t be hosted by Mozilla.&lt;/p&gt;
+ &lt;h3&gt;What this means for Open Badges&lt;/h3&gt;
+ &lt;p&gt;Although I’m not aware of an official announcement from the Badge Alliance, I think it’s worth making three points here.&lt;/p&gt;
+ &lt;h5&gt;1. You can still use Persona&lt;/h5&gt;
+ &lt;p&gt;If you’re a developer, you can still use Persona. It’s open source. It works.&lt;/p&gt;
+ &lt;h5&gt;2. Persona is not central to the Open Badges Infrastructure&lt;/h5&gt;
+ &lt;p&gt;The Open Badges backpack is &lt;em&gt;one&lt;/em&gt; place where users can store their badges. There are others, including the &lt;a href=&quot;https://openbadgepassport.com/&quot;&gt;Open Badge Passport&lt;/a&gt; and &lt;a href=&quot;https://www.openbadgeacademy.com/&quot;&gt;Open Badge Academy&lt;/a&gt;. MacArthur, who seed-funded the Open Badges ecosystem, have a new platform launching through &lt;a href=&quot;https://www.lrng.org/&quot;&gt;LRNG&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;It is up to the organisations behind these various solutions as to how they allow users to authenticate. They may choose to allow social logins. They may force users to create logins based on their email address. They may decide to use an open source version of Persona. It’s entirely up to them.&lt;/p&gt;
+ &lt;h5&gt;3. A post-Persona badges system has its advantages&lt;/h5&gt;
+ &lt;p&gt;The Persona authentication system runs off email addresses. This means that transitioning &lt;em&gt;from&lt;/em&gt; Persona to another system is relatively straightforward. It has, however, meant that for the past few years we’ve had a recurrent problem: what do you do with people being issued badges to multiple email addresses?&lt;/p&gt;
+ &lt;p&gt;Tying badges to emails seemed like the easiest and fastest way to get to a critical mass in terms of Open Badge adoption. Now that’s worked, we need to think in a more nuanced way about allowing users to tie multiple identities to a single badge.&lt;/p&gt;
+ &lt;h4&gt;Conclusion&lt;/h4&gt;
+ &lt;p&gt;Persona was always a slightly awkward fit for Open Badges. Although, for a time, it made sense to use Persona for authentication to the Open Badges backpack, we’re now in a post-Persona landscape. This brings with it certain advantages.&lt;/p&gt;
+ &lt;p&gt;As Nate Otto wrote in his post &lt;a href=&quot;https://medium.com/badge-alliance/open-badges-in-2016-a-look-ahead-3cfe5c3c9878#.l5mhiztwx&quot;&gt;Open Badges in 2016: A Look Ahead&lt;/a&gt;, the project is growing up. It’s time to move beyond what was expedient at the dawn of Open Badges and look to the future. I’m sad to see the decline of Persona, but I’m excited what the future holds!&lt;/p&gt;
+ &lt;p style=&quot;text-align: right;&quot;&gt;&lt;em&gt;Header image CC BY-NC-SA &lt;a href=&quot;https://www.flickr.com/photos/blmiers2/6904758951/&quot;&gt;Barbara&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
+ <pubDate>Mon, 18 Jan 2016 11:34:19 +0000</pubDate>
+ <dc:creator>Doug Belshaw</dc:creator>
+ </item>
+ <item>
+ <title>This Week In Rust: This Week in Rust 114</title>
+ <guid isPermaLink="false">tag:this-week-in-rust.org,2016-01-18:blog/2016/01/18/this-week-in-rust-114/</guid>
+ <link>http://this-week-in-rust.org/blog/2016/01/18/this-week-in-rust-114/</link>
+ <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
+ &lt;a href=&quot;http://rust-lang.org&quot;&gt;Rust&lt;/a&gt; is a systems language pursuing the trifecta:
+ safety, concurrency, and speed. This is a weekly summary of its progress and
+ community. Want something mentioned? Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; or &lt;a href=&quot;mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion&quot;&gt;send us an
+ email&lt;/a&gt;!
+ Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love
+ contributions&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/cmr/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt;.
+ If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/cmr/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;This week's edition was edited by: &lt;a href=&quot;https://github.com/nasa42&quot;&gt;nasa42&lt;/a&gt;, &lt;a href=&quot;https://github.com/brson&quot;&gt;brson&lt;/a&gt;, and &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;.&lt;/p&gt;
+ &lt;h3&gt;Updates from Rust Community&lt;/h3&gt;
+ &lt;h4&gt;News &amp;amp; Blog Posts&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://gregchapple.com/contributing-to-the-rust-compiler/&quot;&gt;Guide: Contributing to the Rust compiler&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.ncameron.org/blog/a-type-safe-and-zero-allocation-library-for-reading-and-navigating-elf-files/&quot;&gt;A type-safe and zero-allocation library for reading and navigating ELF files&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;[podcast] &lt;a href=&quot;http://www.newrustacean.com/show_notes/e009/&quot;&gt;New Rustacean podcast episode 09&lt;/a&gt;. Getting into the nitty-gritty with Rust's traits.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://jadpole.github.io/arcaders/arcaders-1-12/&quot;&gt;ArcadeRS 1.12: Brawl, at last&lt;/a&gt;! Part of the series &lt;a href=&quot;https://jadpole.github.io/arcaders/arcaders-1-0/&quot;&gt;ArcadeRS 1.0: The project&lt;/a&gt; - a series whose objective is to explore the Rust programming language and ecosystem through the development of a simple, old-school shooter.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://blog.thiago.me/raspberry-pi-bare-metal-programming-with-rust/&quot;&gt;Raspberry Pi bare metal programming with Rust&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://blog.servo.org/2016/01/11/twis-47/&quot;&gt;This week in Servo 47&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.redox-os.org/news/this-week-in-redox-10/&quot;&gt;This week in Redox OS 10&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Notable New Crates &amp;amp; Project Updates&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/ebkalderon/amethyst&quot;&gt;Amethyst&lt;/a&gt;. Data-oriented game engine written in Rust.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust website&lt;/a&gt; has received some &lt;a href=&quot;https://www.reddit.com/r/rust/comments/40zxey/major_website_updates/&quot;&gt;major updates&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://packages.debian.org/stretch/rustc&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://packages.debian.org/stretch/cargo&quot;&gt;Cargo&lt;/a&gt; are now available in Debian stretch.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://community.particle.io/t/rust-on-particle-call-for-contributors/19090&quot;&gt;Rust on Particle: Call for contributors&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://dwrensha.github.io/capnproto-rust/2016/01/11/async-rpc.html&quot;&gt;capnp-rpc-rust rewritten to use async I/O&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/Ogeon/palette&quot;&gt;Palette&lt;/a&gt;. A Rust library for linear color calculations and conversion.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Updates from Rust Core&lt;/h3&gt;
+ &lt;p&gt;164 pull requests were &lt;a href=&quot;https://github.com/issues?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2016-01-11..2016-01-18&quot;&gt;merged in the last week&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;See the &lt;a href=&quot;https://internals.rust-lang.org/t/triage-digest-tue-jan-05-2016/3052&quot;&gt;triage digest&lt;/a&gt; and &lt;a href=&quot;https://internals.rust-lang.org/t/subteam-reports-2016-01-08/3067&quot;&gt;subteam reports&lt;/a&gt; for more details.&lt;/p&gt;
+ &lt;h4&gt;Notable changes&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30943&quot;&gt;std: Stabilize APIs for the 1.7 release&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/27807&quot;&gt;Refactor and improve: Arena, TypedArena&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/29498&quot;&gt;Let &lt;code&gt;str::replace&lt;/code&gt; take a pattern&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30295&quot;&gt;rustc_resolve: Fix bug in duplicate checking for extern crates&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30426&quot;&gt;Rewrite BTreeMap to use parent pointers&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30446&quot;&gt;Support generic associated consts&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30509&quot;&gt;Add an &lt;code&gt;impl&lt;/code&gt; for &lt;code&gt;Box&amp;lt;Error&amp;gt;&lt;/code&gt; from String&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30533&quot;&gt;Introduce &quot;obligation forest&quot; data structure into fulfillment to track backtraces&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30538&quot;&gt;Remove negate_unsigned feature gate&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30567&quot;&gt;llvm: Add support for vectorcall (X86_VectorCall) convention&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30676&quot;&gt;Make coherence more tolerant of error types&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30740&quot;&gt;Add fast path for ASCII in UTF-8 validation&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30753&quot;&gt;Downgrade unit struct match via S(..) warnings to errors&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/30930&quot;&gt;Move const block checks before lowering step&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New Contributors&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Anton Blanchard&lt;/li&gt;
+ &lt;li&gt;Jonas Tepe&lt;/li&gt;
+ &lt;li&gt;Jörg Krause&lt;/li&gt;
+ &lt;li&gt;Joshua Olson&lt;/li&gt;
+ &lt;li&gt;kalita.alexey&lt;/li&gt;
+ &lt;li&gt;Pierre Krieger&lt;/li&gt;
+ &lt;li&gt;Sergey Veselkov&lt;/li&gt;
+ &lt;li&gt;Simon Martin&lt;/li&gt;
+ &lt;li&gt;Steffen&lt;/li&gt;
+ &lt;li&gt;tomaka&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Approved RFCs&lt;/h4&gt;
+ &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments)
+ process&lt;/a&gt;. These
+ are the RFCs that were approved for implementation this week:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1331&quot;&gt;RFC 1331: &lt;code&gt;src/grammar&lt;/code&gt; for the canonical grammar of the Rust language&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;Final Comment Period&lt;/h4&gt;
+ &lt;p&gt;Every week &lt;a href=&quot;https://rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the
+ 'final comment period' for RFCs and key PRs which are reaching a
+ decision. Express your opinions now. &lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;This week's FCPs&lt;/a&gt; are:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1462&quot;&gt;Add &lt;code&gt;[&lt;/code&gt; to the FOLLOW(ty) in macro future-proofing rules&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1457&quot;&gt;Rewrite &lt;code&gt;for&lt;/code&gt; loop desugaring to use language items&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1320&quot;&gt;Amend 1192 (RangeInclusive) to use an enum&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/243&quot;&gt;Trait-based exception handling&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1361&quot;&gt;Improve Cargo target-specific dependencies&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1129&quot;&gt;Add a &lt;code&gt;IndexAssign&lt;/code&gt; trait that allows overloading &quot;indexed assignment&quot; expressions like &lt;code&gt;a[b] = c&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1196&quot;&gt;Allow eliding more type parameters&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1296&quot;&gt;Add an &lt;code&gt;alias&lt;/code&gt; attribute to &lt;code&gt;#[link]&lt;/code&gt; and &lt;code&gt;-l&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h4&gt;New RFCs&lt;/h4&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1459&quot;&gt;Add a used attribute to prevent symbols from being discarded&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1461&quot;&gt;Move some net2 functionality into libstd&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1465&quot;&gt;Add &lt;code&gt;some!&lt;/code&gt; macro for unwrapping Option more safely&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/1467&quot;&gt;Stabilize the &lt;code&gt;volatile_load&lt;/code&gt; and &lt;code&gt;volatile_store&lt;/code&gt; intrinsics as &lt;code&gt;ptr::volatile_read&lt;/code&gt; and &lt;code&gt;ptr::volatile_write&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Upcoming Events&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Meetup-Hamburg/events/227838367/&quot;&gt;1/19. Rust Hack and Learn Hamburg @ Ponton&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/Rust-Bay-Area/events/227841778/&quot;&gt;1/21. SF Bay Area: Rust Concurrency and Parallelism&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://www.meetup.com/opentechschool-berlin/&quot;&gt;1/27. OpenTechSchool Berlin: Rust Hack and Learn&lt;/a&gt;.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
+ it mentioned here. Email &lt;a href=&quot;mailto:erick.tryzelaar@gmail.com&quot;&gt;Erick Tryzelaar&lt;/a&gt; or &lt;a href=&quot;mailto:banderson@mozilla.com&quot;&gt;Brian
+ Anderson&lt;/a&gt; for access.&lt;/p&gt;
+ &lt;h3&gt;fn work(on: RustProject) -&amp;gt; Money&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://maidsafe.net/rust_engineer.html&quot;&gt;Rust Engineer&lt;/a&gt; at MaidSafe.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/ozy21fwU&quot;&gt;Research Engineer - Servo&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://careers.mozilla.org/en-US/position/o0H41fww&quot;&gt;Senior Research Engineer - Rust&lt;/a&gt; at Mozilla.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://plv.mpi-sws.org/rustbelt/&quot;&gt;PhD and postdoc positions&lt;/a&gt; at MPI-SWS.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;&lt;em&gt;Tweet us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; to get your job offers listed here!&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;Crate of the Week&lt;/h3&gt;
+ &lt;p&gt;This week's Crate of the Week is &lt;a href=&quot;https://github.com/alexcrichton/toml-rs&quot;&gt;toml&lt;/a&gt;, a crate for all our configuration needs, simple yet effective.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/stebalien&quot;&gt;Steven Allen&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Submit your suggestions for next week&lt;/a&gt;!&lt;/p&gt;
+ &lt;h3&gt;Quote of the Week&lt;/h3&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Borrow/lifetime errors are usually Rust compiler bugs.
+ Typically, I will spend 20 minutes detailing the precise conditions of
+ the bug, using language that understates my immense knowledge, while
+ demonstrating sympathetic understanding of the pressures placed on a
+ Rust compiler developer, who is also probably studying for several exams
+ at the moment. The developer reading my bug report may not understand
+ this stuff as well as I do, so I will carefully trace the lifetimes of
+ each variable, where memory is allocated on the stack vs the heap, which
+ struct or function owns a value at any point in time, where borrows
+ begin and where they... oh yeah, actually that variable really doesn't
+ live long enough.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;p&gt;— &lt;a href=&quot;https://www.reddit.com/r/rust/comments/4084yx/my_trick_when_i_get_stuck_as_a_beginner/cysqz3s&quot;&gt;peterjoel on /r/rust&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/users/WaDelma&quot;&gt;Wa Delma&lt;/a&gt; for the suggestion.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Submit your quotes for next week&lt;/a&gt;!&lt;/p&gt;</description>
+ <pubDate>Mon, 18 Jan 2016 05:00:00 +0000</pubDate>
+ <dc:creator>Corey Richardson</dc:creator>
+ </item>
+ <item>
+ <title>Nikki Bee: Okay, But What Does Your Work Actually Mean, Nikki? Part 2: The Fetch Standard and Servo</title>
+ <guid isPermaLink="true">http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html</guid>
+ <link>http://nikkisquared.github.io/2016/01/17/what-does-your-work-mean-part-2.html</link>
+ <description>&lt;p&gt;In my previous post, I started discussing in more detail what my internship entails, by talking about my first contribution to Servo. As a refresher, my first contribution was as part of my application to Outreachy, which I later revisited during my internship after a change I introduced to the HTML Standard it relied on. I’m going to expand on that last point today- specifically, how easy it is to introduce changes in &lt;a href=&quot;https://wiki.whatwg.org/wiki/FAQ#What_is_the_WHATWG.3F&quot;&gt;WHATWG&lt;/a&gt;’s various standards. I’m also going to talk about how this accessibility to changing web standards affects how I can understand it, how I can help improve it, and my work on Servo.&lt;/p&gt;
+
+ &lt;h3&gt;Two Ways To Change&lt;/h3&gt;
+
+ &lt;p&gt;There are many ways to &lt;a href=&quot;https://wiki.whatwg.org/wiki/What_you_can_do&quot;&gt;get involved with WHATWG&lt;/a&gt;, but there are two that I’ve become the most familiar with: firstly, by opening a discussion about a perceived issue and asking how it should be resolved; secondly, by taking on an issue approved as needing change and making the desired change. I’ve almost entirely only done the former, and the latter only for some minor typos. Any changes that relate directly to my work, however minor, are significant for me though! Like I discussed in my previous post, I brought attention to &lt;a href=&quot;https://github.com/whatwg/html/issues/296&quot;&gt;an inconsistency&lt;/a&gt; that was resolved, giving me a new task of updating my first contribution to Servo to reflect the change in the HTML Standard. I’ve done that several times since, for the Fetch Standard.&lt;/p&gt;
+
+ &lt;h3&gt;Understanding Fetch&lt;/h3&gt;
+
+ &lt;p&gt;My first two weeks of my internship were spent on reading through the majority of the &lt;a href=&quot;https://fetch.spec.whatwg.org/&quot;&gt;Fetch Standard&lt;/a&gt;, primarily the various Fetch functions. I took many notes describing the steps to myself, annotated with questions I had and the answers I got from either other people on the Servo team who had worked with Fetch (including my internship mentor, of course!) or people from WHATWG who were involved in the Fetch Standard. Getting so familiar with Fetch meant a few things: I would notice minor errors (such as an out of date link) that I could submit a &lt;a href=&quot;https://github.com/whatwg/fetch/pull/173&quot;&gt;simple fix for&lt;/a&gt;, or a bigger issue that I couldn’t resolve myself.&lt;/p&gt;
+
+ &lt;h3&gt;Discussions &amp;amp; Resolutions&lt;/h3&gt;
+
+ &lt;p&gt;I’m going to go into more detail about some of those bigger issues. From my perspective, when I start a discussion about a piece of documentation (such as the Fetch Standard, or reading about a programming library Servo uses), I go into it thinking “Either this documentation is incorrect, or my understanding is incorrect”. Whichever the answer is, it doesn’t mean that the documentation is bad, or that I’m bad at reading comprehension. I understand best by building up a model of something in my head, putting that to practice, and asking a lot of questions along the way. I learn by getting things wrong and figuring out why I was wrong, and sometimes in the process I uncover a point that could be made more clear, or an inconsistency! I have good examples of both of the different outcomes I listed, which I’ll cover over the next two sections.&lt;/p&gt;
+
+ &lt;h5&gt;Looking For The Big Picture&lt;/h5&gt;
+
+ &lt;p&gt;Early on in my initial review of the Fetch Standard’s several protocols, I found a major step that seemed to have no use. I understood that since I was learning Fetch on a step-by-step basis, I did not have a view of the bigger picture, so I asked around what I was missing that would help me understand this. One of the people I work with on implementing Fetch agreed with me that the step seemed to have no purpose, and so we decided to &lt;a href=&quot;https://github.com/whatwg/fetch/issues/174&quot;&gt;open an issue&lt;/a&gt; asking about removing it from the standard. It turned out that I had actually missed the meaning of it, as we learned. However, instead of leaving it there, I shifted the issue into asking for some explanatory notes on why this step is needed, which was fulfilled. This meant that I would have a reference to go back to should I forget the significance of the step, and that people reading the Fetch Standard in the future would be much less likely to come to the same incorrect conclusion I had.&lt;/p&gt;
+
+ &lt;h5&gt;A Confusing Order&lt;/h5&gt;
+
+ &lt;p&gt;Shortly after I had first discovered that apparent issue, I found myself struggling to comprehend a sequence of actions in another Fetch protocol. The specification seemed to say that part of an early step was meant to only be done after the final step. I unfortunately don’t remember details of the discussion I had about this- if there was a reason for why it was organized like this, I forget what it was. Regardless, it was agreed that &lt;a href=&quot;https://github.com/whatwg/fetch/issues/176&quot;&gt;moving those sub-steps&lt;/a&gt; to be actually listed after the step they’re supposed to run after would be a good change. This meant that I would need to re-organize my notes to reflect the re-arranged sequence of actions, as well as have an easier time being able to follow this part of the Fetch Standard.&lt;/p&gt;
+
+ &lt;h3&gt;A Living Standard&lt;/h3&gt;
+
+ &lt;p&gt;Like I said at the start of this post, I’m going to talk about how changes in the Fetch Standard affects my work on Servo itself. What I’ve covered so far has mostly been how changes affect my understanding of the standard itself. A key aspect in understanding the Fetch protocols is reviewing them for updates that impact me. WHATWG labels every standard they author as a “&lt;a href=&quot;https://wiki.whatwg.org/wiki/FAQ#What_does_.22Living_Standard.22_mean.3F&quot;&gt;Living Standard&lt;/a&gt;” for good reason. It was one thing for me to learn how easy it is to introduce changes, while knowing exactly what’s going on, but it’s another for me to understand that anybody else can, and often does, make changes to the Fetch Standard!&lt;/p&gt;
+
+ &lt;h5&gt;Changes Over Time&lt;/h5&gt;
+
+ &lt;p&gt;When an update is made to the Fetch Standard, it’s not so difficult to deal with as one might imagine. The Fetch Standard always notes the last day it was updated at the top of the document, I follow a Twitter account that &lt;a href=&quot;https://twitter.com/fetchstandard&quot;&gt;posts about updates&lt;/a&gt;, and all the history can be &lt;a href=&quot;https://github.com/whatwg/fetch/commits&quot;&gt;seen on GitHub&lt;/a&gt; which will show me exactly what has been changed as well as some discussion on what the change does. All of these together alert me to the fact that the Fetch Standard has been modified, and I can quickly see what was revised. If it’s relevant to what I’m going to be implementing, I update my notes to match it. Occasionally, I need to change existing code to reflect the new Standard, which is also easily done by comparing my new notes to the Fetch implementation in Servo!&lt;/p&gt;
+
+ &lt;h5&gt;Snapshots&lt;/h5&gt;
+
+ &lt;p&gt;From all of this, it might sound like the Fetch Standard is unfinished, or unreliable/inconsistent. I don’t mean to misrepresent it- the many small improvements help make the Fetch Standard, like all of WHATWG’s standards, better and more reliable. You can think of the status of the Fetch Standard at any point in time as a single, working snapshot. If somebody implemented all of Fetch as it is now, they’d have something that works by itself correctly. A different snapshot of Fetch is just that- different. It will have an improvement or two, but that doesn’t obsolete anybody who implemented it previously. It just means if they revisit the implementation, they’ll have things to update.&lt;/p&gt;
+
+ &lt;p&gt;Third post over.&lt;/p&gt;</description>
+ <pubDate>Sun, 17 Jan 2016 20:20:27 +0000</pubDate>
+ </item>
+ <item>
+ <title>Kevin Ngo: How to Write an A-Frame VR Component</title>
+ <guid isPermaLink="true">http://ngokevin.com/blog/aframe-component/</guid>
+ <link>http://ngokevin.com/blog/aframe-component/</link>
+ <description>&lt;img align=&quot;left&quot; hspace=&quot;5&quot; src=&quot;http://thevrjump.com/assets/img/articles/aframe-system/aframe-example.jpg&quot; width=&quot;320&quot; /&gt;Abstract representation of components by @rubenmueller of thevrjump.com.
+
+ &lt;p&gt;&lt;a href=&quot;http://ngokevin.com/blog/aframe&quot;&gt;A-Frame&lt;/a&gt; is a WebVR framework that introduces the
+ &lt;a href=&quot;http://ngokevin.com/blog/aframe-vs-3dml&quot;&gt;entity-component system&lt;/a&gt; (&lt;a href=&quot;http://ngokevin.com/rss/docs&quot;&gt;docs&lt;/a&gt;) to the DOM. The
+ entity-component system treats every &lt;strong&gt;entity&lt;/strong&gt; in the scene as a placeholder
+ object which we apply and mix &lt;strong&gt;components&lt;/strong&gt; to in order to add appearance,
+ behavior, and functionality. A-Frame comes with some standard components out of
+ the box like camera, geometry, material, light, or sound. However, people can
+ write, publish, and register their own components to do &lt;strong&gt;whatever&lt;/strong&gt; they want
+ like have entities &lt;a href=&quot;https://github.com/dmarcos/a-invaders/tree/master/js/components&quot;&gt;collide/explode/spawn&lt;/a&gt;, be controlled by
+ &lt;a href=&quot;https://github.com/ngokevin/aframe-physics-components&quot;&gt;physics&lt;/a&gt;, or &lt;a href=&quot;https://jsbin.com/dasefeh/edit?html,output&quot;&gt;follow a path&lt;/a&gt;. Today, we'll be going through
+ how we can write our own A-Frame components.&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Note that this tutorial will be covering the upcoming release of &lt;a href=&quot;https://github.com/aframevr/aframe/blob/dev/CHANGELOG.md#dev&quot;&gt;A-Frame
+ 0.2.0&lt;/a&gt; which vastly improves the component API.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;h3&gt;Table of Contents&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#what-a-component-looks-like&quot;&gt;What a Component Looks Like&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#from-the-dom&quot;&gt;From the DOM&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#under-the-hood&quot;&gt;Under the Hood&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#defining-the-schema&quot;&gt;Defining the Schema&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#property-types&quot;&gt;Property Types&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#single-property-schemas&quot;&gt;Single-Property Schemas&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#multiple-property-schemas&quot;&gt;Multiple-Property Schemas&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#defining-the-lifecycle-methods&quot;&gt;Defining the Lifecycle Methods&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-init-set-up&quot;&gt;Component.init() - Set Up&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-update-olddata-do-the-magic&quot;&gt;Component.update(oldData) - Do the Magic&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-remove-tear-down&quot;&gt;Component.remove() - Tear Down&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-tick-time-background-behavior&quot;&gt;Component.tick() - Background Behavior&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#component-pause-and-component-play-stop-and-go&quot;&gt;Component.pause() and Component.play() - Stop and Go&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#boilerplate&quot;&gt;Boilerplate&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#examples&quot;&gt;Examples&lt;/a&gt;&lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#text-component&quot;&gt;Text Component&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#physics-components&quot;&gt;Physics Components&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://ngokevin.com/rss/index.xml#layout-component&quot;&gt;Layout Component&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;What a Component Looks Like&lt;/h3&gt;
+ &lt;p&gt;A component contains a bucket of data in the form of component properties. This
+ data is used to modify the entity. For example, we might have an &lt;em&gt;engine&lt;/em&gt;
+ component. Possible properties might be &lt;em&gt;horsepower&lt;/em&gt; or &lt;em&gt;cylinders&lt;/em&gt;.&lt;/p&gt;
+ &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://thevrjump.com/assets/img/articles/aframe-system/aframe-system.jpg&quot; /&gt;
+ &lt;/p&gt;&lt;div class=&quot;page-caption&quot;&gt;&lt;span&gt;
+ Abstract representation of a component by @rubenmueller of thevrjump.com.
+ &lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
+ &lt;h4&gt;From the DOM&lt;/h4&gt;
+ &lt;p&gt;Let's first see what a component looks like from the DOM.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light component&lt;/a&gt; has properties such as type, color,
+ and intensity. In A-Frame, we register and configure a component to an entity
+ using an HTML attribute and a style-like syntax:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;This would give us a light in the scene. To demonstrate composability, we could
+ give the light a spherical representation by mixing in the &lt;a href=&quot;https://aframe.io/docs/components/geometry.html&quot;&gt;geometry
+ component&lt;/a&gt;.&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;geometry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;primitive: sphere; radius: 5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Or we can configure the position component to move the light sphere a bit to the right.&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;geometry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;primitive: sphere; radius: 5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;type: point; color: crimson; intensity: 2.5&quot;&lt;/span&gt;
+ &lt;span class=&quot;na&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;5 0 0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a-entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Given the style-like syntax and that it modifies the appearance and behavior of
+ DOM nodes, component properties can be thought of as a rough analog to CSS. In
+ the near future, I can imagine component property stylesheets.&lt;/p&gt;
+ &lt;h4&gt;Under the Hood&lt;/h4&gt;
+ &lt;p&gt;Now let's see what a component looks like &lt;strong&gt;under the hood&lt;/strong&gt;. A-Frame's most
+ basic component is the &lt;a href=&quot;https://aframe.io/docs/components/position.html&quot;&gt;position component&lt;/a&gt;:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'position'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;The position component uses only a tiny subset of the component API, but what
+ this does is register the component with the name &quot;position&quot;, define a &lt;code&gt;schema&lt;/code&gt;
+ where the component's value with be parsed to an &lt;code&gt;{x, y, z}&lt;/code&gt; object, and when
+ the component initializes or the component's data updates, set the position of
+ the entity with the &lt;code&gt;update&lt;/code&gt; callback. &lt;code&gt;this.el&lt;/code&gt; is a reference from the
+ component to the DOM element, or entity, and &lt;code&gt;object3D&lt;/code&gt; is the entity's
+ &lt;a href=&quot;http://threejs.org/&quot;&gt;three.js&lt;/a&gt;. Note that A-Frame is built on top of three.js so many
+ components will be using the three.js API.&lt;/p&gt;
+ &lt;p&gt;So we see that components consist of a name and a definition, and then they can
+ be registered to A-Frame. We saw the the position component definition defined
+ a &lt;code&gt;schema&lt;/code&gt; and an &lt;code&gt;update&lt;/code&gt; handler. Components simply consist of the &lt;code&gt;schema&lt;/code&gt;,
+ which defines the shape of the data, and several handlers for the component to
+ modify the entity in reaction to different types of events.&lt;/p&gt;
+ &lt;p&gt;Here is the current list of properties and methods of a component definition:&lt;/p&gt;
+ &lt;table class=&quot;pure-table-striped&quot;&gt;
+ &lt;tbody&gt;&lt;tr&gt;
+ &lt;th&gt;Property&lt;/th&gt;
+ &lt;th&gt;Description&lt;/th&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;data&lt;/td&gt;
+ &lt;td&gt;Data of the component derived from the schema default values, mixins, and the entity's attributes.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;el&lt;/td&gt;
+ &lt;td&gt;Reference to the &lt;a href=&quot;https://aframe.io/docs/core/entity.html&quot;&gt;entity&lt;/a&gt; element.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;schema&lt;/td&gt;
+ &lt;td&gt;Names, types, and default values of the component property value(s)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;&lt;/table&gt;
+
+ &lt;table class=&quot;pure-table-striped&quot;&gt;
+ &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Method&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;init&lt;/td&gt;
+ &lt;td&gt;Called once when the component is initialized.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;update&lt;/td&gt;
+ &lt;td&gt;Called both when the component is initialized and whenever the component's data changes (e.g, via &lt;i&gt;setAttribute&lt;/i&gt;).&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;remove&lt;/td&gt;
+ &lt;td&gt;Called when the component detaches from the element (e.g., via &lt;i&gt;removeAttribute&lt;/i&gt;).&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;tick&lt;/td&gt;
+ &lt;td&gt;Called on each render loop or tick of the scene.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;play&lt;/td&gt;
+ &lt;td&gt;Called whenever the scene or entity plays to add any background or dynamic behavior.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;pause&lt;/td&gt;
+ &lt;td&gt;Called whenever the scene or entity pauses to remove any background or dynamic behavior.&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;&lt;/table&gt;
+
+ &lt;h3&gt;Defining the Schema&lt;/h3&gt;
+ &lt;p&gt;The component's schema defines what type of data it takes. A component can
+ either be single-property or consist of multiple properties. And properties
+ have &lt;em&gt;property types&lt;/em&gt;. Note that single-property schemas and property types are
+ being released in A-Frame &lt;code&gt;v0.2.0&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;A property might look like:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'int'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;And a schema consisting of multiple properties might look like:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'#FFF'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'selector'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;uv&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'1 1'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;' '&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;parseFloat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Since components in the entity-component system are just buckets of data that
+ are used to affect the appearance or behavior of the entity, the schema plays a
+ crucial role in the definition of the component.&lt;/p&gt;
+ &lt;h4&gt;Property Types&lt;/h4&gt;
+ &lt;p&gt;A-Frame comes with several built-in property types such as &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;,
+ &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;selector&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, or &lt;code&gt;vec3&lt;/code&gt;. Every single property is assigned a
+ type, whether explicitly through the &lt;code&gt;type&lt;/code&gt; key or implictly via inferring the
+ value. And each type is used to assign &lt;code&gt;parse&lt;/code&gt; and &lt;code&gt;stringify&lt;/code&gt; functions. The
+ parser deserializes the incoming string value from the DOM to be put into the
+ component's data object. The stringifier is used when using &lt;code&gt;setAttribute&lt;/code&gt; to
+ serialize back to the DOM.&lt;/p&gt;
+ &lt;p&gt;We can actually define and register our own property types:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerPropertyType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'radians'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// Default stringify is .toString().&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Single-Property Schemas&lt;/h4&gt;
+ &lt;p&gt;If a component has only one property, then it must either have a &lt;code&gt;type&lt;/code&gt; or a
+ &lt;code&gt;default&lt;/code&gt; value. If the type is defined, then the type is used to parse and
+ coerce the string retrieved from the DOM (e.g., &lt;code&gt;getAttribute&lt;/code&gt;). Or if the
+ default value is defined, the default value is used to infer the type.&lt;/p&gt;
+ &lt;p&gt;Take for instance the &lt;a href=&quot;https://aframe.io/docs/components/visible.html&quot;&gt;visible component&lt;/a&gt;. The schema property
+ definition implicitly defines it as a boolean:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'visible'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// Type will be inferred to be boolean.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Or the &lt;a href=&quot;https://aframe.io/docs/components/rotation.html&quot;&gt;rotation component&lt;/a&gt; which explicitly defines the value as a &lt;code&gt;vec3&lt;/code&gt;:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'rotation'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// Default value will be 0, 0, 0 as defined by the vec3 property type.&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Using these defined property types, schemas are processed by
+ &lt;code&gt;registerComponent&lt;/code&gt; to inject default values, parsers, and stringifiers for
+ each property. So if a default value is not defined, the default value will be
+ whatever the property type defines as the &quot;default default value&quot;.&lt;/p&gt;
+ &lt;h4&gt;Multiple-Property Schemas&lt;/h4&gt;
+ &lt;p&gt;If a component has multiple properties (or one named property), then it consists of
+ one or more property definitions, in the form described above, in an object keyed by
+ property name. For instance, a physics body component might define a schema:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;AFRAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;registerComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'physics-body'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;boundingBox&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;mass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;velocity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'vec3'&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;Having multiple properties is what makes the component take the syntax in the
+ form of &lt;code&gt;physics=&quot;mass: 2; velocity: 1 1 1&quot;&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;With the schema defined, all data coming into the component will be passed
+ through the schema for parsing. Then in the lifecycle methods, the component
+ has access to &lt;code&gt;this.data&lt;/code&gt; which in a single-property schema is a value and in a
+ multiple-propery schema is an object.&lt;/p&gt;
+ &lt;h3&gt;Defining the Lifecycle Methods&lt;/h3&gt;
+ &lt;h4&gt;Component.init() - Set Up&lt;/h4&gt;
+ &lt;p&gt;&lt;code&gt;init&lt;/code&gt; is called once in the component's lifecycle when it is mounted to the
+ entity. &lt;code&gt;init&lt;/code&gt; is generally used to set up variables or members that may used
+ throughout the component or to set up state. Though not every component will
+ need to define an &lt;code&gt;init&lt;/code&gt; handler. Sort of like the component-equivalent method
+ to &lt;code&gt;createdCallback&lt;/code&gt; or &lt;code&gt;React.ComponentDidMount&lt;/code&gt;.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;code&gt;look-at&lt;/code&gt; component's &lt;code&gt;init&lt;/code&gt; handler sets up some variables:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;vector&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;THREE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.update(oldData) - Do the Magic&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;update&lt;/code&gt; handler is called both at the beginning of the component's
+ lifecycle with the initial &lt;code&gt;this.data&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; every time the component's data
+ changes (generally during the entity's &lt;code&gt;attributeChangedCallback&lt;/code&gt; like with a
+ &lt;code&gt;setAttribute&lt;/code&gt;). The update handler gets access to the previous state of the
+ component data passed in through &lt;code&gt;oldData&lt;/code&gt;. The previous state of the component
+ can be used to tell exactly which properties changed to do more granular
+ updates.&lt;/p&gt;
+ &lt;p&gt;The update handler uses &lt;code&gt;this.data&lt;/code&gt; to modify the entity, usually interacting
+ with three.js APIs. One of the simplest update handlers is the
+ &lt;a href=&quot;https://aframe.io/docs/components/visible.html&quot;&gt;visible&lt;/a&gt; component's:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;visible&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;A slightly more complex update handler might be the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light&lt;/a&gt; component's,
+ which we'll show via abbreviated code:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oldData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;oldData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{});&lt;/span&gt;
+
+ &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'type'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// If there is an existing light and the type hasn't changed, update light.&lt;/span&gt;
+ &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;diffData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// No light exists yet or the type of light has changed, create a new light.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getLight&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
+
+ &lt;span class=&quot;c1&quot;&gt;// Register the object3D of type `light` to the entity.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setObject3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'light'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;p&gt;The entity's &lt;code&gt;object3D&lt;/code&gt; is a plain THREE.Object3D. Other three.js object types
+ such as meshes, lights, and cameras can be set with &lt;code&gt;setObject3D&lt;/code&gt; where they
+ will be appeneded to the entity's &lt;code&gt;object3D&lt;/code&gt;.&lt;/p&gt;
+ &lt;h4&gt;Component.remove() - Tear Down&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;remove&lt;/code&gt; handler is called when the component detaches from the entity such
+ as with &lt;code&gt;removeAttribute&lt;/code&gt;. This is generally used to remove all modifications,
+ listeners, and behaviors to the entity that the component added.&lt;/p&gt;
+ &lt;p&gt;For example, when the &lt;a href=&quot;https://aframe.io/docs/components/light.html&quot;&gt;light component&lt;/a&gt; detaches, it removes the light
+ it previously attached from the entity and thus the scene:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeObject3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'light'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.tick(time) - Background Behavior&lt;/h4&gt;
+ &lt;p&gt;The &lt;code&gt;tick&lt;/code&gt; handler is called on every single tick or render loop of the scene.
+ So expect it to run on the order of 60-120 times for second. The global uptime of
+ the scene in seconds is passed into the tick handler.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;a href=&quot;https://aframe.io/docs/components/look-at.html&quot;&gt;look-at&lt;/a&gt; component, which instructs an entity to
+ look at another target entity, uses the tick handler to update the rotation in
+ case the target entity changes its position:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;tick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;c1&quot;&gt;// target3D and vector are set from the update handler.&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;lookAt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setFromMatrixPosition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target3D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;matrixWorld&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h4&gt;Component.pause() and Component.play() - Stop and Go&lt;/h4&gt;
+ &lt;p&gt;To support pause and play, just as with a video game or to toggle entities for
+ performance, components can implement &lt;code&gt;play&lt;/code&gt; and &lt;code&gt;pause&lt;/code&gt; handlers. These are
+ invoked when the component's entity runs its &lt;code&gt;play&lt;/code&gt; or &lt;code&gt;pause&lt;/code&gt; method. When an
+ entity plays or pauses, all of its child entities are also played or paused.&lt;/p&gt;
+ &lt;p&gt;Components should implement play or pause handlers if they register any
+ dynamic, asynchronous, or background behavior such as animations, event
+ listeners, or tick handlers.&lt;/p&gt;
+ &lt;p&gt;For example, the &lt;code&gt;look-controls&lt;/code&gt; component simply removes its event listeners
+ such that the camera does not move when the scene is paused, and it adds its
+ event listeners when the scene starts playing or is resumed:&lt;/p&gt;
+ &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nx&quot;&gt;pause&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeEventListeners&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+
+ &lt;span class=&quot;nx&quot;&gt;play&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
+ &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListeners&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+
+
+ &lt;h3&gt;Boilerplate&lt;/h3&gt;
+ &lt;p&gt;I suggest that people start off with my &lt;a href=&quot;https://github.com/ngokevin/aframe-component-boilerplate&quot;&gt;component boilerplate&lt;/a&gt;,
+ even hardcore tool junkies. This will get you straight into building a
+ component and comes with everything you will need to publish your component
+ into the wild. The boilerplate handles creating a stubbed component, build
+ steps for both NPM and browser distribution files, and publishing to Github
+ Pages.&lt;/p&gt;
+ &lt;p&gt;Generally with boilerplates, it is better to start from scratch and build your
+ own boilerplate, but the A-Frame component boilerplate contains a lot of tribal
+ inside knowledge about A-Frame and is updated frequently to reflect new things
+ landing on A-Frame. The only possibly opinionated pieces about the boilerplate
+ is the development tools it internally uses that are hidden away by NPM
+ scripts.&lt;/p&gt;
+ &lt;h3&gt;Examples&lt;/h3&gt;
+ &lt;p&gt;Under construction. Stay tuned!&lt;/p&gt;
+ &lt;h4&gt;Text Component&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-text-component&quot;&gt;Text component&lt;/a&gt;&lt;/p&gt;
+ &lt;h4&gt;Physics Components&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-physics-components&quot;&gt;Physics components&lt;/a&gt;&lt;/p&gt;
+ &lt;h4&gt;Layout Component&lt;/h4&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/ngokevin/aframe-layout-component&quot;&gt;Layout component&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Sun, 17 Jan 2016 00:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Gervase Markham: Convenient… and Creepy</title>
+ <guid isPermaLink="false">http://blog.gerv.net/?p=3527</guid>
+ <link>http://feedproxy.google.com/~r/HackingForChrist/~3/DN054t04_dE/</link>
+ <description>&lt;p&gt;The last Mozilla All-Hands was at one of the hotels in the Walt Disney World Resort in Florida. Every attendee was issued with one of these (although their use was optional):&lt;br /&gt;
+ &lt;a href=&quot;http://blog.gerv.net/files/2016/01/Disneys_MagicBand.jpg&quot;&gt;&lt;img class=&quot;alignnone size-large wp-image-3530&quot; src=&quot;http://blog.gerv.net/files/2016/01/Disneys_MagicBand-1024x832.jpg&quot; width=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;p&gt;It’s called a “Magic Band”. You register it online and connect it to your Disney account, and then it can be used for park entry, entry to pre-booked rides so you don’t have to queue (called “FastPass+”), payment, picking up photos, as your room key, and all sorts of other convenient features. Note that it has no UI whatsoever – no lights, no buttons. Not even a battery compartment. (It does contain a battery, but it’s not replaceable.) These are specific design decisions – the aim is for ultra-simple convenience.&lt;/p&gt;
+ &lt;p&gt;One of the talks we had at the All Hands was from one of the Magic Band team. The audience reactions to some of the things he said was really interesting. He gave the example of Cinderella wishing you a Happy Birthday as you walk round the park. “Cinderella just knows”, he said. Of course, in fact, her costume’s tech prompts her when it silently reads your Magic Band from a distance. This got some initial impressed applause, but it was noticeable that after a few moments, it wavered – people were thinking “Cool… er, but creepy?”&lt;/p&gt;
+ &lt;p&gt;The Magic Band also has range sufficient that Disney can track you around the park. This enables some features which are good for both customers and Disney – for example, they can use it for load balancing. If one area of the park seems to be getting overcrowded, have some characters pop up in a neighbouring area to try and draw people away. But it means that they always know where you are and where you’ve been.&lt;/p&gt;
+ &lt;p&gt;My take-away from learning about the Magic Band is that it’s really hard to have a technical solution to this kind of requirement which allows all the Convenient features but not the Creepy features. Disney does offer an RFID-card-based solution for the privacy-conscious which does some of these things, but not all of them. And it’s easier to lose. It seems to me that the only way to distinguish the two types of feature, and get one and not the other, is policy – either the policy of the organization, or external restrictions on them (e.g. from a watchdog body’s code of conduct they sign up to, or from law). And it’s often not in the organization’s interest to limit themselves in this way.&lt;/p&gt;
+ &lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/HackingForChrist/~4/DN054t04_dE&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 12:18:38 +0000</pubDate>
+ <dc:creator>gerv</dc:creator>
+ </item>
+ <item>
+ <title>Christian Heilmann: Don’t tell me what my browser can’t do!</title>
+ <guid isPermaLink="false">https://www.christianheilmann.com/?p=4957</guid>
+ <link>https://www.christianheilmann.com/2016/01/16/dont-tell-me-what-my-browser-cant-do/</link>
+ <description>&lt;p&gt;&lt;em class=&quot;markup--em markup--p-em&quot;&gt;Chances are, your guess is wrong!&lt;/em&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;you are obviously in the wrong place&quot; src=&quot;https://d262ilb51hltx0.cloudfront.net/max/800/1*l9jPbOyAl00kjPhyNYA-IQ.jpeg&quot; width=&quot;100%&quot; /&gt;Arrogance towards possible customers never pays out – as shown in “Pretty Woman”&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;There is nothing more frustrating than being capable of something and not getting a chance to do it. The same goes for being blocked out from something although you are capable of consuming it. Or you’re even willing to put some extra effort or even money in and you still don’t get to consume it.&lt;/p&gt;
+
+ &lt;p&gt;For example, I’d happily pay $50 a month to get access to Netflix’s world-wide library from any country I’m in. But the companies Netflix get their content from won’t go for that. Movies and TV show are budgeted by predicted revenue in different geographical markets with month-long breaks in between the releases. A world-wide network capable of delivering content in real time? Preposterous — let’s shut that down.&lt;/p&gt;
+
+ &lt;p&gt;On a less “let’s break a 100 year old monopoly” scale of annoyance, &lt;a href=&quot;https://twitter.com/codepo8/status/687616620529844224&quot;&gt;I tweeted yesterday something glib and apparently cruel&lt;/a&gt;:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;“Sorry, but your browser does not support WebGL!” – sorry, you are a shit coder.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;And I stand by this&lt;/strong&gt;. I went to a web site that promised me some cute, pointless animation and technological demo. I was using Firefox Nightly — a WebGL capable browser. I also went there with Microsoft Edge — another WebGL capable browser. Finally, using Chrome, I was able to delight in seeing an animation.&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;I’m not saying the creators of that thing lack in development capabilities&lt;/strong&gt;. The demo was slick, beautiful and well coded. They still do lack in two things developers of &lt;em&gt;web products &lt;/em&gt;(and I count apps into that) should have: empathy for the end user and an understanding that they are not in control.&lt;/p&gt;
+
+ &lt;p&gt;Now, I am a pretty capable technical person. When you tell me that I might be lacking WebGL, I know what you mean. I don’t lack WebGL. I was blocked out because the web site did browser sniffing instead of capability testing. But I know what could be the problem.&lt;/p&gt;
+
+ &lt;p&gt;A normal user of the web has no idea what WebGL is and — if you’re lucky — will try to find it on an app store. If you’re not lucky all you did is confuse a person. A person who went through the effort to click a link, open a browser and wait for your thing to load. A person that feels stupid for using your product as they have no clue what WebGL is and won’t ask. Humans hate feeling stupid and we do anything not to appear it or show it.&lt;/p&gt;
+
+ &lt;p&gt;This is what I mean by empathy for the end user. Our problems should never become theirs.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;A cryptic error message telling the user that they lack some technology helps nobody and is sloppy development at best, sheer arrogance at worst.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;The web is, sadly enough, littered with unhelpful error messages and assumptions that it is the user’s fault when they can’t consume the thing we built.&lt;/p&gt;
+
+ &lt;p&gt;Here’s a reality check — this is what our users should have to do to consume the things we build:&lt;/p&gt;
+
+ &lt;p&gt;&lt;img alt=&quot;&quot; height=&quot;600&quot; src=&quot;https://d262ilb51hltx0.cloudfront.net/max/800/1*DXtRIWTu-UzRb0YB-h8SmA.png&quot; width=&quot;10&quot; /&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;That’s right. Nothing&lt;/strong&gt;. This is the web. Everybody is invited to consume, contribute and create. This is what made it the success it is. This is what will make it outlive whatever other platform threatens it with shiny impressive interactions. Interactions at that time impossible to achieve with web technologies.&lt;/p&gt;
+
+ &lt;p&gt;Whenever I mention this, the knee-jerk reaction is the same:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote class=&quot;graf--blockquote graf-after--p&quot; id=&quot;79d6&quot; name=&quot;79d6&quot;&gt;How can you expect us to build delightful experiences close to magic (and whatever other soundbites were in the last Apple keynote) if we keep having to support old browsers and users with terrible setups?&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;You don’t have to support old browsers and terrible setups. But you are not allowed to block them out. It is a simple matter of giving a usable interface to end users. A button that does nothing when you click it is not a good experience. Test if the functionality is available, then create or show the button. &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;This is as simple as it is.&lt;/strong&gt;&lt;/p&gt;
+
+ &lt;p&gt;If you really have to rely on some technology then show people what they are missing out on and tell them how to upgrade. A screenshot or a video of a WebGL animation is still lovely to see. A message telling me I have no WebGL less so.&lt;/p&gt;
+
+ &lt;p&gt;Even more on the black and white scale, what the discussion boils down to is in essence:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote class=&quot;graf--blockquote graf-after--p&quot; id=&quot;a775&quot; name=&quot;a775&quot;&gt;But it is 2016 — surely we can expect people to have JavaScript enabled — it is after all “the assembly language of the web”&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Despite the cringe-worthy &lt;a href=&quot;http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageForTheWebSematicMarkupIsDeadCleanVsMachinecodedHTML.aspx&quot;&gt;misquote of the assembly language&lt;/a&gt; thing, here is a harsh truth:&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;You can absolutely expect JavaScript to be available on your end users computers in 2016. At the same time it is painfully &lt;strong&gt;naive&lt;/strong&gt; to expect it to work under all circumstances.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;JavaScript is brittle&lt;/strong&gt;. &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; both are &lt;em&gt;fault tolerant&lt;/em&gt;. If something goes wrong in &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, browsers either display the content of the element or try to fix minor issues like unclosed elements for you. &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; skips lines of code it can’t understand and merrily goes on its way to show the rest of it. JavaScript breaks on errors and tells you that something went wrong. It will not execute the rest of the script, but throws in the towel and tells you to get your house in order first.&lt;/p&gt;
+
+ &lt;p&gt;There &lt;a href=&quot;http://kryogenix.org/code/browser/everyonehasjs.html&quot;&gt;are many outside influences&lt;/a&gt; that will interfere with the execution of your JavaScript. That’s why a non-naive and non-arrogant — a dedicated and seasoned web developer — will never rely on it. Instead, you treat it as an enhancement and in an almost paranoid fashion test for the availability of everything before you access it.&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong&gt;Sorry (not sorry) — this will never go away&lt;/strong&gt;. This is the nature of JavaScript. And it is a good thing. It means we can access new features of the language as they come along instead of getting stuck in a certain state. It means we have to think about using it every time instead of relying on libraries to do the work for us. It means that we need to keep evolving with the web — a living and constantly changing medium, and not a software platform. That’s just part of it.&lt;/p&gt;
+
+ &lt;p&gt;This is why the whole discussion about JavaScript enabled or disabled is a massive waste of time. It is not the availability of JavaScript we need to worry about. It is our products breaking in perfectly capable environments because we rely on perfect execution instead of writing defensive code. A tumblr like &lt;a class=&quot;markup--anchor markup--p-anchor&quot; href=&quot;http://sighjavascript.tumblr.com/&quot; rel=&quot;nofollow&quot;&gt;Sigh, JavaScript&lt;/a&gt; is fun, but is pithy finger-pointing.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;There is nothing wrong with using JavaScript to build things. Just be aware that the error handling is your responsibility.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Any message telling the user that they have to turn on JavaScript to use a certain product is a proof that you care more about your developer convenience than your users.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;It is damn hard these days to turn off JavaScript – you are complaining about a almost non-existent issue and tell the confused user to do something they don’t know how to.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;The chance that something in the JavaScript execution of any of your dozens of dependencies went wrong is much higher – and this is your job to fix. This is why advice like &lt;a href=&quot;http://webdesign.tutsplus.com/tutorials/quick-tip-dont-forget-the-noscript-element--cms-25498&quot;&gt;using noscript to provide alternative content&lt;/a&gt; is terrible. It means you double your workload instead of enhancing what works. Who knows? If you start with something not JavaScript dependent (or running it server side) you might find that you don’t need the complex solution you started with in the first place. Faster, smaller, easier. Sounds good, right?&lt;/p&gt;
+
+ &lt;p&gt;So, please, stop sniffing my browser, you will fail and tell me lies. Stop pretending that working with a brittle technology is the user’s fault when something goes wrong.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;As web developers we work in the service industry. We deliver products to people. And keeping these people happy and non-worried is our job. Nothing more, nothing less.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;Without users, your product is nothing. Sure, we are better paid and well educated and we are not flipping burgers. But we have no right whatsoever to be arrogant and not understanding that our mistakes are not the fault of our end users.&lt;/p&gt;
+
+ &lt;p&gt;Our demeanor when complaining about how stupid our end users and their terrible setups are reminds me of &lt;a href=&quot;https://www.youtube.com/watch?v=CSj5stmFkQ0&quot;&gt;this Mitchell and Webb sketch&lt;/a&gt;.&lt;/p&gt;
+
+ &lt;p&gt;&lt;/p&gt;
+
+ &lt;p&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Don’t be that person. &lt;/strong&gt;Our job is to enable people to consume, participate and create the web. This is magic. This is beautiful. This is incredibly rewarding. The next markets we should care about are ready to be as excited about the web as we were when we first encountered it. Browsers are good these days. Use what they offer after testing for it and enjoy what you can achieve. Don’t tell the user when things go wrong – they can not fix what you messed up.&lt;/p&gt;
+
+
+ &lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/chrisheilmann/~4/vqtqgcNQXy8&quot; width=&quot;1&quot; /&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 11:28:10 +0000</pubDate>
+ <dc:creator>Chris Heilmann</dc:creator>
+ </item>
+ <item>
+ <title>Mike Hommey: Announcing git-cinnabar 0.3.1</title>
+ <guid isPermaLink="true">http://glandium.org/blog/?p=3510</guid>
+ <link>http://glandium.org/blog/?p=3510</link>
+ <description>&lt;p&gt;This is a brown paper bag release. It turns out I managed to break the upgrade&lt;br /&gt;
+ path only 10 commits before the release.&lt;/p&gt;
+ &lt;h3&gt;What’s new since 0.3.0?&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;code&gt;git cinnabar fsck&lt;/code&gt; doesn’t fail to upgrade metadata.&lt;/li&gt;
+ &lt;li&gt;The &lt;code&gt;remote.$remote.cinnabar-draft&lt;/code&gt; config works again.&lt;/li&gt;
+ &lt;li&gt;Don’t fail to clone an empty repository.&lt;/li&gt;
+ &lt;li&gt;Allow to specify mercurial configuration items in a .git/hgrc file.&lt;/li&gt;
+ &lt;/ul&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 11:26:45 +0000</pubDate>
+ <dc:creator>glandium</dc:creator>
+ </item>
+ <item>
+ <title>Emily Dunham: Buildbot and EOFError</title>
+ <guid isPermaLink="true">http://edunham.net/2016/01/16/buildbot_and_eoferror.html</guid>
+ <link>http://edunham.net/2016/01/16/buildbot_and_eoferror.html</link>
+ <description>&lt;h3&gt;Buildbot and EOFError&lt;/h3&gt;
+ &lt;p&gt;More SEO-bait, after tracking down an poorly documented problem:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;# buildbot start master
+ Following twistd.log until startup finished..
+ 2016-01-17 04:35:49+0000 [-] Log opened.
+ 2016-01-17 04:35:49+0000 [-] twistd 14.0.2 (/usr/bin/python 2.7.6) starting up.
+ 2016-01-17 04:35:49+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
+ 2016-01-17 04:35:49+0000 [-] Starting BuildMaster -- buildbot.version: 0.8.12
+ 2016-01-17 04:35:49+0000 [-] Loading configuration from '/home/user/buildbot/master/master.cfg'
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file:
+ Traceback (most recent call last):
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 577, in _runCallbacks
+ current.result = callback(current.result, *args, **kw)
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 1155, in gotResult
+ _inlineCallbacks(r, g, deferred)
+ File &quot;/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py&quot;, line 1099, in _inlineCallbacks
+ result = g.send(result)
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/master.py&quot;, line 189, in startService
+ self.configFileName)
+ --- &amp;lt;exception caught here&amp;gt; ---
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/config.py&quot;, line 156, in loadConfig
+ exec f in localDict
+ File &quot;/home/user/buildbot/master/master.cfg&quot;, line 415, in &amp;lt;module&amp;gt;
+ extra_post_params={'secret': HOMU_BUILDBOT_SECRET},
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/status_push.py&quot;, line 404, in __init__
+ secondaryQueue=DiskQueue(path, maxItems=maxDiskItems))
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py&quot;, line 286, in __init__
+ self.secondaryQueue.popChunk(self.primaryQueue.maxItems()))
+ File &quot;/usr/local/lib/python2.7/dist-packages/buildbot/status/persistent_queue.py&quot;, line 208, in popChunk
+ ret.append(self.unpickleFn(ReadFile(path)))
+ exceptions.EOFError:
+
+ 2016-01-17 04:35:53+0000 [-] Configuration Errors:
+ 2016-01-17 04:35:53+0000 [-] error while parsing config file: (traceback in logfile)
+ 2016-01-17 04:35:53+0000 [-] Halting master.
+ 2016-01-17 04:35:53+0000 [-] Main loop terminated.
+ 2016-01-17 04:35:53+0000 [-] Server Shut Down.
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;This happened after the buildmaster’s disk filled up and a bunch of stuff was
+ manually deleted. There were no changes to master.cfg since it worked
+ perfectly.&lt;/p&gt;
+ &lt;p&gt;The fix was to examine &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;master.cfg&lt;/span&gt;&lt;/span&gt; to see &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/servo/saltfs/blob/master/buildbot/master/master.cfg#L413&quot;&gt;where the HttpStatusPush was
+ created&lt;/a&gt;,
+ of the form:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HttpStatusPush&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;serverUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'http://build.servo.org:54856/buildbot'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;extra_post_params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'secret'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HOMU_BUILDBOT_SECRET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Digging in the Buildbot source reveals that &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;persistent_queue.py&lt;/span&gt;&lt;/span&gt; wants to
+ unpickle a cache file from &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;/events_build.servo.org/-1&lt;/span&gt;&lt;/span&gt; if there was nothing
+ in &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;/events_build.servo.org/&lt;/span&gt;&lt;/span&gt;. To fix this the right way, create that file
+ and make sure Buildbot has &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;+rwx&lt;/span&gt;&lt;/span&gt; on it.&lt;/p&gt;
+ &lt;p&gt;Alternately, you can give up on writing your status push cache to disk
+ entirely by adding the line &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;maxDiskItems=0&lt;/span&gt;&lt;/span&gt; to the creation of the
+ HttpStatusPush, giving you:&lt;/p&gt;
+ &lt;div class=&quot;highlight-python&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HttpStatusPush&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;serverUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'http://build.servo.org:54856/buildbot'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;maxDiskItems&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
+ &lt;span class=&quot;n&quot;&gt;extra_post_params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'secret'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HOMU_BUILDBOT_SECRET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
+ &lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
+ &lt;/pre&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;p&gt;The real moral of the story is “remember to use &lt;a class=&quot;reference external&quot; href=&quot;http://www.linuxcommand.org/man_pages/logrotate8.html&quot;&gt;logrotate&lt;/a&gt;.&lt;/p&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 08:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Daniel Glazman: Ebook pagination and CSS</title>
+ <guid isPermaLink="false">urn:md5:41d039bb28fb15c761578cba0b1454fa</guid>
+ <link>http://www.glazman.org/weblog/dotclear/index.php?post/2016/01/16/Ebook-pagination-and-CSS</link>
+ <description>&lt;p&gt;Let's suppose you have a rather long document, for instance a book chapter, and you want to render it in your browser &lt;em&gt;à la&lt;/em&gt; iBooks/Kindle. That's rather easy with just a dash of CSS:&lt;/p&gt;
+ &lt;pre&gt;body {
+ height: calc(100vh - 24px);
+ column-width: 45vw;
+ overflow: hidden;
+ margin-left: calc(-50vw * attr(currentpage integer));
+ }&lt;/pre&gt;
+ &lt;p&gt;Yes, yes, I know that no browser implements that &lt;code&gt;attr()&lt;/code&gt;extended syntax. So put an inline style on your body for &lt;code&gt;margin-left: calc(-50vw * &lt;em&gt;&amp;lt;n&amp;gt;&lt;/em&gt;)&lt;/code&gt; where &lt;em&gt;&lt;code&gt;&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/em&gt; is the page number you want minus 1.&lt;/p&gt;
+ &lt;p&gt;Then add the fixed positioned controls you need to let user change page, plus gesture detection. Add a transition on margin-left to make it nicer. Done. Works perfectly in Firefox, Safari, Chrome and Opera. I don't have a Windows box handy so I can't test on Edge.&lt;/p&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 03:43:00 +0000</pubDate>
+ <dc:creator>glazou</dc:creator>
+ </item>
+ <item>
+ <title>Nicolas Mandil: Mozilla cultural revolution: from ‘radical participation’ to ‘radical user-centric’</title>
+ <guid isPermaLink="false">https://repeer.org/?p=48</guid>
+ <link>https://repeer.org/2016/01/16/mozilla-cultural-revolution-from-radical-participation-to-radical-user-centric/</link>
+ <description>&lt;p&gt;This post has been written about the &lt;a href=&quot;http://marksurman.commons.ca/2015/12/21/mofo2020/&quot;&gt;Mozilla Foundation (MoFo) 2020 strategy&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;The ideas developed in this post are in different levels: some are global, some focus on particular points of the proposed draft. But in my point of view, they all carry a transversal meaning: articulation (as piece connected to a structure allowing movement) with others and consistency with our mission.&lt;/p&gt;
+ &lt;h3&gt;Summary&lt;/h3&gt;
+ &lt;p&gt;On the way to &lt;a href=&quot;http://marksurman.commons.ca/2015/01/09/what-is-radical-participation/&quot;&gt;radical participation&lt;/a&gt;, Mozilla should be radical &lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;https://repeer.org/tag/mozilla/feed/#fn-48-1&quot; id=&quot;fnref-48-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; user-centric. Mozilla should not go against the social understanding of the (tech and whole society) situation because it’s what is massively shared and what polarizes the prism of understanding of the society. &lt;strong&gt;We should built solutions for it and transform (develop and change) it on the way. Our responsibility is to build &lt;em&gt;inclusivity&lt;/em&gt; (inclusion strengths) everywhere, to gather for multiplying our impact.&lt;/strong&gt; We must build (progressive) victories instead of battles (of static positions and postures).&lt;br /&gt;
+ If we don’t do it, we go against users self-perceived need: use. We value our differences more than our commonalities and &lt;strong&gt;consider ethic more as an absolute objective than a concrete process&lt;/strong&gt;: we divide, separate, compete. Our solutions get irrelevant, we get rejected and marginalized, we reject compromises that improve the current situation for the ideal, we loose influence and therefore impact on the definition of the present and future. We already done it for the good and the bad in the past (H.264+Daala, pocket integration, Hello login, no Firefox for iOS, Google fishing vs Disconnect, FxOS Notes app which sync is evernote only, …).&lt;br /&gt;
+ To get a consistent and impactful ability to integrate and transform the social understanding, there are four domains where we can take and articulate (connected structure allowing movement) action:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;People&lt;/strong&gt;: identity is the key to grow consciousness, understanding, skills, voice, representation and to articulate global/local, personal/common. &lt;strong&gt;[Activate]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Technology&lt;/strong&gt;: universality is key for a platform (for resilience) with interfaces (for modularity) where services, features and front-ends can plug-in and communicate to provide (inter)active support ; Decouple conditions of fulfillment with execution (content/appearance/policy ; material/immaterial) to support remix (policy continuity, consistency thought providers, …). &lt;strong&gt;[Unlock]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Product&lt;/strong&gt;: persona and (current and emerging) use via user-agents are the keys. Be on all major platforms depending on use, ethical alignment and opportunities, emerging newness to provide continuity (task, device) to users and leading on new practices. Features should be about products parity and opening new possibilities carrying our values to the action at a massive scale. &lt;strong&gt;[Build]&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Organizations/institutions&lt;/strong&gt;: sociological innovation for participation is the key. Research on historical (evolution) and sociological (human organizations, social institutions and social behaviors) analysis based on social networks (link as social interactions), in the perspective of producing commons. &lt;strong&gt;[Drive]&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Our front has two sides: &lt;strong&gt;propose and protect&lt;/strong&gt;. But each of them are connected and can have different strategic expressions, if our actions generate improving (progressive) curves:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;For the &lt;strong&gt;action taking&lt;/strong&gt;: consciousness, understanding, symbolic actions, behavior change, behavior advocacy (evangelism)&lt;/li&gt;
+ &lt;li&gt;For the &lt;strong&gt;action mode&lt;/strong&gt;: promotion (spreading the idea), incitement (giving a competitive advantage to people involved), collaboration (open interactions to make a win-win exchange; process-centric), contractualization (formalize domains where a win-win exchange is made; object-centric), coercion (giving a competitive disadvantage to people not involved).&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Social history is a history of social values.&lt;strong&gt; The way we understand and tell the problem determine the solution we can create&lt;/strong&gt;: we need, all the way long, a shared understanding. Tools and technologies are not tied, bound forever to their social value, which depends on people’s social representations that evolve over time.&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;The social behavior&lt;/strong&gt; is a first key. It is the narrative, and therefore its &lt;strong&gt;inclusion in the social history that we make, which converges the product with the values that it stands for&lt;/strong&gt;. Here is the articulation of product with people and technology, of product with leadership network and advocacy engine (it could be less persistent and inclusive: marketing).&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social organization&lt;/strong&gt; is a second key. It is about how the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla (org) and Mozillians (people). &lt;strong&gt;Here comes the question of being open&lt;/strong&gt;. It is not enough because it is about availability (passive) and not inclusivity (active). The high level of automation coming is a challenge. We should level-up the meaning to differentiate from others: &lt;strong&gt;Mozilla should activate and unlock societal progress to build fair technical progress&lt;/strong&gt;. Mozilla need to &lt;strong&gt;identify its resilient backbone&lt;/strong&gt; (not only a technology, the web, but something that articulate people, technology and products) and make it more universal (through people and products). But our goals can’t be absolutely achieved because they have to be considered in a dynamic context. However, the brand engagement is persistent, if it’s included in the product, visible, and centered on easing the user’s action.&lt;br /&gt;
+ Linked to the ‘being open’ question, the advocacy engine could be a thing to unlock societal progress. People are satisfied of narrow hills of choice until they understand it’s not socially neutral. It’s the case with technology: they accept things about technology to be build top-down. &lt;strong&gt;A successful advocacy, even one about technology, is always built bottom-up&lt;/strong&gt;, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric and administrative content centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. &lt;strong&gt;If we want to have an impact, we should listen to people needs, not tell them to listen to ours&lt;/strong&gt;. People want (first) to be empowered, not to empower an org. We need to have content and user centric (not org and it’s process) tools/platform for advocates and leaders: let’s build the technology advocacy plan together. Yes it’s slower, but much more massive, inclusive and persistent. The impact will be higher because it will carry a meaning for people and it wont be too org centric. So it will be qualitatively better: not just an amount, &lt;strong&gt;accumulation is not our goal, but impact, that comes from articulation&lt;/strong&gt;. Likewise we should be careful to not use best practice as absolute solutions, but as solutions in a context, if we want to transpose them massively: when we unify we should avoid to homogenize. On the narrative side, our preoccupation should be about building short, medium and long term narrative to get action.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social institutions&lt;/strong&gt; are the third key. Here is the articulation of the leadership network with the advocacy engine. &lt;strong&gt;Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.&lt;/strong&gt; Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved in creating (different) representations (institutions) and organizations (foundation/firms) but &lt;strong&gt;with a different DNA (values) processing&lt;/strong&gt;: from public good to personal benefit or from personal interest to public benefit. If Mozilla cares about public good resilience, &lt;strong&gt;the articulation of their domains of values is critical&lt;/strong&gt;. So, on the social organization side, their articulation’s expression and the revision process must be said and clear: from hierarchy or contract or different autonomy levels (internal incubation and external advocacy), or … to criteria to start a revision. About the narrative, and hence about the social behavior side, leaders carry a lot of legitimacy and avoid the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact. But this legitimacy is already present if we&lt;strong&gt; make clear that our actions are about commons&lt;/strong&gt;. We should name them creators (compositors or managers) to make it clear that the creative process is a collaboration, made by a team and that the public good do not have the same role in the process and outcome. Full circle.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The social networks&lt;/strong&gt; are the keystone. Let’s shortly take an example based on social networks (link as social interactions) with the perspective of producing people, technological and product commons. &lt;strong&gt;We need better tools for collaboration and participation&lt;/strong&gt;: tools that merge discussion channels, capitalize on the discussion and preview the results to build a plan. From evolving the wiki discussion page to feature document production into peer-to-peer discussion.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;An analysis of the creation process is another way to the articulation of product with people and technology.&lt;br /&gt;
+ Platforms move closer to strict ‘walled garden’ ecosystems. We need bridges from lab to home that carry different mix of customization and reliability to support the emancipation curve. We need to build pathways thought audiences and thought IT layers (content, software, hardware, distant service). &lt;strong&gt;We should find a convergence between customization&lt;/strong&gt; (dev code patch to users add-ons) &lt;strong&gt;and reliability&lt;/strong&gt; (self made to mass product), &lt;strong&gt;between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways&lt;/strong&gt;. Mozilla should find ways to &lt;strong&gt;integrate learning&lt;/strong&gt; in its products, in-content, as we have code comment on code: on-boarding levels, progression from simple to high level techniques, reproducible/universal next task/skill building.&lt;/p&gt;
+ &lt;h3&gt;Detailed discussion content&lt;/h3&gt;
+ &lt;p&gt;Here are the developed ideas, with more reference to our allies and detractors’ products.&lt;/p&gt;
+ &lt;h4&gt;People, the sociological side&lt;/h4&gt;
+ &lt;h5&gt;From focused to systemic action&lt;/h5&gt;
+ &lt;p&gt;First of all, I think &lt;strong&gt;the strategy move Mozilla is doing is the right one&lt;/strong&gt; as it embraces more our real life. People are not defined by one characteristic, we are complex: ex. we can be pedestrian, car driver, biker, Public Transport user… we think and do simultaneously. So why Mozilla should restrict its strategy by targeting people on skills, through education, thought better material only (the Mozilla Academy program). Education, even popular education, can’t do everything for the people to build change. &lt;strong&gt;We need a plan that balance intellectual and practical (abstraction/action, think/do) integrating progressive paths to massively scale so we get an impact: build change.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h5&gt;Real life: Social history, individuals and institutions as an articulation founding the action.&lt;/h5&gt;
+ &lt;p&gt;Let’s start by some definitions based on my understanding of some &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sociologie&quot;&gt;Wikipedia articles&lt;/a&gt;. Sociology is the study of the evolution of societies: human organizations and social institutions. It is about &lt;strong&gt;the impact of the social dimension on humans representations (ways of thinking) and behaviors (ways of acting)&lt;/strong&gt;. It allows to study the conceptions of social relations according to fundamental criteria (structuralism, functionalism, conventionalism, etc.) and the hooks to reality (interactionism, institutionalism, regulationisme, actionism, etc.), to think and shape the modernity. Currently (and this is key for Mozilla’s positioning), the combination of models replace the models’ unity, which aims to assume the multidimensionality. There are three major sociological paradigms, including one emerging:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;The holistic paradigm&lt;/strong&gt;: Society is a whole that is greater than the sum of its parts, it exists before the individual and individuals are governed by it. In this context, the Society includes the individual and the individual consciousness is seen only as a fragment of the collective consciousness. The emphasis is on the social fact, whose cause must be sought in earlier social facts. The social fact is part of a system of interlocking institutions that govern individuals. It is external to the individual and constraint it. Sociology is then the science of institutional invariants in which are the observable phenomenas.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The atomistic paradigm&lt;/strong&gt;: each individual is a social atom. The atoms act according to self motives, interests, emotions and are linked to other atoms. A system of constant interaction between atoms produces and reproduces Society. The emphasis is on the cause of social actions and the meaning given by individuals to their actions. A horizon of meanings serve as reference instead of the arrangements of institutions. The institution is there but it serves the motives and interests of agents. Sociology is then the study of the social action.&lt;/li&gt;
+ &lt;li&gt;The recent emergence of a sociological analysis based on &lt;strong&gt;social networks&lt;/strong&gt; (which are a collection of individuals or organizations connected by regular social interactions) suggest lines of research &lt;strong&gt;beyond the opposition between the holistic and the atomistic approaches&lt;/strong&gt;. The theory of social networks conceives social relationships in terms of nodes and links. The nodes are usually social actors in the network but can also represent institutions, and links are the relationships between these nodes. There may be several kinds of links between nodes and their analysis determines social capital of the social actors.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;Consequently, Mozilla should build its strategy on &lt;strong&gt;historical&lt;/strong&gt; (evolution) and &lt;strong&gt;sociological&lt;/strong&gt; (human organizations, social institutions and social behaviors) analysis based on &lt;strong&gt;social networks&lt;/strong&gt; (links as social interactions), in the perspective of producing &lt;strong&gt;commons&lt;/strong&gt;. That is to say as an &lt;strong&gt;engine of transition from a model of value&lt;/strong&gt; on its last leg (rarity capitalism) to the emerging one (new articulation of the individual and the collective: commons).&lt;br /&gt;
+ It is important and strategic to propose a sociological articulation supporting our mission and its purpose (commons) since &lt;strong&gt;the sociological concept (the paradigm) reveals an ideological characteristic&lt;/strong&gt;: because it participates in societal movements made in the Society, it serves an ideal. The societal domain, what’s making society, a political object, should be a stake for Mozilla.&lt;/p&gt;
+ &lt;h5&gt;Build on a basement: current tech challenge articulated with current social meaning/perception&lt;/h5&gt;
+ &lt;p&gt;&lt;strong&gt;We should articulate ‘our real life’ with the nowadays tech challenge&lt;/strong&gt;: how to get back control over our data at the time of IoT, cloud, big data, convergence (multi-devices/form factor)? From a user point of view, we have devices and want them convenient, easy and nice. The big moves in the tech industry (IoT, cloud, big data, convergence) free us for somethings and lock us for others. The lock key is that our devices don’t compute anymore our data that are in silos. From a developer point of view, the innovation is going very fast and it’s hard to have a complete open source toolbox that we can share, mostly because we don’t lead: Open has turn to be more open-releasing.&lt;br /&gt;
+ We should articulate our new strategy with the tech industry moves: for example, &lt;strong&gt;as a user, how can I get (email) encryption on all my devices?&lt;/strong&gt; Should I follow (fragmented) different kind of howtos/tools/apps to achieve that? How do I know these are consistent together? How can I be sure it won’t brake my continuous workflow? (app silo? social silo? level of trust and reliability?)&lt;br /&gt;
+ Mozilla have the skills to answer this as we already faced and solved some of these issues on particular points: like how to ease the installation of Firefox for Android for Firefox desktop users, open and discoverable choice of search engines, synchronization across devices, …&lt;br /&gt;
+ &lt;strong&gt;Mozilla’s challenge is to not be marginalized by the change of practices. Having an impact is embracing the new practice and give it an alternative.&lt;/strong&gt; Mozilla already made that move by saying « &lt;em&gt;Firefox will go where users are&lt;/em&gt;« , by trying to balance the advertisement practice between adds companies and users, by integrating H.264 and developing Daala. But &lt;strong&gt;Mozilla never stated that clearly as a strategy&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;A backbone to make our mission resilient in it expressions&lt;/h5&gt;
+ &lt;p&gt;If we think about the &lt;strong&gt;Facebook’s strategy, they first built a network of people whiling to share&lt;/strong&gt; (no matter what they share) and then use this &lt;strong&gt;transversal backbone to power vertical business segments&lt;/strong&gt; (search, donation, local market selling, …). Google with its search engine and its open source policy have a similar (in a way) strategy. The difference here is that the backbone is people’s data and control over digital formats. In both cases, the level of use (of the social network, search engine, mobile OS, …) is the key (with fast innovation) to have an impact. And that’s a major obstacle to build successful alternatives.&lt;br /&gt;
+ The proposed Mozilla’s strategy is built in the opposite way, and that’s questioning. &lt;strong&gt;We try to build people network depending on some shared matters&lt;/strong&gt;. Then, is our strategy able to scale enough to compete against GAFAM, or are we trying to build a third way ?&lt;br /&gt;
+ For the products, the Mozilla’s strategy is still (and has always been) inclusive: everybody can use the product and then benefit of its open web values. A good product that answer people needs, plus giving people back/new power (allow new use) build a big community. For the network, should we build our global force of people based on concentric circles (of shared matters) or based on a (Mozilla own) transversal backbone (matter agnostic)? It seems to me the actual presentation of the strategy do not answer clearly enough this big question: &lt;strong&gt;which &lt;em&gt;inclusivity&lt;/em&gt; (inclusion strengths) mechanism in the strategy?&lt;/strong&gt;&lt;br /&gt;
+ And that &lt;strong&gt;call back to our product strategy&lt;/strong&gt;: build a community that shares values, that is used to spread outcomes (product) OR build a community that shares a product, that is used to spread values. This is not a question on what matters more (product VS values) but on the strategy to get to a point, an objective (many web citizens). Shouldn’t we use our product to built a people network backbone ? Back to GAFAM: what can we learn from the Google try with Google+?&lt;br /&gt;
+ If our core is not enough transversal (the backbone), more new web/tech market there will be, more we will be marginalized, because focused on our circles center not taking in account that the war front (the context) have changed. &lt;strong&gt;Mozilla have to be resilient: mutability of the means, stability in the objectives.&lt;/strong&gt;&lt;br /&gt;
+ The document is the MoFo strategy, and so it doesn’t say anything about ‘build Firefox’ (aka the product strategy) and so don’t articulate our main product (Firefox) with our main people network building effort and values sharing engine. We should do it: at a strategic scale and a particular scale (articulating the agenda-setting with main product features).&lt;/p&gt;
+ &lt;h5&gt;Brand engagement, a psychological backbone on the user side ?&lt;/h5&gt;
+ &lt;p&gt;It seems that our GAFAM challengers get big and have impact by not educating (that much) people, and that’s what makes them not involved in the web citizenship. Or only when they are pushed by their customers. At the opposite, making people aware about web citizenship at first, makes it hard to have that much people involved and so to have impact. However, there is &lt;strong&gt;an other prism that drive people: the brand perceived values&lt;/strong&gt;. Google is seen as a tech pioneer innovator and doing the good because of its open policy, free model, fast innovation… Facebook is seen as really cool firm trying to help people by connecting them…&lt;br /&gt;
+ Is the increase of marketing of Mozilla doing good enough to gains back users ? Is this resilient compared to the next-tech-thing coming ?&lt;br /&gt;
+ Most of the time when I meet Goggle Chrome users and ask then why they use it and don’t switch to Firefox, they answer about use allowed (sync thought devices, apps everywhere that run only on GC, …). Sometimes, they argue that they make effort on other areas, and that they want to keep they digital life simple. They &lt;strong&gt;experience is not centered in a product/brand, but more on the person&lt;/strong&gt;: on that Google Chrome with its Person (with one click ‘auto-login’ to all Google services) is far superior than Firefox.&lt;/p&gt;
+ &lt;h5&gt;User-agent or products ?&lt;/h5&gt;
+ &lt;p&gt;A user-agent is an intermediary acting on behalf of a supplier. As a representative, it is the contact point with customers; It’s role is to manage, to administer the affairs; it is entrusted with a mission by one or more persons; it both acts and produce an effect.&lt;br /&gt;
+ So, the user-agent can be describe with three criteria. It is: an intermediate (user/technology) ; a tool (used to manage and administrate depending on the user’s skills) ; a representative (mission bearer, values vector, for a group of people). It exceeds partly the contradiction between being active and passive.&lt;br /&gt;
+ A &lt;strong&gt;user-agent articulate personal-identity with technology-identity&lt;/strong&gt; and give informations about available skills over these domains. It’s much more universal than a product that is about featuring a user-agent. &lt;strong&gt;If we target resilience, user-agent should be the target&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h4&gt;Social history, marketing: how we understand things to make choices&lt;/h4&gt;
+ &lt;h5&gt;History of the social value&lt;/h5&gt;
+ &lt;p&gt;The way we look at the past and current facts shape our understanding and determine if we open new ways to solve the issues identified. That’s the way to understand the challenges that come on the way and to agree on an adaptation of the strategy instead of splitting things. The way we understand and tell the problem determine the solution we can create: we need, all the way long, &lt;strong&gt;a shared understanding.&lt;/strong&gt;&lt;br /&gt;
+ &lt;strong&gt;Tools and technologies are not necessarily tied to their social value, which depends on social representations. The social value can be built upstream and evolve downstream.&lt;/strong&gt; It also depends on the perspective in which we look at it, on the understanding of the action and therefore on past or current history. Example: the social value of a weapon can be a potential danger or defense, creative (liberating) or destructive. The nuclear bomb is a weapon of mass destruction (negative), whose social value was (ingeniously built as) freedom (positive).&lt;/p&gt;
+ &lt;h5&gt;Impact in our strategy: a missing root&lt;/h5&gt;
+ &lt;p&gt;To engage the public, before to « &lt;em&gt;Focus on creative campaigns that use media + software to engage the public.&lt;/em&gt; » we need to step back, in our speeding world, for understanding together the big picture and the big movement.&lt;br /&gt;
+ Mozilla want to fuel a movement and propose a strong and consistent strategy. However, I think &lt;strong&gt;this plan miss a key point, a root point: build a common (hi)story.&lt;/strong&gt; This should be an objective, not just an action.&lt;br /&gt;
+ Also, that’s maybe a missing root for the State of the web report: how do we understand what we want to evaluate? But it’s not only a missing root for an (annual?) report (a ‘Reporters without borders’ Press-Freedom like?), it’s a missing root for a new grow of our products’ market share.&lt;br /&gt;
+ For example, I do think that most users don’t know and understand that Mozilla is a foundation, Firefox build by a community as a product to keep the web healthy: &lt;strong&gt;they don’t imagine any meaning about technology&lt;/strong&gt;, because they see it as a neutral tool at its root, so as a tool that should just fit they producing needs.&lt;br /&gt;
+ Firefox, its technologies and its features are not bound for ever. It is the narrative, and therefore their inclusion in the social history that we make, which converges Firefox with the values that it stand for. &lt;strong&gt;Stoping or changing the deep narrative means cutting the source of common understanding and making stronger other consistencies captured by other objects, turning as centrifugal forces for Firefox.&lt;/strong&gt;&lt;br /&gt;
+ Marketing is a way to change what we socially say about things: that’s why Google Chrome marketing campaign (and consistent features maturity) has been the decreasing starting point of Firefox. &lt;strong&gt;Our message has been scrambled.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h4&gt;From participation to emancipation: values, people and org relationships&lt;/h4&gt;
+ &lt;p&gt;How to emancipate people in the digital world ?&lt;/p&gt;
+ &lt;h5&gt;Keeping the open open&lt;/h5&gt;
+ &lt;p&gt;Being open is not a thing we can achieve, it’s a constant process. « &lt;em&gt;Mozilla needs to engage on both fronts, tackling the big problems but also fuelling the next wave of open.&lt;/em&gt; » Yes, but &lt;strong&gt;Mozilla should say too how the next wave of open can stay under people’s control and rally new people&lt;/strong&gt;. Not only open code, but open participation, open governance, open organization. Being open is not a releasing policy about objects, it’s a mutation to participation process: a metamorphosis. It’s not reached by expanding, but by shifting. It’s not only about an amount, but about values: it’s qualitative.&lt;br /&gt;
+ Maybe &lt;strong&gt;open is not enough&lt;/strong&gt;, because it doesn’t say enough about who control and how, about the governance, and says too much about &lt;strong&gt;availability (passive)&lt;/strong&gt; and not enough &lt;strong&gt;about &lt;em&gt;inclusivity&lt;/em&gt; (active ; inclusion strengths)&lt;/strong&gt;. It doesn’t say how the power is organized and articulated to the people (ex. think about how closed is the open Android). We may need to change the wording: indie web, the web that fuel autonomy, is a try, but it doesn’t say enough about &lt;em&gt;inclusivity&lt;/em&gt; compared to openness &amp;amp; opportunity. Emancipation is the concept. It’s strategic because it says what is aligned to what, especially how to articulate values and uses. It’s important because it tells what are the sufficient conditions of realization to ‘open/indie’. That’s key to get ‘open/indie at small and large scales, from Internet people to Internet institutions, thought all ‘open/indie’ detractors in the always-current situation: a resilient ecosystem.&lt;br /&gt;
+ My intuition is that &lt;strong&gt;the leadership network and advocacy engine promoting open will be efficient if we clarify ‘open’ while keeping it universal&lt;/strong&gt;. We can do it by looking back at the raw material that we have worked for years, our DNA in action. Because after all, we are experts about it and wish others to become experts too. It does not mean to essentialize it (opposing its nature and its culture), &lt;strong&gt;but to define its conditions of continuous achievement in our social context&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;Starting point: exemplary projects that tell a lot about the evolution of our DNA in action&lt;/h5&gt;
+ &lt;p&gt;Clarifying the idea of ‘open’ is strategic to our action because it outlines the constitution of ‘open’, its high ‘rules’, like with laws in political regimes. It clarifies for all, if you are part of it or not, and it tells you what to change to get in. It can reinforce the brand by differentiating from the big players that are the GAFAM: &lt;strong&gt;it’s a way to drive, not to be driven by others lowering the meaning to catch the social impact. We should say that ‘open’ at Mozilla means more than ‘open’ at GAFAM&lt;/strong&gt;. I wish Mozilla to speak about its openness, not as an ‘equal in opportunity’ but as an ‘equal in participation’, because it fits openness not only for a moment (on boarding) or for a person, but during the whole process of people’s interaction.&lt;br /&gt;
+ &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://servo.org/&quot;&gt;Servo&lt;/a&gt; or &lt;a href=&quot;https://firefoxos.mozilla.community/&quot;&gt;Firefox OS&lt;/a&gt; (since the Mozilla’s shift to radical participation) seem to be very good examples of projects with participation &amp;amp; impact centric rules, tools, process (RFC, new team and owners, …). Think about how Rust and &lt;a href=&quot;http://arc.applause.com/2015/03/27/google-dart-virtual-machine-chrome/&quot;&gt;Dart emerged and are evolving&lt;/a&gt;. Think about how stronger has been the locked-open Android with partnership than the open-locked FxOS. We should tell those stories, not as recipes that can be reproduced, but as process based on a Constitution (inclusive rules) that make a political regime (open) and define a mode of government (participation). That’s key to social understanding and therefore to transpose and advocate for it.&lt;br /&gt;
+ As projects&lt;strong&gt; compared to ‘original Mozilla’, Rust, Servo and FxOS could say a lot&lt;/strong&gt; about how different they implemented learning/interaction/participation at the roots of the project. How the process, the tools, the architecture, the governance and the opportunities/constraints have changed for Mozilla and participants. This could definitely help to setup our curriculum resources, database and workshop at a personal (e.g., “How to teach / facilitate / organize / lead in the open like Mozilla.”) and orgs levels, with personal and orgs policies.&lt;/p&gt;
+ &lt;h5&gt;Spreading the high meanings in our strategy to consolidate it consistency&lt;/h5&gt;
+ &lt;p&gt;Clarifying the constitution of ‘open’ calls to clarify other related wordings.&lt;br /&gt;
+ I’m satisfied to read back (social) ‘movement’ instead of ‘community’, because it means that our goal can’t be achieve forever (is static), but we should protect it by acting. And it seems more inclusive, less ‘folds on itself’ and less ‘build the alternative beside’ than ‘community’: the alternative can be everywhere the actual system is. It can make a system. It can get global, convergent, continuous, … all at the same time. Because it’s roots are decentralized _and_ consistent, collaborating, …&lt;/p&gt;
+ &lt;p&gt;About participation, we should think too (again) about engagement VS contribute VS participate: how much am I engaged ? Free about defining and receiving cost/gains? What is the impact of my actions ? … &lt;strong&gt;These different words carry different ideas about how we connect the ‘open’&lt;/strong&gt;: spread is not enough because it diffuses, _be_ everywhere is more permanent. Applied to Mozilla’s own actions, &lt;strong&gt;funding open projects and leaders, is maybe not enough and there should be others areas where we can connect&lt;/strong&gt; inside products, technology, people and organizations that build emancipation. So that say something about getting control (who, how, …).&lt;/p&gt;
+ &lt;h5&gt;IA: a challenge for ‘open’&lt;/h5&gt;
+ &lt;p&gt;IA is first developed to help us by improving our interactions. However, this seems to start to shift into taking decisions instead of us. This is problematic because these are indirect and direct ways for us to loose control, to be locked. And that can be as far as computers smarter than humans. The problem is that technical progress is made without any consideration of the societal progress it should made.&lt;br /&gt;
+ That’s an other point, why open is not enough: automation should be build-in with superior humanization. &lt;strong&gt;Mozilla should activate and unlock societal progress to build fair technical progress.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h5&gt;Digital integration &amp;amp; democracy&lt;/h5&gt;
+ &lt;p&gt;The digital (&amp;amp; virtual) world is gaining control over the physical world in many domains of our society (economy to finance, mail to email, automatic car, voting machine, …). It’s getting more and more integrated to our lives without getting back our (imperfect) democracy integrated into them. Public benefit and public good are turning ‘self benefit’ and ‘own sake’ because citizens don’t have control over private companies. &lt;strong&gt;We should build a digital democracy if we don’t want to loose at all the democratic governing of society.&lt;/strong&gt; We must overcome the poses and postures battles about private and public. We need to build.&lt;/p&gt;
+ &lt;h4&gt;‘Leader’ &amp;amp; ‘Leadership’ need a clarification&lt;/h4&gt;
+ &lt;h5&gt;Why a clarification?&lt;/h5&gt;
+ &lt;p&gt;At some level, I’m not the only one to ask this question:&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;How do CRM requirements for Leadership and Advocacy overlap / differ? What’s our email management / communications platform for Leadership?&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;Connect leaders to lead what ? How ? To whose benefit ? Do we want to connect leaders or initiatives (people or orgs) ? Will the leaders be emerging ones (building new networks) or established ones (use they influence to rally more people)? Are Leaders leaders of something part of Mozilla (like can be Reps) or outside of Mozilla (leaders of project, companies, newspaper: tech leaders, news leaders, …) ? This is especially important depending on what is the desire for the leaders to become in the future. &lt;strong&gt;The MoFo’s document should be more precise&lt;/strong&gt; about this and go forward than « &lt;em&gt;Mozilla must attract, develop, and support a global network of diverse leaders who use their expertise to collaboratively advance points-of-view, policies and practices that maintain the overall health of the Internet.&lt;/em&gt; »&lt;br /&gt;
+ We should do it because &lt;strong&gt;the confusion about the leadership impact the advocacy engine&lt;/strong&gt;: « &lt;em&gt;The shared themes also provide explicit opportunities for our Leadership and Advocacy efforts to work together.&lt;/em&gt; » Regarding Mozilla, is the leaders role to be advocacy leaders ? It seems as they share themes and key initiatives (even if not worded the same sometimes). Or in other words, who Drives the Advocacy engine?&lt;/p&gt;
+ &lt;h5&gt;Iterations with the actual definition: creators&lt;/h5&gt;
+ &lt;p&gt;Here are my iterations on the definition of ‘Leaders’:&lt;/p&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The Leaders could be the people platform (the community) and the advocacy engine the tool/themes/actions platform (the product).&lt;/li&gt;
+ &lt;li&gt;Leaders could build at the end new solutions (products) and Advocates new voices (rallying), that could be translated in a learning area divided like Leadership=learn+create and advocacy=teach+spread.&lt;/li&gt;
+ &lt;li&gt;Leadership: personal development to produce (turn into) new commons or add new facets to commons. Advocacy: personal development to protect established/identified commons.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;p&gt;With these definitions, then Leaders are maybe more a Lab, R&amp;amp;D place, incubation tool (if we think about start-up incubators, then it shows a tool-set that we will need to inspire for the future). But if we want to keep the emphasis on people, &lt;strong&gt;we could name them ‘creators’&lt;/strong&gt; (compositors or managers ; not commoners, because leaders and advocates are commoners ; yes, traditionally creators are craftspersons and intellectual designers). This make sens with the examples given in the MoFo 2020 strategy 0.8 document, where all persona are involved in a building-something-new process.&lt;/p&gt;
+ &lt;p&gt;However, it’s interesting to understand why we choose at first ‘Leaders’. &lt;strong&gt;Leaders build new solutions (products) and Advocates new voices (rallying), they are both about personal development and empower commons.&lt;/strong&gt; Leadership=learn+create and advocacy=teach+spread commons. Leaders are projects/orgs leaders, the ones that traduce DNA (values) in products (concrete ability and availability). Advocates are values advocates, the ones that traduce DNA (values) in actions (behavior). As they are both targeting commons, they both produce the same social organization (collaboration instead of competition). They are both involved to create (different) representation (institutions) and organization (foundation/firms) but &lt;strong&gt;with a different DNA (values) processing&lt;/strong&gt;: from public good to personal interest or the opposite. If Mozilla cares about public good resilience, &lt;strong&gt;the articulation of they domains of values is critical. So their articulation’s expression and the revision process must be said and clear&lt;/strong&gt;: from hierarchy vs contract vs different autonomy levels (internal incubation and external advocacy), vs … to criteria to start a revision.&lt;/p&gt;
+ &lt;h5&gt;The network effect&lt;/h5&gt;
+ &lt;p&gt;Another argument for the switch from Leader to Creator is that the Leader word it too much tight to a single-person-made innovation. &lt;strong&gt;Creator make more clear that the innovation is possible not because of one genius, but because of a team&lt;/strong&gt;, a group, a collective: personS (where there could also be genius). The value is made by the collaboration of people (especially in an open project, especially in a network).&lt;br /&gt;
+ That’s important because that could impact how well we do the convening part: not self-promoting, not-advertising, but sharing skills and knowledge for people and catalysing projects.&lt;br /&gt;
+ &lt;strong&gt;The same for the wording ‘talent’&lt;/strong&gt;: alone, a talent can do nothing that has an impact. At least, we need two talents, a team (plus some assistants at some point).&lt;/p&gt;
+ &lt;h5&gt;The cultural prism&lt;/h5&gt;
+ &lt;p&gt;Again, this seems to be an open question:&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;Define and articulate “leadership.” Hone our story, ethos and definition for what we mean by “leadership development” (including cultural / localization aspects).&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;In my culture, Leader carry positive (take action) and negative (dominate) meanings. That’s another reason why I prefer another naming.&lt;br /&gt;
+ I understand too that it carries a lot of legitimacy (ex. market leader) in our societies and it avoids the stay-experimental or non-massive (unique) thoughts. And we need legitimacy to get impact.&lt;br /&gt;
+ But the way Mozilla has an impact thought all cultures, its &lt;strong&gt;legitimacy, is by creating or expanding a common&lt;/strong&gt;. To do this, depending on the maturity, Mozilla could follow the market proposing an alternative with superior usability OR opening a new market by adding a vertical segment.&lt;/p&gt;
+ &lt;h5&gt;Existing tool-set opportunities&lt;/h5&gt;
+ &lt;p&gt;If Leadership is « &lt;em&gt;a year-round MozFest + Lab&lt;/em&gt;« , so it’s a social network + an incubation place. Then, we already have a social network for people involved with Mozilla: Which kind of link should have the leadership network with &lt;strong&gt;mozillians.org&lt;/strong&gt; ? What can we learn from this project and other specialized social network projects (linkedin, viadeo, …) to build the leadership network ?&lt;/p&gt;
+ &lt;h4&gt;Advocacy engine: make it clear&lt;/h4&gt;
+ &lt;h5&gt;What it is &amp;amp; how it works&lt;/h5&gt;
+ &lt;p&gt;Mozilla is doing a great effort to build its advocacy engine on collaboration (« &lt;em&gt;Develop new partnerships and build on current partnerships&lt;/em&gt;« , « &lt;em&gt;begin collaboration&lt;/em&gt;« , « &lt;em&gt;build alliances with similar orgs&lt;/em&gt;« ) but at the same time affirms that Mozilla should be « &lt;em&gt;Part of a broader movement, be the boldest, loudest and most effective advocates&lt;/em&gt; » that could be seen as too centralized, too exclusive.&lt;br /&gt;
+ While this can be consistent (or contradictory), &lt;strong&gt;the consistency has to be explained&lt;/strong&gt; looking at orgs and people, global and local, abstract and real, with a complementarity/competitive grid.&lt;br /&gt;
+ First, &lt;strong&gt;the articulation with other orgs has to be explained&lt;/strong&gt;. What about others orgs doing things global (&lt;a href=&quot;https://eff.org/&quot;&gt;EFF&lt;/a&gt;, &lt;a href=&quot;https://fsf.org/&quot;&gt;FSF&lt;/a&gt;, …) and local (&lt;a href=&quot;http://www.laquadrature.net/&quot;&gt;Quadrature du net&lt;/a&gt;, CCC, …) ? What about the value they give and that Mozilla doesn’t have (juridic expertise for example) ? What about other advocate engines (&lt;a href=&quot;https://change.org/&quot;&gt;change.org&lt;/a&gt;, &lt;a href=&quot;https://secure.avaaz.org/&quot;&gt;Avaaz&lt;/a&gt;…) ? That should not be at an administrative level only like « &lt;em&gt;Develop an affiliate policy. Defining what MoFo does / does not offer to effectively govern relationships w. affiliated partners and networks (e.g., for issues like branding, fundraising, incentives, participation guidelines, in-kind resources.)&lt;/em&gt; »&lt;br /&gt;
+ Second, this is key for users to understand and &lt;strong&gt;articulate the global level of the brand engagement and their local preoccupations and engagement&lt;/strong&gt;. How the engine will be used for local (non-US) battles ? In the past Mozilla totally involved against PIPA, SOPA by taking action, and hesitate a lot to take position and just published a blog post (and too late to gain traction and get impact) against French spying law for example.&lt;br /&gt;
+ Third, &lt;strong&gt;the articulation ‘action(own agenda)/reaction’ should be clarified&lt;/strong&gt; in the objectives and functioning of the advocacy engine. Especially because other orgs, allies or detractors, try to to setup the social agenda. It’s important because it can change the social perception of our narrative (alternative promotion/issue fighting) and therefore people’s contributions.&lt;br /&gt;
+ People think the technology is socially neutral. People are satisfied of narrow hills of choice (not the meaning, the aim, but only the ability to show your favorite avatar). &lt;strong&gt;People don’t want to feel guilty or oppressed&lt;/strong&gt;, they don’t want new constraints, they are looking for solution only: they want to use, not to do more, they want they things to be done. Part of the problem is about understanding (literacy, education), part of it is about the personal/common duality, part of it is about being hopeless about having an impact, part of it is about expressing change as a positive goal and a new possible way (alternative), not a fight against an issue. About the advocacy engine, I think &lt;strong&gt;our preoccupation should be people-centric and the aim to give them a short, medium and long term narrative to get action without being individuals-centric&lt;/strong&gt;.&lt;/p&gt;
+ &lt;h5&gt;How we build it ?&lt;/h5&gt;
+ &lt;p&gt;How to build a social movement ? How it has been built in the past ? Is it the same today ? Can it be transposed to the digital domain from others social domains ? How strong are the cultural differences between nations? These are the main questions we should answer, and our pivot era gives us many examples in diverse domains (climate change advocates, Syriza &amp;amp; Podemos, NSA &amp;amp; surveillance services in Europe, empowered syndicates in Venezuela, &lt;a href=&quot;http://blogs.valvesoftware.com/economics/why-valve-or-what-do-we-need-corporations-for-and-how-does-valves-management-structure-fit-into-todays-corporate-world/#more-252&quot;&gt;Valve corp. internal organization&lt;/a&gt;…) to set a search terrain. However, I will go strait to my intuitive understanding below.&lt;br /&gt;
+ I’m kind of worried that it’s imagined to build the advocacy engine themes by a top-down method. &lt;strong&gt;I think a successful advocacy is always built bottom-up&lt;/strong&gt;, as its function is to give back the voice to the people, to get them involved, not to make them fulfill our predefined aims. The top-down method is too organization centric: it can’t massively drive people that are not already committed to the org. It’s usually named advertisement or propaganda. If we want to have impact, &lt;strong&gt;we should listen to people needs, not tell them to listen to ours. People want (first) to be empowered, not to empower an org&lt;/strong&gt;. So let’s organize the infrastructure, set the agenda and draw the horizon (strategic understanding) participative: make people fill them with content of their experience. It seems to me it is the only way, the only successful method, if we want to build a movement, and not just a shifting moment (that could be built by the top, with a good press campaign locally relayed for example ; that’s what happen in old style politics: the aim is short term, to cleave).&lt;br /&gt;
+ &lt;strong&gt;Isn’t the advocacy engine a new Drumbeat ?&lt;/strong&gt; We shifted from Drumbeat to Webmaker+web literacy to Mozilla Academy and now to Leadership plus advocacy: it could be good to tell that story now that we are shifting again and learn from it.&lt;br /&gt;
+ &lt;strong&gt;Mozilla should support, behave as a platform&lt;/strong&gt;, not define, not focus. Letting the people set the agenda makes them more involved and is a good way to build a network of shared aims with other orgs, that is not invasive or alienating, but a support relationship in a win-win move. The strength comes from the all agendas sewed. So at an org level, let’s on-board allies organizations as soon as plan building-time (now), to build it together. Yes it’s slower, but much more massive, inclusive and persistent.&lt;/p&gt;
+ &lt;h5&gt;How we evaluate it: cultural bias &amp;amp; qualitative analysis&lt;/h5&gt;
+ &lt;p&gt;First, about the agenda-setting KPI for 2016, should these KPI be an evaluation of the inclusion and rank in others strategic agendas, governance systems and productions (outcome/products) ? Others org could be from different domains: political, social, economy orgs.&lt;br /&gt;
+ Then, as a wide size audience KPI, Mozilla wants « &lt;em&gt;celebration of our campaigns with ‘headline KPIs’ including number of actions, and number of advocates.&lt;/em&gt;« . While doing this could be the right thing to do for some cultures, it could be the worst for others. I think that these KPI don’t carry a meaning for people and are too org centric. In a way, they are to generic: it’s just an amount. &lt;strong&gt;Accumulation is not our goal: we want impact that is the grow of articulated actions&lt;/strong&gt; made by diverse people toward the same aim. &lt;strong&gt;We need our massive KPI to be more qualitative&lt;/strong&gt;, or at least find a way to present them in a more qualitative way: interactive map ? a global to local prism that engages people for the next step ?&lt;/p&gt;
+ &lt;h5&gt;Best practices &amp;amp; massive impact&lt;/h5&gt;
+ &lt;p&gt;Selecting best practices are an appealing method when we want to have a fast and strong impact in a wide area. However, &lt;strong&gt;when we unify we should avoid to homogenize&lt;/strong&gt;. The gain in area by scaling-up is always at the cost of loosing local impact because it is not corresponding to local specificities, hence to local expectations. Federating instead of scaling-up is a way to solve this challenge. So we should be careful to not &lt;strong&gt;use best practice as absolute solutions, but as solutions in a context&lt;/strong&gt; if we want to transpose them massively.&lt;/p&gt;
+ &lt;h5&gt;Tools &amp;amp; platform balanced between user-centric and org-centric outcomes&lt;/h5&gt;
+ &lt;p&gt;It’s good to hear that we will build a advocacy platform. As we ‘had’ bugzilla+svn then mercurial (hg)+… and are going to the &lt;strong&gt;integrated&lt;/strong&gt;, &lt;strong&gt;pluggable&lt;/strong&gt; and &lt;strong&gt;content-centric&lt;/strong&gt; (but non-free; admin tools are closed source) github (targeting more coder than users, but with a lower entry price for users still), we need to be able to have the same kind of tool for advocates and leaders. Something inspired maybe at some levels by the remixing tools we built in Webmakers for web users.&lt;/p&gt;
+ &lt;h4&gt;From experiment to production: support (self made to mass product) + modularity (dev code patch to users add-ons).&lt;/h4&gt;
+ &lt;p&gt;&lt;strong&gt;We need pathways from lab to home that carry different mix of customization and reliability to support the emancipation curve.&lt;/strong&gt;&lt;br /&gt;
+ Users want things to work, because they want to use it. Geeks want to be able to modify a lot and accept to put their hands in the engine to build growing reliability. Advanced users want to customize their experience and keep control and understanding on working status. They want to be able to fix the reliability at a medium/low technical cost. They are OK to gain more control at these prices. Users want to use things to do what they need and want to trust a reliability maintained for them. They are OK to gain control at a no technical cost. Depending on the matter we all have different skill levels, so we are all geeks, advanced users and users depending on our position or on the moment. And depending on our aspirations, we all want to be able to move from one category to an other. That’s what we need to build: we don’t just need to « &lt;em&gt;better articulate the value to our audiences&lt;/em&gt;« , &lt;strong&gt;we need to build pathways thought audiences and thought IT layers&lt;/strong&gt; (content, software, hardware, distant service). &lt;strong&gt;We should find a convergence between customization and reliability, between first time experience, support and add-ons thought all our users’ persona by building bridges, pathways&lt;/strong&gt;. So, « &lt;em&gt;better articulate the value to our audiences&lt;/em&gt; » should not be restrained in our minds to the Mozilla Leadership Network.&lt;br /&gt;
+ &lt;strong&gt;Part of this is being done in other projects outside of Mozilla in the commons movement.&lt;/strong&gt; There are many, but let’s take just one example, the &lt;a href=&quot;https://www.fairphone.com/&quot;&gt;Fairphone&lt;/a&gt; project: modularity, howtos, … all this help to break the product-to-use walls and drive appropriation/emancipation. &lt;strong&gt;Products are less product and brand centric and more people/user centric&lt;/strong&gt;.&lt;br /&gt;
+ Part of this has been done inside Mozilla, like integrating learning in our products, in-content, as we have code comment on code. I think &lt;strong&gt;the &lt;a href=&quot;https://wiki.mozilla.org/Firefox_OS/Spark&quot;&gt;Spark&lt;/a&gt; project on Firefox OS is on a promising path&lt;/strong&gt;, even if maybe immature: it maybe has not been released mainstream because it misses bridges/pathways (on-boarding levels, progression from simple to high level techniques, and no or not enough reproducible/universal next task/skill building).&lt;br /&gt;
+ So some solutions start to emerge, the direction is here, but has never been conceived and implemented that globally, as there isn’t integrated pathways with choice and opportunity and a strategy embracing all products and technologies (platform, tools, …).&lt;/p&gt;
+ &lt;h4&gt;Better tools for collaboration and participation: task-centric to process-centric (use) infrastructure&lt;/h4&gt;
+ &lt;p&gt;&lt;strong&gt;The open community should definitely improve the collaboration tools and infrastructure to ease participation.&lt;/strong&gt;&lt;br /&gt;
+ &lt;strong&gt;&lt;a href=&quot;http://www.discourse.org&quot;&gt;Discourse&lt;/a&gt; ‘merged’ discussion channels&lt;/strong&gt;: email+forum(+instant, messaging, … and others peer-to-peer discussion?). &lt;strong&gt;&lt;a href=&quot;http://stackexchange.com&quot;&gt;Stack exchange&lt;/a&gt; merged the questioning/solving process&lt;/strong&gt; and added a vote mechanism to rank answers: it eased the collaboration on editing the statement and the results while staying synchronous with the discussion and keeping the discussion history. We need such kind of possibilities with discourse: &lt;strong&gt;capitalize on the discussion and preview the results to build a plan.&lt;/strong&gt;&lt;br /&gt;
+ This exist in document oriented software (that added collaboration editing tools), but not that much in collaboration software (that don’t produce documents). For example, while discussing the future plan for Fx/FxOS be supported to keep track on a doc about the proposals plans + criteria &amp;amp; dependencies. In action, it is from &lt;a href=&quot;https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003063.html&quot;&gt;this&lt;/a&gt; plus all the discussion taking place to &lt;a href=&quot;https://mail.mozilla.org/pipermail/firefox-dev/2015-July/003119.html&quot;&gt;that&lt;/a&gt;.&lt;br /&gt;
+ This is maybe something like integrating Discourse+Wiki, maybe with the need to have competing and ranked (both for content and underlaying meaning of content=strategy?) plan/page proposals. &lt;strong&gt;From evolving the wiki discussion page to featuring document production into peer-to-peer discussion.&lt;/strong&gt;&lt;/p&gt;
+ &lt;h4&gt;A recovering strategy: from fail to win&lt;/h4&gt;
+ &lt;p&gt;There is maybe one thing that is in the shadow in this plan: &lt;strong&gt;what do we do when/if we (partially) fail ?&lt;/strong&gt;&lt;br /&gt;
+ I think at least we should say that &lt;strong&gt;we document&lt;/strong&gt; (keep research going on) to be able to outline and spread the outcomes of what we tried to fight against. So we still try to built consciousness to be ready for the next round.&lt;/p&gt;
+ &lt;p&gt; &lt;/p&gt;
+ &lt;p&gt;&lt;em&gt;If you see some contradiction in my thoughts, let’s say it’s my state of thinking right now: please voice them so we can go forward.&lt;/em&gt;&lt;br /&gt;
+ &lt;em&gt; The same for thoughts that are voiced definitive (like users are): take it as a first attempt with my bias: let’s state these bias to go forward.&lt;/em&gt;&lt;/p&gt;
+ &lt;div class=&quot;footnotes&quot; id=&quot;footnotes-48&quot;&gt;
+ &lt;div class=&quot;footnotedivider&quot;&gt;&lt;/div&gt;
+ &lt;ol&gt;
+ &lt;li id=&quot;fn-48-1&quot;&gt; ‘&lt;em&gt;Radical&lt;/em&gt;‘ can be in some cultures an euphemism to ‘&lt;em&gt;violent&lt;/em&gt;‘. Let’s be clear that the change by increasing violence is done to make a popular uprising of some part against others. While it does not help the majority to magically understand that the minority is right, it stigmatize the radical-violent-changers and in the way it discredits the alternative proposed. &lt;span class=&quot;footnotereverse&quot;&gt;&lt;a href=&quot;https://repeer.org/tag/mozilla/feed/#fnref-48-1&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;/ol&gt;
+ &lt;/div&gt;</description>
+ <pubDate>Sat, 16 Jan 2016 00:27:13 +0000</pubDate>
+ <dc:creator>Nicolas</dc:creator>
+ </item>
+ <item>
+ <title>Will Kahn-Greene: pyvideo status: January 15th, 2016</title>
+ <guid isPermaLink="true">http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html</guid>
+ <link>http://bluesock.org/%7Ewillkg/blog/pyvideo/status_20160115.html</link>
+ <description>&lt;div class=&quot;section&quot; id=&quot;what-is-pyvideo-org&quot;&gt;
+ &lt;h3&gt;What is pyvideo.org&lt;/h3&gt;
+ &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://pyvideo.org/&quot;&gt;pyvideo.org&lt;/a&gt; is an index of Python-related conference and user-group videos on
+ the Internet. Saw a session you liked and want to share it? It's likely you can
+ find it, watch it, and share it with pyvideo.org.&lt;/p&gt;
+ &lt;p&gt;This is the latest status report for all things happening on the site.&lt;/p&gt;
+ &lt;p&gt;It's also an announcement about the end.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;http://bluesock.org/~willkg/blog/pyvideo/status_20160115.html&quot;&gt;Read more…&lt;/a&gt; (5 mins to read)&lt;/p&gt;&lt;/div&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 23:30:00 +0000</pubDate>
+ <dc:creator>Will Kahn-Greene</dc:creator>
+ </item>
+ <item>
+ <title>Chris Cooper: RelEng &amp; RelOps Weekly Highlights - January 15, 2016</title>
+ <guid isPermaLink="true">http://coopcoopbware.tumblr.com/post/137371863755</guid>
+ <link>http://coopcoopbware.tumblr.com/post/137371863755</link>
+ <description>&lt;p&gt;One of releng’s big goals for Q1 is to deliver a beta via &lt;a href=&quot;https://bugzil.la/release-promotion&quot; target=&quot;_blank&quot;&gt;build promotion&lt;/a&gt;. It was great to have some tangible progress there this week with bouncer submission.&lt;/p&gt;
+
+ &lt;p&gt;Lots of other stuff in-flight, more details below!
+ &lt;/p&gt;&lt;p&gt;&lt;b&gt;Modernize infrastructure&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Dustin worked with Armen and Joel Maher to run Firefox tests in TaskCluster on an older EC2 instance type where the tests seem to fail less often, perhaps because they are single-CPU or slower.&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Improve CI pipeline&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;We turned off automation for b2g 2.2 builds this week, which allowed us to remove some code, reduce some complexity, and regain some small amount of capacity. Thanks to Vlad and Alin on buildduty for helping to land those patches. (&lt;a href=&quot;https://bugzil.la/1236835&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1236835&lt;/a&gt; and &lt;a href=&quot;https://bugzil.la/1237985&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1237985&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;In a similar vein, Callek landed code to disable all b2g desktop builds and tests on all trees. Another win for increased capacity and reduced complexity! (&lt;a href=&quot;https://bugzil.la/1236835&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1236835&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Release&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Kim finished integrating bouncer submission with our release promotion project. That’s one more blocker out of the way! (&lt;a href=&quot;https://bugzil.la/1215204&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1215204&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;Ben landed several enhancements to our update server: adding aliases to update rules (&lt;a href=&quot;https://bugzil.la/1067402&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1067402&lt;/a&gt;), and allowing fallbacks for rules with whitelists (&lt;a href=&quot;https://bugzil.la/1235073&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/1235073&lt;/a&gt;).&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Operational&lt;/b&gt;:&lt;/p&gt;
+ &lt;p&gt;There was some excitement last Sunday when all the trees were closed due to timeouts connectivity issues between our SCL3 datacentre and AWS. (&lt;a href=&quot;https://bugzil.la/238369&quot; target=&quot;_blank&quot;&gt;https://bugzil.la/238369&lt;/a&gt;)&lt;/p&gt;
+
+ &lt;p&gt;&lt;b&gt;Build config&lt;/b&gt;:&lt;/p&gt;
+
+ &lt;p&gt;Mike released v0.7.4 of &lt;a href=&quot;http://gittup.org/tup/&quot; target=&quot;_blank&quot;&gt;tup&lt;/a&gt;, and is working on generating the tup backend from moz.build. We hope to offer tup as an alternative build backend sometime soon.&lt;/p&gt;
+
+ &lt;p&gt;See you all next week!&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 22:44:13 +0000</pubDate>
+ </item>
+ <item>
+ <title>Air Mozilla: Webdev Beer and Tell: January 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/webdev-beer-and-tell-january-2016/</guid>
+ <link>https://air.mozilla.org/webdev-beer-and-tell-january-2016/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Webdev Beer and Tell: January 2016&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/35/0f/350f246037ead3bab95fdbd4c2b77484.png&quot; width=&quot;160&quot; /&gt;
+ Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on in...
+ &lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 22:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>Support.Mozilla.Org: What’s up with SUMO – 15th January</title>
+ <guid isPermaLink="false">http://blog.mozilla.org/sumo/?p=3665</guid>
+ <link>https://blog.mozilla.org/sumo/2016/01/15/whats-up-with-sumo-15th-january/</link>
+ <description>&lt;p&gt;&lt;strong&gt;Hello, SUMO Nation!&lt;/strong&gt;&lt;/p&gt;
+ &lt;p&gt;The second post of the year is here. Have you had a good time in 2016 so far? Let us know in the comments!&lt;/p&gt;
+ &lt;p&gt;Now, let’s get going with the updates and activity summaries. It will be brief today, I promise.&lt;/p&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-name&quot;&gt;Welcome, new contributors!&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li class=&quot;author&quot;&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;a class=&quot;username&quot; href=&quot;https://support.mozilla.org/en-US/user/Andy.Yang&quot;&gt;Andy.Yang&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;author&quot;&gt;After the massive influx over the last few weeks, we only had Andy introducing himself recently – the warmer the welcome for him!&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;If you just joined us, don’t hesitate – come over and &lt;a href=&quot;https://support.mozilla.org/forums/buddies&quot; target=&quot;_blank&quot;&gt;say “hi” in the forums!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Contributors of the week&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/sumo/2016/01/08/whats-up-with-sumo-8th-january/&quot; target=&quot;_blank&quot;&gt;All the people who joined us in the winter season so far!&lt;/a&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid64&quot;&gt;
+ &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;We salute you!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can &lt;a href=&quot;https://support.mozilla.org/forums/buddies/711364?last=65670&quot; target=&quot;_blank&quot;&gt;nominate them for the Buddy of the Month!&lt;/a&gt;&lt;/div&gt;
+ &lt;div class=&quot;author&quot;&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;h3&gt;&lt;strong&gt;Most recent SUMO Community meeting&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-11&quot; target=&quot;_blank&quot;&gt;You can read the notes here&lt;/a&gt; and see the video on our &lt;a href=&quot;https://www.youtube.com/channel/UCaiposaIhA7HfMqH2NIciyA/videos&quot; target=&quot;_blank&quot;&gt;YouTube channel&lt;/a&gt; and &lt;a href=&quot;https://air.mozilla.org/search/?q=sumo&quot; target=&quot;_blank&quot;&gt;at AirMozilla&lt;/a&gt;.&lt;del&gt; &lt;/del&gt;&lt;del&gt;&lt;br /&gt;
+ &lt;/del&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;IMPORTANT: We are considering changing the way the meetings work. Help us figure out what’s best for you – join the discussion on the forums in this thread: &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/711752?last=67873&quot;&gt;(Monday) Community Meetings in 2016&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;The next SUMO Community meeting… &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;is happening on &lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-2016-01-18&quot; target=&quot;_blank&quot;&gt;Monday the 18th – join us&lt;/a&gt;!&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Reminder: if you want to add a discussion topic to the upcoming meeting agenda:&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Start a thread in the &lt;a href=&quot;https://support.mozilla.org/forums/contributors&quot; target=&quot;_blank&quot;&gt;Community Forums&lt;/a&gt;, so that everyone in the community can see what will be discussed and voice their opinion here before Monday (this will make it easier to have an efficient meeting).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).&lt;/li&gt;
+ &lt;li style=&quot;text-align: left;&quot;&gt;If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Developers&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The new version of the Ask A Question page is here!&lt;/li&gt;
+ &lt;li&gt;The 2.0 version of the KPI dashboard is in the works.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;http://edwin.mozilla.io/t/sumo&quot; target=&quot;_blank&quot;&gt;You can see the current state of the backlog our developers are working on here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://public.etherpad-mozilla.org/p/sumo-p-2016-01-14&quot; target=&quot;_blank&quot;&gt;The latest SUMO Platform meeting notes can be found here&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Interested in learning how Kitsune (the engine behind SUMO) works? &lt;a href=&quot;http://kitsune.readthedocs.org/&quot; target=&quot;_blank&quot;&gt;Read more about it here&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/kitsune/&quot; target=&quot;_blank&quot;&gt;fork it on GitHub&lt;/a&gt;!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Our awesome Bangladesh SUMO Warriors are on the road again! Follow their adventures on Twitter under this tag: &lt;a href=&quot;https://twitter.com/search?q=%23sumotourctg&quot; target=&quot;_blank&quot;&gt;#sumotourctg&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711729?last=67763&quot;&gt;Reminder: take a look at our Work Week Summary for Mozlando. We need your feedback for a few things there.&lt;/a&gt;&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;Ongoing reminder: if you think you can benefit from getting &lt;a href=&quot;https://wiki.mozilla.org/Community_Hardware&quot; target=&quot;_blank&quot;&gt;a second-hand device&lt;/a&gt; to help you with contributing to SUMO, you know where to find us.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;&lt;strong class=&quot;user-chip&quot; title=&quot;adriel0415&quot;&gt;Support Forum&lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Say hello to the new people on the forums!
+ &lt;ul&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/Tomi55&quot; target=&quot;_blank&quot;&gt;Tomi55&lt;/a&gt; (Hungarian)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/jdc20181&quot; target=&quot;_blank&quot;&gt;jdc20181&lt;/a&gt; (English)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/andexi&quot; target=&quot;_blank&quot;&gt;andexi&lt;/a&gt; (Spanish)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/Qantas94Heavy&quot; target=&quot;_blank&quot;&gt;Qantas94Heavy&lt;/a&gt; (English)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/samuelms79&quot; target=&quot;_blank&quot;&gt;samuelms79&lt;/a&gt; (Brazilian-PT)&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zkz70z39yz83zw7ykz89z3gz82zt&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/user/jorgecomun&quot; target=&quot;_blank&quot;&gt;jorgecomun&lt;/a&gt; (Spanish)&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;div class=&quot;&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Knowledge Base&lt;/strong&gt;&lt;/h3&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid90&quot;&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid82&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-z87zjz80zxwjz85z4z65zytdpz68zoz69z&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/knowledge-base-articles/711304#post-65289&quot; target=&quot;_blank&quot;&gt;Thanks to everyone who took part in the most recent KB Day!&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;Version 44 updates should be live now.&lt;/li&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-w2dz70zaz70z7z89zqz78ziz69zz78zz85zz90zj&quot;&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1lkpRPJp9P1P5MRU-c9dwbDC0w5bMmrMdu-BNMp1xe8w/edit#gid=6&quot; target=&quot;_blank&quot;&gt;Ongoing reminder: learn more about upcoming English article updates by clicking here&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Ongoing reminder #2:&lt;a href=&quot;https://support.mozilla.org/forums/knowledge-base-articles/&quot; target=&quot;_blank&quot;&gt; do you have ideas about improving the KB guidelines and training materials? Let us know in the forums&lt;/a&gt;!&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid83&quot;&gt;
+ &lt;h3&gt;&lt;strong class=&quot;author-g-ivsra51ph44x461i&quot;&gt;Localization&lt;/strong&gt;&lt;/h3&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid95&quot;&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Thanks to everyone writing in with problems, ideas, reports of bugs – all your feedback matters!&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid75&quot;&gt;
+ &lt;h3&gt;&lt;strong&gt;Firefox&lt;br /&gt;
+ &lt;/strong&gt;&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Android&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711712?last=67653&quot;&gt;Learn more about Firefox 43 for Android from the official thread with release notes / issues / discussions&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;div class=&quot;title&quot;&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/711718?last=67822&quot;&gt;Reminder: Roland is sharing Firefox 44 for Android release notes / issues / discussions&lt;/a&gt; with everyone in the forum.&lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for Desktop&lt;/strong&gt;
+ &lt;ul&gt;
+ &lt;li&gt;The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1238620&quot; target=&quot;_blank&quot;&gt;uploading issues reported by many users are being tracked here.&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/questions/firefox?tagged=bug1208145&amp;amp;show=all&quot; target=&quot;_blank&quot;&gt;The “show passwords” button has been removed from the password manager for the Beta of Version 44&lt;/a&gt;. The developers are looking into &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1208145&quot; target=&quot;_blank&quot;&gt;last minute fixes for that in this bug&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Also in Version 44, the &lt;span class=&quot;author-a-kz88zz80zhz89z6hlz81znytez70zz66zz68z&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=606655&quot; target=&quot;_blank&quot;&gt;“ask me everytime” option for cookies will be removed from the privacy panel.&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;for iOS&lt;/strong&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid85&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/firefox/ios/1.4/releasenotes/&quot; target=&quot;_blank&quot;&gt;Firefox for iOS 1.4 primarily with features for China is here&lt;/a&gt;.&lt;br /&gt;
+ &lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;div class=&quot;&quot; id=&quot;magicdomid86&quot;&gt;
+ &lt;ul class=&quot;list-bullet1&quot;&gt;
+ &lt;li&gt;&lt;span class=&quot;author-a-107uz69zz81zhz78z0z78zz84zz66zz76zz82zz77zj&quot;&gt;Firefox for iOS 2.0 is after 1.4 and hopefully sometime this quarter!&lt;/span&gt;&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;/div&gt;
+ &lt;p&gt;Not that many updates this week, since we’re coming out of our winter slumber (even though winter will be here for a while, still) and plotting an awesome 2016 with you and for you. Take it easy, have a great weekend and see you around SUMO.&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 19:38:51 +0000</pubDate>
+ <dc:creator>Michał</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: Paris Firefox OS Hackathon Presentations</title>
+ <guid isPermaLink="true">https://air.mozilla.org/paris-firefox-os-hackathon-presentations/</guid>
+ <link>https://air.mozilla.org/paris-firefox-os-hackathon-presentations/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Paris Firefox OS Hackathon Presentations&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/35/83/358305bfa246fff07d707061082134aa.png&quot; width=&quot;160&quot; /&gt;
+ As an introduction to this weekend's Firefox OS Hackathon in Paris we'll have two presentations: - Guillaume Marty will talk about the current state of...
+ &lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 18:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+ <item>
+ <title>J.C. Jones: Renewing Let's Encrypt Certs (Nginx)</title>
+ <guid isPermaLink="false">https://tacticalsecret.com/tag/mozilla/rss/db7fec0c-34d3-4633-9904-79b98aab34e7</guid>
+ <link>https://tacticalsecret.com/renewing-lets-encrypt-certs-nginx/</link>
+ <description>&lt;p&gt;All the first &lt;a href=&quot;https://crt.sh/?id=10172479&quot;&gt;Let's Encrypt certs for my websites&lt;/a&gt; from the LE private beta began expiring last week, so it was time to work through the renewal tooling. I wanted a script that:&lt;/p&gt;
+
+ &lt;ol&gt;
+ &lt;li&gt;Would be okay to run daily, so there'd be plenty of retries if something went wrong, &lt;/li&gt;
+ &lt;li&gt;Wouldn't require extra config for me to forget about if I add a new site, &lt;/li&gt;
+ &lt;li&gt;Would only renew certificates expiring in the next few weeks.&lt;/li&gt;
+ &lt;/ol&gt;
+
+ &lt;p&gt;The official Let's Encrypt client team is hard at work producing a great renew tool to handle all this, but it's not released yet. Of course I could use &lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy Server&lt;/a&gt; that &lt;a href=&quot;https://www.youtube.com/watch?v=nk4EWHvvZtI&quot;&gt;just handles all this&lt;/a&gt;, but I have a lot invested in Nginx here.&lt;/p&gt;
+
+ &lt;p&gt;So I wrote a short script and &lt;a href=&quot;https://gist.github.com/jcjones/432eeaa6a2bf25e2c746&quot;&gt;put it up in a Gist&lt;/a&gt;. &lt;/p&gt;
+
+ &lt;p&gt;The script is designed to run daily, with a random start between 00:00 and 02:00 to protect against load spikes at Let's Encrypt's infrastructure. It doesn't do any real reporting, though, except to maintain &lt;code&gt;/var/log/letsencrypt/renew.log&lt;/code&gt; as the most-recent failure if one fails.&lt;/p&gt;
+
+ &lt;p&gt;It's written to handle Nginx with Upstart's &lt;code&gt;service&lt;/code&gt; command. It's pretty modular though; you could make this operate any webserver, or use the webroot method quite easily. Feel free to use the OpenSSL SubjectAlternativeName processing code for whatever purposes you have.&lt;/p&gt;
+
+ &lt;p&gt;Happy renewing!&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 16:01:19 +0000</pubDate>
+ <dc:creator>James 'J.C.' Jones</dc:creator>
+ </item>
+ <item>
+ <title>Yunier José Sosa Vázquez: Conoce los complementos destacados para enero</title>
+ <guid isPermaLink="false">http://firefoxmania.uci.cu/?p=15521</guid>
+ <link>http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/</link>
+ <description>&lt;p style=&quot;text-align: left;&quot;&gt;Comenzó un nuevo año y con él, te traemos nuevos e interesantes complementos para tu navegador preferido que mejoran con creces tu experiencia de navegación. Durante los próximos 6 meses estará trabajando nuevos miembros en el Add-ons Board Team, en la próxima selección desde Firefoxmanía te avisaremos.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;Elección del mes: uMatrix&lt;/h3&gt;
+ &lt;p&gt;uMatrix es muy parecido a un &lt;em&gt;firewall&lt;/em&gt; y desde una ventana fácilmente podrás controlar todos los lugares a donde tu navegador tiene permitido conectarse, qué tipo de datos pueden descargarse y cual puede ejecutar.&lt;/p&gt;
+ &lt;blockquote&gt;&lt;p&gt;Esta puede ser la extensión perfecta para el control avanzado de los usuarios.&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;p&gt;&lt;span id=&quot;more-15521&quot;&gt;&lt;/span&gt;&lt;/p&gt;
+
+ &lt;a href=&quot;http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix/&quot;&gt;&lt;img alt=&quot;Interfaz principal de uMatrix&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; height=&quot;160&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix-160x160.png&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;
+ &lt;a href=&quot;http://firefoxmania.uci.cu/conoce-los-complementos-destacados-para-enero-2016/umatrix2/&quot;&gt;&lt;img alt=&quot;Opciones de configuración de uMatrix&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; height=&quot;160&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/uMatrix2-160x160.png&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;
+
+ &lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/umatrix/&quot; target=&quot;_blank&quot;&gt;Instalar uMatrix »&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
+ &lt;h3&gt;También te recomendamos&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/https-everywhere/&quot; target=&quot;_blank&quot;&gt;⇒ HTTPS Everywhere&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/user/eff-technologists/&quot; title=&quot;EFF Technologists&quot;&gt;EFF Technologists&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Protege tus comunicaciones habilitando la encriptación HTTPS automáticamente en los sitios conocidos que la soportan, incluso cuando navegas mediante sitios que no incluyen el prefijo “https” en la URL.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/add-to-search-bar/&quot; target=&quot;_blank&quot;&gt;⇒ Add to Search Bar&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/firefox/user/dr-evil/&quot; target=&quot;_blank&quot; title=&quot;AdblockLite&quot;&gt;Dr. Evil&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Hace posible que cualquier página con un formulario de búsqueda disponible pueda ser añadido fácilmente a la barra de búsqueda de Firefox.&lt;/p&gt;
+ &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_15528&quot; style=&quot;width: 262px;&quot;&gt;&lt;a href=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar.png&quot; rel=&quot;attachment wp-att-15528&quot;&gt;&lt;img alt=&quot;add_to_search_bar&quot; class=&quot;wp-image-15528 size-medium&quot; height=&quot;226&quot; src=&quot;http://firefoxmania.uci.cu/wp-content/uploads/2016/01/add_to_search_bar-252x226.png&quot; width=&quot;252&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Añadiendo la búsqueda de un sitio web a la barra de búsqueda&lt;/p&gt;&lt;/div&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://addons.firefoxmania.uci.cu/duplicate-tabs-closer/&quot; target=&quot;_blank&quot;&gt;⇒ Duplicate Tabs Closer&lt;/a&gt; por &lt;a href=&quot;https://addons.mozilla.org/firefox/user/peuj/&quot; target=&quot;_blank&quot; title=&quot;The 1-Click YouTube Video Download Team&quot;&gt;Peuj&lt;/a&gt;&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;Detecta las pestañas duplicadas en tu navegador y automáticamente las cierra.&lt;/p&gt;
+ &lt;h3 style=&quot;text-align: left;&quot;&gt;Nomina tus complementos favoritos&lt;/h3&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;A nosotros nos encantaría que &lt;strong&gt;fueras parte del proceso&lt;/strong&gt; de seleccionar los mejores complementos para Firefox y nos gustaría escucharte. &lt;em&gt;¿No sabes cómo?&lt;/em&gt; Sólo tienes que &lt;em&gt;enviar un correo electrónico&lt;/em&gt; a la dirección &lt;strong&gt;amo-featured@mozilla.org&lt;/strong&gt; con el nombre del complemento o el archivo de instalación y los miembros evaluarán tu recomendación.&lt;/p&gt;
+ &lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Fuente:&lt;/strong&gt; &lt;a href=&quot;https://blog.mozilla.org/addons/2016/01/01/january-2016-featured-add-ons/&quot; target=&quot;_blank&quot;&gt;Mozilla Add-ons Blog&lt;/a&gt;&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 15:10:26 +0000</pubDate>
+ <dc:creator>Yunier J</dc:creator>
+ </item>
+ <item>
+ <title>Tim Taubert: Build Your Own Signal Desktop</title>
+ <guid isPermaLink="false">https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop</guid>
+ <link>https://timtaubert.de/blog/2016/01/build-your-own-signal-desktop/</link>
+ <description>&lt;p&gt;The Signal Private Messenger is great. &lt;strong&gt;Use it.&lt;/strong&gt; It’s probably the best secure
+ messenger on the market. When recently a desktop app was announced people were
+ eager to join the beta and even happier when an invite finally showed up in
+ their inbox. So was I, it’s a great app and works surprisingly well for an early
+ version.&lt;/p&gt;
+
+ &lt;p&gt;The only problem is that it’s a Chrome App. Apart from excluding folks with
+ other browsers it’s also a shitty user experience. If you too want your
+ messaging app not tied to a browser then let’s just build our own standalone
+ variant of Signal Desktop.&lt;/p&gt;
+
+ &lt;h3&gt;NW.js beta with Chrome App support&lt;/h3&gt;
+
+ &lt;p&gt;Signal Desktop is a Chrome App, so the easiest way to turn it into a standalone
+ app is to use &lt;a href=&quot;http://nwjs.io/&quot;&gt;NW.js&lt;/a&gt;. Conveniently, their next release v0.13
+ will ship with Chrome App support and is available for download as a beta
+ version.&lt;/p&gt;
+
+ &lt;p&gt;First, make sure you have &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; installed. Then open a terminal and
+ prepare a temporary build directory to which we can download a few things and
+ where we can build the app:&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ mkdir signal-build
+ $ cd signal-build
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;h3&gt;[OS X] Packaging Signal and NW.js&lt;/h3&gt;
+
+ &lt;p&gt;Download the latest beta of NW.js and &lt;code&gt;unzip&lt;/code&gt; it. We’ll extract the application
+ and use it as a template for our Signal clone. The NW.js project does
+ unfortunately not seem to provide a secure source (or at least hashes)
+ for their downloads.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ unzip nwjs-sdk-v0.13.0-beta3-osx-x64.zip
+ $ cp -r nwjs-sdk-v0.13.0-beta3-osx-x64/nwjs.app SignalPrivateMessenger.app
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Next, clone the Signal repository and use NPM to install the necessary modules.
+ Run the &lt;code&gt;grunt&lt;/code&gt; automation tool to build the application.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Finally, simply to copy the &lt;code&gt;dist&lt;/code&gt; folder containing all the juicy Signal files
+ into the application template we created a few moments ago.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cp -r dist ../SignalPrivateMessenger.app/Contents/Resources/app.nw
+ $ open ..
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;The last command opens a Finder window. Move &lt;code&gt;SignalPrivateMessenger.app&lt;/code&gt; to
+ your Applications folder and launch it as usual. You should now see a welcome
+ page!&lt;/p&gt;
+
+ &lt;h3&gt;[Linux] Packaging Signal and NW.js&lt;/h3&gt;
+
+ &lt;p&gt;The build instructions for Linux aren’t too different but I’ll write them down,
+ if just for convenience. Start by cloning the Signal Desktop repository and
+ build.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git clone https://github.com/WhisperSystems/Signal-Desktop.git
+ $ cd Signal-Desktop/
+ $ npm install
+ $ node_modules/grunt-cli/bin/grunt
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;The &lt;code&gt;dist&lt;/code&gt; folder contains the app, ready to be launched. &lt;code&gt;zip&lt;/code&gt; it and place
+ the resulting package somewhere handy.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cd dist
+ $ zip -r ../../package.nw *
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Back to the top. Download the NW.js binary, extract it, and change into the
+ newly created directory. Move the &lt;code&gt;package.nw&lt;/code&gt; file we created earlier next to
+ the &lt;code&gt;nw&lt;/code&gt; binary and we’re done. The &lt;code&gt;nwjs-sdk-v0.13.0-beta3-linux-x64&lt;/code&gt; folder
+ does now contain the standalone Signal app.&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ cd ../..
+ $ wget http://dl.nwjs.io/v0.13.0-beta3/nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ tar xfz nwjs-sdk-v0.13.0-beta3-linux-x64.tar.gz
+ $ cd nwjs-sdk-v0.13.0-beta3-linux-x64
+ $ mv ../package.nw .
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;p&gt;Finally, launch NW.js. You should see a welcome page!&lt;/p&gt;
+
+ &lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ ./nw
+ &lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
+
+
+ &lt;h3&gt;If you see something, file something&lt;/h3&gt;
+
+ &lt;p&gt;Our standalone Signal clone mostly works, but it’s far from perfect. We’re
+ pulling from master and that might bring breaking changes that weren’t
+ sufficiently tested.&lt;/p&gt;
+
+ &lt;p&gt;We don’t have the right icons. The app crashes when you click a media message.
+ It opens a blank popup when you click a link. It’s quite big because also NW.js
+ has bugs and so we have to use the SDK build for now. In the future it would be
+ great to have automatic updates, and maybe even signed builds.&lt;/p&gt;
+
+ &lt;p&gt;Remember, Signal Desktop is beta, and completely untested with NW.js. If you
+ want to help file bugs, but only after checking that those affect the Chrome
+ App too. If you want to fix a bug only occurring in the standalone version
+ it’s probably best to file a pull request and cross fingers.&lt;/p&gt;
+
+ &lt;h3&gt;Is this secure?&lt;/h3&gt;
+
+ &lt;p&gt;Great question! I don’t know. I would love to get some more insights from people
+ that know more about the NW.js security model and whether it comes with all the
+ protections Chromium can offer. Another interesting question is whether bundling
+ Signal Desktop with NW.js is in any way worse (from a security perspective) than
+ installing it as a Chrome extension. If you happen to have an opinion about
+ that, I would love to hear it.&lt;/p&gt;
+
+ &lt;p&gt;Another important thing to keep in mind is that when building Signal on your
+ own you will possibly miss automatic and signed security updates from the
+ Chrome Web Store. Keep an eye on the repository and rebuild your app from
+ time to time to not fall behind too much.&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 14:00:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Mike Hommey: Announcing git-cinnabar 0.3.0</title>
+ <guid isPermaLink="true">http://glandium.org/blog/?p=3579</guid>
+ <link>http://glandium.org/blog/?p=3579</link>
+ <description>&lt;p&gt;Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git.&lt;/p&gt;
+ &lt;p&gt;&lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;Get it on github&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;These release notes are also &lt;a href=&quot;https://github.com/glandium/git-cinnabar/wiki/Release-Notes:-0.3.0&quot;&gt;available on the git-cinnabar wiki&lt;/a&gt;.&lt;/p&gt;
+ &lt;p&gt;Development had been stalled for a few months, with many improvements in the&lt;br /&gt;
+ &lt;code&gt;next&lt;/code&gt; branch without any new release. I used some time during the new year&lt;br /&gt;
+ break and after in order to straighten things up in order to create a new&lt;br /&gt;
+ release, delaying many of the originally planned changes to a future 0.4.0&lt;br /&gt;
+ release.&lt;/p&gt;
+ &lt;h3&gt;What’s new since 0.2.2?&lt;/h3&gt;
+ &lt;ul&gt;
+ &lt;li&gt;Speed and memory usage were improved when doing &lt;code&gt;git push&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;Now works on Windows, at least to some extent. See &lt;a href=&quot;http://glandium.org/blog/Windows-Support&quot;&gt;details&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;Support for pre-0.1.0 git-cinnabar repositories was removed. You must first&lt;br /&gt;
+ use a git-cinnabar version between 0.1.0 and 0.2.2 to upgrade its metadata.&lt;/li&gt;
+ &lt;li&gt;It is now possible to attach/graft git-cinnabar metadata to existing commits&lt;br /&gt;
+ matching mercurial changesets. This allows to migrate from some other&lt;br /&gt;
+ hg-to-git tool to git-cinnabar while preserving the existing git commits.&lt;br /&gt;
+ See &lt;a href=&quot;http://glandium.org/blog/Mozilla%3A-Using-a-git-clone-of-gecko%E2%80%90dev-to-push-to-mercurial&quot;&gt;an example of how this works with the git clone of the Gecko mercurial&lt;br /&gt;
+ repository&lt;/a&gt;
+ &lt;/li&gt;
+ &lt;li&gt;Avoid mercurial printing its progress bar, messing up with git-cinnabar’s&lt;br /&gt;
+ output.&lt;/li&gt;
+ &lt;li&gt;It is now possible to fetch from an incremental mercurial bundle (without&lt;br /&gt;
+ a root changeset).&lt;/li&gt;
+ &lt;li&gt;It is now possible to push to a new mercurial repository without &lt;code&gt;-f&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;By default, reject pushing a new root to a mercurial repository.&lt;/li&gt;
+ &lt;li&gt;Make the connection to a mercurial repository through ssh respect the&lt;br /&gt;
+ &lt;code&gt;GIT_SSH&lt;/code&gt; and &lt;code&gt;GIT_SSH_COMMAND&lt;/code&gt; environment variables.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;code&gt;git cinnabar&lt;/code&gt; now has a proper argument parser for all its subcommands.&lt;/li&gt;
+ &lt;li&gt;
+ &lt;/li&gt;
+ &lt;li&gt;A new &lt;code&gt;git cinnabar python&lt;/code&gt; command allows to run python scripts or open a&lt;br /&gt;
+ python shell with the right sys.path to import the cinnabar module.&lt;/li&gt;
+ &lt;li&gt;All git-cinnabar metadata is now kept under a single ref (although for&lt;br /&gt;
+ convenience, other refs are created, but they can be derived if necessary).&lt;/li&gt;
+ &lt;li&gt;Consequently, a new &lt;code&gt;git cinnabar rollback&lt;/code&gt; command allows to roll back to&lt;br /&gt;
+ previous metadata states.&lt;/li&gt;
+ &lt;li&gt;git-cinnabar metadata now tracks the manifests DAG.&lt;/li&gt;
+ &lt;li&gt;A new &lt;code&gt;git cinnabar bundle&lt;/code&gt; command allows to create mercurial bundles,&lt;br /&gt;
+ mostly for debugging purposes, without requiring to hit a mercurial server.&lt;/li&gt;
+ &lt;li&gt;Updated git to 2.7.0 for the native helper.&lt;/li&gt;
+ &lt;/ul&gt;
+ &lt;h3&gt;Development process changes&lt;/h3&gt;
+ &lt;p&gt;Up to before this release closing in, the &lt;code&gt;master&lt;/code&gt; branch was dedicated to&lt;br /&gt;
+ releases, and development was happening on the &lt;code&gt;next&lt;/code&gt; branch, until a new&lt;br /&gt;
+ release happens.&lt;/p&gt;
+ &lt;p&gt;From now on, the &lt;code&gt;release&lt;/code&gt; branch will take dot-release fixes and new&lt;br /&gt;
+ releases, while the &lt;code&gt;master&lt;/code&gt; branch will receive all changes that are&lt;br /&gt;
+ validated through testing (currently semi-automatically tested with&lt;br /&gt;
+ out-of-tree tests based on four real-life mercurial repositories, with&lt;br /&gt;
+ some automated CI based on in-tree tests used in the future).&lt;/p&gt;
+ &lt;p&gt;The &lt;code&gt;next&lt;/code&gt; branch will receive changes to be tested in CI when things&lt;br /&gt;
+ will be hooked up, and may have rewritten history as a consequence of&lt;br /&gt;
+ wanting passing tests on every commit on &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;</description>
+ <pubDate>Fri, 15 Jan 2016 08:56:40 +0000</pubDate>
+ <dc:creator>glandium</dc:creator>
+ </item>
+ <item>
+ <title>Air Mozilla: Web QA Weekly Meeting, 14 Jan 2016</title>
+ <guid isPermaLink="true">https://air.mozilla.org/web-qa-weekly-meeting-20160114/</guid>
+ <link>https://air.mozilla.org/web-qa-weekly-meeting-20160114/</link>
+ <description>&lt;p&gt;
+ &lt;img alt=&quot;Web QA Weekly Meeting&quot; class=&quot;wp-post-image&quot; height=&quot;90&quot; src=&quot;https://air.cdn.mozilla.net/media/cache/f5/13/f5137857516694df0458e837c2d3a4be.png&quot; width=&quot;160&quot; /&gt;
+ This is our weekly gathering of Mozilla'a Web QA team filled with discussion on our current and future projects, ideas, demos, and fun facts.
+ &lt;/p&gt;</description>
+ <pubDate>Thu, 14 Jan 2016 17:00:00 +0000</pubDate>
+ <dc:creator>Air Mozilla</dc:creator>
+ </item>
+
+ </channel>
+</rss>
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_heise.xml b/mobile/android/tests/background/junit4/resources/feed_rss_heise.xml
new file mode 100644
index 000000000..a23399bb8
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_heise.xml
@@ -0,0 +1,1965 @@
+<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet type='text/xsl' href='http://heise.de.feedsportal.com/xsl/de/rss.xsl'?>
+<rss xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
+ <channel>
+ <title>heise online News</title>
+ <link>http://www.heise.de/newsticker/</link>
+ <description>Nachrichten nicht nur aus der Welt der Computer</description>
+ <language>en</language>
+ <copyright>Copyright (c) 2016 Heise Medien</copyright>
+ <pubDate>Wed, 28 Jan 2016 17:36:00 GMT</pubDate>
+ <lastBuildDate>Wed, 27 Jan 2016 17:32:00 GMT</lastBuildDate>
+ <ttl>5</ttl>
+ <item>
+ <title>Google: “Dramatische Verbesserungen” für Chrome in iOS</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Google-Dramatische-Verbesserungen-fuer-Chrome-in-iOS-3085808.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Als Unterbau von iOS-Chrome kommt nun eine neuere, von Apple
+ bereitgestellte Rendering-Engine zum Einsatz, die ohne Leistungseinschränkungen
+ läuft. Manche Funktionen fallen dadurch allerdings weg.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c8260/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 17:32:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085808</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Google-Dramatische-Verbesserungen-fuer-Chrome-in-iOS-3085808.html?wt_mc=rss.ho.beitrag.atom" title="Google: “Dramatische Verbesserungen” für Chrome in iOS"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/2/1/9/image-15fb016575d97662.jpeg" alt="Google Chrome für iOS" /> </a> <p>Als Unterbau von iOS-Chrome kommt nun eine neuere, von Apple bereitgestellte Rendering-Engine zum Einsatz, die ohne Leistungseinschränkungen läuft. Manche Funktionen fallen dadurch allerdings weg.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389546558/u/0/f/653902/c/35207/s/4d2c8260/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c8260/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>IBM holt Ford-Chef in seinen Verwaltungsrat</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/IBM-holt-Ford-Chef-in-seinen-Verwaltungsrat-3085806.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Mark Fields, der seit 2014 den zweitgrößten US-amerikanischen
+ Autohersteller leitet, gehört nun dem IBM-Verwaltungsrat an.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c54c4/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 17:19:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085806</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/IBM-holt-Ford-Chef-in-seinen-Verwaltungsrat-3085806.html?wt_mc=rss.ho.beitrag.atom" title="IBM holt Ford-Chef in seinen Verwaltungsrat"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/2/1/7/MARK-FIELDS_SV3_4814-8dc07e7cdcc86a8f.jpeg" alt="IBM holt Ford-Chef in seinen Verwaltungsrat" /> </a> <p>Mark Fields, der seit 2014 den zweitgrößten US-amerikanischen Autohersteller leitet, gehört nun dem IBM-Verwaltungsrat an.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389544988/u/0/f/653902/c/35207/s/4d2c54c4/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c54c4/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>News Pro: Microsoft bringt Nachrichten-App fürs iPhone</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/News-Pro-Microsoft-bringt-Nachrichten-App-fuers-iPhone-3085776.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Microsoft setzt besonders auf geschäftliche Nachrichten, die nach Branchen
+ sortiert sind. News Pro soll außerdem interessenbasierte Vorschläge unterbreiten.
+ Noch läuft die App als experimentelles Projekt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c039d/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 16:20:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085776</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/News-Pro-Microsoft-bringt-Nachrichten-App-fuers-iPhone-3085776.html?wt_mc=rss.ho.beitrag.atom" title="News Pro: Microsoft bringt Nachrichten-App fürs iPhone"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/1/9/1/Bildschirmfoto_2016-01-27_um_16-5f6322b07d567c2e.png" alt="News Pro" /> </a> <p>Microsoft setzt besonders auf geschäftliche Nachrichten, die nach Branchen sortiert sind. News Pro soll außerdem interessenbasierte Vorschläge unterbreiten. Noch läuft die App als experimentelles Projekt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389583008/u/0/f/653902/c/35207/s/4d2c039d/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2c039d/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Supercomputer mit Xeon Phi Knights Landing wird im Frühsommer ausgeliefert
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Supercomputer-mit-Xeon-Phi-Knights-Landing-wird-im-Fruehsommer-ausgeliefert-3085672.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Im Juni soll Cray XC40-Systeme mit Xeon-E5 und Xeon Phi Knight Landing an
+ den britischen Wetterdienst liefern.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bfd33/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 15:58:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085672</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Supercomputer-mit-Xeon-Phi-Knights-Landing-wird-im-Fruehsommer-ausgeliefert-3085672.html?wt_mc=rss.ho.beitrag.atom" title="Supercomputer mit Xeon Phi Knights Landing wird im Frühsommer ausgeliefert"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/0/9/7/Cray_xc_40-d877918c20ec9586.jpeg" alt="Supercomputer mit Xeon Phi Knights Landing im Frühsommer" /> </a> <p>Im Juni soll Cray XC40-Systeme mit Xeon-E5 und Xeon Phi Knight Landing an den britischen Wetterdienst liefern.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389581460/u/0/f/653902/c/35207/s/4d2bfd33/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bfd33/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>FDP reicht Verfassungsklage gegen Vorratsdatenspeicherung ein</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/FDP-reicht-Verfassungsklage-gegen-Vorratsdatenspeicherung-ein-3085660.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>&amp;quot;Dieser Angriff auf die Bürgerrechte darf nicht akzeptiert werden&amp;quot;,
+ kommentierte der FDP-Bundesvize Wolfgang Kubicki seinen Gang nach Karlsruhe.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bee54/sc/7/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 15:51:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085660</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/FDP-reicht-Verfassungsklage-gegen-Vorratsdatenspeicherung-ein-3085660.html?wt_mc=rss.ho.beitrag.atom" title="FDP reicht Verfassungsklage gegen Vorratsdatenspeicherung ein"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/0/8/5/bawue652x368-0b25c1bfcd112865.jpeg" alt="FDP reicht Verfassungsklage gegen Vorratsdatenspeicherung ein" /> </a> <p>"Dieser Angriff auf die Bürgerrechte darf nicht akzeptiert werden", kommentierte der FDP-Bundesvize Wolfgang Kubicki seinen Gang nach Karlsruhe.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2.htm"><img src="http://da.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389571260/u/0/f/653902/c/35207/s/4d2bee54/sc/7/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bee54/sc/7/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Adblocker werden immer populärer</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Adblocker-werden-immer-populaerer-3085744.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Zwei aktuelle Studien zeigen: Werbeblocker werden immer populärer. Gerade
+ mobil wollen Nutzer weniger Werbung sehen. Ausgerechnet ein Anbieter von
+ Videowerbung sieht sich als Musterbeispiel.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bee52/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 15:49:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085744</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Adblocker-werden-immer-populaerer-3085744.html?wt_mc=rss.ho.beitrag.atom" title="Adblocker werden immer populärer"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/1/6/1/image-144229995483704-6d7835c4aaf4c6f4-53beb923785f5926-27ea36c432306085-4339c9834103f557.jpeg" alt="Adblocker immer populärer" /> </a> <p>Zwei aktuelle Studien zeigen: Werbeblocker werden immer populärer. Gerade mobil wollen Nutzer weniger Werbung sehen. Ausgerechnet ein Anbieter von Videowerbung sieht sich als Musterbeispiel. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389571259/u/0/f/653902/c/35207/s/4d2bee52/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bee52/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Steuererklärung: Bundesfinanzhof bleibt beim häuslichen Arbeitszimmer hart
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Steuererklaerung-Bundesfinanzhof-bleibt-beim-haeuslichen-Arbeitszimmer-hart-3085652.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der Bundesfinanzhof hält in einem Grundsatzurteil an den strengen Vorgaben
+ für die Absetzbarkeit des häuslichen Arbeitszimmers fest. Ein nur zeitweise für die
+ Arbeit genutzter Raum wird nicht anerkannt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bb5a4/sc/17/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 15:37:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085652</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Steuererklaerung-Bundesfinanzhof-bleibt-beim-haeuslichen-Arbeitszimmer-hart-3085652.html?wt_mc=rss.ho.beitrag.atom" title="Steuererklärung: Bundesfinanzhof bleibt beim häuslichen Arbeitszimmer hart"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/8/0/7/7/home-office-picjumbo-e584e512dfc90c71.jpeg" alt="Steuererklärung: Bundesfinanzhof bleibt beim Arbeitszimmer hart" /> </a> <p>Der Bundesfinanzhof hält in einem Grundsatzurteil an den strengen Vorgaben für die Absetzbarkeit des häuslichen Arbeitszimmers fest. Ein nur zeitweise für die Arbeit genutzter Raum wird nicht anerkannt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2.htm"><img src="http://da.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389578312/u/0/f/653902/c/35207/s/4d2bb5a4/sc/17/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2bb5a4/sc/17/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Olympus Pen F: Erster Eindruck von der spiegellosen Edel-Systemkamera</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Olympus-Pen-F-Erster-Eindruck-von-der-spiegellosen-Edel-Systemkamera-3085217.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Olympus möchte seine neue Pen F über das Lebensgefühl der 60er Jahre
+ verkaufen. Die spiegellose Systemkamera wirkt extrem durchgestylt und will
+ gleichzeitig ein mächtiges Werkzeug sein.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625e/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 14:18:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085217</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Olympus-Pen-F-Erster-Eindruck-von-der-spiegellosen-Edel-Systemkamera-3085217.html?wt_mc=rss.ho.beitrag.atom" title="Olympus Pen F: Erster Eindruck von der spiegellosen Edel-Systemkamera"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/6/9/PENF0071-aa9642e8826de713.jpeg" alt="Olympus Pen F" /> </a> <p>Olympus möchte seine neue Pen F über das Lebensgefühl der 60er Jahre verkaufen. Die spiegellose Systemkamera wirkt extrem durchgestylt und will gleichzeitig ein mächtiges Werkzeug sein. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389561062/u/0/f/653902/c/35207/s/4d2b625e/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625e/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>VW-Skandal: EU-Kommission verschärft Kfz-Aufsicht und Abgaskontrolle</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/VW-Skandal-EU-Kommission-verschaerft-Kfz-Aufsicht-und-Abgaskontrolle-3085529.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Per Verordnung will die EU-Kommission erreichen, dass sich
+ Automobilhersteller streng an die geltenden Sicherheits-, Umwelt- und
+ Fertigungsanforderungen halten. Softwareprotokolle für Kfz sollen zugänglich werden.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625d/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 14:13:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085529</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/VW-Skandal-EU-Kommission-verschaerft-Kfz-Aufsicht-und-Abgaskontrolle-3085529.html?wt_mc=rss.ho.beitrag.atom" title="VW-Skandal: EU-Kommission verschärft Kfz-Aufsicht und Abgaskontrolle"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/9/9/9/41fec8622800cd459fa6eef48c5e80e2v1_max_755x425_b3535db83dc50e27c1bb1392364c95a2-ac47a5e9f14564b3.jpeg" alt="VW-Skandal: EU-Kommission verschärft Kfz-Aufsicht und Abgaskontrolle" /> </a> <p>Per Verordnung will die EU-Kommission erreichen, dass sich Automobilhersteller streng an die geltenden Sicherheits-, Umwelt- und Fertigungsanforderungen halten. Softwareprotokolle für Kfz sollen zugänglich werden.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389561061/u/0/f/653902/c/35207/s/4d2b625d/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625d/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>PC-Version von Rise of the Tomb Raider: Die schärfste Lara Croft</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/PC-Version-von-Rise-of-the-Tomb-Raider-Die-schaerfste-Lara-Croft-3084870.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Am 28. Januar erscheint die PC-Version von Rise of the Tomb Raider. Sie
+ besticht durch tolle Grafik und flüssige Bildraten. Allerdings gibt es auch ein paar
+ Probleme. heise online hat die PC-Version angetestet.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625c/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 14:09:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084870</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/PC-Version-von-Rise-of-the-Tomb-Raider-Die-schaerfste-Lara-Croft-3084870.html?wt_mc=rss.ho.beitrag.atom" title="PC-Version von Rise of the Tomb Raider: Die schärfste Lara Croft"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/2/2/2016-01-25_00088-6b74693f3821a422.jpeg" alt="Lara Croft" /> </a> <p>Am 28. Januar erscheint die PC-Version von Rise of the Tomb Raider. Sie besticht durch tolle Grafik und flüssige Bildraten. Allerdings gibt es auch ein paar Probleme. heise online hat die PC-Version angetestet.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389561060/u/0/f/653902/c/35207/s/4d2b625c/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b625c/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>TP-Link-Router mit vorhersehbarem Standard-WLAN-Passwort</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/TP-Link-Router-mit-vorhersehbarem-Standard-WLAN-Passwort-3085482.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Angreifer können das werkseitige WLAN-Passwort von einer
+ TP-Link-Router-Serie vergleichsweise einfach herausfinden und sich so Zugang zum
+ Netzwerk verschaffen. Weitere Serien könnten ebenfalls betroffen sein.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b5c3d/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 14:06:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085482</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/TP-Link-Router-mit-vorhersehbarem-Standard-WLAN-Passwort-3085482.html?wt_mc=rss.ho.beitrag.atom" title="TP-Link-Router mit vorhersehbarem Standard-WLAN-Passwort"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/9/6/8/urn-newsml-dpa-com-20090101-150813-99-05231_large_4_3-fb565ab96dbaaf32.jpeg" alt="Hacker" /> </a> <p>Angreifer können das werkseitige WLAN-Passwort von einer TP-Link-Router-Serie vergleichsweise einfach herausfinden und sich so Zugang zum Netzwerk verschaffen. Weitere Serien könnten ebenfalls betroffen sein.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389559600/u/0/f/653902/c/35207/s/4d2b5c3d/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b5c3d/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Tails 2.0: Das Anonymisierungs-OS im neuen Look</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Tails-2-0-Das-Anonymisierungs-OS-im-neuen-Look-3085312.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die neueste Version der spezialisierten Linux-Distribution basiert auf
+ Debian Jessie und bringt Gnome Shell als neuen Desktop mit.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b0a56/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 13:47:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085312</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Tails-2-0-Das-Anonymisierungs-OS-im-neuen-Look-3085312.html?wt_mc=rss.ho.beitrag.atom" title="Tails 2.0: Das Anonymisierungs-OS im neuen Look"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/5/1/tails-2-3034d3a9e6bf582e.jpeg" alt="Tails 2.0" /> </a> <p>Die neueste Version der spezialisierten Linux-Distribution basiert auf Debian Jessie und bringt Gnome Shell als neuen Desktop mit.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389521976/u/0/f/653902/c/35207/s/4d2b0a56/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b0a56/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>US-Fotograf Steve McCurry: "Die Selfie-Generation ist cool"</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/US-Fotograf-Steve-McCurry-Die-Selfie-Generation-ist-cool-3085412.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der amerikanische Fotograf Steve McCurry ist für seine Aufnahme des &amp;quot;afghanischen
+ Mädchens&amp;quot;, welches auf dem Cover der National Geographic um die Welt ging,
+ bekannt. Nun sprach der 65-Jährige mit der Zeitung &amp;quot;Times of India&amp;quot;
+ unter anderem über Selfies.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b0a54/sc/17/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 13:38:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085412</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/US-Fotograf-Steve-McCurry-Die-Selfie-Generation-ist-cool-3085412.html?wt_mc=rss.ho.beitrag.atom" title="US-Fotograf Steve McCurry: &quot;Die Selfie-Generation ist cool&quot;"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/9/2/0/selfie_Bild-3258a76bab7f85ec.png" alt="Selfie" /> </a> <p>Der amerikanische Fotograf Steve McCurry ist für seine Aufnahme des "afghanischen Mädchens", welches auf dem Cover der National Geographic um die Welt ging, bekannt. Nun sprach der 65-Jährige mit der Zeitung "Times of India" unter anderem über Selfies.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2.htm"><img src="http://da.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389521975/u/0/f/653902/c/35207/s/4d2b0a54/sc/17/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b0a54/sc/17/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>AMDs GPUOpen: Zahlreiche SDKs und Tools auf GitHub im Source verfügbar</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/AMDs-GPUOpen-Zahlreiche-SDKs-und-Tools-auf-GitHub-im-Source-verfuegbar-3085309.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>AMDs Open-Source-Initiative spricht zum einen Spieleentwickler und zum
+ anderen Entwickler von HPC-Anwendungen an. Der Chiphersteller veröffentlicht nun
+ zahlreiche SDKs und Werkzeuge auf GitHub.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b26a0/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 13:36:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085309</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/AMDs-GPUOpen-Zahlreiche-SDKs-und-Tools-auf-GitHub-im-Source-verfuegbar-3085309.html?wt_mc=rss.ho.beitrag.atom" title="AMDs GPUOpen: Zahlreiche SDKs und Tools auf GitHub im Source verfügbar"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/4/8/aufmacher_ajax_7-7ba40e6cf8bbc8b9.jpeg" alt="AMDs GPUOpen: Zahlreiche SDKs und Tools auf GitHub im Source verfügbar" /> </a> <p>AMDs Open-Source-Initiative spricht zum einen Spieleentwickler und zum anderen Entwickler von HPC-Anwendungen an. Der Chiphersteller veröffentlicht nun zahlreiche SDKs und Werkzeuge auf GitHub.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389556077/u/0/f/653902/c/35207/s/4d2b26a0/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b26a0/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>ZTE Axon Mini: Erstes Android-Smartphone mit Force Touch kommt nach Deutschland
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/ZTE-Axon-Mini-Erstes-Android-Smartphone-mit-Force-Touch-kommt-nach-Deutschland-3085296.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>ZTE bringt ein Smartphone auf den deutschen Markt, das je nach Fingerdruck
+ anders reagiert. Davon abgesehen ist das Axon Mini ein 5,2-Zöller mit guter
+ Ausstattung in gewöhnungsbedürftiger Farbe.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b269f/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 13:34:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085296</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/ZTE-Axon-Mini-Erstes-Android-Smartphone-mit-Force-Touch-kommt-nach-Deutschland-3085296.html?wt_mc=rss.ho.beitrag.atom" title="ZTE Axon Mini: Erstes Android-Smartphone mit Force Touch kommt nach Deutschland"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/3/5/Axon_mini_gross-3904a6075b401bc4.png" alt="ZTE Axon Mini: Erstes Android-Smartphone mit Force Touch kommt nach Deutschland" /> </a> <p>ZTE bringt ein Smartphone auf den deutschen Markt, das je nach Fingerdruck anders reagiert. Davon abgesehen ist das Axon Mini ein 5,2-Zöller mit guter Ausstattung in gewöhnungsbedürftiger Farbe.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389556076/u/0/f/653902/c/35207/s/4d2b269f/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2b269f/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>#heiseshow: Die wöchentliche Dosis Technik-News und Netzpolitik</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/heiseshow-Die-woechentliche-Dosis-Technik-News-und-Netzpolitik-3085429.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Am Donnerstag um 16 Uhr starten wir ein neues Live-Videoformat: Mit Gästen
+ diskutiert das Team von heise online über aktuelle Ereignisse in der Hightech-Welt
+ und der Netzpolitik.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2ae4d2/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 13:21:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085429</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/heiseshow-Die-woechentliche-Dosis-Technik-News-und-Netzpolitik-3085429.html?wt_mc=rss.ho.beitrag.atom" title="#heiseshow: Die wöchentliche Dosis Technik-News und Netzpolitik "> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/9/3/1/heiseshow-3a3418ff4dee8a31.jpeg" alt="#heiseshow: Die wöchentliche Dosis Technik-News und Netzpolitik" /> </a> <p>Am Donnerstag um 16 Uhr starten wir ein neues Live-Videoformat: Mit Gästen diskutiert das Team von heise online über aktuelle Ereignisse in der Hightech-Welt und der Netzpolitik. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389554329/u/0/f/653902/c/35207/s/4d2ae4d2/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2ae4d2/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Wikipedianer lehnen sich gegen Wikimedia-Vorstand auf</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Wikipedianer-lehnen-sich-gegen-Wikimedia-Vorstand-auf-3085399.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Mit einem inoffiziellen Misstrauensvotum wollen Wikipedianer ein
+ Vorstandsmitglied zum Rücktritt drängen. Der ehemalige Google-Manager will jedoch
+ nicht gehen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2ad413/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 12:29:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085399</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Wikipedianer-lehnen-sich-gegen-Wikimedia-Vorstand-auf-3085399.html?wt_mc=rss.ho.beitrag.atom" title="Wikipedianer lehnen sich gegen Wikimedia-Vorstand auf"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/9/1/3/Arnnon_Geshuri_-_January_2016_by_Myleen_Hollero-5e314ca8f617253b.jpeg" alt="Arnnon Geshuri" /> </a> <p>Mit einem inoffiziellen Misstrauensvotum wollen Wikipedianer ein Vorstandsmitglied zum Rücktritt drängen. Der ehemalige Google-Manager will jedoch nicht gehen. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389550223/u/0/f/653902/c/35207/s/4d2ad413/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2ad413/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Google senkt Preise für Smartphones Nexus 5X und 6P</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Google-senkt-Preise-fuer-Smartphones-Nexus-5X-und-6P-3085276.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Bis Mitte Februar verkauft Google seine Nexus-Smartphones günstiger: Das
+ Nexus 5X startet bei 349 Euro, das Nexus 6P bei 549 Euro.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a8d5f/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 12:15:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085276</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Google-senkt-Preise-fuer-Smartphones-Nexus-5X-und-6P-3085276.html?wt_mc=rss.ho.beitrag.atom" title="Google senkt Preise für Smartphones Nexus 5X und 6P"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/1/9/c2040d5fb8bfa013564ddfad41be1c81_edited_102383421_731166a169-760c6bc66e60d0b9.jpeg" alt="Google senkt Preise für Nexus 5X und 6P" /> </a> <p>Bis Mitte Februar verkauft Google seine Nexus-Smartphones günstiger: Das Nexus 5X startet bei 349 Euro, das Nexus 6P bei 549 Euro.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389510599/u/0/f/653902/c/35207/s/4d2a8d5f/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a8d5f/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Bundesregierung verlangt Glasfaserkabel entlang von Fernstraßen und anderer
+ Infrastruktur
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Bundesregierung-verlangt-Glasfaserkabel-entlang-von-Fernstrassen-und-anderer-Infrastruktur-3085354.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Das Bundeskabinett will &amp;quot;Voraussetzungen für die
+ Gigabit-Gesellschaft&amp;quot; schaffen und hat dafür ein Gesetz vorgelegt:
+ Öffentliche Versorgungsnetzbetreiber sollen ihre Infrastruktur für Breitband öffnen.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a7435/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 11:58:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085354</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Bundesregierung-verlangt-Glasfaserkabel-entlang-von-Fernstrassen-und-anderer-Infrastruktur-3085354.html?wt_mc=rss.ho.beitrag.atom" title="Bundesregierung verlangt Glasfaserkabel entlang von Fernstraßen und anderer Infrastruktur"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/8/5/Glasfaser4-7066ce2c9806ac68-51eff592570dcd6e.png" alt="Bundesregierung verlangt Glasfaserkabel entlang von Fernstraßen und anderer Infrastruktur" /> </a> <p>Das Bundeskabinett will "Voraussetzungen für die Gigabit-Gesellschaft" schaffen und hat dafür ein Gesetz vorgelegt: Öffentliche Versorgungsnetzbetreiber sollen ihre Infrastruktur für Breitband öffnen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389552422/u/0/f/653902/c/35207/s/4d2a7435/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a7435/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>iOS und OS X: Safari-Vorschläge legen Apples Webbrowser lahm</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/iOS-und-OS-X-Safari-Vorschlaege-legen-Apples-Webbrowser-lahm-3085337.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Eine Fehlkonfiguration bei Apples Suchhilfe scheint aktuell der Grund für
+ einen sofortigen Absturz von Safari, wenn Nutzer auf iPhone oder iPad die
+ Adresszeile auswählen oder eine Eingabe starten. Das Problem lässt sich umgehen.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a66f7/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 11:38:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085337</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/iOS-und-OS-X-Safari-Vorschlaege-legen-Apples-Webbrowser-lahm-3085337.html?wt_mc=rss.ho.beitrag.atom" title="iOS und OS X: Safari-Vorschläge legen Apples Webbrowser lahm"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/7/4/urn-newsml-dpa-com-20090101-160127-99-251554_large_4_3-d71a5d70124b506d.jpeg" alt="Apple" /> </a> <p>Eine Fehlkonfiguration bei Apples Suchhilfe scheint aktuell der Grund für einen sofortigen Absturz von Safari, wenn Nutzer auf iPhone oder iPad die Adresszeile auswählen oder eine Eingabe starten. Das Problem lässt sich umgehen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389542680/u/0/f/653902/c/35207/s/4d2a66f7/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a66f7/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>VMware baut 800 Arbeitsplätze ab</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/VMware-baut-800-Arbeitsplaetze-ab-3085308.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der Hersteller von Virtualisierungssoftware will sich umstrukturieren.
+ Dafür müssen zunächst 800 Mitarbeiter gehen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a66f6/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 11:34:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085308</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/VMware-baut-800-Arbeitsplaetze-ab-3085308.html?wt_mc=rss.ho.beitrag.atom" title="VMware baut 800 Arbeitsplätze ab"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/4/7/logo-guidelines-f0ba93178fa3ecae.jpeg" alt="VMware baut 800 Arbeitsplätze ab" /> </a> <p>Der Hersteller von Virtualisierungssoftware will sich umstrukturieren. Dafür müssen zunächst 800 Mitarbeiter gehen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389542679/u/0/f/653902/c/35207/s/4d2a66f6/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a66f6/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Menschen-Rohrpost Hyperloop: Elon Musk lässt Aecom Teststrecke bauen</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Menschen-Rohrpost-Hyperloop-Elon-Musk-laesst-Aecom-Teststrecke-bauen-3085245.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die Firma Aecom will noch im Frühling mit dem Bau einer
+ Hyperloop-Teststecke starten. Elon Musks Firma SpaceX hat das
+ Fortune-500-Unternehmen damit beauftragt. Studierende sollen helfen,
+ Kapsel-Prototypen zu bauen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0cbe/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 11:13:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085245</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Menschen-Rohrpost-Hyperloop-Elon-Musk-laesst-Aecom-Teststrecke-bauen-3085245.html?wt_mc=rss.ho.beitrag.atom" title="Menschen-Rohrpost Hyperloop: Elon Musk lässt Aecom Teststrecke bauen"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/9/1/Hyperloop-0f7f26eb632745e4-61f3c13ae470a965.jpeg" alt="Hyperloop" /> </a> <p>Die Firma Aecom will noch im Frühling mit dem Bau einer Hyperloop-Teststecke starten. Elon Musks Firma SpaceX hat das Fortune-500-Unternehmen damit beauftragt. Studierende sollen helfen, Kapsel-Prototypen zu bauen. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389503052/u/0/f/653902/c/35207/s/4d2a0cbe/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0cbe/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Lenovos Datentausch-App Shareit: 12345678 als Standardpasswort</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Lenovos-Datentausch-App-Shareit-12345678-als-Standardpasswort-3085250.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>In der Shareit-Anwendung von Lenovo klaffen mehrere Schwachstellen, über
+ die Angreifer Nutzern unter anderem Schadcode unterjubeln können. Gefixte Version
+ sollen das unterbinden.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0506/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:54:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085250</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Lenovos-Datentausch-App-Shareit-12345678-als-Standardpasswort-3085250.html?wt_mc=rss.ho.beitrag.atom" title="Lenovos Datentausch-App Shareit: 12345678 als Standardpasswort"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/9/5/shareit-7a502640b4aca443.png" alt="Lenovos Datentausch-App Shareit mit 12345678 als Standardpasswort" /> </a> <p>In der Shareit-Anwendung von Lenovo klaffen mehrere Schwachstellen, über die Angreifer Nutzern unter anderem Schadcode unterjubeln können. Gefixte Version sollen das unterbinden.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389501134/u/0/f/653902/c/35207/s/4d2a0506/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0506/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Paketdrohne: Google lässt sich beweglichen Paketempfangsbehälter patentieren
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Paketdrohne-Google-laesst-sich-beweglichen-Paketempfangsbehaelter-patentieren-3085263.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Manche Orte können von unbemannten Fluggeräten nicht ohne Sicherheitsrisiko
+ angeflogen werden. Dafür haben sich Google-Entwickler eine Lösung ausgedacht.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0504/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:53:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085263</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Paketdrohne-Google-laesst-sich-beweglichen-Paketempfangsbehaelter-patentieren-3085263.html?wt_mc=rss.ho.beitrag.atom" title="Paketdrohne: Google lässt sich beweglichen Paketempfangsbehälter patentieren"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/0/7/Bildschirmfoto_2016-01-27_um_11-8a774a671e812db7.jpeg" alt="Paketdrohne: Google lässt sich beweglichen Paketempfangsbehälter patentieren" /> </a> <p>Manche Orte können von unbemannten Fluggeräten nicht ohne Sicherheitsrisiko angeflogen werden. Dafür haben sich Google-Entwickler eine Lösung ausgedacht.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389501131/u/0/f/653902/c/35207/s/4d2a0504/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2a0504/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Webbrowser Firefox 44 mit verbesserten Push-Nachrichten</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Webbrowser-Firefox-44-mit-verbesserten-Push-Nachrichten-3085193.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Version 44 des Firefox-Browsers verschickt nun auch Push-Nachrichten von
+ Websites, die nicht geöffnet sind. Zudem haben die Entwickler die Fehlerseiten
+ verbessert und die RC4-Unterstützung entfernt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec71/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:42:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085193</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Webbrowser-Firefox-44-mit-verbesserten-Push-Nachrichten-3085193.html?wt_mc=rss.ho.beitrag.atom" title="Webbrowser Firefox 44 mit verbesserten Push-Nachrichten"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/4/8/mozz_39339342_original-4109b22bb9b70d97.jpeg" alt="Firefox" /> </a> <p>Version 44 des Firefox-Browsers verschickt nun auch Push-Nachrichten von Websites, die nicht geöffnet sind. Zudem haben die Entwickler die Fehlerseiten verbessert und die RC4-Unterstützung entfernt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389543121/u/0/f/653902/c/35207/s/4d29ec71/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec71/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>BMW steuert via IFTTT das Smart Home</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/BMW-steuert-via-IFTTT-das-Smart-Home-3085257.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Wer einen BMW mit ConnectedDrive Services fährt, kann jetzt mit einem
+ Widget für den Automatisierungsdienst IFTTT zum Beispiel das Garagentor hochfahren
+ lassen, wenn er auf dem Weg nach Hause ist.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec70/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:38:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085257</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/BMW-steuert-via-IFTTT-das-Smart-Home-3085257.html?wt_mc=rss.ho.beitrag.atom" title="BMW steuert via IFTTT das Smart Home"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/8/0/1/IFTTT-8bf9c9011ff12a0d.png" alt="BMW steuert via IFTTT das Smart Home" /> </a> <p>Wer einen BMW mit ConnectedDrive Services fährt, kann jetzt mit einem Widget für den Automatisierungsdienst IFTTT zum Beispiel das Garagentor hochfahren lassen, wenn er auf dem Weg nach Hause ist.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389543120/u/0/f/653902/c/35207/s/4d29ec70/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec70/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Eine Million Petenten protestieren gegen Elfenbeinhandel auf Yahoo Japan</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Eine-Million-Petenten-protestieren-gegen-Elfenbeinhandel-auf-Yahoo-Japan-3085214.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Jeden Tag werden auf der Welt hundert Elefanten wegen ihrer Stoßzähne
+ getötet. Die Nichtregierungsorganisation Avaaz will erreichen, dass Elfenbein nicht
+ mehr über Yahoo Japan verkauft werden kann.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec6e/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:21:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085214</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Eine-Million-Petenten-protestieren-gegen-Elfenbeinhandel-auf-Yahoo-Japan-3085214.html?wt_mc=rss.ho.beitrag.atom" title="Eine Million Petenten protestieren gegen Elfenbeinhandel auf Yahoo Japan"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/6/6/Bildschirmfoto_2016-01-27_um_11-2e865cc25538fb20.jpeg" alt="Eine Million Petitenten protestieren gegen Elfenbeinhandel auf Yahoo Japan" /> </a> <p>Jeden Tag werden auf der Welt hundert Elefanten wegen ihrer Stoßzähne getötet. Die Nichtregierungsorganisation Avaaz will erreichen, dass Elfenbein nicht mehr über Yahoo Japan verkauft werden kann.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389543119/u/0/f/653902/c/35207/s/4d29ec6e/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29ec6e/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Eine Million Petitenten protestieren gegen Elfenbeinhandel auf Yahoo Japan
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Eine-Million-Petitenten-protestieren-gegen-Elfenbeinhandel-auf-Yahoo-Japan-3085214.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Jeden Tag werden auf der Welt hundert Elefanten wegen ihrer Stoßzähne
+ getötet. Die Nichtregierungsorganisation Avaaz will erreichen, dass Elfenbein nicht
+ mehr über Yahoo Japan verkauft werden kann.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29bd45/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 10:21:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085214</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Eine-Million-Petitenten-protestieren-gegen-Elfenbeinhandel-auf-Yahoo-Japan-3085214.html?wt_mc=rss.ho.beitrag.atom" title="Eine Million Petitenten protestieren gegen Elfenbeinhandel auf Yahoo Japan"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/6/6/Bildschirmfoto_2016-01-27_um_11-2e865cc25538fb20.jpeg" alt="Eine Million Petitenten protestieren gegen Elfenbeinhandel auf Yahoo Japan" /> </a> <p>Jeden Tag werden auf der Welt hundert Elefanten wegen ihrer Stoßzähne getötet. Die Nichtregierungsorganisation Avaaz will erreichen, dass Elfenbein nicht mehr über Yahoo Japan verkauft werden kann.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389541116/u/0/f/653902/c/35207/s/4d29bd45/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29bd45/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>China überholt die USA als größter Markt für Elektroautos</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/China-ueberholt-die-USA-als-groesster-Markt-fuer-Elektroautos-3085152.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die Zahl der Neuzulassungen von E-Autos steigt – auch in Deutschland. Von
+ einem Leitmarkt ist die Bundesrepublik aber weit entfernt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29a77c/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 09:54:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085152</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/China-ueberholt-die-USA-als-groesster-Markt-fuer-Elektroautos-3085152.html?wt_mc=rss.ho.beitrag.atom" title="China überholt die USA als größter Markt für Elektroautos"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/7/1/0/Bildschirmfoto_2016-01-27_um_10-efc56d9f4ea5c1e1.jpeg" alt="Elektroauto" /> </a> <p>Die Zahl der Neuzulassungen von E-Autos steigt – auch in Deutschland. Von einem Leitmarkt ist die Bundesrepublik aber weit entfernt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389529191/u/0/f/653902/c/35207/s/4d29a77c/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d29a77c/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Altermedia: Deutschlandweite Razzia gegen rechtsextreme Internetplattform – zwei
+ Festnahmen
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Altermedia-Deutschlandweite-Razzia-gegen-rechtsextreme-Internetplattform-zwei-Festnahmen-3085140.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>In einer bundesweiten Aktion gehen Ermittler der Bundesanwaltschaft gegen
+ führende Betreiber des rechtsextremen Internetportals &amp;quot;Altermedia&amp;quot;
+ vor. Ihnen wird die Gründung einer kriminellen Vereinigung vorgeworfen. Inzwischen
+ wurde die Vereinigung verboten.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d293258/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 09:10:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085140</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Altermedia-Deutschlandweite-Razzia-gegen-rechtsextreme-Internetplattform-zwei-Festnahmen-3085140.html?wt_mc=rss.ho.beitrag.atom" title="Altermedia: Deutschlandweite Razzia gegen rechtsextreme Internetplattform – zwei Festnahmen"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/9/8/urn-newsml-dpa-com-20090101-150414-99-04666_large_4_3-6f20e7a913e9ebef.jpeg" alt="Hacker" /> </a> <p>In einer bundesweiten Aktion gehen Ermittler der Bundesanwaltschaft gegen führende Betreiber des rechtsextremen Internetportals "Altermedia" vor. Ihnen wird die Gründung einer kriminellen Vereinigung vorgeworfen. Inzwischen wurde die Vereinigung verboten.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389487846/u/0/f/653902/c/35207/s/4d293258/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d293258/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Bundesdatenschutzbeauftragte warnt vor Dashcams</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Bundesdatenschutzbeauftragte-warnt-vor-Dashcams-3085120.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Im Ausland setzen Autofahrer vermehrt Videokameras ein, die hinter der
+ Windschutzscheibe postiert werden und das Geschehen vor dem Auto kontinuierlich
+ aufzeichnen. In Deutschland ist das aus Datenschutzgründen unzulässig, meint Andrea
+ Voßhoff.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d293d2a/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 08:52:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085120</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Bundesdatenschutzbeauftragte-warnt-vor-Dashcams-3085120.html?wt_mc=rss.ho.beitrag.atom" title="Bundesdatenschutzbeauftragte warnt vor Dashcams"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/8/2/Unbenannt-1-ccb6087fae248ce5.jpeg" alt="Dashcam" /> </a> <p>Im Ausland setzen Autofahrer vermehrt Videokameras ein, die hinter der Windschutzscheibe postiert werden und das Geschehen vor dem Auto kontinuierlich aufzeichnen. In Deutschland ist das aus Datenschutzgründen unzulässig, meint Andrea Voßhoff.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389528982/u/0/f/653902/c/35207/s/4d293d2a/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d293d2a/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Unitymedia bietet Kabelanschlüsse mit 400 MBit/s an</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Unitymedia-bietet-Kabelanschluesse-mit-400-MBit-s-an-3084956.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der Kabelriese dreht an der Speed-Schraube: Rund 40 Prozent der Haushalte
+ im Verbreitungsgebiet in Nordrhein-Westfalen, Hessen und Baden-Württemberg können in
+ Kürze Anschlüsse mit bis zu 400 MBit/s buchen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d291cc3/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 08:30:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084956</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Unitymedia-bietet-Kabelanschluesse-mit-400-MBit-s-an-3084956.html?wt_mc=rss.ho.beitrag.atom" title="Unitymedia bietet Kabelanschlüsse mit 400 MBit/s an"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/7/5/kdg_docsis_200-b8c485b1e19b9753-9d3ae9132349e0f6-d75e967a29e534a4.jpeg" alt="Unitymedia" /> </a> <p>Der Kabelriese dreht an der Speed-Schraube: Rund 40 Prozent der Haushalte im Verbreitungsgebiet in Nordrhein-Westfalen, Hessen und Baden-Württemberg können in Kürze Anschlüsse mit bis zu 400 MBit/s buchen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389519640/u/0/f/653902/c/35207/s/4d291cc3/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d291cc3/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Tim Cook zu den Apple-Quartalszahlen: Weiterhin kein Billig-iPhone</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Tim-Cook-zu-den-Apple-Quartalszahlen-Weiterhin-kein-Billig-iPhone-3085095.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der Apple-Chef hat sich im Gespräch mit Analysten zur künftigen
+ Geschäftsstrategie geäußert, da das geringe Wachstum beim iPhone der Börse Sorge
+ bereitet. Auch zum für Cupertino zunehmend bedeutenden Wachstumsmarkt China nannte
+ er Details.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d291cc2/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 08:12:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085095</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Tim-Cook-zu-den-Apple-Quartalszahlen-Weiterhin-kein-Billig-iPhone-3085095.html?wt_mc=rss.ho.beitrag.atom" title="Tim Cook zu den Apple-Quartalszahlen: Weiterhin kein Billig-iPhone"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/6/6/urn-newsml-dpa-com-20090101-151020-99-02535_large_4_3-44c62c7b61723c1b.jpeg" alt="Tim Cook" /> </a> <p>Der Apple-Chef hat sich im Gespräch mit Analysten zur künftigen Geschäftsstrategie geäußert, da das geringe Wachstum beim iPhone der Börse Sorge bereitet. Auch zum für Cupertino zunehmend bedeutenden Wachstumsmarkt China nannte er Details.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389519639/u/0/f/653902/c/35207/s/4d291cc2/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d291cc2/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Lufthansa und Drohnenhersteller DJI werden Partner</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Lufthansa-und-Drohnenhersteller-DJI-werden-Partner-3085067.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die Lufthansa möchte neue Geschäftsfelder erobern. Zusammen mit dem
+ Drohnenhersteller DJI sollen Drohnen für Großkunden gefertigt werden. Diese könnten
+ mit den fliegenden Helfern etwa einfacher Windkraftanlagen überwachen oder
+ Baufortschritte verfolgen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d28e6a3/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 08:11:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085067</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Lufthansa-und-Drohnenhersteller-DJI-werden-Partner-3085067.html?wt_mc=rss.ho.beitrag.atom" title="Lufthansa und Drohnenhersteller DJI werden Partner "> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/4/5/d20ed2f1c559d64f6fd690e5c8b54932_edited_102368661_e1e4041693-ff2f5513b2065135.jpeg" alt="Drohne" /> </a> <p>Die Lufthansa möchte neue Geschäftsfelder erobern. Zusammen mit dem Drohnenhersteller DJI sollen Drohnen für Großkunden gefertigt werden. Diese könnten mit den fliegenden Helfern etwa einfacher Windkraftanlagen überwachen oder Baufortschritte verfolgen. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389516237/u/0/f/653902/c/35207/s/4d28e6a3/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d28e6a3/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Wasserknappheit bedroht Stromproduktion</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Wasserknappheit-bedroht-Stromproduktion-3084350.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Forscher fürchten, dass die globale Stromproduktion aufgrund des
+ Klimawandels in den nächsten 35 Jahren deutlich zurückgehen könnte. Der Grund: Dürre
+ macht Kühlung unmöglich.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2893ec/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 07:07:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084350</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Wasserknappheit-bedroht-Stromproduktion-3084350.html?wt_mc=rss.ho.beitrag.atom" title="Wasserknappheit bedroht Stromproduktion"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/1/6/4/Medupi_Power_Station_-_700-f13dbe6e74040f34.jpeg" alt="Kraftwerk" /> </a> <p>Forscher fürchten, dass die globale Stromproduktion aufgrund des Klimawandels in den nächsten 35 Jahren deutlich zurückgehen könnte. Der Grund: Dürre macht Kühlung unmöglich.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389516745/u/0/f/653902/c/35207/s/4d2893ec/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2893ec/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Studie: Soziale Netzwerke und schlechter Schlaf gehören zusammen</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Studie-Soziale-Netzwerke-und-schlechter-Schlaf-gehoeren-zusammen-3085003.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Verbringen junge Erwachsene Zeit in sozialen Netzwerken und greifen häufig
+ auf ihre Konten zu, leiden sie auch öfter unter Schlafstörungen. So lautet das
+ Ergebnis einer Studie von Forschern der University of Pittsburgh.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d288bd0/sc/17/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 06:48:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085003</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Studie-Soziale-Netzwerke-und-schlechter-Schlaf-gehoeren-zusammen-3085003.html?wt_mc=rss.ho.beitrag.atom" title="Studie: Soziale Netzwerke und schlechter Schlaf gehören zusammen"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/0/8/urn-newsml-dpa-com-20090101-150914-99-09432_large_4_3-6b57417c781dba0f.jpeg" alt="Kind mit Tablet" /> </a> <p>Verbringen junge Erwachsene Zeit in sozialen Netzwerken und greifen häufig auf ihre Konten zu, leiden sie auch öfter unter Schlafstörungen. So lautet das Ergebnis einer Studie von Forschern der University of Pittsburgh.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2.htm"><img src="http://da.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389514741/u/0/f/653902/c/35207/s/4d288bd0/sc/17/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d288bd0/sc/17/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>136 Jahre nach Edisons Patent: Forscher arbeiten an einer Renaissance der
+ Glühbirne
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/136-Jahre-nach-Edisons-Patent-Forscher-arbeiten-an-einer-Renaissance-der-Gluehbirne-3084807.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Am 27. Januar 1880 erhielt Thomas A. Edison das Patent Nr. 223.898 für die
+ &amp;quot;Elektrische Lampe&amp;quot;. Heute wollen Forscher des MIT und der Purdue
+ University der totgesagten Glühbirne mit Nano-Beschichtung wieder eine Renaissance
+ bescheren.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d28388a/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 06:30:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084807</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/136-Jahre-nach-Edisons-Patent-Forscher-arbeiten-an-einer-Renaissance-der-Gluehbirne-3084807.html?wt_mc=rss.ho.beitrag.atom" title="136 Jahre nach Edisons Patent: Forscher arbeiten an einer Renaissance der Glühbirne"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/8/1/b17ec7a6d8c60af156976d8240fd9726_edited_102352246_992ac921cb-4aec3b4d681674f7.jpeg" alt="Glühbirne" /> </a> <p>Am 27. Januar 1880 erhielt Thomas A. Edison das Patent Nr. 223.898 für die "Elektrische Lampe". Heute wollen Forscher des MIT und der Purdue University der totgesagten Glühbirne mit Nano-Beschichtung wieder eine Renaissance bescheren. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389470313/u/0/f/653902/c/35207/s/4d28388a/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d28388a/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Verschlüsselung: IETF standardisiert zwei weitere elliptische Kurven</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Verschluesselung-IETF-standardisiert-zwei-weitere-elliptische-Kurven-3084830.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die IETF hat die beiden elliptischen Kurven Curve25519 und Curve448 als RFC
+ für Krypto-Funktionen offiziell abgesegnet. Eine Standardisierung der Kurven für den
+ Schlüsselaustausch bei TLS wird ebenfalls erwartet.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d283e99/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 06:01:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084830</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Verschluesselung-IETF-standardisiert-zwei-weitere-elliptische-Kurven-3084830.html?wt_mc=rss.ho.beitrag.atom" title="Verschlüsselung: IETF standardisiert zwei weitere elliptische Kurven"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/0/0/curve25519-ecc1ddd469ad6cd4.png" alt="IETF verabschiedet zwei elliptische Kurven" /> </a> <p>Die IETF hat die beiden elliptischen Kurven Curve25519 und Curve448 als RFC für Krypto-Funktionen offiziell abgesegnet. Eine Standardisierung der Kurven für den Schlüsselaustausch bei TLS wird ebenfalls erwartet.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389510249/u/0/f/653902/c/35207/s/4d283e99/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d283e99/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Rekordgewinn: Apple trotzt dem starken Dollar</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Rekordgewinn-Apple-trotzt-dem-starken-Dollar-3085026.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Höchster Umsatz, höchster Reingewinn und eine Marge von 40 Prozent erzielte
+ Apple im Weihnachtsquartal. Weil frühere Weihnachtsquartale aber mehr Zuwachs
+ gebracht hatten, reagierte der Aktienmarkt leicht pikiert.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d280d10/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 05:34:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3085026</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Rekordgewinn-Apple-trotzt-dem-starken-Dollar-3085026.html?wt_mc=rss.ho.beitrag.atom" title="Rekordgewinn: Apple trotzt dem starken Dollar"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/6/1/8/5bc9e08b71b608e7c32186a87b76aa6a_edited_102365868_95dcadf632-9fbfdf75e421933d.jpeg" alt="Abfallende Kurve" /> </a> <p>Höchster Umsatz, höchster Reingewinn und eine Marge von 40 Prozent erzielte Apple im Weihnachtsquartal. Weil frühere Weihnachtsquartale aber mehr Zuwachs gebracht hatten, reagierte der Aktienmarkt leicht pikiert.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389507720/u/0/f/653902/c/35207/s/4d280d10/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d280d10/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Dank Eigenbau-Exoskelett: Der menschliche Wagenheber</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Dank-Eigenbau-Exoskelett-Der-menschliche-Wagenheber-3084868.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Wie viel Krafttraining braucht man, um die Hinterachse eines Mini Coopers
+ vom Boden zu heben? Keines, jedenfalls wenn man das pneumatische Exoskelett benutzt,
+ das James Hobson selbst gebaut hat.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d281348/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Wed, 27 Jan 2016 05:00:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084868</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Dank-Eigenbau-Exoskelett-Der-menschliche-Wagenheber-3084868.html?wt_mc=rss.ho.beitrag.atom" title="Dank Eigenbau-Exoskelett: Der menschliche Wagenheber"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/2/0/Homemade_Exoskeleton_Lifts_Mini_Cooper__-_YouTube_2016-01-26_17-52-24-f2bb9d9aa796b6cb.png" alt="DIY Exoskelett hebt Auto" /> </a> <p>Wie viel Krafttraining braucht man, um die Hinterachse eines Mini Coopers vom Boden zu heben? Keines, jedenfalls wenn man das pneumatische Exoskelett benutzt, das James Hobson selbst gebaut hat.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389498069/u/0/f/653902/c/35207/s/4d281348/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d281348/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>"Online-Kriminellen nicht hinterherlaufen" – Mehr EU-Kooperation gegen
+ Cyberkriminalität
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Online-Kriminellen-nicht-hinterherlaufen-Mehr-EU-Kooperation-gegen-Cyberkriminalitaet-3084940.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Wer ein Verbrechen begeht, hinterlässt oft Spuren – das gilt auch im
+ Internet. Doch in der virtuellen Welt ist die Strafverfolgung schwierig. Was wenn
+ der Täter von einem weit entfernten Erdteil agiert oder Daten dort gespeichert sind?&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d25a88b/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 18:08:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084940</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Online-Kriminellen-nicht-hinterherlaufen-Mehr-EU-Kooperation-gegen-Cyberkriminalitaet-3084940.html?wt_mc=rss.ho.beitrag.atom" title="&quot;Online-Kriminellen nicht hinterherlaufen&quot; – Mehr EU-Kooperation gegen Cyberkriminalität"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/6/3/urn-newsml-dpa-com-20090101-150617-99-05723_large_4_3-6d024b06feefb739.jpeg" alt="&quot;Enter Password&quot;" /> </a> <p>Wer ein Verbrechen begeht, hinterlässt oft Spuren – das gilt auch im Internet. Doch in der virtuellen Welt ist die Strafverfolgung schwierig. Was wenn der Täter von einem weit entfernten Erdteil agiert oder Daten dort gespeichert sind?</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389422225/u/0/f/653902/c/35207/s/4d25a88b/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d25a88b/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Jolla: Update für Sailfish OS, Tablet-Abwicklung ungeklärt</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Jolla-Update-fuer-Sailfish-OS-Tablet-Abwicklung-ungeklaert-3084918.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die Abwicklung des gescheiterten Tablet-Projekts verzögert sich bei Jolla
+ weiter. Dafür stellt das Start-up ein Update für sein Betriebssystem Sailfish OS
+ bereit und Partner Intex kündigt für den MWC ein Smartphone mit Sailfish OS an.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d256c68/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 17:41:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084918</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Jolla-Update-fuer-Sailfish-OS-Tablet-Abwicklung-ungeklaert-3084918.html?wt_mc=rss.ho.beitrag.atom" title="Jolla: Update für Sailfish OS, Tablet-Abwicklung ungeklärt"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/4/7/jolla-97b85423540dfde4.png" alt="Jolla: Update für Sailfish OS, Tablet-Abwicklung ungeklärt" /> </a> <p>Die Abwicklung des gescheiterten Tablet-Projekts verzögert sich bei Jolla weiter. Dafür stellt das Start-up ein Update für sein Betriebssystem Sailfish OS bereit und Partner Intex kündigt für den MWC ein Smartphone mit Sailfish OS an.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389460756/u/0/f/653902/c/35207/s/4d256c68/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d256c68/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Periscope ermöglicht Livestreaming mit GoPro-Kamera</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Periscope-ermoeglicht-Livestreaming-mit-GoPro-Kamera-3084901.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die iPhone-App von Twitters Livestreaming-Dienstes unterstützt nun GoPro:
+ Die Aufnahme der Action-Cam lässt sich so unmittelbar ausstrahlen – im Wechsel mit
+ der iPhone-Kamera&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252b88/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 17:11:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084901</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Periscope-ermoeglicht-Livestreaming-mit-GoPro-Kamera-3084901.html?wt_mc=rss.ho.beitrag.atom" title="Periscope ermöglicht Livestreaming mit GoPro-Kamera"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/3/3/Bildschirmfoto_2016-01-26_um_17-5a21fc7e60faedc5.png" alt="Periscope GoPro" /> </a> <p>Die iPhone-App von Twitters Livestreaming-Dienstes unterstützt nun GoPro: Die Aufnahme der Action-Cam lässt sich so unmittelbar ausstrahlen – im Wechsel mit der iPhone-Kamera</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389416151/u/0/f/653902/c/35207/s/4d252b88/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252b88/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Globales Satelliten-Internet: Airbus gründet Joint Venture mit OneWeb</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Globales-Satelliten-Internet-Airbus-gruendet-Joint-Venture-mit-OneWeb-3084840.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Der europäische Rüstungs- und Weltraumkonzern Airbus arbeitet jetzt noch
+ enger mit OneWeb zusammen bei dem Vorhaben, Hunderte Satelliten ins All zu schießen,
+ die die ganze Erde mit Internet versorgen sollen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252c8b/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 16:38:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084840</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Globales-Satelliten-Internet-Airbus-gruendet-Joint-Venture-mit-OneWeb-3084840.html?wt_mc=rss.ho.beitrag.atom" title="Globales Satelliten-Internet: Airbus gründet Joint Venture mit OneWeb"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/1/0/slide-2-42ff2dea3b808ad3.jpeg" alt="Globales Satelliten-Internet: Airbus gründet Joint Venture mit OneWeb" /> </a> <p>Der europäische Rüstungs- und Weltraumkonzern Airbus arbeitet jetzt noch enger mit OneWeb zusammen bei dem Vorhaben, Hunderte Satelliten ins All zu schießen, die die ganze Erde mit Internet versorgen sollen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389454758/u/0/f/653902/c/35207/s/4d252c8b/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252c8b/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Verfassungsgericht stoppt Vorratsdatenspeicherung vorerst nicht</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Verfassungsgericht-stoppt-Vorratsdatenspeicherung-vorerst-nicht-3084879.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Das Bundesverfassungsgericht hat einen Antrag aus einer
+ Verfassungsbeschwerde abgelehnt, wonach die neue Speicherpflicht für elektronische
+ Nutzerspuren zunächst gar nicht greifen sollte. In der Sache ist damit aber noch
+ nichts entschieden.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252c8a/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 16:37:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084879</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Verfassungsgericht-stoppt-Vorratsdatenspeicherung-vorerst-nicht-3084879.html?wt_mc=rss.ho.beitrag.atom" title="Verfassungsgericht stoppt Vorratsdatenspeicherung vorerst nicht"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/5/2/7/Bildschirmfoto_2016-01-26_um_17-1ebffe496feca16d.jpeg" alt="Verfassungsgericht stoppt Vorratsdatenspeicherung vorerst nicht" /> </a> <p>Das Bundesverfassungsgericht hat einen Antrag aus einer Verfassungsbeschwerde abgelehnt, wonach die neue Speicherpflicht für elektronische Nutzerspuren zunächst gar nicht greifen sollte. In der Sache ist damit aber noch nichts entschieden.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389454757/u/0/f/653902/c/35207/s/4d252c8a/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d252c8a/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Intel enthüllt erste Skylake-Prozessoren mit Iris-Pro-Grafik</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Intel-enthuellt-erste-Skylake-Prozessoren-mit-Iris-Pro-Grafik-3084686.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>In Intels neustem Preislisten-Update finden sich etliche neue
+ Skylake-Modelle für Notebooks, darunter das neue Flaggschiff: der rund 1200
+ US-Dollar teure Xeon E3-1575M v5 mit Iris Pro P580.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24fe5f/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 16:27:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084686</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Intel-enthuellt-erste-Skylake-Prozessoren-mit-Iris-Pro-Grafik-3084686.html?wt_mc=rss.ho.beitrag.atom" title="Intel enthüllt erste Skylake-Prozessoren mit Iris-Pro-Grafik"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/0/9/Intel-Waferspin1-82c1b072cc5449c0.png" alt="Intel" /> </a> <p>In Intels neustem Preislisten-Update finden sich etliche neue Skylake-Modelle für Notebooks, darunter das neue Flaggschiff: der rund 1200 US-Dollar teure Xeon E3-1575M v5 mit Iris Pro P580.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389453021/u/0/f/653902/c/35207/s/4d24fe5f/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24fe5f/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Pornografie-Vorwurf: Pakistan sperrt mehr als 400.000 Webseiten</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Pornografie-Vorwurf-Pakistan-sperrt-mehr-als-400-000-Webseiten-3084805.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Eine Woche nach der Wiederzulassung von YouTube hat Pakistans
+ Telekommunikationsbehörde angekündigt, eine halbe Million Webseiten wegen
+ angeblicher Pornografie zu löschen. Welche Seiten es letztlich trifft, ist noch
+ nicht abzusehen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24d43d/sc/17/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 15:50:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084805</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Pornografie-Vorwurf-Pakistan-sperrt-mehr-als-400-000-Webseiten-3084805.html?wt_mc=rss.ho.beitrag.atom" title="Pornografie-Vorwurf: Pakistan sperrt mehr als 400.000 Webseiten"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/7/9/urn-newsml-dpa-com-20090101-150316-99-09245_large_4_3-bea5f029e8655dbf.jpeg" alt="Surfen im Internet" /> </a> <p>Eine Woche nach der Wiederzulassung von YouTube hat Pakistans Telekommunikationsbehörde angekündigt, eine halbe Million Webseiten wegen angeblicher Pornografie zu löschen. Welche Seiten es letztlich trifft, ist noch nicht abzusehen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2.htm"><img src="http://da.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389441451/u/0/f/653902/c/35207/s/4d24d43d/sc/17/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24d43d/sc/17/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Phishing-SMS: Identitätsdiebstahl bei Car2go-Kunden</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Phishing-SMS-Identitaetsdiebstahl-bei-Car2go-Kunden-3084730.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Über eine SMS wollen Betrüger Car2go-Nutzer auf eine Phishing-Webseite
+ locken und persönliche Daten abziehen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24cd38/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 15:39:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084730</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Phishing-SMS-Identitaetsdiebstahl-bei-Car2go-Kunden-3084730.html?wt_mc=rss.ho.beitrag.atom" title="Phishing-SMS: Identitätsdiebstahl bei Car2go-Kunden"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/3/4/urn-newsml-dpa-com-20090101-141016-99-05211_large_4_3-b82d617fe2ae9b7d.jpeg" alt="SMS" /> </a> <p>Über eine SMS wollen Betrüger Car2go-Nutzer auf eine Phishing-Webseite locken und persönliche Daten abziehen. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389439795/u/0/f/653902/c/35207/s/4d24cd38/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24cd38/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Studie: Vernetzung von Autos schafft mehr Sicherheit – aber auch Skepsis</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Studie-Vernetzung-von-Autos-schafft-mehr-Sicherheit-aber-auch-Skepsis-3084679.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Analysten im Auftrag des Wirtschaftsministeriums kommen zu dem Ergebnis,
+ dass die Vernetzung von Fahrzeugen und Straßen Sicherheit und Komfort verbessert.
+ Die Angst vorm gläsernen Fahrer müsse aber bewältigt werden.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24bc09/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 15:18:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084679</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Studie-Vernetzung-von-Autos-schafft-mehr-Sicherheit-aber-auch-Skepsis-3084679.html?wt_mc=rss.ho.beitrag.atom" title="Studie: Vernetzung von Autos schafft mehr Sicherheit – aber auch Skepsis"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/0/4/Bildschirmfoto_2016-01-26_um_15-4f813edda1a7e109.jpeg" alt="Vernetzte Autos" /> </a> <p>Analysten im Auftrag des Wirtschaftsministeriums kommen zu dem Ergebnis, dass die Vernetzung von Fahrzeugen und Straßen Sicherheit und Komfort verbessert. Die Angst vorm gläsernen Fahrer müsse aber bewältigt werden.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389446423/u/0/f/653902/c/35207/s/4d24bc09/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d24bc09/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Spezieller Einhandmodus für Microsofts iPhone-Tastatur</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Spezieller-Einhandmodus-fuer-Microsofts-iPhone-Tastatur-3084738.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die geplante iOS-Version von Microsofts Word-Flow-Keyboard erhält einem
+ Bericht zufolge einen besonderen Modus für die einhändige Bedienung. Der öffentliche
+ Beta-Test der Tastatur soll bald beginnen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2495f5/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 15:10:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084738</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Spezieller-Einhandmodus-fuer-Microsofts-iPhone-Tastatur-3084738.html?wt_mc=rss.ho.beitrag.atom" title="Spezieller Einhandmodus für Microsofts iPhone-Tastatur"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/4/4/2/Bildschirmfoto_2016-01-26_um_15-086c14c35aded06e.png" alt="Word Flow Microsoft" /> </a> <p>Die geplante iOS-Version von Microsofts Word-Flow-Keyboard erhält einem Bericht zufolge einen besonderen Modus für die einhändige Bedienung. Der öffentliche Beta-Test der Tastatur soll bald beginnen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389403553/u/0/f/653902/c/35207/s/4d2495f5/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2495f5/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Groupon schließt in der Schweiz und in Österreich</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Groupon-schliesst-in-der-Schweiz-und-in-Oesterreich-3084595.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Das Rabatt-Portal Groupon reduziert sein internationales Angebot: Zum 25.
+ Januar hat das Unternehmen seine Geschäfte in Österreich und in der Schweiz
+ eingestellt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d245ae7/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 14:30:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084595</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Groupon-schliesst-in-der-Schweiz-und-in-Oesterreich-3084595.html?wt_mc=rss.ho.beitrag.atom" title="Groupon schließt in der Schweiz und in Österreich"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/3/5/9/urn-newsml-dpa-com-20090101-150506-99-02759_large_4_3-0f1df47004187636.jpeg" alt="Groupon" /> </a> <p>Das Rabatt-Portal Groupon reduziert sein internationales Angebot: Zum 25. Januar hat das Unternehmen seine Geschäfte in Österreich und in der Schweiz eingestellt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389398598/u/0/f/653902/c/35207/s/4d245ae7/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d245ae7/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Bilderkennung: Algorithmen aus Jena sollen Tiere auch in Bewegung bestimmen
+ können
+ </title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Bilderkennung-Algorithmen-aus-Jena-sollen-Tiere-auch-in-Bewegung-bestimmen-koennen-3084658.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>So manches Elternteil wird stutzen, wenn das Kind auf dem Waldspaziergang
+ nach dem Namen einer Pflanze oder eines Tieres fragt. Forscher der Uni Jena könnten
+ mit einem von ihnen entwickelten Verfahren vielleicht bald Apphilfe schaffen.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d245ae6/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 14:20:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084658</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Bilderkennung-Algorithmen-aus-Jena-sollen-Tiere-auch-in-Bewegung-bestimmen-koennen-3084658.html?wt_mc=rss.ho.beitrag.atom" title="Bilderkennung: Algorithmen aus Jena sollen Tiere auch in Bewegung bestimmen können"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/3/9/0/Tabletamsel_ka-1-171b29b5d58fb7f5.jpeg" alt="Bilderkennung: Algorithmen aus Jena sollen Tiere auch in Bewegung bestimmen können" /> </a> <p>So manches Elternteil wird stutzen, wenn das Kind auf dem Waldspaziergang nach dem Namen einer Pflanze oder eines Tieres fragt. Forscher der Uni Jena könnten mit einem von ihnen entwickelten Verfahren vielleicht bald Apphilfe schaffen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389398597/u/0/f/653902/c/35207/s/4d245ae6/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d245ae6/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Neue Folgen von Akte X: "Ich will es immer noch glauben"</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Neue-Folgen-von-Akte-X-Ich-will-es-immer-noch-glauben-3084426.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>13 Jahre nach ihrem Ende geht die US-Serie &amp;quot;Akte X&amp;quot;
+ weiter, als Fortsetzung des Klassikers in modernem Gewand und unserer Zeit.
+ Inhaltlich bleibt sie sich treu: An allem sind geheime Verschwörer schuld – eine
+ Einschätzung, die seltsam bekannt klingt.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d240285/sc/17/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 13:35:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084426</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Neue-Folgen-von-Akte-X-Ich-will-es-immer-noch-glauben-3084426.html?wt_mc=rss.ho.beitrag.atom" title="Neue Folgen von Akte X: &quot;Ich will es immer noch glauben&quot;"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/2/2/4/vlcsnap-2016-01-26-12h57m41s255-7b7bc03717696405.jpeg" alt="Neue Folgen von Akte X: &quot;Ich will es nur glauben&quot;" /> </a> <p>13 Jahre nach ihrem Ende geht die US-Serie "Akte X" weiter, als Fortsetzung des Klassikers in modernem Gewand und unserer Zeit. Inhaltlich bleibt sie sich treu: An allem sind geheime Verschwörer schuld – eine Einschätzung, die seltsam bekannt klingt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2.htm"><img src="http://da.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389434588/u/0/f/653902/c/35207/s/4d240285/sc/17/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d240285/sc/17/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Frag den Bundestag: Parlamentsgutachten sollen öffentlich werden</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Frag-den-Bundestag-Parlamentsgutachten-sollen-oeffentlich-werden-3084481.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Über das neue Portal &amp;quot;Frag den Bundestag&amp;quot; können Nutzer
+ per Knopfdruck Studien des Wissenschaftlichen Dienstes des Bundestags beantragen. So
+ soll es möglich werden, alle herausgegebenen Untersuchungen in einer
+ Online-Bibliothek zu veröffentlichen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d240284/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 13:32:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084481</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Frag-den-Bundestag-Parlamentsgutachten-sollen-oeffentlich-werden-3084481.html?wt_mc=rss.ho.beitrag.atom" title="Frag den Bundestag: Parlamentsgutachten sollen öffentlich werden"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/2/7/0/Bildschirmfoto_2016-01-26_um_14-0c84fcc438275a89.jpeg" alt="Frag den Bundestag: Parlamentsgutachten sollen öffentlich werden" /> </a> <p>Über das neue Portal "Frag den Bundestag" können Nutzer per Knopfdruck Studien des Wissenschaftlichen Dienstes des Bundestags beantragen. So soll es möglich werden, alle herausgegebenen Untersuchungen in einer Online-Bibliothek zu veröffentlichen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389434587/u/0/f/653902/c/35207/s/4d240284/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d240284/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>USA: 300.000 Hobbypiloten registrieren ihre Drohnen</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/USA-300-000-Hobbypiloten-registrieren-ihre-Drohnen-3084403.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Seit dem 21. Dezember 2015 müssen Hobbypiloten in den USA ihre kleinen
+ unbemannten Flugobjekte registrieren. Nun hat die Luftfahrtbehörde erste Zahlen
+ veröffentlicht. Bei einer Registrierung bis zum 20. Januar konnten Piloten mit einer
+ Belohnung rechnen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d23ebcb/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 13:06:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084403</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/USA-300-000-Hobbypiloten-registrieren-ihre-Drohnen-3084403.html?wt_mc=rss.ho.beitrag.atom" title="USA: 300.000 Hobbypiloten registrieren ihre Drohnen"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/2/0/5/phantom-dda03c5466cdeaba-a1ea68cfecc952e7.jpeg" alt="Drohne" /> </a> <p>Seit dem 21. Dezember 2015 müssen Hobbypiloten in den USA ihre kleinen unbemannten Flugobjekte registrieren. Nun hat die Luftfahrtbehörde erste Zahlen veröffentlicht. Bei einer Registrierung bis zum 20. Januar konnten Piloten mit einer Belohnung rechnen. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389390571/u/0/f/653902/c/35207/s/4d23ebcb/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d23ebcb/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Autoindustrie und Datenschützer: KfZ-Daten unterliegen dem Datenschutz</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Autoindustrie-und-Datenschuetzer-KfZ-Daten-unterliegen-dem-Datenschutz-3084253.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Alle Daten, die in einem Fahrzeug anfallen, gelten als personenbezogen,
+ sobald sie mit der Fahrzeugidentifikationsnummer oder dem Kfz-Kennzeichen verknüpft
+ sind. Darauf und auf mehr haben sich Industrie und Datenschutzbeauftragte geeinigt.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2348fb/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 11:37:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084253</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Autoindustrie-und-Datenschuetzer-KfZ-Daten-unterliegen-dem-Datenschutz-3084253.html?wt_mc=rss.ho.beitrag.atom" title="Autoindustrie und Datenschützer: KfZ-Daten unterliegen dem Datenschutz"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/0/9/6/image-1408514071782004-db0fcdb2cb0a7832-20569746602bb050.jpeg" alt="Auto" /> </a> <p>Alle Daten, die in einem Fahrzeug anfallen, gelten als personenbezogen, sobald sie mit der Fahrzeugidentifikationsnummer oder dem Kfz-Kennzeichen verknüpft sind. Darauf und auf mehr haben sich Industrie und Datenschutzbeauftragte geeinigt.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389411781/u/0/f/653902/c/35207/s/4d2348fb/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2348fb/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Wirtschaftsministerium richtet Leseraum für TTIP-Dokumente ein</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Wirtschaftsministerium-richtet-Leseraum-fuer-TTIP-Dokumente-ein-3084344.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Die Bundesregierung kommt einer Forderung des Bundestags nach und gewährt
+ Abgeordneten und Ländervertretern Zugang zu vertraulichen Verhandlungspapieren rund
+ um das umstrittene Handelsabkommen TTIP.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2348fa/sc/3/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 11:27:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084344</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Wirtschaftsministerium-richtet-Leseraum-fuer-TTIP-Dokumente-ein-3084344.html?wt_mc=rss.ho.beitrag.atom" title="Wirtschaftsministerium richtet Leseraum für TTIP-Dokumente ein"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/1/5/8/Bildschirmfoto_2016-01-26_um_12-1315b4276da79760.jpeg" alt="Wirtschaftsministerium richtet Leseraum für TTIP-Dokumente ein" /> </a> <p>Die Bundesregierung kommt einer Forderung des Bundestags nach und gewährt Abgeordneten und Ländervertretern Zugang zu vertraulichen Verhandlungspapieren rund um das umstrittene Handelsabkommen TTIP.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2.htm"><img src="http://da.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389411780/u/0/f/653902/c/35207/s/4d2348fa/sc/3/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d2348fa/sc/3/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Sony verlegt seine Playstation-Zentrale von Japan in die USA</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Sony-verlegt-seine-Playstation-Zentrale-von-Japan-in-die-USA-3084235.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Unter dem Dach der Sony Interactive Entertainment (SIE) sollen die
+ Geschäfte mit Hard- und Software sowie Inhalten und Netzwerkservices zusammengeführt
+ werden – und zwar in Kalifornien.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d22c030/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 10:13:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084235</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Sony-verlegt-seine-Playstation-Zentrale-von-Japan-in-die-USA-3084235.html?wt_mc=rss.ho.beitrag.atom" title="Sony verlegt seine Playstation-Zentrale von Japan in die USA"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/0/7/8/ps4-afdf7ad4d65f4b20-52131920b12f35b6-f3a1e1c612c84968.jpeg" alt="Playstation" /> </a> <p>Unter dem Dach der Sony Interactive Entertainment (SIE) sollen die Geschäfte mit Hard- und Software sowie Inhalten und Netzwerkservices zusammengeführt werden – und zwar in Kalifornien.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389402157/u/0/f/653902/c/35207/s/4d22c030/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d22c030/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>Sicherheitsupdate für OpenSSL steht an</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/Sicherheitsupdate-fuer-OpenSSL-steht-an-3084227.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Neue OpenSSL-Versionen sollen zwei Sicherheitslücken schließen. Den
+ Schweregrad einer Schwachstelle stuft das OpenSSL-Team mit hoch ein.&lt;br
+ clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d22c02f/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 10:10:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084227</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/Sicherheitsupdate-fuer-OpenSSL-steht-an-3084227.html?wt_mc=rss.ho.beitrag.atom" title="Sicherheitsupdate für OpenSSL steht an"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/0/7/0/key-id-ec35f72fab481a99-9b59ced0bbaed03d-c4be465cb3c66623.jpeg" alt="Schlüssel" /> </a> <p>Neue OpenSSL-Versionen sollen zwei Sicherheitslücken schließen. Den Schweregrad einer Schwachstelle stuft das OpenSSL-Team mit hoch ein. </p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389402156/u/0/f/653902/c/35207/s/4d22c02f/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d22c02f/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ <item>
+ <title>PDF-Reader Foxit Reader für Schadcode anfällig</title>
+ <link>
+ http://www.heise.de/newsticker/meldung/PDF-Reader-Foxit-Reader-fuer-Schadcode-anfaellig-3084161.html?wt_mc=rss.ho.beitrag.atom
+ </link>
+ <description>Neue Versionen sichern Foxit PhantomPDF und Foxit Reader ab. Beide
+ Anwendungen lassen sich aus der Ferne attackieren und Angreifer können eigenen Code
+ auf Computer schleusen.&lt;br clear='all'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/1/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/1/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/2/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/2/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/3/rc.htm"
+ rel="nofollow"&gt;&lt;img
+ src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/3/rc.img"
+ border="0"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a
+ href="http://da.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2.htm"&gt;&lt;img
+ src="http://da.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2.img"
+ border="0"/&gt;&lt;/a&gt;&lt;img width="1" height="1"
+ src="http://pi.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2t.img"
+ border="0"/&gt;&lt;img width='1' height='1'
+ src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d227a5f/sc/21/mf.gif'
+ border='0'/&gt;</description>
+ <pubDate>Tue, 26 Jan 2016 09:53:00 GMT</pubDate>
+ <guid isPermaLink="false">http://heise.de/-3084161</guid>
+ <content:encoded>
+ <![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> <a href="http://www.heise.de/newsticker/meldung/PDF-Reader-Foxit-Reader-fuer-Schadcode-anfaellig-3084161.html?wt_mc=rss.ho.beitrag.atom" title="PDF-Reader Foxit Reader für Schadcode anfällig"> <img src="http://www.heise.de/scale/geometry/264/q80/imgs/18/1/7/3/7/0/2/4/img3File_thumb800-4b0bd095dcbcce5d.png" alt="Foxit Reader für Schadcode anfällig" /> </a> <p>Neue Versionen sichern Foxit PhantomPDF und Foxit Reader ab. Beide Anwendungen lassen sich aus der Ferne attackieren und Angreifer können eigenen Code auf Computer schleusen.</p> </div><br clear='all'/><br/><br/><a href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/1/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/1/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/2/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/2/rc.img" border="0"/></a><br/><br/><a href="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/3/rc.htm" rel="nofollow"><img src="http://rc.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/rc/3/rc.img" border="0"/></a><br/><br/><a href="http://da.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2.htm"><img src="http://da.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2.img" border="0"/></a><img width="1" height="1" src="http://pi.feedsportal.com/r/247389406045/u/0/f/653902/c/35207/s/4d227a5f/sc/21/a2t.img" border="0"/><img width='1' height='1' src='http://heise.de.feedsportal.com/c/35207/f/653902/s/4d227a5f/sc/21/mf.gif' border='0'/>]]></content:encoded>
+ </item>
+ </channel>
+</rss>
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_medium.xml b/mobile/android/tests/background/junit4/resources/feed_rss_medium.xml
new file mode 100644
index 000000000..0f5a20ab6
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_medium.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Snapshot from https://medium.com/feed/@Antlam/
+-->
+<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[Anthony Lam on Medium]]></title>
+ <description><![CDATA[Latest posts by Anthony Lam on Medium]]></description>
+ <link>https://medium.com/@antlam?source=rss-59f49b9e4b19------2</link>
+ <image>
+ <url>https://d262ilb51hltx0.cloudfront.net/fit/c/150/150/1*BNfAhhQ8TybWsu_gMMixWw.jpeg</url>
+ <title>Anthony Lam on Medium</title>
+ <link>https://medium.com/@antlam?source=rss-59f49b9e4b19------2</link>
+ </image>
+ <generator>RSS for Node</generator>
+ <lastBuildDate>Tue, 26 Jan 2016 17:06:09 GMT</lastBuildDate>
+ <atom:link href="https://medium.com/feed/@antlam" rel="self" type="application/rss+xml"/>
+ <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
+ <atom:link href="http://medium.superfeedr.com" rel="hub"/>
+ <item>
+ <title><![CDATA[UX thoughts for 2016]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/ux-thoughts-for-2016-1fc1d6e515e8?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*mOiPSWfvCBoLUrfQlIrdVQ.png" width="600" height="200"></a></p><p class="medium-feed-snippet">And just like that, another year.</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/ux-thoughts-for-2016-1fc1d6e515e8?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/ux-thoughts-for-2016-1fc1d6e515e8?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/1fc1d6e515e8</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Mon, 11 Jan 2016 18:43:58 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[A New Mobile Tabs tray]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/a-new-mobile-tabs-tray-327ac262eacb?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*scpLRAL_zy9CcW6BLGZHng.png" width="600" height="200"></a></p><p class="medium-feed-snippet">Why we&#8217;re giving it an update in Firefox for Android</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/a-new-mobile-tabs-tray-327ac262eacb?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/a-new-mobile-tabs-tray-327ac262eacb?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/327ac262eacb</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Fri, 06 Nov 2015 17:30:55 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Quick search]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/quick-search-bdd374257e75?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*DyBNARNADZsexPnxkMaEgQ.png" width="600" height="200"></a></p><p class="medium-feed-snippet">Instantly search with any of your search providers</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/quick-search-bdd374257e75?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/quick-search-bdd374257e75?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/bdd374257e75</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 01 Sep 2015 17:36:32 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Designing helpfulness]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/designing-helpfulness-c1777727faf?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*Cg8wkgjwCH7A1Aotec1Okw.png" width="600" height="200"></a></p><p class="medium-feed-snippet">Being there, without being annoying</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/designing-helpfulness-c1777727faf?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/designing-helpfulness-c1777727faf?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/c1777727faf</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 11 Aug 2015 20:59:13 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Share to… Firefox?]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/share-to-firefox-245984b2da33?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*H5wztlFTvbE1EM_5MRkuzg.png" width="600" height="200"></a></p><p class="medium-feed-snippet">You may remember this from such share intents as &#8220;Add to Firefox&#8221;</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/share-to-firefox-245984b2da33?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/share-to-firefox-245984b2da33?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/245984b2da33</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Fri, 08 May 2015 20:18:18 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Open multiple links]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/open-multiple-links-1ce475c47de3?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*yEQ5DjomHZIgVzUN-FKx2A.jpeg" width="600" height="200"></a></p><p class="medium-feed-snippet">Queue links in Firefox instead of switching applications each time.</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/open-multiple-links-1ce475c47de3?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/open-multiple-links-1ce475c47de3?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/1ce475c47de3</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 14 Apr 2015 18:44:59 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Firefox for Android on Tablets]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/firefox-for-android-on-tablets-f67edc83dd46?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*H5p3YQ1NGpfGPDryd22Ujg.png" width="600" height="200"></a></p><p class="medium-feed-snippet">Redesigning the browser interface&#8202;&#8212;&#8202;Part two</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/firefox-for-android-on-tablets-f67edc83dd46?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/firefox-for-android-on-tablets-f67edc83dd46?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/f67edc83dd46</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 03 Feb 2015 20:29:18 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Are big phones back?]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/are-big-phones-back-59550ba0f24e?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*XArwkY9ZcmtCkEhDwl0aKA.jpeg" width="600" height="200"></a></p><p class="medium-feed-snippet">Some thoughts and impressions</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/are-big-phones-back-59550ba0f24e?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/are-big-phones-back-59550ba0f24e?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/59550ba0f24e</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 23 Dec 2014 20:05:36 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[Firefox for Android looks a bit different]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/firefox-for-android-looks-a-bit-different-8ae8eba41b1f?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*Lk31G3Qt2fs5WcOtBQQVgw.png" width="600" height="200"></a></p><p class="medium-feed-snippet">Redesigning the browser interface</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/firefox-for-android-looks-a-bit-different-8ae8eba41b1f?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/firefox-for-android-looks-a-bit-different-8ae8eba41b1f?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/8ae8eba41b1f</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Fri, 29 Aug 2014 23:38:07 GMT</pubDate>
+ </item>
+ <item>
+ <title><![CDATA[My fancy new watch]]></title>
+ <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@antlam/my-fancy-new-watch-4856162890a3?source=rss-59f49b9e4b19------2"><img src="https://d262ilb51hltx0.cloudfront.net/fit/c/600/200/1*_gsBD-Vw7qevrwLxXZe8jA.jpeg" width="600" height="200"></a></p><p class="medium-feed-snippet">Early thoughts</p><p class="medium-feed-link"><a href="https://medium.com/@antlam/my-fancy-new-watch-4856162890a3?source=rss-59f49b9e4b19------2">Continue reading on Medium »</a></p></div>]]></description>
+ <link>https://medium.com/@antlam/my-fancy-new-watch-4856162890a3?source=rss-59f49b9e4b19------2</link>
+ <guid isPermaLink="false">https://medium.com/p/4856162890a3</guid>
+ <dc:creator><![CDATA[Anthony Lam]]></dc:creator>
+ <pubDate>Tue, 22 Jul 2014 01:36:52 GMT</pubDate>
+ </item>
+ </channel> \ No newline at end of file
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_spon.xml b/mobile/android/tests/background/junit4/resources/feed_rss_spon.xml
new file mode 100644
index 000000000..e5a81d514
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_spon.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
+ <channel>
+ <title>SPIEGEL ONLINE - Schlagzeilen</title>
+ <link>http://www.spiegel.de</link>
+ <description>Deutschlands fhrende Nachrichtenseite. Alles Wichtige aus Politik, Wirtschaft, Sport, Kultur, Wissenschaft, Technik und mehr.</description>
+ <language>de</language>
+ <pubDate>Wed, 27 Jan 2016 18:20:31 +0100</pubDate>
+ <lastBuildDate>Wed, 27 Jan 2016 18:20:31 +0100</lastBuildDate>
+ <image>
+ <title>SPIEGEL ONLINE</title>
+ <link>http://www.spiegel.de</link>
+ <url>http://www.spiegel.de/static/sys/logo_120x61.gif</url>
+ </image>
+ <item>
+ <title>Angebliche Vergewaltigung einer 13-Jhrigen: Steinmeier kanzelt russischen Minister Lawrow ab</title>
+ <link>http://www.spiegel.de/politik/ausland/steinmeier-kanzelt-lawrow-ab-aerger-um-angebliche-vergewaltigung-a-1074292.html#ref=rss</link>
+ <description>Der Ton wird scharf zwischen Berlin und Moskau: Frank-Walter Steinmeier wirft dem russischen Auenminister Lawrow politische Propaganda vor - es geht um die angebliche Vergewaltigung einer 13-Jhrigen in Berlin.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 18:16:16 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/ausland/steinmeier-kanzelt-lawrow-ab-aerger-um-angebliche-vergewaltigung-a-1074292.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949492-thumbsmall-wtgq.jpg" hspace="5" align="left" >Der Ton wird scharf zwischen Berlin und Moskau: Frank-Walter Steinmeier wirft dem russischen Auenminister Lawrow politische Propaganda vor - es geht um die angebliche Vergewaltigung einer 13-Jhrigen in Berlin.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949492-thumbsmall-wtgq.jpg"/>
+ </item>
+ <item>
+ <title>Grafischer berblick: Hier gibt es die wenigsten Herzinfarkte in Deutschland</title>
+ <link>http://www.spiegel.de/gesundheit/diagnose/ostdeutsche-sterben-deutlich-haeufiger-an-einem-herzinfarkt-a-1074231.html#ref=rss</link>
+ <description>Nirgendwo arbeiten mehr Kardiologen als in Hamburg - auch deshalb gibt es dort weniger Herzinfarkte als in anderen Bundeslndern. Wie sieht es in Ihrer Gegend aus, wo ist die Sterblichkeit am hchsten? Der berblick.</description>
+ <category>Gesundheit</category>
+ <pubDate>Wed, 27 Jan 2016 18:08:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/gesundheit/diagnose/ostdeutsche-sterben-deutlich-haeufiger-an-einem-herzinfarkt-a-1074231.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-566602-thumbsmall-bxcg.jpg" hspace="5" align="left" >Nirgendwo arbeiten mehr Kardiologen als in Hamburg - auch deshalb gibt es dort weniger Herzinfarkte als in anderen Bundeslndern. Wie sieht es in Ihrer Gegend aus, wo ist die Sterblichkeit am hchsten? Der berblick.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-566602-thumbsmall-bxcg.jpg"/>
+ </item>
+ <item>
+ <title>Nachhilfe fr gute Schler: Lasst Eure Kinder auch das Scheitern lernen</title>
+ <link>http://www.spiegel.de/schulspiegel/nachhilfe-entspannte-schueler-brauchen-entspannte-eltern-a-1074197.html#ref=rss</link>
+ <description>Selbst gute Schler werden von ihren Eltern zur Nachhilfe geschickt. Das schadet mehr, als es ntzt - denn die Kinder lernen dabei vor allem eines: Dass sie nicht scheitern drfen.</description>
+ <category>SchulSPIEGEL</category>
+ <pubDate>Wed, 27 Jan 2016 18:02:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/schulspiegel/nachhilfe-entspannte-schueler-brauchen-entspannte-eltern-a-1074197.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-396678-thumbsmall-dhws.jpg" hspace="5" align="left" >Selbst gute Schler werden von ihren Eltern zur Nachhilfe geschickt. Das schadet mehr, als es ntzt - denn die Kinder lernen dabei vor allem eines: Dass sie nicht scheitern drfen.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-396678-thumbsmall-dhws.jpg"/>
+ </item>
+ <item>
+ <title>Germanwings-Katastrophe: Arbeitsgruppe regt Schleuse zwischen Kabine und Cockpit an</title>
+ <link>http://www.spiegel.de/panorama/germanwings-katastrophe-arbeitsgruppe-legt-abschlussbericht-vor-a-1074294.html#ref=rss</link>
+ <description>Wie sicher muss ein Flugzeugcockpit sein? Nach dem Germanwings-Absturz mit 150 Toten hat sich eine Arbeitsgruppe mit dieser Frage befasst - und nun ihren Abschlussbericht vorgelegt.</description>
+ <category>Panorama</category>
+ <pubDate>Wed, 27 Jan 2016 17:52:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/panorama/germanwings-katastrophe-arbeitsgruppe-legt-abschlussbericht-vor-a-1074294.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-828832-thumbsmall-gjvf.jpg" hspace="5" align="left" >Wie sicher muss ein Flugzeugcockpit sein? Nach dem Germanwings-Absturz mit 150 Toten hat sich eine Arbeitsgruppe mit dieser Frage befasst - und nun ihren Abschlussbericht vorgelegt.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-828832-thumbsmall-gjvf.jpg"/>
+ </item>
+ <item>
+ <title>Polen: Hndler wehren sich gegen Supermarktsteuer</title>
+ <link>http://www.spiegel.de/wirtschaft/soziales/polen-will-internationale-einzelhaendler-hoeher-besteuern-a-1074101.html#ref=rss</link>
+ <description>Polens Regierung plant, Einzelhndler hher zu besteuern - und will mit den Einnahmen soziale Wohltaten finanzieren. Besonders trifft es auslndische Unternehmen wie Kaufland und Metro.</description>
+ <category>Wirtschaft</category>
+ <pubDate>Wed, 27 Jan 2016 17:46:10 +0100</pubDate>
+ <guid>http://www.spiegel.de/wirtschaft/soziales/polen-will-internationale-einzelhaendler-hoeher-besteuern-a-1074101.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949308-thumbsmall-wwsr.jpg" hspace="5" align="left" >Polens Regierung plant, Einzelhndler hher zu besteuern - und will mit den Einnahmen soziale Wohltaten finanzieren. Besonders trifft es auslndische Unternehmen wie Kaufland und Metro.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949308-thumbsmall-wwsr.jpg"/>
+ </item>
+ <item>
+ <title>bergriffe in Kln: Polizei erteilt Silvester-Verdchtigen Karnevalverbot</title>
+ <link>http://www.spiegel.de/panorama/justiz/koeln-polizei-erteilt-silvester-verdaechtigen-verbote-fuer-karneval-a-1074274.html#ref=rss</link>
+ <description>Klns Polizei bereitet sich auf die Karnevalstage vor: Tatverdchtige aus der Silvesternacht sollen mit Zutrittsverboten von bestimmten Orten ferngehalten werden. Der Polizeiprsident forderte die Narren zudem auf, keine Spielzeugwaffen zu tragen.</description>
+ <category>Panorama</category>
+ <pubDate>Wed, 27 Jan 2016 17:23:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/panorama/justiz/koeln-polizei-erteilt-silvester-verdaechtigen-verbote-fuer-karneval-a-1074274.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-942482-thumbsmall-qyge.jpg" hspace="5" align="left" >Klns Polizei bereitet sich auf die Karnevalstage vor: Tatverdchtige aus der Silvesternacht sollen mit Zutrittsverboten von bestimmten Orten ferngehalten werden. Der Polizeiprsident forderte die Narren zudem auf, keine Spielzeugwaffen zu tragen.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-942482-thumbsmall-qyge.jpg"/>
+ </item>
+ <item>
+ <title>"The Hateful 8"-Stars im Interview: "Wahnsinn, was da alles passiert!"</title>
+ <link>http://www.spiegel.de/kultur/kino/the-hateful-8-quentin-tarantino-und-jennifer-jason-leigh-im-interview-a-1074202.html#ref=rss</link>
+ <description>Sieben Mnner und eine Frau - in seinem Western "The Hateful 8" entwirft Quentin Tarantino ein brutales Abbild der US-Gesellschaft. Hier erklren der Regisseur und seine Hauptdarstellerin, warum es sich lohnt, den Film gleich mehrmals anzusehen.</description>
+ <category>Kultur</category>
+ <pubDate>Wed, 27 Jan 2016 17:08:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/kultur/kino/the-hateful-8-quentin-tarantino-und-jennifer-jason-leigh-im-interview-a-1074202.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949256-thumbsmall-hbrj.jpg" hspace="5" align="left" >Sieben Mnner und eine Frau - in seinem Western "The Hateful 8" entwirft Quentin Tarantino ein brutales Abbild der US-Gesellschaft. Hier erklren der Regisseur und seine Hauptdarstellerin, warum es sich lohnt, den Film gleich mehrmals anzusehen.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949256-thumbsmall-hbrj.jpg"/>
+ </item>
+ <item>
+ <title>Drama auf zugefrorenem Teich: Baby in akuter Lebensgefahr - Messer gefunden</title>
+ <link>http://www.spiegel.de/panorama/justiz/hamburg-vater-mit-baby-in-zugefrorenem-teich-eingebrochen-messer-gefunden-a-1074258.html#ref=rss</link>
+ <description>Der Fall gibt Rtsel auf: In Hamburg wird ein Vater mit seinem Baby aus einem zugefrorenen Teich gerettet - zwei Mnner htten ihn berfallen, sagt der 24-Jhrige. Nun haben Ermittler in der Nhe des Gewssers ein Messer gefunden.</description>
+ <category>Panorama</category>
+ <pubDate>Wed, 27 Jan 2016 16:32:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/panorama/justiz/hamburg-vater-mit-baby-in-zugefrorenem-teich-eingebrochen-messer-gefunden-a-1074258.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949367-thumbsmall-vpsq.jpg" hspace="5" align="left" >Der Fall gibt Rtsel auf: In Hamburg wird ein Vater mit seinem Baby aus einem zugefrorenen Teich gerettet - zwei Mnner htten ihn berfallen, sagt der 24-Jhrige. Nun haben Ermittler in der Nhe des Gewssers ein Messer gefunden.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949367-thumbsmall-vpsq.jpg"/>
+ </item>
+ <item>
+ <title>Rheinland-Pfalz: Elefantenrunde soll mit sechs Parteien stattfinden</title>
+ <link>http://www.spiegel.de/politik/deutschland/swr-fernsehdebatte-jetzt-mit-sechs-parteien-a-1074262.html#ref=rss</link>
+ <description>Erst drei, dann eine, jetzt sechs Parteien: Die TV-Diskussion im Sdwestrundfunk zur rheinland-pflzischen Landtagswahl findet nun in ganz groer Runde statt.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 16:29:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/deutschland/swr-fernsehdebatte-jetzt-mit-sechs-parteien-a-1074262.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-946925-thumbsmall-icoq.jpg" hspace="5" align="left" >Erst drei, dann eine, jetzt sechs Parteien: Die TV-Diskussion im Sdwestrundfunk zur rheinland-pflzischen Landtagswahl findet nun in ganz groer Runde statt.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-946925-thumbsmall-icoq.jpg"/>
+ </item>
+ <item>
+ <title>Blauer Brief: Britische Schulleiterin mahnt Pyjama-Eltern ab</title>
+ <link>http://www.spiegel.de/schulspiegel/direktorin-appelliert-an-eltern-bringt-eure-kinder-nicht-im-schlafanzug-zur-schule-a-1074167.html#ref=rss</link>
+ <description>Rektorin Kate Chisholm hat genug: Stndig beobachtet sie Eltern, die noch im Schlafanzug stecken, wenn sie ihre Kinder an der Schule absetzen. Nun schrieb sie einen Brandbrief, die Elternschaft reagiert gespalten.</description>
+ <category>SchulSPIEGEL</category>
+ <pubDate>Wed, 27 Jan 2016 16:26:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/schulspiegel/direktorin-appelliert-an-eltern-bringt-eure-kinder-nicht-im-schlafanzug-zur-schule-a-1074167.html</guid>
+ <content:encoded><![CDATA[Rektorin Kate Chisholm hat genug: Stndig beobachtet sie Eltern, die noch im Schlafanzug stecken, wenn sie ihre Kinder an der Schule absetzen. Nun schrieb sie einen Brandbrief, die Elternschaft reagiert gespalten.]]></content:encoded>
+ </item>
+ <item>
+ <title>Zwischenruf bei Merkel-Besuch: Hochschule verwirft juristische Schritte gegen Str-Professor</title>
+ <link>http://www.spiegel.de/unispiegel/studium/zwischenruf-bei-merkel-besuch-hochschule-verwirft-juristische-schritte-gegen-professor-a-1074208.html#ref=rss</link>
+ <description>Seine politische Str-Aktion whrend einer Rede von Kanzlerin Merkel ist fr einen Merseburger Professor glimpflich ausgegangen. Die Hochschule sieht von juristischen Schritten ab. </description>
+ <category>UniSPIEGEL</category>
+ <pubDate>Wed, 27 Jan 2016 16:08:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/unispiegel/studium/zwischenruf-bei-merkel-besuch-hochschule-verwirft-juristische-schritte-gegen-professor-a-1074208.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949364-thumbsmall-nnis.jpg" hspace="5" align="left" >Seine politische Str-Aktion whrend einer Rede von Kanzlerin Merkel ist fr einen Merseburger Professor glimpflich ausgegangen. Die Hochschule sieht von juristischen Schritten ab. ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949364-thumbsmall-nnis.jpg"/>
+ </item>
+ <item>
+ <title>Bundesautobahngesellschaft: Verkehrsminister wehren sich gegen "Mammutbehrde"</title>
+ <link>http://www.spiegel.de/auto/aktuell/bundesautobahngesellschaft-widerstand-der-verkehrsminister-a-1074198.html#ref=rss</link>
+ <description>Der Bund knnte die Grndung einer Bundesautobahngesellschaft vorantreiben. Mehrere Verkehrsminister der Lnder stellen sich dagegen - auch aus Furcht vor privaten Investoren beim Fernstraenbau. </description>
+ <category>Auto</category>
+ <pubDate>Wed, 27 Jan 2016 15:54:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/auto/aktuell/bundesautobahngesellschaft-widerstand-der-verkehrsminister-a-1074198.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949241-thumbsmall-cksv.jpg" hspace="5" align="left" >Der Bund knnte die Grndung einer Bundesautobahngesellschaft vorantreiben. Mehrere Verkehrsminister der Lnder stellen sich dagegen - auch aus Furcht vor privaten Investoren beim Fernstraenbau. ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949241-thumbsmall-cksv.jpg"/>
+ </item>
+ <item>
+ <title>Glasfaser-Ausbau: Dobrindt will schnelles Netz unter die Autobahnen legen</title>
+ <link>http://www.spiegel.de/netzwelt/netzpolitik/alexander-dobrindt-will-schnelles-netz-unter-die-autobahnen-legen-a-1074151.html#ref=rss</link>
+ <description>Jede Baustelle soll Bandbreite bringen: Die Bundesregierung beschliet, dass knftig beim Straenbau automatisch Glasfaserkabel verlegt werden mssen. Kommt Deutschland so schneller ins Netz?</description>
+ <category>Netzwelt</category>
+ <pubDate>Wed, 27 Jan 2016 15:52:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/netzwelt/netzpolitik/alexander-dobrindt-will-schnelles-netz-unter-die-autobahnen-legen-a-1074151.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949166-thumbsmall-xrfd.jpg" hspace="5" align="left" >Jede Baustelle soll Bandbreite bringen: Die Bundesregierung beschliet, dass knftig beim Straenbau automatisch Glasfaserkabel verlegt werden mssen. Kommt Deutschland so schneller ins Netz?]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949166-thumbsmall-xrfd.jpg"/>
+ </item>
+ <item>
+ <title>Handball-Insolvenz: Flensburg will den HSV verklagen</title>
+ <link>http://www.spiegel.de/sport/sonst/handball-bundesliga-sg-flensburg-handewitt-klagt-gegen-hsv-a-1074260.html#ref=rss</link>
+ <description>Einem nackten Mann kann man nicht in die Tasche greifen? Die SG Flensburg-Handewitt will den insolventen HSV Handball verklagen. Der Traditionsverein will Schadenersatz aus Hamburg haben.</description>
+ <category>Sport</category>
+ <pubDate>Wed, 27 Jan 2016 15:49:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/sport/sonst/handball-bundesliga-sg-flensburg-handewitt-klagt-gegen-hsv-a-1074260.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-948459-thumbsmall-banl.jpg" hspace="5" align="left" >Einem nackten Mann kann man nicht in die Tasche greifen? Die SG Flensburg-Handewitt will den insolventen HSV Handball verklagen. Der Traditionsverein will Schadenersatz aus Hamburg haben.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-948459-thumbsmall-banl.jpg"/>
+ </item>
+ <item>
+ <title>Lage am Lageso: Berliner Senatsverwaltung bestreitet Tod eines Flchtlings</title>
+ <link>http://www.spiegel.de/politik/deutschland/berlin-fluechtling-vom-lageso-tot-senat-widerspricht-a-1074255.html#ref=rss</link>
+ <description>Ist in Berlin ein syrischer Flchtling gestorben, nachdem er lange vor dem Lageso warten musste? Der Helfer, der darber berichtete, ist abgetaucht - die Senatsverwaltung widerspricht der Darstellung ber den Todesfall.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 15:45:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/deutschland/berlin-fluechtling-vom-lageso-tot-senat-widerspricht-a-1074255.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949380-thumbsmall-umdf.jpg" hspace="5" align="left" >Ist in Berlin ein syrischer Flchtling gestorben, nachdem er lange vor dem Lageso warten musste? Der Helfer, der darber berichtete, ist abgetaucht - die Senatsverwaltung widerspricht der Darstellung ber den Todesfall.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949380-thumbsmall-umdf.jpg"/>
+ </item>
+ <item>
+ <title>Tierarzt-Ikone: Evan Antin, der "heieste Veterinr der Welt" </title>
+ <link>http://www.spiegel.de/panorama/leute/tierarzt-evan-antin-ist-der-sexiest-veterinaer-ever-laut-people-a-1074229.html#ref=rss</link>
+ <description>Evan Antin ist Tierarzt, Model und Personal Trainer. So irritierend gutaussehend, dass er zum "Sexiest Tierbetrer" avancierte. Trotz seiner Vorliebe fr blutiges Gedrm und anatomische Anomalien.</description>
+ <category>Panorama</category>
+ <pubDate>Wed, 27 Jan 2016 15:31:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/panorama/leute/tierarzt-evan-antin-ist-der-sexiest-veterinaer-ever-laut-people-a-1074229.html</guid>
+ <content:encoded><![CDATA[Evan Antin ist Tierarzt, Model und Personal Trainer. So irritierend gutaussehend, dass er zum "Sexiest Tierbetrer" avancierte. Trotz seiner Vorliebe fr blutiges Gedrm und anatomische Anomalien.]]></content:encoded>
+ </item>
+ <item>
+ <title>Verteidigungshaushalt: Schuble will mehr Geld fr Bundeswehr ausgeben</title>
+ <link>http://www.spiegel.de/politik/deutschland/wolfgang-schaeuble-einverstanden-mit-mehr-geld-fuer-ruestung-a-1074242.html#ref=rss</link>
+ <description>Drei Milliarden Euro mehr pro Jahr fr Waffen: Finanzminister Schuble sieht die Aufrstungsplne der Verteidigungsministerin von der Leyen positiv.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 15:29:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/deutschland/wolfgang-schaeuble-einverstanden-mit-mehr-geld-fuer-ruestung-a-1074242.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-947025-thumbsmall-qecb.jpg" hspace="5" align="left" >Drei Milliarden Euro mehr pro Jahr fr Waffen: Finanzminister Schuble sieht die Aufrstungsplne der Verteidigungsministerin von der Leyen positiv.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-947025-thumbsmall-qecb.jpg"/>
+ </item>
+ <item>
+ <title>Doping-Vorwrfe: NFL leitet Untersuchung gegen Manning ein</title>
+ <link>http://www.spiegel.de/sport/sonst/nfl-peyton-manning-unter-doping-verdacht-a-1074230.html#ref=rss</link>
+ <description>Die NFL prft Vorwrfe gegen einen Superstar: Die Football-Liga geht jetzt offiziell den Doping-Gerchten um Peyton Manning nach. Der Quarterback soll ber seine Frau Hormone geordert haben.</description>
+ <category>Sport</category>
+ <pubDate>Wed, 27 Jan 2016 15:23:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/sport/sonst/nfl-peyton-manning-unter-doping-verdacht-a-1074230.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949287-thumbsmall-cwxj.jpg" hspace="5" align="left" >Die NFL prft Vorwrfe gegen einen Superstar: Die Football-Liga geht jetzt offiziell den Doping-Gerchten um Peyton Manning nach. Der Quarterback soll ber seine Frau Hormone geordert haben.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949287-thumbsmall-cwxj.jpg"/>
+ </item>
+ <item>
+ <title>Posse um SWR-Elefantenrunde: Feigheit vor dem Feind</title>
+ <link>http://www.spiegel.de/politik/deutschland/spd-und-swr-posse-um-tv-auftritt-in-rheinland-pfalz-kommentar-a-1074235.html#ref=rss</link>
+ <description>Die Sozialdemokraten weigern sich, an einer TV-Debatte mit der AfD teilzunehmen, jetzt geht das Spektakel in eine neue Runde. Statt der Ministerprsidentin soll der SPD-Landeschef ran. Wie absurd ist das denn? </description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 15:23:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/deutschland/spd-und-swr-posse-um-tv-auftritt-in-rheinland-pfalz-kommentar-a-1074235.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949309-thumbsmall-zhac.jpg" hspace="5" align="left" >Die Sozialdemokraten weigern sich, an einer TV-Debatte mit der AfD teilzunehmen, jetzt geht das Spektakel in eine neue Runde. Statt der Ministerprsidentin soll der SPD-Landeschef ran. Wie absurd ist das denn? ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949309-thumbsmall-zhac.jpg"/>
+ </item>
+ <item>
+ <title>Apple-Browser: Und pltzlich strzt Safari ab</title>
+ <link>http://www.spiegel.de/netzwelt/apps/apple-safari-browser-stuerzt-ploetzlich-ab-a-1074217.html#ref=rss</link>
+ <description>Seit einigen Stunden haben Apple-Nutzer Probleme mit dem Safari-Browser. Wodurch die Abstrze ausgelst werden, ist unklar. Doch mit einem kleinen Trick kann man sich helfen.</description>
+ <category>Netzwelt</category>
+ <pubDate>Wed, 27 Jan 2016 15:18:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/netzwelt/apps/apple-safari-browser-stuerzt-ploetzlich-ab-a-1074217.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949312-thumbsmall-jqlt.jpg" hspace="5" align="left" >Seit einigen Stunden haben Apple-Nutzer Probleme mit dem Safari-Browser. Wodurch die Abstrze ausgelst werden, ist unklar. Doch mit einem kleinen Trick kann man sich helfen.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949312-thumbsmall-jqlt.jpg"/>
+ </item>
+ <item>
+ <title>EU-Bericht zu Grenzsicherung: Griechenland droht Schengen-Rauswurf</title>
+ <link>http://www.spiegel.de/politik/ausland/griechenland-eu-kommission-droht-mit-schengen-rauswurf-a-1074201.html#ref=rss</link>
+ <description>Griechenland gert in der Flchtlingskrise unter massiven Druck der EU: Die Kommission will Athen Forderungen zum Grenzschutz schicken. Werden die nicht binnen drei Monaten erfllt, droht der Ausschluss aus dem Schengen-Raum.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 15:04:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/ausland/griechenland-eu-kommission-droht-mit-schengen-rauswurf-a-1074201.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949347-thumbsmall-vbmi.jpg" hspace="5" align="left" >Griechenland gert in der Flchtlingskrise unter massiven Druck der EU: Die Kommission will Athen Forderungen zum Grenzschutz schicken. Werden die nicht binnen drei Monaten erfllt, droht der Ausschluss aus dem Schengen-Raum.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949347-thumbsmall-vbmi.jpg"/>
+ </item>
+ <item>
+ <title>Protest gegen dnisches Asylrecht: Ai Weiwei schliet Ausstellung in Kopenhagen</title>
+ <link>http://www.spiegel.de/kultur/gesellschaft/protest-gegen-daenisches-asylrecht-ai-weiwei-schliesst-ausstellung-a-1074241.html#ref=rss</link>
+ <description>Ai Weiwei, Chinas wohl bekanntester Knstler, beendet seine Ausstellung in Kopenhagen vorzeitig. Grund ist eine Verschrfung der Asylregeln in Dnemark.</description>
+ <category>Kultur</category>
+ <pubDate>Wed, 27 Jan 2016 15:01:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/kultur/gesellschaft/protest-gegen-daenisches-asylrecht-ai-weiwei-schliesst-ausstellung-a-1074241.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949292-thumbsmall-uhox.jpg" hspace="5" align="left" >Ai Weiwei, Chinas wohl bekanntester Knstler, beendet seine Ausstellung in Kopenhagen vorzeitig. Grund ist eine Verschrfung der Asylregeln in Dnemark.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949292-thumbsmall-uhox.jpg"/>
+ </item>
+ <item>
+ <title>Deutsche Handballer gegen Dnemark: Jetzt muss es schmutzig werden</title>
+ <link>http://www.spiegel.de/sport/sonst/handball-em-2016-jetzt-muss-es-schmutzig-werden-a-1074123.html#ref=rss</link>
+ <description>Noch ein Sieg bis zum Halbfinale: Die deutsche Handball-Nationalmannschaft hat bei der EM einen Lauf, sie ist gierig auf den Titel. Jetzt geht es gegen einen groen Favoriten - und Dnemark wirkt angeschlagen. </description>
+ <category>Sport</category>
+ <pubDate>Wed, 27 Jan 2016 14:59:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/sport/sonst/handball-em-2016-jetzt-muss-es-schmutzig-werden-a-1074123.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949116-thumbsmall-fpcj.jpg" hspace="5" align="left" >Noch ein Sieg bis zum Halbfinale: Die deutsche Handball-Nationalmannschaft hat bei der EM einen Lauf, sie ist gierig auf den Titel. Jetzt geht es gegen einen groen Favoriten - und Dnemark wirkt angeschlagen. ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949116-thumbsmall-fpcj.jpg"/>
+ </item>
+ <item>
+ <title>Sicherheitslage nach Anschlag: Russland spricht Reisewarnung fr Trkei aus</title>
+ <link>http://www.spiegel.de/reise/aktuell/russland-spricht-reisewarnung-fuer-tuerkei-aus-a-1074225.html#ref=rss</link>
+ <description>Die russische Regierung warnt ihre Brger vor Reisen in die Trkei. Damit schrnkt sie den Tourismus in das Land weiter ein. Nach dem Anschlag in Istanbul sind auch die Buchungen von deutschen Urlaubern eingebrochen.</description>
+ <category>Reise</category>
+ <pubDate>Wed, 27 Jan 2016 14:58:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/reise/aktuell/russland-spricht-reisewarnung-fuer-tuerkei-aus-a-1074225.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-378624-thumbsmall-xtnj.jpg" hspace="5" align="left" >Die russische Regierung warnt ihre Brger vor Reisen in die Trkei. Damit schrnkt sie den Tourismus in das Land weiter ein. Nach dem Anschlag in Istanbul sind auch die Buchungen von deutschen Urlaubern eingebrochen.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-378624-thumbsmall-xtnj.jpg"/>
+ </item>
+ <item>
+ <title>Bayern-Deal mit Katar: Scheich Di!</title>
+ <link>http://www.spiegel.de/sport/fussball/fc-bayern-muenchen-und-der-katar-deal-in-der-pflicht-kommentar-a-1074187.html#ref=rss</link>
+ <description>Der FC Bayern schliet einen Sponsoren-Deal mit Katar ab, die Kritik darber ist ebenso berechtigt wie vorhersehbar. Dabei darf es nicht bleiben. Nehmen wir den Rekordmeister doch beim Wort.</description>
+ <category>Sport</category>
+ <pubDate>Wed, 27 Jan 2016 14:52:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/sport/fussball/fc-bayern-muenchen-und-der-katar-deal-in-der-pflicht-kommentar-a-1074187.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949236-thumbsmall-hyyw.jpg" hspace="5" align="left" >Der FC Bayern schliet einen Sponsoren-Deal mit Katar ab, die Kritik darber ist ebenso berechtigt wie vorhersehbar. Dabei darf es nicht bleiben. Nehmen wir den Rekordmeister doch beim Wort.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949236-thumbsmall-hyyw.jpg"/>
+ </item>
+ <item>
+ <title>Flchtlingskrise: EU wirft Griechenland schwere Mngel bei Grenzkontrolle vor</title>
+ <link>http://www.spiegel.de/politik/ausland/fluechtlinge-eu-wirft-griechenland-maengel-bei-grenzkontrolle-vor-a-1074219.html#ref=rss</link>
+ <description>Die griechische Regierung verletzt ihre Pflichten bei der Grenzsicherung - zu diesem Schluss kommt ein Untersuchungsbericht der EU-Kommission. Brssel spricht nun eine klare Drohung gegen Athen aus.</description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 14:47:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/ausland/fluechtlinge-eu-wirft-griechenland-maengel-bei-grenzkontrolle-vor-a-1074219.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949273-thumbsmall-ifxg.jpg" hspace="5" align="left" >Die griechische Regierung verletzt ihre Pflichten bei der Grenzsicherung - zu diesem Schluss kommt ein Untersuchungsbericht der EU-Kommission. Brssel spricht nun eine klare Drohung gegen Athen aus.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949273-thumbsmall-ifxg.jpg"/>
+ </item>
+ <item>
+ <title>Abgasaffre: Brssel will Autokonzerne bestrafen knnen</title>
+ <link>http://www.spiegel.de/wirtschaft/soziales/abgasaffaere-bruessel-will-autokonzerne-bestrafen-koennen-a-1074228.html#ref=rss</link>
+ <description>Im Abgas-Skandal ist der VW-Konzern Schuldiger - aber auch die Aufseher in Brssel sind blamiert. Denn US-Behrden enthllten, was ihnen jahrelang durch die Lappen ging. Die EU-Kommission will jetzt dafr sorgen, dass sich das nicht wiederholt.</description>
+ <category>Wirtschaft</category>
+ <pubDate>Wed, 27 Jan 2016 14:46:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/wirtschaft/soziales/abgasaffaere-bruessel-will-autokonzerne-bestrafen-koennen-a-1074228.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-938136-thumbsmall-hxbc.jpg" hspace="5" align="left" >Im Abgas-Skandal ist der VW-Konzern Schuldiger - aber auch die Aufseher in Brssel sind blamiert. Denn US-Behrden enthllten, was ihnen jahrelang durch die Lappen ging. Die EU-Kommission will jetzt dafr sorgen, dass sich das nicht wiederholt.]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-938136-thumbsmall-hxbc.jpg"/>
+ </item>
+ <item>
+ <title>Bundesverfassungsgericht: Wer alles gegen die Vorratsdatenspeicherung klagt</title>
+ <link>http://www.spiegel.de/netzwelt/netzpolitik/vorratsdatenspeicherung-wer-klagt-vor-dem-bundesverfassungsgericht-a-1074152.html#ref=rss</link>
+ <description>Widerstand gegen Vorratsdatenspeicherung: Die FDP hat Klage in Karlsruhe eingereicht, und auch weitere Gegner versuchen, das Gesetz vor Gericht noch zu kippen. Der berblick. </description>
+ <category>Netzwelt</category>
+ <pubDate>Wed, 27 Jan 2016 14:42:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/netzwelt/netzpolitik/vorratsdatenspeicherung-wer-klagt-vor-dem-bundesverfassungsgericht-a-1074152.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-925932-thumbsmall-zbbn.jpg" hspace="5" align="left" >Widerstand gegen Vorratsdatenspeicherung: Die FDP hat Klage in Karlsruhe eingereicht, und auch weitere Gegner versuchen, das Gesetz vor Gericht noch zu kippen. Der berblick. ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-925932-thumbsmall-zbbn.jpg"/>
+ </item>
+ <item>
+ <title>Berliner Flchtlingsamt: Das Scheitern des Lageso - das Protokoll</title>
+ <link>http://www.spiegel.de/politik/deutschland/berlin-das-scheitern-des-lageso-eine-chronik-a-1074186.html#ref=rss</link>
+ <description>Tagelanges Warten, keine Auszahlung von Essensgeld, Gewalt - jetzt angeblich ein Toter: Seit Monaten steht das Berliner Flchtlingsamt Lageso in den Schlagzeilen. Die Chronologie des Scheiterns. </description>
+ <category>Politik</category>
+ <pubDate>Wed, 27 Jan 2016 14:22:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/politik/deutschland/berlin-das-scheitern-des-lageso-eine-chronik-a-1074186.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949137-thumbsmall-pgoa.jpg" hspace="5" align="left" >Tagelanges Warten, keine Auszahlung von Essensgeld, Gewalt - jetzt angeblich ein Toter: Seit Monaten steht das Berliner Flchtlingsamt Lageso in den Schlagzeilen. Die Chronologie des Scheiterns. ]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949137-thumbsmall-pgoa.jpg"/>
+ </item>
+ <item>
+ <title>Apple-Gerchte: So knnte das neue iPhone aussehen. Aber was wnschen Sie sich?</title>
+ <link>http://www.spiegel.de/netzwelt/gadgets/apple-so-gut-muss-das-iphone-7-sein-a-1074158.html#ref=rss</link>
+ <description>Ist der iPhone-Boom vorbei? Nicht unbedingt - das nchste Gert knnte starke neue Features haben. Hier der Stand der Gerchte. Und Sie knnen abstimmen: Was brauchen Sie wirklich?</description>
+ <category>Netzwelt</category>
+ <pubDate>Wed, 27 Jan 2016 14:17:00 +0100</pubDate>
+ <guid>http://www.spiegel.de/netzwelt/gadgets/apple-so-gut-muss-das-iphone-7-sein-a-1074158.html</guid>
+ <content:encoded><![CDATA[<img src="http://www.spiegel.de/images/image-949140-thumbsmall-bdof.jpg" hspace="5" align="left" >Ist der iPhone-Boom vorbei? Nicht unbedingt - das nchste Gert knnte starke neue Features haben. Hier der Stand der Gerchte. Und Sie knnen abstimmen: Was brauchen Sie wirklich?]]></content:encoded>
+ <enclosure type="image/jpeg" url="http://www.spiegel.de/images/image-949140-thumbsmall-bdof.jpg"/>
+ </item>
+ </channel>
+</rss> \ No newline at end of file
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_tumblr.xml b/mobile/android/tests/background/junit4/resources/feed_rss_tumblr.xml
new file mode 100644
index 000000000..15b20b652
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_tumblr.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>Your reliable source for up-to-the-minute commodities pricing.</description><title>Tumblr Staff</title><generator>Tumblr (3.0; @staff)</generator><link>http://staff.tumblr.com/</link><item><title>hardyboyscovers:
+
+ Can Nancy Drew see things through and solve...</title><description>&lt;img src="http://41.media.tumblr.com/6dcceee090b2eef840cf694b205e1551/tumblr_o0r7mqDr5P1ug9yhzo1_400.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://hardyboyscovers.tumblr.com/post/137036714181"&gt;hardyboyscovers&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Can Nancy Drew see things through and solve the case?&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
+ &lt;/blockquote&gt;
+
+ &lt;p&gt;Please horse, no&lt;/p&gt;</description><link>http://staff.tumblr.com/post/138124026275</link><guid>http://staff.tumblr.com/post/138124026275</guid><pubDate>Tue, 26 Jan 2016 21:30:12 -0500</pubDate><category>good blog</category><category>bad horse</category><category>book covers</category><category>book cover week</category></item><item><title>Chasing Storms at 17,500mph</title><description>&lt;p&gt;&lt;a class="tumblr_blog" href="http://stationcdrkelly.tumblr.com/post/138047038357"&gt;stationcdrkelly&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;Flying 250 miles above the Earth aboard the International Space Station has given me the unique vantage point from which to view our planet. Spending a year in space has given me the unique opportunity to see a wide range of spectacular storm systems in space and on Earth. &lt;br/&gt;&lt;/p&gt;
+ &lt;p&gt;The recent blizzard was remarkably visible from space. I took several photos of the first big storm system on Earth of year 2016 as it moved across the East Coast, Chicago and Washington D.C. Since my time here on the space station began in March 2015, I’ve been able to capture an array of storms on Earth and in space, ranging from hurricanes and dust storms to solar storms and most recently a rare thunder snowstorm. &lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://41.media.tumblr.com/ba62a8f18ceef5a20f60b700d14b39fe/tumblr_inline_o1hmtucs6o1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Blizzard 2016&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://40.media.tumblr.com/371eedcc0adf48ed07c5d1bd3f326ef1/tumblr_inline_o1hmuyAVw01tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Hurricane Patricia 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://40.media.tumblr.com/07cc92970eea9607b20264f589a94f59/tumblr_inline_o1hmwd9dIE1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Hurricane Joaquin 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="682" data-orig-width="1024"&gt;&lt;img src="http://41.media.tumblr.com/ee5232cbf15d24b23932e0af0384f922/tumblr_inline_o1hmyeCO2I1tmec5e_540.jpg" data-orig-height="682" data-orig-width="1024"/&gt;&lt;/figure&gt;&lt;p&gt;Dust Storm in the Red Sea 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://41.media.tumblr.com/e1c72c1a9be6394db409f0ffd0db31f8/tumblr_inline_o1hmzrMkBF1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Dust Storm of Gobi Desert 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://40.media.tumblr.com/aa3a6d80dc603a9cc2cd5ceeb528ca55/tumblr_inline_o1hn1cI5xt1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Aurora Solar Storm 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://40.media.tumblr.com/6d5c5715f629aa0a37908cc7ddc9e9a4/tumblr_inline_o1hn2ewElf1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Aurora Solar Storm 2016&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://41.media.tumblr.com/ec251e592ad4132c3141d3289344f6b0/tumblr_inline_o1hn7eMqGD1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Thunderstorm over Italy 2015&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1067" data-orig-width="1600"&gt;&lt;img src="http://36.media.tumblr.com/d15b6033547c0e5c465a35614cdd753e/tumblr_inline_o1hnaxgi6r1tmec5e_540.jpg" data-orig-height="1067" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Lightning and Aurora 2016&lt;/p&gt;
+ &lt;figure class="tmblr-full" data-orig-height="1065" data-orig-width="1600"&gt;&lt;img src="http://36.media.tumblr.com/96f14b994bba66b9f690a6e086657333/tumblr_inline_o1hnc4GTCi1tmec5e_540.jpg" data-orig-height="1065" data-orig-width="1600"/&gt;&lt;/figure&gt;&lt;p&gt;Rare Thunder Snowstorm 2016&lt;/p&gt;
+ &lt;p&gt;Follow my Year In Space on Twitter, Facebook and Instagram. &lt;/p&gt;
+ &lt;/blockquote&gt;
+
+ &lt;p&gt;Astronaut Scott Kelly just signed up for Tumblr all the way from space. &lt;i&gt;Outer&lt;/i&gt; space. So far, this the coolest weather blog of all time. &lt;/p&gt;</description><link>http://staff.tumblr.com/post/138053124065</link><guid>http://staff.tumblr.com/post/138053124065</guid><pubDate>Mon, 25 Jan 2016 19:48:40 -0500</pubDate></item><item><title>digg:
+
+ first it starts out like a little spinning hexagonthen it spins more and gets biggermore...</title><description>&lt;p&gt;&lt;a href="http://digg.tumblr.com/post/137842908963/first-it-starts-out-like-a-little-spinning-hexagon" class="tumblr_blog"&gt;digg&lt;/a&gt;:&lt;/p&gt;
+
+ &lt;blockquote&gt;&lt;figure data-orig-width="473" data-orig-height="52" class="tmblr-full"&gt;&lt;img src="http://40.media.tumblr.com/0ec3a49eb7143dc50e7d3a7252bb707f/tumblr_inline_o1dnci9q4j1ro8h5m_540.png" data-orig-width="473" data-orig-height="52"/&gt;&lt;/figure&gt;&lt;p&gt;&lt;br/&gt;first it starts out like a little spinning hexagon&lt;/p&gt;&lt;figure data-orig-width="400" data-orig-height="396" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/fb369bd707e311591f85de1d10b94bc6/tumblr_inline_o1dnbpkqXI1ro8h5m_500.gif" data-orig-width="400" data-orig-height="396"/&gt;&lt;/figure&gt;&lt;p&gt;then it spins more and gets bigger&lt;br/&gt;&lt;/p&gt;&lt;figure data-orig-width="400" data-orig-height="396" class="tmblr-full"&gt;&lt;img src="http://33.media.tumblr.com/5d5e6abd203bda735f5b798bd7d100cb/tumblr_inline_o1dnbnbv6r1ro8h5m_500.gif" data-orig-width="400" data-orig-height="396"/&gt;&lt;/figure&gt;&lt;p&gt;more spinning, the background gets red&lt;/p&gt;&lt;figure data-orig-width="400" data-orig-height="396" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/7b11f8f9abec6211440880cee0c94a89/tumblr_inline_o1dnbnn1IM1ro8h5m_500.gif" data-orig-width="400" data-orig-height="396"/&gt;&lt;/figure&gt;&lt;p&gt;then it goes all over your driveway like this&lt;/p&gt;&lt;figure class="tmblr-full" data-orig-height="225" data-orig-width="400"&gt;&lt;img src="http://38.media.tumblr.com/6e3d06c9a97f3acc05c20d2e37f3f730/tumblr_inline_o1dney205v1ro8h5m_500.gif" data-orig-height="225" data-orig-width="400"/&gt;&lt;/figure&gt;&lt;/blockquote&gt;</description><link>http://staff.tumblr.com/post/137845368600</link><guid>http://staff.tumblr.com/post/137845368600</guid><pubDate>Fri, 22 Jan 2016 19:47:00 -0500</pubDate><category>have a good weekend tumblr</category><category>stay safe stay beautiful</category></item><item><title>This week in drama clubHigh School Musical: Bopped to the top 10...</title><description>&lt;img src="http://40.media.tumblr.com/9c69a850eece63c29d913b6e83dd49a7/tumblr_o1dcfztyzk1qz8q0ho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;This week in drama club&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://tumblr.com/search/golden%20disk%20awards"&gt;&lt;/a&gt;&lt;/b&gt;&lt;a href="http://tumblr.com/search/hsm"&gt;&lt;i&gt;&lt;b&gt;High School Musical&lt;/b&gt;&lt;/i&gt;&lt;/a&gt;: Bopped to the top 10 years ago this week.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/golden%20disk%20awards"&gt;&lt;i&gt;&lt;b&gt;Golden Disk Awards&lt;/b&gt;&lt;/i&gt;&lt;/a&gt;: Baked to perfection. Thanks, Zeke!&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/miraculous%20ladybug"&gt;&lt;b&gt;&lt;i&gt;Miraculous Ladybug&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;: The Gabriella to Cat Noir’s Troy.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/agent%20carter"&gt;&lt;b&gt;&lt;i&gt;Agent Carter&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;: The start of something new (season two).&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="160" data-orig-height="180" data-tumblr-attribution="hunting-the-grievers:cPVhQbqjjwjt3Hpa2i0A3Q:ZDFbbm1f4dbEu" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/d6c281341a84fd1367682d598b008af9/tumblr_nkrg1eqpXu1tl1wyoo1_250.gif" alt="image" data-orig-width="160" data-orig-height="180"/&gt;&lt;/figure&gt;&lt;h2&gt;Student government elections&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/sarah%20palin"&gt;&lt;b&gt;Sarah Palin&lt;/b&gt;&lt;/a&gt;: Song singin’, bitter clingin’, proud clingers of West Side Knights.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/democratic%20debate"&gt;&lt;b&gt;Democratic debate&lt;/b&gt;&lt;/a&gt;: A political decathlon.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Wildcat co-captains&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/matt%20the%20radar%20technician"&gt;&lt;b&gt;Matt the Radar Technician&lt;/b&gt;&lt;/a&gt;: Secretly Coach Bolton.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/jada%20pinkett%20smith"&gt;&lt;b&gt;Jada Pinkett Smith&lt;/b&gt;&lt;/a&gt;: Owns more hats than Ryan Evans.&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="480" data-orig-height="270" data-tumblr-attribution="nbcsnl:B-Wm_cenWtc03w62FRwf1A:ZpdRYu201JEGk" class="tmblr-full"&gt;&lt;img src="http://31.media.tumblr.com/acd5b9d1d6ef051d12fabbedeb1bc023/tumblr_o13140hUBg1rdzuduo1_500.gif" alt="image" data-orig-width="480" data-orig-height="270"/&gt;&lt;/figure&gt;&lt;h2&gt;Get’cha head in the game&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/wwe"&gt;&lt;b&gt;WWE&lt;/b&gt;&lt;/a&gt;: We’re all in this Royal Rumble together.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/australian%20open"&gt;&lt;b&gt;Australian Open&lt;/b&gt;&lt;/a&gt;: Go Wildcats!&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Sticking to the status quo: Check out these Tumblrs&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Creative Capital&lt;/b&gt; (&lt;a href="http://tmblr.co/mcSeD8C3uF_aHrmt0C6VpUw"&gt;@creative-cap&lt;/a&gt;): Patron of the arts.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Broadway Con&lt;/b&gt; (&lt;a href="http://tmblr.co/miT9FBjVCw7YfioPNppjryw"&gt;@bwaycon&lt;/a&gt;): What you’ve been looking for.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mall Goth Phase&lt;/b&gt; (&lt;a href="http://tmblr.co/mUHclMBjOwpJBi4M1bucs5Q"&gt;@mallgothphase&lt;/a&gt;): Hot, topical blog.&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="367" data-orig-height="245" data-tumblr-attribution="wrestling-giffer:V0IfEVup_dIDxzIYMr5R0A:Z1UX8r1yd0krY" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/5685bb235ec944c5084939da16c24958/tumblr_ny9xzoSQ5K1sbzhteo1_400.gif" alt="image" data-orig-width="367" data-orig-height="245"/&gt;&lt;/figure&gt;</description><link>http://staff.tumblr.com/post/137833222680</link><guid>http://staff.tumblr.com/post/137833222680</guid><pubDate>Fri, 22 Jan 2016 16:07:26 -0500</pubDate><category>trends</category></item><item><title>nationwideexposure:
+
+ I’M CRYING...</title><description>&lt;img src="http://40.media.tumblr.com/7ba6d036bd5939f087f8feee424dc337/tumblr_n1aawcsEOd1rr31p0o1_400.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/8bfce3018cf868734dc73f11c9c84cce/tumblr_n1aawcsEOd1rr31p0o2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/68275fc41a5879e03f6b67401d21b9c6/tumblr_n1aawcsEOd1rr31p0o3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://40.media.tumblr.com/4d987c36b13dc78ec66d9f7311f23ed8/tumblr_n1aawcsEOd1rr31p0o4_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://40.media.tumblr.com/052fb3ff421e40865f517b60e7a00af4/tumblr_n1aawcsEOd1rr31p0o5_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://40.media.tumblr.com/b4d65c50fed46518eef6091575171247/tumblr_n1aawcsEOd1rr31p0o6_250.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/e989c0771b588d4b8e4068caa71c7764/tumblr_n1aawcsEOd1rr31p0o7_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/3a9ca6beb713678743987b830ce2a5a6/tumblr_n1aawcsEOd1rr31p0o8_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/72daba4a9a2598dcbc18f6d5b7c1ecaa/tumblr_n1aawcsEOd1rr31p0o9_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://40.media.tumblr.com/a9db431bf354b42fd035d44c9910bfe6/tumblr_n1aawcsEOd1rr31p0o10_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://nationwideexposure.tumblr.com/post/77260363328"&gt;nationwideexposure&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;I’M CRYING 😂😭😂😭😂&lt;/p&gt;
+ &lt;/blockquote&gt;
+ &lt;p&gt;——&lt;br/&gt;——&lt;br/&gt;——&lt;br/&gt;——&lt;/p&gt;&lt;p&gt; 👀&lt;br/&gt;——&lt;br/&gt;——&lt;br/&gt;——&lt;br/&gt;——&lt;/p&gt;</description><link>http://staff.tumblr.com/post/137788176890</link><guid>http://staff.tumblr.com/post/137788176890</guid><pubDate>Thu, 21 Jan 2016 22:00:16 -0500</pubDate><category>stock photo</category><category>stock photo week</category></item><item><title>risingfunk:
+
+ hey creationists,
+ if evolution isn’t real… explain...</title><description>&lt;img src="http://41.media.tumblr.com/9dd0ed0e50f1963930b55002f22d2569/tumblr_njt97mInHy1rz419eo3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://41.media.tumblr.com/39362963e0d3bab55f84c7b9e7acc1b1/tumblr_njt97mInHy1rz419eo4_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://36.media.tumblr.com/f2e4d58b37bebdd48c0593b66c2fa910/tumblr_njt97mInHy1rz419eo2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://40.media.tumblr.com/0e0fb52c15c625d46ee1fa108c102e41/tumblr_njt97mInHy1rz419eo1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://risingfunk.tumblr.com/post/111068384527"&gt;risingfunk&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;hey creationists,&lt;/p&gt;
+ &lt;p&gt;if evolution isn’t real… explain &lt;b&gt;THIS&lt;/b&gt;&lt;br/&gt;&lt;/p&gt;
+ &lt;/blockquote&gt;
+
+ &lt;p&gt;We’d like anyone to explain this.&lt;/p&gt;</description><link>http://staff.tumblr.com/post/137724564137</link><guid>http://staff.tumblr.com/post/137724564137</guid><pubDate>Wed, 20 Jan 2016 22:00:29 -0500</pubDate><category>stock photo</category><category>stock photo week</category></item><item><title>I’ll Be There For You (Theme from…)</title><description>&lt;p&gt;&lt;a class="tumblr_blog" href="http://thefandometrics.tumblr.com/post/137713318764"&gt;thefandometrics&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;&lt;figure class="tmblr-full" data-orig-height="100" data-orig-width="500"&gt;&lt;img src="http://36.media.tumblr.com/b528045dbfddacd8dcb1789ae1aabad8/tumblr_inline_o19xl51Nx51qz7tc0_540.png" data-orig-height="100" data-orig-width="500"/&gt;&lt;/figure&gt;&lt;/p&gt;&lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137583618255/tv-shows-week-ending-january-18th-2016-steven"&gt;Television&lt;/a&gt;: So no one told you life was gonna be this way.&lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;☆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Saturday+Night+Live"&gt;Saturday Night Live&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; returns to No. 11 with a little help from Kyl–uh, Matt the Radar Technician.&lt;br/&gt; ⬆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Pretty%20Little%20Liars"&gt;Pretty Little Liars&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; (No. 7) jumped five years in the future and eleven spots on our list.&lt;br/&gt;☆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Rick%20and%20Morty"&gt;Rick and Morty&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; came back at a solid No. 18 while all of you played &lt;i&gt;Pocket Mortys&lt;/i&gt;. &lt;/p&gt;&lt;/blockquote&gt;
+ &lt;figure class="tmblr-full" data-orig-height="271" data-orig-width="480" data-tumblr-attribution="ren-rey-lo:3VGJxt125Qzd9mCpO3SEBg:ZZ1ZMi202CMhl"&gt;&lt;img src="http://38.media.tumblr.com/fd91b6634cfd45862f50b955a4dcecd6/tumblr_o13kbrUuy51v4pr6ko4_500.gif" data-orig-height="271" data-orig-width="480"/&gt;&lt;/figure&gt;&lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137583047944/movies-week-ending-january-18th-2016-star-wars"&gt;Movies&lt;/a&gt;: 👏👏👏👏.&lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;⬆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Deadpool"&gt;Deadpool&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;’s (No. 2) &lt;a href="http://www.herochan.com/post/137155502690/deadpool-movie-promotion-done-right"&gt;marketing&lt;/a&gt; team deserves a raise. &lt;br/&gt;☆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Labyrinth"&gt;Labyrinth&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; debuted at No. 6. All hail The Goblin King. &lt;/p&gt;&lt;/blockquote&gt;
+ &lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137582487533/musical-acts-week-ending-january-18th-2016-david"&gt;Music&lt;/a&gt;: Your life’s a joke, you’re broke.&lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;☆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/David%20Bowie"&gt;David Bowie&lt;/a&gt;&lt;/b&gt; is No. 1, as he should be.&lt;br/&gt;⬆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Panic%20at%20the%20Disco"&gt;Panic! at the Disco&lt;/a&gt;&lt;/b&gt; did the hustle up to No. 4.&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137581921455/celebrities-week-ending-january-18th-2016-alan"&gt;Celebrities&lt;/a&gt;: Your love life’s D.O.A.&lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;☆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Alan%20Rickman"&gt;Alan Rickman&lt;/a&gt;&lt;/b&gt; is No. 1, as he should be.&lt;br/&gt; ⬆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Leonardo%20DiCaprio"&gt;Leonardo DiCaprio&lt;/a&gt;&lt;/b&gt; continues his climb, moves up to No. 5. A true revenant.&lt;br/&gt; ☆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Gillian%20Anderson"&gt;Gillian Anderson&lt;/a&gt;&lt;/b&gt; debuted at No. 14. We want to believe in the reboot. &lt;/p&gt;&lt;/blockquote&gt;
+ &lt;figure class="tmblr-full" data-orig-height="211" data-orig-width="500" data-tumblr-attribution="szabcsiify:6F9QwBM8is-j-q9KKvjFOQ:Z5xAar1qg38kJ"&gt;&lt;img src="http://33.media.tumblr.com/ea080946a865dd802c098792fc303649/tumblr_ns7chfYxeU1sxov47o1_500.gif" data-orig-height="211" data-orig-width="500"/&gt;&lt;/figure&gt;&lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137581349025/video-games-week-ending-january-18th-2016"&gt;Games&lt;/a&gt;: It’s like you’re always stuck in second gear. &lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;⬆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Pok%C3%A9mon"&gt;Pokémon&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; (No. 2) is twenty years old. Like, human earth years. Twenty of them.&lt;br/&gt; ⬆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Splatoon"&gt;Splatoon&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;’s Splatfest was an inky success, propelling it to No. 10.&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;h2&gt;
+ &lt;a href="http://thefandometrics.tumblr.com/post/137580830792/web-stuff-week-ending-january-18th-2016"&gt;Web stuff&lt;/a&gt;: When it hasn’t been your day, your week, your month, or even your year.&lt;/h2&gt;
+ &lt;blockquote&gt;&lt;p&gt;⬆ Vlogging savant &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Troye%20Sivan"&gt;Troye Sivan&lt;/a&gt;&lt;/b&gt; moves up to No. 4.&lt;br/&gt; ⬇︎ Story time! &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Thomas%20Sanders"&gt;Thomas Sanders&lt;/a&gt;&lt;/b&gt; fell seven spots to No. 19.&lt;/p&gt;&lt;/blockquote&gt;
+ &lt;/blockquote&gt;</description><link>http://staff.tumblr.com/post/137714050360</link><guid>http://staff.tumblr.com/post/137714050360</guid><pubDate>Wed, 20 Jan 2016 18:42:44 -0500</pubDate><category>week in review</category></item><item><title>Photo</title><description>&lt;img src="http://36.media.tumblr.com/9886e52dcd701c004da445cecd89e7a7/tumblr_ne2u5i2aWI1sq05vko1_400.png"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://staff.tumblr.com/post/137656822367</link><guid>http://staff.tumblr.com/post/137656822367</guid><pubDate>Tue, 19 Jan 2016 21:00:09 -0500</pubDate><category>stock</category><category>stock photo week</category><category>businessing</category><category>business</category></item><item><title>vedranmisic:
+
+ Happy Birthday, Dr. Martin Luther King Jr.“I HAVE...</title><description>&lt;img src="http://40.media.tumblr.com/01e16942f7f596872c5e7d73d41f989b/tumblr_o0z9nswYMm1re26ajo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://vedranmisic.tumblr.com/post/137328304708/happy-birthday-dr-martin-luther-king-jr-i-have" class="tumblr_blog"&gt;vedranmisic&lt;/a&gt;:&lt;/p&gt;
+
+ &lt;blockquote&gt;&lt;p&gt;Happy Birthday, Dr. Martin Luther King Jr.&lt;br/&gt;“I HAVE A DREAM” (ink on paper, 11x14 inches)&lt;br/&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://staff.tumblr.com/post/137556640935</link><guid>http://staff.tumblr.com/post/137556640935</guid><pubDate>Mon, 18 Jan 2016 11:20:27 -0500</pubDate><category>martin luther king jr</category></item><item><title>fruitsoftheweb:
+
+ Elastic and non-linear plastic effects are...</title><description>&lt;img src="http://45.media.tumblr.com/525d91fe69a7815bc84438e4dab4e8e0/tumblr_n7lvudTrkx1skn1oxo1_400.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://fruitsoftheweb.tumblr.com/post/89724820207"&gt;fruitsoftheweb&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p class="p1"&gt;&lt;a href="https://www.youtube.com/watch?v=1Q_zb65SXt0"&gt;&lt;em&gt;Elastic and non-linear plastic effects are obtained by adding springs with varying rest length between particles.&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
+ &lt;/blockquote&gt;
+
+ &lt;p&gt;You can dress this description up any way you want, but this here link is a video about straight-up slime.&lt;/p&gt;</description><link>http://staff.tumblr.com/post/137382144100</link><guid>http://staff.tumblr.com/post/137382144100</guid><pubDate>Fri, 15 Jan 2016 21:00:30 -0500</pubDate><category>slime</category><category>slime week</category></item><item><title>Video</title><description>
+ &lt;video id='embed-56a8a4909ac31729864247' class='crt-video crt-skin-default' width='400' height='225' poster='http://media.tumblr.com/tumblr_o10q0s4lQw1qz8q0h_frame1.jpg' preload='none' data-crt-video data-crt-options='{"autoheight":null,"duration":299,"hdUrl":false,"filmstrip":{"url":"http:\/\/38.media.tumblr.com\/previews\/tumblr_o10q0s4lQw1qz8q0h_filmstrip.jpg","width":"200","height":"112"}}' &gt;
+ &lt;source src="http://staff.tumblr.com/video_file/137376306290/tumblr_o10q0s4lQw1qz8q0h" type="video/mp4"&gt;
+ &lt;/video&gt;
+ &lt;br/&gt;&lt;br/&gt;</description><link>http://staff.tumblr.com/post/137376306290</link><guid>http://staff.tumblr.com/post/137376306290</guid><pubDate>Fri, 15 Jan 2016 19:06:25 -0500</pubDate><category>have a relaxing weekend tumblr</category></item><item><title>Losing one was hard enough… David Bowie said his goodbye, we’re...</title><description>&lt;img src="http://40.media.tumblr.com/9c69a850eece63c29d913b6e83dd49a7/tumblr_o10jfzocXP1qz8q0ho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;Losing one was hard enough… &lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/david%20bowie"&gt;&lt;b&gt;David Bowie&lt;/b&gt;&lt;/a&gt; said his goodbye, we’re all thinking of his love. &lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/alan%20rickman"&gt;&lt;b&gt;Alan Rickman&lt;/b&gt;&lt;/a&gt; is survived by his wife and his magic.&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Losing &lt;a href="http://tumblr.com/search/powerball"&gt;&lt;b&gt;POWERBALL&lt;/b&gt;&lt;/a&gt; didn’t help anything.&lt;/p&gt;&lt;figure data-orig-width="500" data-orig-height="278" data-tumblr-attribution="rustbeltjessie:Z20sTdCnR6V5dULG-Pk5FA:ZyRL1u1-svswa" class="tmblr-full"&gt;&lt;img src="http://33.media.tumblr.com/896e5f5e4ea77f08a930d01a39723805/tumblr_o0y90c1KPr1rift8jo1_500.gif" alt="image" data-orig-width="500" data-orig-height="278"/&gt;&lt;/figure&gt;&lt;h2&gt;It’s award season (again)&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/golden%20globes"&gt;&lt;b&gt;Golden Globes&lt;/b&gt;&lt;/a&gt; got a little loose with the juice.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/leonardo%20dicaprio"&gt;&lt;b&gt;Leo DiCaprio&lt;/b&gt;&lt;/a&gt; got on Lady Gaga’s shit list.&lt;/li&gt;&lt;li&gt;And &lt;a href="http://tumblr.com/search/oscars%202016"&gt;&lt;b&gt;Oscars 2016&lt;/b&gt;&lt;/a&gt;: got heat for an all-white nomination slate.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Trends gonna trend&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/coming%20out"&gt;&lt;b&gt;Coming out&lt;/b&gt;&lt;/a&gt;: It’s all part of growing up.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/the%20shannara%20chronicles"&gt;&lt;b&gt;&lt;i&gt;The Shannara Chronicles&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;: A shoo be doo wop / bop bop doo wop.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/shadowhunters"&gt;&lt;b&gt;&lt;i&gt;Shadowhunters&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;: Best played on a sunny day.&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="500" data-orig-height="281" data-tumblr-attribution="katiecouric:bvFuZWnCzpG75MylRNwCUA:ZPcBQw1-hna98" class="tmblr-full"&gt;&lt;img src="http://33.media.tumblr.com/1da9dfe557532a71323d45749dd6ea3c/tumblr_o0swib9HUI1r7kaf3o1_500.gif" alt="image" data-orig-width="500" data-orig-height="281"/&gt;&lt;/figure&gt;&lt;h2&gt;And these dynamite Tumblrs: &lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Plus Size Never Looked So Good&lt;/b&gt; (&lt;a href="http://tmblr.co/mpKfpxC4WXhPT0bbAU74L0w"&gt;@plussizeneverlookedsogood&lt;/a&gt;): Big girl swag.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Amandla&lt;/b&gt; (&lt;a href="http://tmblr.co/mfy9cYbpNQiEgZnaWyfwSRg"&gt;@amandla&lt;/a&gt;): You know her as Rue, but you should see her graphic novels.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Black Shop, White Writing &lt;/b&gt;(&lt;a href="http://tmblr.co/myTgmVRoFyIoi0hhKlWr0vw"&gt;@blackshopswhitewriting&lt;/a&gt;): Shades of gentrification&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="500" data-orig-height="190" data-tumblr-attribution="ziggyreturns:LA35rxFHUTbzeMrpzP2h-w:ZfoOZm1mAh7Bv" class="tmblr-full"&gt;&lt;img src="http://33.media.tumblr.com/6bb8b39e6a9cd2c981fee71de1a281a6/tumblr_noi61wxvz31tlqitmo1_500.gif" alt="image" data-orig-width="500" data-orig-height="190"/&gt;&lt;/figure&gt;</description><link>http://staff.tumblr.com/post/137369118080</link><guid>http://staff.tumblr.com/post/137369118080</guid><pubDate>Fri, 15 Jan 2016 16:55:09 -0500</pubDate><category>trends</category></item><item><title>Is this satisfying or enraging? We can’t decide. </title><description>&lt;img src="http://49.media.tumblr.com/d022b6caad3f1b5ae988b94d7113b434/tumblr_nyv2d24zYP1v0kd8mo1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Is this satisfying or enraging? We can’t decide. &lt;/p&gt;</description><link>http://staff.tumblr.com/post/137318516024</link><guid>http://staff.tumblr.com/post/137318516024</guid><pubDate>Thu, 14 Jan 2016 21:00:04 -0500</pubDate><category>slime</category><category>slime week</category><category>you decide</category></item><item><title>⬆ This great GIF button is now on iOS This button turns your...</title><description>&lt;img src="http://49.media.tumblr.com/8342edc0521edf0edcfabeed522825c9/tumblr_o0st80ul691qz8q0ho1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;⬆ This great GIF button is now on iOS &lt;/h2&gt;&lt;p&gt;This button turns your feelings into GIFs, then inserts those GIFs into your posts. &lt;a href="http://staff.tumblr.com/post/120720833005/since-gifs-have-replaced-written-language-were"&gt;Web&lt;/a&gt; and &lt;a href="http://staff.tumblr.com/post/135263390205/a-treat-for-android-users-now-you-can-add-gifs-to"&gt;Android&lt;/a&gt; users have had it for a little while, and now the triumvirate is complete. &lt;/p&gt;&lt;p&gt;First, get the &lt;a href="https://itunes.apple.com/us/app/tumblr/id305343404?mt=8"&gt;latest version of the app&lt;/a&gt;. Next, open up a new post (or reblog!) and tap the GIF button. Search for something you want to express. Something like “potato.” Pick one, and into your post it goes:&lt;/p&gt;&lt;figure data-orig-width="500" data-orig-height="367" data-orig-src="http://38.media.tumblr.com/801919ec41dfc2f1c5ec1b5d62482ba4/tumblr_inline_o0yfc3XE0y1qzpzhj_500.gif" data-tumblr-attribution="addyisabutler:Hr9auQKKX-zyrYFX_K4zIQ:ZClLCj1wTXFo4" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/801919ec41dfc2f1c5ec1b5d62482ba4/tumblr_inline_o0zac6myJV1qzpzhj_500.gif" alt="image" data-orig-width="500" data-orig-height="367" data-orig-src="http://38.media.tumblr.com/801919ec41dfc2f1c5ec1b5d62482ba4/tumblr_inline_o0yfc3XE0y1qzpzhj_500.gif"/&gt;&lt;/figure&gt;&lt;p&gt;What a marvelous potato! It communicates a passion that words cannot. Very nice. &lt;i&gt;Very nice indeed&lt;/i&gt;. &lt;/p&gt;</description><link>http://staff.tumblr.com/post/137292522640</link><guid>http://staff.tumblr.com/post/137292522640</guid><pubDate>Thu, 14 Jan 2016 13:00:03 -0500</pubDate><category>features</category></item><item><title>jellygummies:
+ Iridescent goo! (and the guy doesn’t even...</title><description>&lt;img src="http://45.media.tumblr.com/5c93c21e43e0e672a5ae97d7e93d34e7/tumblr_n3je4jy7zk1syjt2wo1_400.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://jellygummies.tumblr.com/post/81738200024"&gt;jellygummies&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;
+ &lt;p&gt;Iridescent goo! (and the guy doesn’t even flinch) &lt;/p&gt;
+ &lt;/blockquote&gt;</description><link>http://staff.tumblr.com/post/137259011190</link><guid>http://staff.tumblr.com/post/137259011190</guid><pubDate>Wed, 13 Jan 2016 22:15:43 -0500</pubDate><category>slime week</category><category>sorry</category><category>we hate this too</category><category>in a real appreciative way</category></item><item><title>Heavens to Betsy, it’s…</title><description>&lt;p&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137250140754/heavens-to-betsy-its" class="tumblr_blog"&gt;thefandometrics&lt;/a&gt;:&lt;/p&gt;
+
+ &lt;blockquote&gt;&lt;figure data-orig-width="500" data-orig-height="100" class="tmblr-full"&gt;&lt;img src="http://41.media.tumblr.com/b528045dbfddacd8dcb1789ae1aabad8/tumblr_inline_o0wy2ln5Md1qz7tc0_540.png" alt="image" data-orig-width="500" data-orig-height="100"/&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137118390340/tv-shows-week-ending-january-11th-2016-steven"&gt;Television&lt;/a&gt;: This section adjusted to fit your screen.&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;⬆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Teen+Wolf"&gt;Teen Wolf&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; makes a hair-raising leap to No. 2.&lt;br/&gt;☆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/The%20Golden%20Globes"&gt;The Golden Globes&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; debuted at No. 3. Shoulda been an award for &lt;a href="http://mtv.tumblr.com/post/137063593090/leo"&gt;best grimace&lt;/a&gt;.&lt;br/&gt;☆ Some elves cannot be shelved. &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/The%20Shannara%20Chronicles"&gt;The Shannara Chronicles&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; debuted at No. 16.&lt;/p&gt;&lt;/blockquote&gt;&lt;figure data-orig-width="500" data-orig-height="281" data-tumblr-attribution="darkvoidpack:I6_HYH3Z998B28zTSV1YSQ:ZnIIfj1slKySo" class="tmblr-full"&gt;&lt;img src="http://38.media.tumblr.com/05b727c83aace22632b2d8474b2d112b/tumblr_ntlpl06Z3f1uesvvmo1_500.gif" alt="image" data-orig-width="500" data-orig-height="281"/&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137117810802/movies-week-ending-january-11th-2016-star-wars"&gt;Movies&lt;/a&gt;: Don’t forget to put on your 3D glasses for the next two sentences. &lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;⬆ Was &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Mad%20Max"&gt;Mad Max&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; snubbed at the awards? Your passionate cries lifted it to No. 10.&lt;br/&gt;☆ &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Ghostbusters"&gt;Ghostbusters&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;, a revamp of the breathtaking documentary &lt;i&gt;Ghostbusters&lt;/i&gt;, returns at No. 14.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137117244608/musical-acts-week-ending-january-11th-2016-5"&gt;Music&lt;/a&gt;: Musicians without music.&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;⬆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Beyonce"&gt;Beyonce&lt;/a&gt;&lt;/b&gt; moved up to No. 8 without making a peep on &lt;i&gt;Lip Sync Battle&lt;/i&gt;.&lt;br/&gt;⬆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Lady%20Gaga"&gt;Lady Gaga&lt;/a&gt;&lt;/b&gt; won best actress and the equally impressive rank of No. 9.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137116652699/celebrities-week-ending-january-11th-2016-adam"&gt;Celebrities&lt;/a&gt;: Please don’t let a rich person win the Powerball.&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;☆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Leonardo%20DiCaprio"&gt;Leonardo DiCaprio&lt;/a&gt;&lt;/b&gt; battled a bear, won a Golden Globe, landed at No. 17. What a night.&lt;br/&gt;☆ Teen Queen &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Amandla%20Stenberg"&gt;Amandla Stenberg&lt;/a&gt;&lt;/b&gt; debuted at No 18 after a &lt;a href="http://tmblr.co/mJ7SklFRPVSBBt8ifjeqy2w"&gt;@teenvogue&lt;/a&gt; Snapchat takeover.&lt;br/&gt;☆ OTP alert. &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Rami%20Malek"&gt;Rami Malek&lt;/a&gt;&lt;/b&gt; cabooses our list at No. 20 after Christian Slater sang his praises.&lt;/p&gt;&lt;/blockquote&gt;&lt;figure class="tmblr-full" data-orig-height="250" data-orig-width="500" data-tumblr-attribution="tvwatercooler:lbxG1rwZpwLHmhy8rIunCQ:Z7loFw1tgtiVe"&gt;&lt;img src="http://38.media.tumblr.com/5f5e8438f58442fb65cee706a1631608/tumblr_nu9i5x036O1r9x12go1_500.gif" data-orig-height="250" data-orig-width="500"/&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137116069969/video-games-week-ending-january-11th-2016"&gt;Games&lt;/a&gt;: Don’t Wake Daddy.&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;⬆ LOL, &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/League%20of%20Legends"&gt;League of Legends&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt; moved up to No. 7.&lt;br/&gt;⬆ Neither Hell Nohr high water could keep &lt;b&gt;&lt;i&gt;&lt;a href="https://www.tumblr.com/search/Fire%20Emblem%20Fates"&gt;Fire Emblem Fates&lt;/a&gt; &lt;/i&gt;&lt;/b&gt;(No. 19) off our list.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;&lt;a href="http://thefandometrics.tumblr.com/post/137115545596/web-stuff-week-ending-january-11th-2016"&gt;Web stuff&lt;/a&gt;: The internet is cool, good bye. &lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;⬆ &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Jacksepticeye"&gt;Jacksepticeye&lt;/a&gt;&lt;/b&gt; (No. 4) reached 8 million subscribers. Is that even a real number?&lt;br/&gt;⬇︎ Animator, voice actor, rapper, human male &lt;b&gt;&lt;a href="https://www.tumblr.com/search/Arin%20Hanson"&gt;Arin Hanson&lt;/a&gt;&lt;/b&gt; falls to No. 16.&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;</description><link>http://staff.tumblr.com/post/137250668505</link><guid>http://staff.tumblr.com/post/137250668505</guid><pubDate>Wed, 13 Jan 2016 19:39:47 -0500</pubDate><category>week in review</category></item><item><title>Photo</title><description>&lt;img src="http://49.media.tumblr.com/2edae122171f1a99abd1ce4dc40fe2d1/tumblr_o0aokm7F9s1v1xodyo1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://staff.tumblr.com/post/137191044499</link><guid>http://staff.tumblr.com/post/137191044499</guid><pubDate>Tue, 12 Jan 2016 21:00:05 -0500</pubDate><category>welcome to the slime zone</category><category>slime week</category></item><item><title>dollychops:
+
+ ‘Time may change me’
+
+
+ Thank you, David Bowie, for...</title><description>&lt;img src="http://36.media.tumblr.com/6d3af2caaf3a1e444d8f22489e54fcf7/tumblr_nhuzifiESR1qaetdco1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://dollychops.tumblr.com/post/107623338570"&gt;dollychops&lt;/a&gt;:&lt;/p&gt;
+ &lt;blockquote&gt;
+ &lt;p&gt;‘Time may change me’&lt;/p&gt;
+ &lt;/blockquote&gt;
+
+ &lt;p&gt;Thank you, David Bowie, for everything you left on this planet.&lt;/p&gt;</description><link>http://staff.tumblr.com/post/137108708620</link><guid>http://staff.tumblr.com/post/137108708620</guid><pubDate>Mon, 11 Jan 2016 16:08:34 -0500</pubDate><category>⚡️</category></item><item><title>Photo</title><description>&lt;img src="http://41.media.tumblr.com/967aba4d63cfa34fb00ed3edbc2ef27e/tumblr_nxky79R9Xz1sflxizo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://staff.tumblr.com/post/136905518945</link><guid>http://staff.tumblr.com/post/136905518945</guid><pubDate>Fri, 08 Jan 2016 17:44:31 -0500</pubDate><category>have a good weekend tumblr</category></item><item><title>New year, new trends, new youBlowing up now: Graphic novelist...</title><description>&lt;img src="http://41.media.tumblr.com/9c69a850eece63c29d913b6e83dd49a7/tumblr_o0ne9sk7yG1qz8q0ho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;New year, new trends, new you&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Blowing up now: Graphic novelist &lt;b&gt;&lt;a href="http://tumblr.com/search/amandla%20stenberg"&gt;Amandla Stenberg’s&lt;/a&gt;&lt;/b&gt; (alias: Rue) &lt;a href="http://amandla.tumblr.com/post/136866720678/so-i-took-over-the-teen-vogue-snapchat-today"&gt;inspiring message&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;It took Sherlock Holmes to figure out the &lt;a href="http://tumblr.com/search/sherlock"&gt;&lt;b&gt;&lt;i&gt;Sherlock&lt;/i&gt;&lt;/b&gt;&lt;/a&gt; special.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/teen%20wolf"&gt;&lt;b&gt;&lt;i&gt;Teen Wolf&lt;/i&gt;&lt;/b&gt;&lt;/a&gt; and friends chased Taylor Swift &lt;a href="http://tumblr.com/search/out%20of%20the%20woods"&gt;&lt;b&gt;&lt;i&gt;Out of the Woods&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/oregon"&gt;&lt;b&gt;Oregon&lt;/b&gt;&lt;/a&gt; is hosting everyone’s drunk uncles.&lt;/li&gt;&lt;li&gt;POTUS announced new &lt;a href="http://tumblr.com/search/gun%20control"&gt;&lt;b&gt;gun control&lt;/b&gt;&lt;/a&gt; policies.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/ces%202016"&gt;&lt;b&gt;CES 2016&lt;/b&gt;&lt;/a&gt;: for people who don’t get invited to &lt;a href="http://tumblr.com/search/pca%202016"&gt;&lt;b&gt;PCA 2016&lt;/b&gt;&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;figure data-orig-width="500" data-orig-height="333" data-tumblr-attribution="qualcomm:w-2kl3XPK9VC_h4I30lZQQ:ZAN2in1-NvniN" class="tmblr-full"&gt;&lt;img src="http://33.media.tumblr.com/86405300020cd161baa702cf983c6189/tumblr_o0juioRm5j1ta1bw6o1_500.gif" alt="image" data-orig-width="500" data-orig-height="333"/&gt;&lt;/figure&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tumblr.com/search/pvris"&gt;&lt;b&gt;PVRIS&lt;/b&gt;&lt;/a&gt;: untrilled as in “Morris.”&lt;/li&gt;&lt;li&gt;And it’s definitely &lt;a href="http://tumblr.com/search/jailey"&gt;&lt;b&gt;Jailey&lt;/b&gt;&lt;/a&gt;. Bieldwin slays orcs in Enedwaith.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Once-around-the-sun Tumblrs&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Daily Overview &lt;/b&gt;(&lt;a href="http://tmblr.co/mfB7_qm9Di9WXyvW2jkKcDA"&gt;@dailyoverview&lt;/a&gt;): Cool stuff from above ground.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Earth Blingg &lt;/b&gt;(&lt;a href="http://tmblr.co/mMwXAkW_6d4ddLGw7VhfWaQ"&gt;@earthblingg&lt;/a&gt;): Cool stuff from underground&lt;/li&gt;&lt;/ul&gt;</description><link>http://staff.tumblr.com/post/136898076525</link><guid>http://staff.tumblr.com/post/136898076525</guid><pubDate>Fri, 08 Jan 2016 15:36:23 -0500</pubDate><category>trends</category></item></channel></rss>
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_wikipedia.xml b/mobile/android/tests/background/junit4/resources/feed_rss_wikipedia.xml
new file mode 100644
index 000000000..a20082231
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_wikipedia.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ https://en.wikipedia.org/wiki/RSS#Example
+-->
+<rss version="2.0">
+ <channel>
+ <title>RSS Title</title>
+ <description>This is an example of an RSS feed</description>
+ <link>http://www.example.com/main.html</link>
+ <lastBuildDate>Mon, 06 Sep 2010 00:01:00 +0000 </lastBuildDate>
+ <pubDate>Sun, 06 Sep 2009 16:20:00 +0000</pubDate>
+ <ttl>1800</ttl>
+ <item>
+ <title>Example entry</title>
+ <description>Here is some text containing an interesting description.</description>
+ <link>http://www.example.com/blog/post/1</link>
+ <guid isPermaLink="true">7bd204c6-1655-4c27-aeee-53f933c5395f</guid>
+ <pubDate>Sun, 06 Sep 2009 16:20:00 +0000</pubDate>
+ </item>
+ </channel>
+</rss>
diff --git a/mobile/android/tests/background/junit4/resources/feed_rss_wordpress.xml b/mobile/android/tests/background/junit4/resources/feed_rss_wordpress.xml
new file mode 100644
index 000000000..7981eb173
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/feed_rss_wordpress.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+ xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
+ >
+
+ <channel>
+ <title>justasimpletest2016</title>
+ <atom:link href="https://justasimpletest2016.wordpress.com/feed/" rel="self" type="application/rss+xml" />
+ <link>https://justasimpletest2016.wordpress.com</link>
+ <description></description>
+ <lastBuildDate>Fri, 26 Feb 2016 22:08:00 +0000</lastBuildDate>
+ <language>en</language>
+ <sy:updatePeriod>hourly</sy:updatePeriod>
+ <sy:updateFrequency>1</sy:updateFrequency>
+ <generator>http://wordpress.com/</generator>
+ <cloud domain='justasimpletest2016.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
+ <image>
+ <url>https://s2.wp.com/i/buttonw-com.png</url>
+ <title>justasimpletest2016</title>
+ <link>https://justasimpletest2016.wordpress.com</link>
+ </image>
+ <atom:link rel="search" type="application/opensearchdescription+xml" href="https://justasimpletest2016.wordpress.com/osd.xml" title="justasimpletest2016" />
+ <atom:link rel='hub' href='https://justasimpletest2016.wordpress.com/?pushpress=hub'/>
+ <item>
+ <title>Hello World!</title>
+ <link>https://justasimpletest2016.wordpress.com/2016/02/26/hello-world/</link>
+ <comments>https://justasimpletest2016.wordpress.com/2016/02/26/hello-world/#respond</comments>
+ <pubDate>Fri, 26 Feb 2016 22:07:46 +0000</pubDate>
+ <dc:creator><![CDATA[justasimpletest2016]]></dc:creator>
+ <category><![CDATA[Uncategorized]]></category>
+
+ <guid isPermaLink="false">http://justasimpletest2016.wordpress.com/?p=6</guid>
+ <description><![CDATA[What&#8217;s up?<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=6&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
+ <content:encoded><![CDATA[<p>What&#8217;s up?</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justasimpletest2016.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justasimpletest2016.wordpress.com/6/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=6&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
+ <wfw:commentRss>https://justasimpletest2016.wordpress.com/2016/02/26/hello-world/feed/</wfw:commentRss>
+ <slash:comments>0</slash:comments>
+
+ <media:content url="https://2.gravatar.com/avatar/ba82024e6f43884f4ae0e379273b0743?s=96&#38;d=identicon&#38;r=G" medium="image">
+ <media:title type="html">justasimpletest2016</media:title>
+ </media:content>
+ </item>
+ <item>
+ <title>The second post</title>
+ <link>https://justasimpletest2016.wordpress.com/2016/02/26/the-second-post/</link>
+ <comments>https://justasimpletest2016.wordpress.com/2016/02/26/the-second-post/#respond</comments>
+ <pubDate>Fri, 26 Feb 2016 00:23:04 +0000</pubDate>
+ <dc:creator><![CDATA[justasimpletest2016]]></dc:creator>
+ <category><![CDATA[Uncategorized]]></category>
+
+ <guid isPermaLink="false">http://justasimpletest2016.wordpress.com/2016/02/26/the-second-post/</guid>
+ <description><![CDATA[Hello.<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=4&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
+ <content:encoded><![CDATA[<p>Hello.</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justasimpletest2016.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justasimpletest2016.wordpress.com/4/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=4&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
+ <wfw:commentRss>https://justasimpletest2016.wordpress.com/2016/02/26/the-second-post/feed/</wfw:commentRss>
+ <slash:comments>0</slash:comments>
+
+ <media:content url="https://2.gravatar.com/avatar/ba82024e6f43884f4ae0e379273b0743?s=96&#38;d=identicon&#38;r=G" medium="image">
+ <media:title type="html">justasimpletest2016</media:title>
+ </media:content>
+ </item>
+ <item>
+ <title>This is just a test</title>
+ <link>https://justasimpletest2016.wordpress.com/2016/02/26/this-is-just-a-test/</link>
+ <comments>https://justasimpletest2016.wordpress.com/2016/02/26/this-is-just-a-test/#respond</comments>
+ <pubDate>Fri, 26 Feb 2016 00:22:58 +0000</pubDate>
+ <dc:creator><![CDATA[justasimpletest2016]]></dc:creator>
+ <category><![CDATA[Uncategorized]]></category>
+
+ <guid isPermaLink="false">http://justasimpletest2016.wordpress.com/?p=2</guid>
+ <description><![CDATA[Hello World. First blog post from WordPress.<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=2&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
+ <content:encoded><![CDATA[<p>Hello World. First blog post from WordPress.</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justasimpletest2016.wordpress.com/2/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justasimpletest2016.wordpress.com/2/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=justasimpletest2016.wordpress.com&#038;blog=107552275&#038;post=2&#038;subd=justasimpletest2016&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
+ <wfw:commentRss>https://justasimpletest2016.wordpress.com/2016/02/26/this-is-just-a-test/feed/</wfw:commentRss>
+ <slash:comments>0</slash:comments>
+
+ <media:content url="https://2.gravatar.com/avatar/ba82024e6f43884f4ae0e379273b0743?s=96&#38;d=identicon&#38;r=G" medium="image">
+ <media:title type="html">justasimpletest2016</media:title>
+ </media:content>
+ </item>
+ </channel>
+</rss>
diff --git a/mobile/android/tests/background/junit4/resources/robolectric.properties b/mobile/android/tests/background/junit4/resources/robolectric.properties
new file mode 100644
index 000000000..a809da730
--- /dev/null
+++ b/mobile/android/tests/background/junit4/resources/robolectric.properties
@@ -0,0 +1,3 @@
+sdk=21
+constants=org.mozilla.gecko.BuildConfig
+packageName=org.mozilla.gecko