summaryrefslogtreecommitdiffstats
path: root/mobile/android/tests/background/junit4/resources/feed_rss20_planetmozilla.xml
blob: a3447ab8acf736ba21f0e23b618fa9ae5b3aed44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
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>