Will Kahn-Greene: SUMO: 2013 retrospective |
It was a big year for SUMO. In 2012, we got a lot accomplished: new search, new information architecture,
One thing I didn't do was make my year-end script product better output.
Anyhow---on with stats!
Twas the year: 2013 =================== Bugzilla ======== Bugs created: 889 a.topal : 156 rrosario : 100 willkg : 87 scoobidiver : 85 ibai : 58 mverdi : 54 mcooper : 42 feer56 : 35 krystaiceman : 26 rdalal : 19 david.weir : 15 shuhao : 13 swarnavasengupta : 9 andrei.hutusoru : 8 me+bugzilla : 7 tobbi.bugs : 6 mluna : 6 joshua-smith : 6 tdowner : 6 leszekz : 6 yoshi.yokotani : 5 stephen.donner : 5 slurp : 5 mana : 5 madperson : 4 kbrosnan : 4 tonnes.mb : 4 rardila : 4 pmcclard : 4 dbialer : 4 michaljev : 4 abc : 4 l10n : 4 pcvrcek : 3 rdaub : 3 fabricio : 2 rmcguigan : 2 sudheesh1995 : 2 alex_mayorga : 2 simone.lando : 2 nishant_cs : 2 bram : 2 smolejv : 2 bob.silverberg : 2 rtanglao : 2 kdurant35rules : 2 amit103065 : 2 subedimahadev : 2 lhenry : 2 thomas.lendo : 2 shawnsumo : 2 mhammond : 1 kdurant35rules : 1 djst : 1 curtisk : 1 chiorean.ioana : 1 bermea : 1 friedel : 1 bputstudentweb : 1 margaret.leibovic : 1 rbillings : 1 nikitan.dolmart : 1 georgevidalakis : 1 nsm.nikhil : 1 satishb3 : 1 bwbrowning : 1 bugzilla : 1 coce : 1 EddyCarr : 1 gryllida : 1 mohammed.samad : 1 6a68 : 1 krupa.mozbugs : 1 John99-bugs : 1 wjohnston : 1 barderne : 1 jan0286 : 1 fwenzel : 1 rnewman : 1 this4midhun : 1 bjohnson : 1 bugzilla-fromthedeep : 1 iamjithin : 1 bmo2010 : 1 chrismore.bugzilla : 1 evold : 1 jbertsch : 1 yousef : 1 pmjcreations : 1 rhelmer : 1 danishka : 1 mail : 1 gphemsley : 1 Rebeccah : 1 ckreinbring : 1 stephen : 1 berker.peksag : 1 jezdez : 1 nchen : 1 iamjayakumars : 1 netfuzzerr : 1 benjamin : 1 Bugs resolved: 1116 rrosario : 386 resolved, 273 fixed rdalal : 152 resolved, 150 fixed a.topal : 121 resolved, 41 fixed mcooper : 118 resolved, 105 fixed willkg : 72 resolved, 61 fixed scoobidiver : 31 resolved, 0 fixed michaljev : 20 resolved, 17 fixed swarnavasengupta : 18 resolved, 0 fixed shuhao : 16 resolved, 13 fixed me+bugzilla : 12 resolved, 5 fixed berker.peksag : 12 resolved, 12 fixed mverdi : 11 resolved, 5 fixed erik : 9 resolved, 9 fixed lhenry : 8 resolved, 1 fixed krystaiceman : 7 resolved, 1 fixed tobbi.bugs : 7 resolved, 6 fixed joshua-smith : 6 resolved, 4 fixed jfong : 5 resolved, 5 fixed tdowner : 5 resolved, 2 fixed feer56 : 5 resolved, 0 fixed david.weir : 5 resolved, 4 fixed bwbrowning : 5 resolved, 5 fixed bram : 5 resolved, 4 fixed ibai : 4 resolved, 1 fixed alastra.mariagrazia : 4 resolved, 2 fixed laura : 4 resolved, 4 fixed williamr : 3 resolved, 1 fixed buchanae+bugs : 3 resolved, 3 fixed bharath_ves : 3 resolved, 3 fixed paul+moz : 3 resolved, 3 fixed chris.lonnen : 2 resolved, 2 fixed smolejv : 2 resolved, 1 fixed zcampbell : 2 resolved, 0 fixed iamjayakumars : 2 resolved, 0 fixed curtisk : 2 resolved, 0 fixed leszekz : 2 resolved, 0 fixed abc : 2 resolved, 1 fixed pcvrcek : 2 resolved, 0 fixed taygunagiali : 2 resolved, 2 fixed mail : 1 resolved, 0 fixed bmo2010 : 1 resolved, 1 fixed wymette : 1 resolved, 0 fixed beaotx : 1 resolved, 1 fixed nelson : 1 resolved, 1 fixed madperson : 1 resolved, 1 fixed coce : 1 resolved, 0 fixed pmcclard : 1 resolved, 1 fixed tgavankar : 1 resolved, 1 fixed bugzilla-fromthedeep : 1 resolved, 0 fixed rtanglao : 1 resolved, 0 fixed stephen.donner : 1 resolved, 1 fixed guillermo.movia : 1 resolved, 1 fixed lorchard : 1 resolved, 1 fixed nukeador : 1 resolved, 0 fixed rtucker11 : 1 resolved, 0 fixed nishant_cs : 1 resolved, 0 fixed stas : 1 resolved, 0 fixed mattbasta : 1 resolved, 1 fixed satishb3 : 1 resolved, 0 fixed ragsagar : 1 resolved, 1 fixed rmcguigan : 1 resolved, 1 fixed nchen : 1 resolved, 0 fixed kudrom : 1 resolved, 1 fixed andrei.hutusoru : 1 resolved, 0 fixed reed : 1 resolved, 0 fixed tiziana.sel : 1 resolved, 0 fixed chance.zibolski : 1 resolved, 1 fixed alice0775 : 1 resolved, 0 fixed ravi : 1 resolved, 0 fixed nsm.nikhil : 1 resolved, 0 fixed gryllida : 1 resolved, 1 fixed deletesoftware+moz : 1 resolved, 0 fixed pmjcreations : 1 resolved, 0 fixed boerni : 1 resolved, 1 fixed rforbes : 1 resolved, 0 fixed dbialer : 1 resolved, 1 fixed jgross : 1 resolved, 1 fixed INCOMPLETE : 43 WONTFIX : 51 DUPLICATE : 64 INVALID : 73 WORKSFORME : 121 FIXED : 764 Research bugs: 15 761582: [research] Add feature: Articles that link to this article 788104: [research] [ux] Support multiple products in the support forum 815089: [research] Investigate telling apart Firefox for Desktop and Firefox for Mobile tweets 816970: [research] SurveyGizmo API to be used in automated exit survey 823060: [research] Use datetime instead of ints in ES mappings 823891: [research] Adding KB revisions feature 825621: [research] Store the templates, article links and images in each article 825624: [research] Investigate how to update to Twitter API v1.1 841412: [research] Bad localization strings shouldn't break the site. 845290: [research] URL bar should fade away on SUMO 854554: [research] Youtube embeds don't work with templates 889884: [research] Open Badges! 889890: [research][discuss] figure out how to improve our l10n situation with search 906992: [research] Add support for multiple ES indexes by doc type 937889: [research] Login users via a URL in email Tracker bugs: 20 433161: [Tracker] Support for forums in other languages 625891: [tracker] HTML email 721462: [tracker] Taxonomy IA improvements 758598: [Tracker] Search UX suggestions 783262: [tracker] Add rate limiting to protect us from spammers 790785: [Tracker] L10n tools editing part 790786: [Tracker] L10n tools organization part 800962: [Tracker] Add activity history page for KB 815625: [Tracker] Segment dashboards and other contributor pages by product 817540: [tracker] AJAXify the refine+focus panel 825606: [tracker] Switch everything from Webtrends to Google Analytics 827640: [tracker] Localize Questions 838584: [Tracker] Getting ready for Firefox OS launch 845286: [tracker] Use as little bandwidth as possible on mobile version of SUMO 845773: [Tracker] move to an OS charting solution 848520: [tracker] Make all traffic HTTPS 851730: [tracker] Close threads pro-actively 871559: [tracker] update codebase to django 1.4 layout 897057: [tracker] Open Badges -- stage 1 920530: [tracker] support Webmaker on SUMO git === Total commits: 1138 Ricky Rosario : 492 (+16258, -16435, files 2972) Will Kahn-Greene : 178 (+8311, -3748, files 438) Rehan Dalal : 168 (+13016, -5554, files 680) Mike Cooper : 145 (+46955, -22136, files 582) Kadir Topal : 39 (+352, -110, files 61) Michal Frontczak : 19 (+229, -182, files 78) Berker Peksag : 15 (+570, -717, files 73) Shuhao Wu : 15 (+1523, -127, files 51) Jen Fong-Adwent : 9 (+138, -18, files 17) Tobbi : 8 (+338, -204, files 13) browning : 5 (+140, -16, files 12) davd Weir : 4 (+15, -1, files 4) Joshua Smith : 4 (+94, -87, files 13) Tobias Markus : 3 (+8, -8, files 4) Anush : 3 (+4, -1, files 3) Gaurav Dadhania : 3 (+3, -3, files 3) Bharath Thiruveedula : 3 (+15, -14, files 3) ibai : 3 (+30, -30, files 4) kudrom : 2 (+9, -9, files 5) Nghi Tran : 2 (+2, -1, files 2) Tanner Filip : 2 (+4, -4, files 2) Bo
|
Gary Kwong: Whirlwind trip through Asia, giving talks on Mozilla |
Prelude: Mozilla Web App Day (EN version) in Seoul, South Korea (November 2012)
This year in October 2013, I was very honoured to be able to have the chance to be in several Asian cities, where I met up with the local communities and was a part of locally-organised events to give talks on latest Mozilla developments, e.g. Firefox OS. I was primarily headed to Hack In The Box (HITB) Kuala Lumpur, 2013, and the stopovers were at various Asian cities (or close by), so I figured to drop by.
First up: Kuala Lumpur, Malaysia (Oct 2013)
Petronas Twin Towers, image credit: Someformofhuman via Wikipedia
At the HITB conference in Malaysia, I met the Malaysian community (Thank you for all your help! Terima kasih!), and helped out at HackWEEKDAY.
It was an event focusing on Firefox OS apps and the then-new App Manager was a large piece of the puzzle. Many thanks to my colleagues Mark Goodwin and Freddy Braun for helping me out. Mark and Freddy fronted the presentation we made to the participants, and they did a very good job at that.
As a sidenote, I also remember vividly the MozCafe event (great teh tarik!) and kudos to the community for bringing us to durians!
And so I had the idea that I could give a demonstration of App Manager to the communities I’ll be visiting on the way back across the Pacific – based on Mark’s presentation and Jason Weathersby / Paul Rouget’s blogpost. The catch? Even though they all have the same content, they will all be in different languages, at least for the Q&A sessions. (Challenge yourself, why stop at one?)
Believe me, I think this is easier than it sounds – many of us spend time practising for Q&As in one primary language, so all you have to do is to think about the same reply content, but give the reply in multiple languages (aka forking). We may not end up speaking really fluently, but it should be sufficient enough to be understood.
On the way back, cities on my agenda were Singapore (thanks HackerspaceSG for hosting), Taipei (thanks to the Taiwan community for organising the event
http://garykwong.wordpress.com/2013/12/20/whirlwind-trip-through-asia-giving-talks-on-mozilla/
|
Gary Kwong: Mozillans in North Carolina – Trizillians! |
After being in Kentucky last year, where I met Curtis Koenig and Stephen Horlander, this year I decided to head to the city of Durham, North Carolina, in a bid to go somewhere in continental US with a low likelihood of wading through inches of snow in winter.
I met up with several Mozillians at a co-working space last Friday, Joel Maher being one, others for the first time (Paul McLanahan & Erik Rose). A pity David Lawrence (:dkl) couldn’t make it, else we’ll possibly have max’ed out the number of Mozillians in the same location in North Carolina till that point!
So, I learnt so much about the Research Triangle, Cackalackys, Tar Heel, Michael Jordan being from University of North Carolina, Chapel Hill, as well as that distinct Southern accent to people’s English. (y’all, anyone?)
I managed to squeeze in a roadtrip that weekend with a childhood friend, to Pisgah National Forest (arguably near/in the Blue Ridge Mountains – Country Roads, Take Me Home, anyone?) where the wonderful waterfalls awaited…
And discovered the difference between Western North Carolinan vs Eastern North Carolinan BBQ sauce!
http://garykwong.wordpress.com/2013/12/20/mozillans-in-north-carolina-trizillians/
|
Robert Kaiser: LCARStrek and Australis |
|
Christian Heilmann: Teaching people to think about code instead of acing a test |
One of my biggest bugbears with education, learning and teaching – especially online – is the focus we have on testing people by giving them multiple choice questions or having them fill out a very specific and rigidly defined test. This is a remnant from school education, where it is important to compare pupils and to also make it easy to measure the success rate and effectiveness of the teacher. Overly simplified, our school systems are designed to create new professors, not people who use the knowledge elsewhere. Ken Robinson covered this nicely in his TED talk How schools kill creativity and Salman Khan (founder of Khan Academy) ran with it in his TED talk as well.
The problem with rigid tests is that they can be gamed. I knew quite a few students and interviewees who learned information by heart, aced tests and came out not remembering a single thing let alone being able to apply the knowledge in a different scenario. The learned the what, but not the why.
Job interviewers make the mistake of having a fixed set of questions and then compare different applicants by how they fared. This is not only boring for the interviewer, it also doesn’t tell you much about how the person you interview ticks. And in the end you want to work with that person, see them grow and apply their problem solving skills in various different scenarios. At Yahoo we had a great way of doing this – we gave people a code exercise that encompassed creating a small web site from a photoshop comp. We told them what the thing should do and then let them decide how to approach it. We looked at the result they sent us and if it worked nicely, we invited them to an interview where the first half hour or hour was them explaining to us why they approached solving the problem in a certain way, what their frustrations were, and how they cut corners and why. We learned a lot about the people that way, because programmers who can explain what they did are people who can code.
This is why I am very happy to see that some people are creative enough to approach teaching to code differently than others. There are quite a few new resources out there that teach coding by describing problems and asking the learner to write code that then gets validated in a worker thread (in the case of JavaScript). Code Combat for example is a beautiful product using that approach.
Yesterday I was super happy to see that Mozillian Brian Bondy who took in onto himself to create a series of videos explaining how to contribute to Firefox at codefirefox.com added a series of small coding exercises to this endeavour.
Instead of telling you to “create variable a and assign the value foo to it as a string” the exercises on codefirefox.com are task descriptions like
Create a new variable declaration and initialize it with a literal value in one statement.
This teaches you the lingo (you might have to look it up to understand the question but you now what a declaration is afterwards) and allows you to choose what you want to do. You creatively code instead of answering a question. There is a text editor embedded in the page that analyses what you do and if you manage to get a task done, ticks it off for you. All you do is code instead of following yet another “next lesson” button navigation.
Even better is that Brian released the framework that allows you to create tests like that. Under the hood it uses Acorn by Marijn Haverbeke in a web worker to analyse the code and test it against assertions you defined in a simple API.
var c = new Codec(); c.addAssertion("x = 3;"); c.addAssertion("x++", { blacklist: true, otherProps: "hi" }); c.parseSample("if (x) { x = 3; }", function(err) { console.log('whitelist hit? ' + c.assertions[0].hit); console.log('blacklist hit? ' + c.assertions[1].hit); }); |
The codefirefox exercise module code is available on GitHub.
I am very excited about this and hope that some people will take this on. Brian is doing a great job with this and more is to come.
http://christianheilmann.com/2013/12/19/teaching-people-to-think-about-code-instead-of-acing-a-test/
|
Andrew Overholt: Mozilla API exposure guidelines |
A few months ago I worked with a number of Mozillians to come up with some guidelines to follow when exposing new features to the web. For a number of reasons they are guidelines and not hard-and-fast rules.
I’m pretty happy with how they turned out and we’ve already had some “Intent to implement” and “Intent to ship” notices sent to dev-platform.
For reference, the guidelines live on the wiki here:
|
Andrew Overholt: znc, ssh, NetworkManager across suspend/resume cycle |
These days I use an IRC bouncer running on a remote machine with the traffic forwarded over an ssh connection. It’s annoying to have to kill my hung ssh connection and restart it when my network connection change (oh, the humanity!). Originally I thought I could use nm-dispatcher but those scripts run as root and ssh keys + su = PITA if even possible.
Based on the NetworkManager python examples and some googling I cobbled together a script to kill and restart my ssh connection when I get a new IPv4 address:
#!/usr/bin/env python # I have my znc bouncer running on "people" # My wireless adapter is known as wlp3s0 to NM from gi.repository import GLib, NetworkManager, NMClient from subprocess import call import psutil main_loop = None def state_changed(obj, arg1, arg2, arg3): # got a DHCP lease if arg1 == 100: print "Connected" for p in psutil.process_iter(): if p.name == "ssh" and len(p.cmdline) == 3 and p.cmdline[2] == "people": p.kill() call(["ssh", "-fN", "people"]) if __name__ == "__main__": c = NMClient.Client.new() dev = c.get_device_by_iface("wlp3s0") dev.connect('state-changed', state_changed) main_loop = GLib.MainLoop() main_loop.run()
I’m sure it could be improved so I’m open to suggestions if you care to provide any.
I’ve been told that there are better ways to do this: autossh and Mosh.
|
Will Kahn-Greene: Input: 2013 retrospective |
It was a big year for Input. In 2012, we spent the last half rewriting Input. In 2013, it went through secreview, had a bunch of things fixed and then we migrated to the new system.
Since then, we've been fixing bugs, reimplementing features that were lost and writing the scaffolding for the new set of User Advocacy dashboards and tools.
Let's look at some Bugzilla and git stats for the year:
Twas the year: 2013 =================== Bugzilla ======== Bugs created: 150 willkg : 100 cwwmozilla : 5 fbraun : 4 mgrimes : 4 tdowner : 3 stephen.donner : 3 me+bugzilla : 2 gasell+mozilla : 2 mcooper : 2 glind : 2 mozaakash : 1 kdurant35rules : 1 hitmanarky : 1 kbrosnan : 1 bob.silverberg : 1 splewako : 1 rrosario : 1 mattbasta : 1 educmale : 1 feer56 : 1 326374 : 1 anthony : 1 shopov.bogomil : 1 peterbe : 1 l10n : 1 chrismore.bugzilla : 1 landis : 1 dron.rathore : 1 rq : 1 MattN+bmo : 1 joshua-smith : 1 cturra : 1 swagat.kanungo : 1 Bugs resolved: 268 willkg : 157 : WONTFIX 50 : FIXED 89 : WORKSFORME 8 : DUPLICATE 9 : INVALID 1 cwwmozilla : 57 : FIXED 1 : WONTFIX 7 : WORKSFORME 29 : DUPLICATE 1 : INVALID 19 mgrimes : 10 : FIXED 1 : DUPLICATE 1 : WORKSFORME 5 : INVALID 3 shopov.bogomil : 7 : WONTFIX 1 : WORKSFORME 2 : INVALID 1 : FIXED 2 : DUPLICATE 1 mcooper : 6 : DUPLICATE 1 : FIXED 5 mozilla : 5 : FIXED 5 me+bugzilla : 4 : WONTFIX 1 : FIXED 1 : DUPLICATE 1 : INVALID 1 mozaakash : 2 : WORKSFORME 1 : INVALID 1 trifandreialin : 2 : WORKSFORME 2 rrosario : 2 : FIXED 2 joshua-smith : 2 : FIXED 1 : INVALID 1 aaron.train : 2 : WONTFIX 1 : DUPLICATE 1 stephen.donner : 1 : INCOMPLETE 1 emorley : 1 : FIXED 1 curtisk : 1 : INVALID 1 unghost : 1 : WORKSFORME 1 rajul.iitkgp : 1 : FIXED 1 jruderman : 1 : INCOMPLETE 1 chris.lonnen : 1 : FIXED 1 nigelbabu : 1 : FIXED 1 tofumatt : 1 : FIXED 1 cturra : 1 : FIXED 1 fwenzel : 1 : FIXED 1 mbrandt : 1 : FIXED 1 INCOMPLETE : 2 DUPLICATE : 15 INVALID : 28 WORKSFORME : 48 WONTFIX : 60 FIXED : 115 git === Total commits: 277 Will Kahn-Greene : 249 (+51602, -16851, files 1130) Mike Cooper : 11 (+38528, -236, files 217) Brandon Burton : 7 (+42, -215, files 9) Ricky Rosario : 4 (+36, -19, files 6) Bob Silverberg : 3 (+19, -9, files 3) Rajul : 1 (+3, -0, files 1) Joshua Smith : 1 (+10, -5, files 1) bogomil : 1 (+1, -1, files 1) Total lines added: 90241 Total lines deleted: 17336 Total files changed: 1368
I want to highlight some interesting bits:
We resolved more bugs than we created. That's partially due to us going through and closing out old bugs for the old Input that aren't relevant anymore.
According to the Bugzilla and git data, there were 47 contributors to Input this year: 326374, Bob Silverberg, Brandon Burton, Joshua Smith, MattN+bmo, Mike Cooper, Rajul, Ricky Rosario, Will Kahn-Greene, aaron.train, anthony, bogomil, chris.lonnen, chrismore.bugzilla, cturra, curtisk, cwwmozilla, dron.rathore, educmale, emorley, fbraun, feer56, fwenzel, gasell+mozilla, glind, hitmanarky, jruderman, kbrosnan, kdurant35rules, l10n, landis, mattbasta, mbrandt, me+bugzilla, mgrimes, mozaakash, nigelbabu, peterbe, rajul.iitkgp, rq, splewako, stephen.donner, swagat.kanungo, tdowner, tofumatt, trifandreialin, and unghost.
That doesn't include localizers who do a ton of work translating the strings in the Input ui.
That includes some of the folks who work on the input-tests repository, but possibly misses some.
Most of the 47 contributors are not "core developers". That's cool, but I could be doing a better job here making it easier for non-core developers.
We maintain a Get Involved page and we hang out on #input on irc.mozilla.org. We have a input-dev mailing list. If you want to work on Input, this is where it's at!
Those are the stats.
At a high-level, we accomplished the following:
One thing I discovered in 2013q4 was that it's really hard to be the mostly-solo dev on a project like this. I'm lucky that I'm part of a larger team, so peer reviews for work I've done is possible and timely. However, I find I'm switching contexts between the technical details of what I'm working on now and the high-level details of a bunch of possible future tasks/projects. That's really hard to do day-to-day and still maintain development momentum. I have some thoughts on how to serialize my work so that I'm doing less context switching and I can focus on individual things more deeply which should produce better outcomes.
My goals for Input for 2014 are these:
Yay for 2013!
Update 7:08pm
My script only showed top tens which misses tons of people who did work. I redid the data and that increases the number of contributors from 16 to 47. Oops!
[Comments]
|
Jack Moffitt: Building Rust Code - Using Make Part 2 |
This series of posts is about building Rust code. In the last post I showed some nice abstractions for using Make with Rust. Today I'll show an improved version of this integration.
After landing the pkgid
attribute work there was much community discussion
about how that feature could be improved. The net result was:
pkgid
was renamed to crate_id
it's being used to identify a crate and
not a package, which is a grouping of crates. Actually, a package is still a
pretty fluid concept in Rust right now.crate_id
attribute can now override the inferred name of the crate
with new syntax. A crate_id
of github.com/foo/rust-bar#bar:1.0
names the
crate bar
which can be found at github.com/foo/rust-bar
. Previously the
crate name was inferred to be the last component of the path, rust-bar
.--crate-id
, --crate-name
, and --crate-file-name
so get the
value of the crate_id
attribute, the crate's name, and output filenames
the compiler will produce.These changes made a good thing even better.
The
Makefile
hasn't changed much, but here is a much simpler
rust.mk
that the new compiler flags enable:
define RUST_CRATE
_rust_crate_dir = $(dir $(1))
_rust_crate_lib = $$(_rust_crate_dir)lib.rs
_rust_crate_test = $$(_rust_crate_dir)test.rs
_rust_crate_name = $$(shell $(RUSTC) --crate-name $$(_rust_crate_lib))
_rust_crate_dylib = $$(shell $(RUSTC) --crate-file-name --lib $$(_rust_crate_lib))
.PHONY : $$(_rust_crate_name)
$$(_rust_crate_name) : $$(_rust_crate_dylib)
$$(_rust_crate_dylib) : $$(_rust_crate_lib)
$$(RUSTC) $$(RUSTFLAGS) --dep-info --lib $$<
-include $$(patsubst %.rs,%.d,$$(_rust_crate_lib))
ifneq ($$(wildcard $$(_rust_crate_test)),"")
.PHONY : check-$$(_rust_crate_name)
check-$$(_rust_crate_name): $$(_rust_crate_name)-test
./$$(_rust_crate_name)-test
$$(_rust_crate_name)-test : $$(_rust_crate_test)
$$(RUSTC) $$(RUSTFLAGS) --dep-info --test $$< -o $$@
-include $$(patsubst %.rs,%.d,$$(_rust_crate_test))
endif
endef
No more nasty sed scripts necessary, but of course, the crate hash is still computable if you want to do it yourself for some reason.
http://metajack.im/2013/12/19/building-rust-code--using-make-part-2/
|
Chris Cooper: Release engineering holiday coverage |
Mozilla is graciously giving its staff a two-week break over the holidays. What does this mean for service groups like release engineering?
We too will be away spending time with our families, but we will also continue to monitor the general health of the continuous integration infrastructure. If something happens that knocks an entire platform or datacenter offline, we will stand things back up, but we won’t be worrying about regular day-to-day issues like rebooting individual slaves or fulfilling loan requests.
Barring a chemspill, we also won’t be producing releases over the two-week span, with the exception of Nightly and Aurora daily releases which should continue to happily hum along.
Mozilla staff know how to get in connect with release engineering should it become necessary. For other Mozillians, your best bet is to contact us in the #releng channel on IRC. Ping coop (that’s me), catlee, or hwine if necessary, but please be patient. There may be eggnog involved.
http://coop.deadsquid.com/2013/12/release-engineering-holiday-coverage/
|
David Boswell: A great Community Builders meetup |
Last week over 50 staff and volunteers got together in San Francisco for a Community Builders meetup. The goal was to create plans for 2014 for how to support all community building efforts across Mozilla.
We organized around a set of tracks for systems and data, pathways, education and culture, recognition, and events. Each track focused on creating concrete action plans for next year and then we shared this out through a brown bag at the end of the week.
Many people worked hard to make this a success and I’d like to thank everyone who planned for this event and thank everyone who took part. In particular, I’d like to thank people who took part remotely and dialed in from all over the world during all sorts of different local times.
http://davidwboswell.wordpress.com/2013/12/18/a-great-community-builders-meetup/
|
Mitchell Baker: Netscape, License, Me |
Yesterday I came across the image of the launch day version of Netscape Navigator 1.0 – the first commercial browser that set the World Wide Web on fire, and caused the explosion of Internet technology into everyday life. Here’s an image of an early info Netscape provided — how to click a link, find things in that era, etc. Some fun history of the early, early World Wide Web. It’s so early that the list of search engines does not predates Google.
The image has a link labeled “LICENSE.” I found myself trying to click on the link. Silly, but still I wanted to see it. I wrote the license that link used to point to. I wrote every end-user license in Netscape’s products for many years, until the mighty Liz Compton took over. The licenses were complicated. They reflected something new — free product. Today we are used to getting consumer grade software for free, but Netscape was a pioneer. Netscape Navigator was free until the 1.0 version, and then they were free to charitable organizations. (This change was quite controversial among Netscape employees; I was not the decision-maker.) That made for complicated business terms and license terms. We had long negotiations with organizations that supplied code we integrated, explaining to them why Netscape would not pay them for every copy distributed. Explaining that the software was sometimes given away led to astonishment at first, and long negotiating sessions. I was responsible for all these negotiations with external vendors of software bits as well, so at least I knew how important it was.
One time I had to rewrite the license because our installer program had a length limit. I think that’s when we combine the licenses for the free and the paid versions into one document. Perhaps that was a good forcing function to shorter licensing terms, but it did require the business owners to take some risk with less specific language.
All these licenses were training for writing the Mozilla Public License 1.0 (now superceded by the 2.0 version). I see the MPL as the highlight of my time in the licensing world. I had help, including Liz and Harvey Anderson, both now with Mozilla. Even so, I “held the pen” and by the time I was done I had memorized almost every clause. Harvey had a big role in the patent pieces of the 1.1 license, which may have been the first open source/free software license to have a patent defense clause. It’s the first I know of so far, and I know we didn’t work from examples, so at least it was an original creation. (Ironically, original creation is not a patent defense although it is for copyright infringement.)
The idea of Mozilla was announced on January 22, and the project launched March 31, 1998. I wrote the MPL within that period, as the engineering team got ready for the release and we all worked to figure out how the first iteration of Mozilla would work. A bunch of today’s Mozillians have stories of that time. Many peole told us a license couldn’t be created, let alone in 2+ months, but those of us at Netscape just went ahead and did it. We had public review via newsgroup — appropriately called 331. If anyone has archives of that newsgroup I would love to get a copy. Once again, a part of Mozilla’s history predates the Internet Archive’s Wayback Machine.
(As a side note, the wondrous Internet Archive suffered a fire which damaged its building and its digitizing materials. The fund-raising campaign to support rebuilding is underway. Mozilla is contributing to this invaluable asset and we hope to see the Internet Archive fully restored as soon as possible.)
I still wish I could click that “LICENSE” link … “-)
https://blog.lizardwrangler.com/2013/12/18/netscape-license-me/
|
John O'Duinn: AOSA(vol2) and Mozilla’s Release Engineering: now in Russian! |
Mozilla’s Release Engineering was part of “The Architecture of Open Source Applications (vol2)” published in paperback in May2012 and then as electronic downloads from Amazon and Barnes&Noble in Sept2012. Earlier this week, Rail was delighted to discover that the book has now been translated into Russian. It is very cool to see this.
As best as I can tell, this translation work was led by А. Панин (A. Panin), and they did a great job. Even taking the time to recreate the images with embedded translated text. Tricky hard work, and very very great to see. Thanks to Mr Panin for making this happen.
You can download the entire book, or just the Mozilla RelEng portion. (As always, proceeds from book sales go to Amnesty International.)
This makes me wonder – are there any other translations, or translations-in-progress, out there?
http://oduinn.com/blog/2013/12/18/aosavol2-and-mozillas-release-engineering-now-in-russian/
|
Michael Kaply: Changing Focus |
I was watching an interview with Robert D. Smith the other day, and he said something that really struck me. He said you should be generous with things that aren’t your primary income source, but you shouldn’t feel bad charging for your core business. His example was that a heart surgeon might gives speeches or advice for free, but generally doesn’t do heart surgery for free.
When it comes to customizing and deploying Firefox, I’ve been giving lots of help and advice with the expectation that folks would hire me as a consultant to help with their business needs. That hasn’t really happened though, so enterprise really doesn’t provide much income for me at all. My primary business is building add-ons for Firefox, Chrome and Safari and I’ve been successful at doing that.
At the same time, the CCK Wizard has been downloaded almost 100,000 times. Thousands of people use the tools that I build and look to my blog for information about customizing Firefox.
I love helping people with Firefox, but my time is limited. So I’ve decided to leverage my 15+ years of Firefox experience and create a consulting service around enterprise Firefox.
Here’s my plan.
As of January 1, 2014, I am introducing paid support for the CCK2 and the CCK Wizard.
There will be three support levels: free, basic and premium. (The CCK2 and CCK Wizard software will remain free.)
For free and basic support levels, all issues will come through cck2.freshdesk.com. Premium support subscribers will have the additional ability to submit confidential issues to me directly. Anyone will be able to open defects or participate in discussions, but the only way to guarantee any level of support is to purchase a support package.
My goal is for enterprise Firefox to become the primary focus of my business and maybe even my full time business. I hope you’ll support me in this endeavor.
You can get full details at the CCK2 Support Page.
|
Brendan Eich: ORBX.js and related news |
I’m pleased to report that OTOY today has announced good news about ORBX.js and the Amazon Web Services ORBX and OctaneCloud AMIs (Amazon Machine Instances, pronounced “AHmees” — who knew?), based on terrific adoption and developer interest:
The deeper meaning here, in my view: a great rift emerged between CPU and GPU in the ’90s, where serial old x86 instruction set compatibility seemed to matter (remember shrink-wrap software?). The need for speed with binary compatibility begot big, power-hungry, superscalar CPUs, while from the SGI diaspora, the GPU went massively parallel.
One consequence of the rift: the rise of ARM on mobile, where binary compatibility did not and does not matter, but power efficiency does.
This rift may yet be healed, and in a way that avoids too much custom hardware (or else we will have to rely on FPGA-on-a-chip).
With enough homogeneity and parallel processing power, always-evolving video codecs, 3D model asset streams, and undreamed-of combinations should be feasible to implement in downloadable, power-efficient, safe code. Perhaps we can even one day kill off some of the video codec patent monsters that are currently burned into silicon.
More to come in the new year; this is just another happy rolling thunder update.
/be
|
Pete Moore: Weekly review 2013-12-18 |
Achievements
Bug 905742 - Provide B2G Emulator builds for Darwin x86
This is the main bug we are tracking progress on. You can read the bug for more detail, but essentially, we are now in the process of creating DMGs in puppet, following the wiki guide provided by dustin.
We have binary packages for: cmake, gcc, gmp, gnutar, gnupg, libmpc and mpfr.
We also have scripts for generating the binary packages.
All our work is tracked here: https://github.com/petemoore/b2g_emulator_build_darwin
Bug 949091 - B2G Emulator: Duplicate symbol / dylib1.o linking errors in Mac OS X when building
We discovered this error when building c++ code using gnu gcc, and spoke with :marshall_law who provided a fix for this which got pushed to the emulator fix git repository.
Bug 947209 - Auto-create bugzilla tracking bugs for machines
I raised this bug after having to manually create a tracking bug for a loan machine (we are now using two machines).
Bug 947219 - Sync data from inventory tool to slavealloc
I raised this bug when I discovered data is not auto-synced between these two data stores.
We got a fix for this problem, tested it, got a reviewer, and successfully pushed the fix to production.
Bug 942219 - Wrong homebrew url in bootstrap-mac.sh
We got a fix for the problem, tested it, got it reviewed, and managed to push to production.
Other
I will be on leave from the end of today (Wed Dec 18) until I return on Thu 23 January!!
All activities around darwin emulator builds have been worked on with Simone, so there was no transition to perform.
|
Byron Jones: happy bmo push day! |
the following changes have been pushed to bugzilla.mozilla.org:
discuss these changes on mozilla.tools.bmo.
http://globau.wordpress.com/2013/12/18/happy-bmo-push-day-77/
|
Jesse Ruderman: Customizing the Mozilla Manifesto |
I have mixed feelings about requiring Mozillians to “agree” to the Mozilla Manifesto. I get the impression that many volunteers aren’t fond of “commercial involvement” (9). Firefox development often does not live up to the ideals of absolute security (4) or transparency (8), so we’d be asking new contributors to commit to behavior for which they may have little support.
Meanwhile, the manifesto is oddly silent on two issues that many Mozillians care about deeply. First, it says little about privacy. “Shaping your own experience on the Internet” (5) suggests control over customized ads, but not control over tracking by advertisers or governments.
Second, the manifesto does not adequately address removing barriers to contribution or promoting inclusiveness in community processes. The relevant principles (6, 8) are worded as vague beliefs rather than strong values. Compare with my favorite part of the Ada Initiative FAQ:
“Open technology and culture are shaping the future of global society. If we want that society to be socially just and to serve the interests of all people, [all kinds of people] must be involved in its creation and organization.”
Rather than asking each Mozillian to agree to the entire manifesto, let’s instead encourage everyone to Likert the 10 existing principles and add a few of their own.
Indicating how you feel about each principle is more memorable than clicking “Agree” once. Each Mozillian would have a personal version of the Manifesto to remind them what drives them to contribute. Such a survey could also lead to better understanding of the community and suggest improvements to the Manifesto.
http://www.squarefree.com/2013/12/17/customizing-the-mozilla-manifesto/
|
Justin Crawford: A new Mozillians.org signup process |
I previously wrote about some issues with the Mozillians.org authorization system. In a nutshell: The language we use to talk about signing up for (“vouching”) and accessing the platform through the API (“corporate vs. consumer”) doesn’t match our present and future needs, and also doesn’t match some of our recent practices. This disconnect has a variety of problematic ramifications. We want to fix it.
The resolution for these dual concerns is related, but we don’t need to resolve them simultaneously. Below, I describe a proposal for resolving concerns related to signing up for the platform. Many of these ideas came from williamr, jmenon, davidwboswell, giorgos, and others across Mozilla.
The problem we need to resolve is ambiguity about what it means to have an account in Mozillians.org. And, with a nod to Mozilla’s ambitious plans for community building, we need to resolve this problem in a way that makes it easy for the right people to join Mozillians.org.
Goal: Eliminate confusion about what having an account in Mozillians.org means. Make it easy for the right people to join Mozillians.org.
Those two requirements are quite complex. Opinions differ about what it means to be a Mozillian, and about how that relates to the systems that a Mozillian might join. We reached out to the community in a variety of forums to help us understand the scope of this conversation (here and here, for example). After discussing for several months, we believe the community has provided sufficient guidance for us to write code. Specifically, the community said (to use Mitchell Baker’s words),
‘[We need] to be inclusive, and provide welcome, encouragement and legitimacy to people across a range of different levels of engagement. At the same
time, we want a way to identify the set of people who are actively committed and engaged in a community of shared effort. A single “yes/no” decision — yes, you’re a Mozillian, or “no, you’re not” can’t capture all of this well.’
It’s clear that being a Mozillian is a journey. In order to support this journey, we want people who are just starting out to have access to a basic set of resources within Mozilla’s contributor ecosystem.
Mozillians.org is in a position to provide this basic level of service; for example, having an account in Mozillians.org allows Mozillians to connect with one another, lets them access certain protected resources, and makes possible a unified view of an individual’s contributions across myriad contribution pathways. Therefore, we want to build a Mozillians.org signup process that allows people to join Mozillians.org as soon as possible — at the beginning of their journey.
We want to build a Mozillians.org signup process that allows people to join Mozillians.org as soon as possible — at the beginning of their journey.
However, not just anyone can join. Mozillians do share certain characteristics and we want our signup process to capture these. The community has converged around a small set of criteria that distinguish a Mozillian. According to that consensus, in order to be a Mozillian, someone should…
We can capture all of these criteria in a signup process. In other words, we can build a harmonic coherence, building the community’s definition of Mozillian right into Mozillians.org.
Obligatory doge graphic
We’ll do this by replacing the current signup process, which depends on a vouching step, with a signup process driven entirely by invitations. Here are the specific features we propose to implement in the first iteration of this work:
Together, these features address the overarching goal of this effort because they clarify the makeup of our community. The new interactions and language clearly explain that Mozillians.org relies on the good judgment of each community member, and can grow organically based on the actions of any existing member.
These features also address the criteria that define a Mozillian:
In the future, we can imagine extending this functionality in a few ways:
We are eager to hear feedback about this proposal because we intend to start coding a new signup process in early 2014. Please reach out in the developer’s mailing list or in the comments.
http://hoosteeno.com/2013/12/17/a-new-mozillians-org-signup-process/
|
Sriram Ramasubramanian: DroidCon India ’13 |
Last month I presented about “Optimizing UI Performance in Android Apps” at DroidCon India. The event was organized well by the hasgeek folks. It was a great pleasure to present to Bangaloreans — having worked there for three years! There were a lot of startups solving really big problems in Android. One of them had a medical app with 24 different graphs to be shown. He wanted to zoom in and out of any of those, without causing OOMs in bitmap. The other group worked on a Ski resort map. They had huge bitmaps, one superimposed over another, for different Ski routes. And another app had a ton of emoji to be shown without hitting the disk for each emoji. There were few kids out of school jumping into Android development before joining a big company. Few were interesting in joining startups and consultancies right out of school. Overall it was a great experience altogether.
Here’s a link to the slides and a video of the talk.
http://sriramramani.wordpress.com/2013/12/17/droidcon-india-13/
|