Last week I attended a work seminar on discovering your personal strengths and how to identify and curtail stress behaviour. Let me just give the summary first:
Yes, it was incredibly useful, and I'd urge you to do something similar if you haven't yet.Know yourself
The main point is to learn what you're good at, so that you can focus your efforts into further developing skills that fall in categories related to where you are at your strongest.
Yes, you might like doing a million different things, but if you really want to develop yourself, find out which few you're really going to be good at, and exploit that. Not necessarily give up on the others, just make sure you focus on the ones that really come to you naturally.
At the same time, know how you react when you get driven into a corner. Some of us are naturals at personal development, most of us are not, and the great thing about attending a seminar like this is that you get exposed to some of the psychology behind a few major generic personalities. For instance, here's my list of "strengths", spread over two categories:
- Input: "you crave to know more, and like to collect information and archive it".
- Learner: "you have a great desire to learn and continuously improve. In particular, learning, rather than the outcome, excites you".
- Intellection: "you are characterized by your intellectual activity. you're introspective, and appreciate intellectual discussions".
- Relator: "you enjoy building close relationships, and find deep satisfaction in working hard with friends to achieve goals".
- Connectedness: "you think all things are connected and don't believe in coincidence. almost every event has a reason".
And here's the thing: based on their simple definitions, not all of these strengths make a lot of sense. Thankfully, there are individualised descriptions of what each of these strengths mean, and so things start to make a lot more sense, and rather than "fortune cookie" information, one can actually learn something meaningful.Meaningful descriptors
The seminar I attended used the Clifton Strengthsfinder 2.0 test, based on data by Gallup gathered over quite a few years from over 100,000 participants. I like science, and if this data is going to say something "about me", then that's at least a decent sample size.
No, of course the predictions won't be perfect, but it'll be good enough to act as starting point to acknowledge your own strengths and personality type, and exploit the strengths while working on minimizing the reactionary tendencies. So: who am I?Strategic thinking: Input
I like information. I like learning new things, and learning about new things, but I don't particularly care about archiving, because I trust my brain to do that for me without having to bother with it. So what does "input" really mean?
Chances are good that you can simplify the most complex, convoluted, or intricate procedure. People usually rely on you to offer clear and easy-to-comprehend explanations. Driven by your talents, you may notice that certain people turn to you for guidance. Maybe your willingness to share the knowledge you have gained over the years partially explains the fondness they have for you. Some individuals might have benefited from what you have read, observed, or experienced. It’s very likely that you frequently use academic-sounding words to talk about your ideas or areas of expertise. You intentionally spend time broadening your vocabulary by looking up words in the dictionary and committing their meanings to memory. By nature, you occasionally combine your fascination for reading with your ability to figure out what sets specific individuals apart from everyone else. You might discover the things that interest someone. Then you may read more about these topics. Perhaps you aim to collect insights that inspire the person to take advantage of his or her one-of-akind talents, knowledge, and/or skills. Because of your strengths, you might gather ideas and information from reading publications that keep you up to date on particular types of current events. What you choose to peruse — that is, examine studiously — may reflect some of your personal or professional interests.
That makes a bit more sense than the generic summary. It also offers far more footholds when it comes to aspects of this strength that can be relied or built on.Strategic thinking: Learner
I won't lie: I liked seeing this strength. I do very much enjoy learning new things, and seeing this as one of my strengths was basically one of those "yep, I knew it" moments. However, "I like to learn new things" is a pretty generic strength, so seeing the much bigger analysis was quite useful:
Instinctively, you endorse the importance of acquiring additional knowledge and gaining new skills. You regard education as an ongoing activity. It’s very likely that you occasionally collect bits and pieces of information. At the time, the value of this material may not be apparent. In specific cases, you have found it useful to turn to some specialists for help. Perhaps these individuals can provide you with enough direction so you can ask some questions, render a few decisions, or try to map courses of action without upsetting anyone in the process. You avoid angering certain people by consulting with them before doing anything. Driven by your talents, you may long to gather certain types of information about specific individuals. Perhaps your “need to know” is rarely satisfied. The more facts you gather, the easier it might be for you to understand someone’s strengths, limitations, interests, likes, dislikes, or goals. You might be inclined to study human beings one by one. To some degree, your ongoing observations of selected individuals provide you with interesting insights into human nature. By nature, you intentionally include uncommon, highly technical, or sophisticated words in your vocabulary. You realize that language is a form of knowledge that gives you an upper hand — that is, controlling power — in conversations, debates, or discussions. It quickly establishes you as an authority figure in listeners’ minds. First, you capture their attention. Then you take charge of events, projects, meetings, or problem solving. Chances are good that you may be a solo performer. You might be determined to broaden your knowledge or acquire new skills. Perhaps you are drawn to the process of education.
And there you have it. Pretty much all of this rings true. And yes, on their own each of these phrases sound like a horoscope, but it's not the individual phrases that form the strength, it's the collection of all of them, applicable to this person.
I'm okay with this.Strategic thinking: Intellection
This strength feels a little weird, because it's hard to go "why yes, I am intellectual" and not come off smug. The main problem is that "intellectual" and "smart" are often treated as the same thing, and in this particular case, they're not. I could give lots of examples, but instead it just makes far more sense to let the snippets do the talking:
Chances are good that you sometimes wish you could switch off your active brain. Even so, you may enjoy your time alone as you ponder ideas. Perhaps you want to test whether they make sense. Because of your strengths, you may be selective about the types of books or publications you read. They might contain information or tips that you can share with individuals you are training. Perhaps imparting knowledge, talking about your experiences, or passing along your skills gives you a certain degree of satisfaction. By nature, you may find it easier to befriend certain types of people if they tell you what they want to accomplish. Knowing that much, you might read some books, journals, newspapers, correspondence, or Internet sites to broaden your knowledge about their interests. When you can share information that helps people move closer to their goals, perhaps you can begin to understand each other a little better. It’s very likely that you eagerly welcome opportunities to think out loud about ideas, theories, or philosophies. You derive pleasure from conversations that force you to ponder matters that exist only in the realm of thought, not in reality. Driven by your talents, you sometimes delight in having your very own tasks to perform. Perhaps you like to solo because it gives you quiet time to reflect on what you think or feel. Maybe you consider what you have done, are doing, or can do better.Relationship building: Relator
This one confused me, because while I like deep relationships, I'm perfectly fine with shallow ones, too. The generic description didn't seem to match at all, but the detailed one certainly did:
By nature, you are naturally open and honest about who you are, what you have done, what you can do, and what you cannot do. Your straightforward explanations and stories help listeners see you as you see yourself. You reveal your strengths and limitations. You are forthright and plainspoken. People generally seek your company and want to work with you. Many are impelled to move into action by your words and examples. It’s very likely that you periodically are sought out by people whom you have befriended. They may trust you when you have taken time to know them individually. This may partially explain why certain people come back again and again for ideas or suggestions. They might realize you try to tailor your words of wisdom to fit their unique situations, needs, strengths, limitations, goals, or personalities. Driven by your talents, you may be convinced that you are measuring up to your potential. Perhaps you know when you are doing your best work or earning the highest grades you possibly can. Chances are good that you occasionally tell yourself that you are an effective mentor or trainer. Perhaps individuals benefit from the investment you make in them. Because of your strengths, you might do your best training after you become well-acquainted with someone. Perhaps you want to discover each individual’s unique talents, work style, goals, motivations, or interests. Maybe these insights tell you what suggestions to make or what tips to offer during coaching sessions.
In fact, this very blog post is essentially proof of how true this assessment is: I'm right now telling you about something that a lot of people would consider pretty personal, and that last bit pretty much underlines how I even started this post: learning about different personalities and strengths, and how to work with those in oneself and other people, is fascinating, as well as functionally useful.Relationship Building: Connectedness
And this one was a genuine surprise, at least based on the generic descriptions. It sounds very much like a "faith in the oneness of all things", which really doesn't describe my take on matters at all. I believe in a quantum universe (at least, for now. Physics is still developing), and while I don't believe in "coincidence", I also don't analyse things from just one perspective, and so the notion of "a coincidence" doesn't even make sense to me. There are so many different perspectives on single events that are all simultaneously in effect that even if you'd pretend there was a coincidence in one of those, that same coincidence would vanish in others. This strength felt like nonsense. But then this more personalised description actually made it make sense:
By nature, you may get to know people individually in your quest to gain wisdom. Discovering the qualities that distinguish someone from everyone else might be an essential aspect of your search for truth. Driven by your talents, you might be fascinated with certain ideas, policies, or philosophies that affect human beings around the world. Because of your strengths, you may be able to accept unpredictable events in your life on the basis of sheer faith. Perhaps you sense there is a force greater than you at work in the world. Occasionally you can live with not knowing the exact reason why something good or bad happened to you and not to someone else. Chances are good that you sometimes think like a detective. You might search for and find obvious and not-so-obvious clues. You might determine which ones link together. Now and then, you notice gaps in your investigation. Some of these cannot be explained using reason alone. You may feel comfortable accepting what is unknown and unknowable. Why? To some extent, you trust that everything, everyone, and every action is somehow intertwined. Instinctively, you may be determined to make the acquaintance of certain individuals you identify as seekers of truth. Perhaps you are attracted to people who ponder philosophical questions such as “What is the meaning of life?” or “What is beauty?” or “What constitutes wisdom?” or “Why do bad things happen to good people?” or “Why should ordinary people like me even ask these kinds of questions?”
Reading this, it basically reads as a description of being a university student who's taking a masters in A.I. which happens to be exactly who I was, and whose intellectual inheritance I still live today.Weaknesses: the reactionary side of things
For the purposes of the seminar, when people get put on the spot, and stressed to a breaking point, the behaviour they might display is broadly categorised in three possible ways:
- Complying: giving away the control over the situation and taking it from there.
- Protecting: walking away from the situation to protect oneself.
- Controlling: going into "getting shit done" mode and steamrolling anyone who doesn't do so as well.
Those are just words with short descriptors, and people often enough display more than one type of behaviour, depending on the situation. However, I know myself reasonably well in this respect, and I'm virtually always protecting:
I will turn off any emotional attachment, and deal with problems in what is best described as "the vulcan way". I've certainly been abrasively critical in the past often enough for it to rub people the wrong way, and I've been trying to get better at not being abrasive, but a seminar like this is a great supplement to introspection: it puts what you sort of already thought into a wider perspective, and most importantly gives you insight into how the way you behave under stress will affect others who are also operating under stress.
If I'm stressed, and the person I'm dealing with is stressed as well (and for whatever reason. Not strictly work), then if they're of a complying nature, we're going to have problems. Because they'll want a resolution, and I'll be offering criticism without solutions. That won't get us anywhere, except "more stuck". Similarly, if they're controlling, they'll be coming up with what solution works, and I'll just shoot it right back down. And that's just the "practical" result, emotionally there's a lot of potential for resentment both ways, and things can get very nasty."So tell us some of your strengths..."
You know that question you get at job interviews, where they want to know what your strengths and weaknesses are? This is what they're talking about. This is why I'd recommend everyone to take a seminar like this even if you're between jobs, or even if you've yet to start on your first one. There's "knowing what you're good at", and there's "knowing the strengths that you can build on and exploit", and they're two different things. The first most people develop naturally, by virtue of just doing what they do. The second, everyone can use some help with.
It also lets you know what you're not. That sounds a little weird, because there's an infinite world of infinite possibilities out there, but there're broadly speaking four categories of personalities and strengths that you want as part of an effective team, and a team made entirely of "learners" isn't going to be very useful. Fun, probably, but not something that makes business sense.
I fall in the strategic thinking and relationship building categories. That means that if I'm put on a team, my contribution plays off of having other people with different skills: people with execution skills to keep us on track and meet deadlines, and people with influence skills to get the most out of all the team members as well as facilitate negotiations within the team. Also, having a good spread of different "reactionary" behaviours helps to make sure no one "agrees to be stuck in a rut". Obviously no one likes being stuck, but if we're all the same kind of reactionaries, things go real bad, real fast. Much faster than if there's a good spread.The take-home message
For me, the take-home message from this seminar was that it's really useful to do a thing like this at least once, even if you don't have a job right now, or you think you know yourself: if you've never done a personal strengths test before then chances are good you think you know what you're good at, and you might know what makes your temper-self so problematic, but there is great value in seeing things affirmed, or even being shown that there are parts of you that you never thought about, but ring very close to home: knowing yourself is not just something that helps you, it also helps others work, or just be, with you.
I've been paired up with a "buddy", and we'll be holding each other accountable for the action plan we've drawn up on how to work on our weaknesses while also trying to focus on what we think are our most exploitable strengths. That probably sounds pretty lame, but at the same time, it's two people being committed to helping each other better themselves in a "no judging" relationship.
That's a pretty sweet outcome for a seminar called "Leadership Discovery".
As per the recent Status Meeting, 2.35 will be the next release. So 2.33.x and 2.34 won’t be spun/released.
The process of getting 2.35 done is what we’re working on but there are a few bits and pieces still missing. I’ll update this blog as soon as I get a chance to get those pieces jiving with what I have.
Up until recently, anytime you pushed a patch series to MozReview, a single attachment would be created on the bug associated with the push.
That single attachment would link to the “parent” or “root” review request, which contains the folded diff of all commits.
We noticed a lot of MozReview users were (rightfully) confused about this mapping from Bugzilla to MozReview. It was not at all obvious that Ship It on the parent review request would cause the attachment on Bugzilla to be r+’d. Consequently, reviewers used a number of workarounds, including, but not limited to:
- Manually setting the r+ or r- flags in Bugzilla for the MozReview attachments
- Marking Ship It on the child review requests, and letting the reviewee take care of setting the reviewer flags in the commit message
- Just writing “r+” in a MozReview comment
Anyhow, this model wasn’t great, and caused a lot of confusion.
So it’s changed! Now, when you push to MozReview, there’s one attachment created for every commit in the push. That means that when different reviewers are set for different commits, that’s reflected in the Bugzilla attachments, and when those reviewers mark “Ship It” on a child commit, that’s also reflected in an r+ on the associated Bugzilla attachment!
I think this makes quite a bit more sense. Hopefully you do too!
I’m on vacation this week, but the show must go on! So I pre-recorded a shorter episode of The Joy of Coding last Friday.
I demo the tool, and then I explain how it works. After I finished the episode, I pushed to repository to GitHub, and you can check that out right here.
So I’ll see you next week with a full length episode! Take care!
Which, several times, I mistakenly refer to as the 15th episode, and not the 16th. Whoops. ↩
Common (excluding Website bugs)-specific: (23)
- Fixed: 768207 – Make the cache checkbox default-on in the new calendar dialog
- Fixed: 1049591 – Fix lots of strict warnings
- Fixed: 1086573 – Lightning and Thunderbird disagree about timezone support in ics files
- Fixed: 1099592 – Make JS callers of ios.newChannel call ios.newChannel2 in calendar/
- Fixed: 1149423 – Add Windows timezone names to list of aliases
- Fixed: 1151011 – Calendar events show up on wrong day when printing
- Fixed: 1151440 – Choose a color not responsive when creating a New calendar in Lightning 4.0b1
- Fixed: 1153327 – Run compare-locales with merging for Lightning
- Fixed: 1156015 – Email scheduling fails for recipients with URN id
- Fixed: 1158036 – Support sendMailTo for URN type attendees
- Fixed: 1159447 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_extract.js
- Fixed: 1159638 – Getter fails in calender-migration-dialog on first run after installation
- Fixed: 1159682 – Provide a more appropriate “learn more” page on integrated Lightning firstrun
- Fixed: 1159698 – Opt-out dialog has a button for “disable”, but actually the addon is removed
- Fixed: 1160728 – Unbreak Lightning 4.0b4 beta builds
- Fixed: 1162300 – TEST-UNEXPECTED-FAIL | xpcshell-libical.ini:calendar/test/unit/test_alarm.js | xpcshell return code: 0
- Fixed: 1163306 – Re-enable libical tests and disable ical.js in nightly builds when binary compatibility is back
- Fixed: 1165002 – Lightning broken, tries to load libical backend although “calendar.icaljs” defaults to “true”
- Fixed: 1165315 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_bug759324.js | xpcshell return code: 1 | ###!!! ASSERTION: Deprecated, use NewChannelFromURI2 providing loadInfo arguments!
- Fixed: 1165497 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_alarmservice.js | xpcshell return code: -11
- Fixed: 1165726 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/testBasicFunctionality.js | testBasicFunctionality.js::testSmokeTest
- Fixed: 1165728 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_bug494140.js | xpcshell return code: -11
Sunbird will no longer be actively developed by the Calendar team.
- Fixed: 401779 – Integrate Lightning Into Thunderbird by Default and Ship Thunderbird with Lightning Enabled
- Fixed: 717292 – Spell check language setting for subject and body not synchronized, but temporarily appears so when changing language and depending on focus (confusing ux)
- Fixed: 914225 – Support hotfix add-on in Thunderbird
- Fixed: 1025547 – newmailaccount/jquery.tmpl.js, line 123: reference to undefined property def
- Fixed: 1088975 – Answering mail with sendername containing encoded special chars and comma creates two “To”-entries
- Fixed: 1101237 – Remove distribution directory during install
- Fixed: 1109178 – Thunderbird OAuth implementation does not work with Evernote
- Fixed: 1110166 – Port |Bug 1102219 – Rename String.prototype.contains to String.prototype.includes| to comm-central
- Fixed: 1113097 – Fix misuse of fixIterator
- Fixed: 1130854 – Package Lightning with Thunderbird
- Fixed: 1131997 – Adapt for Debugger Server code for changes in bug 1059308
- Fixed: 1135291 – Update chat log entries added to Gloda since bug 955292 to use relative paths
- Fixed: 1135588 – New conversations get indexed twice by gloda, leading to duplicate search results
- Fixed: 1138154 – Plugins default to “always activate” in Thunderbird
- Fixed: 1142879 – [meta] track Mozilla-central (Core) issues that we want to have fixed in TB38
- Fixed: 1146698 – Chat Messages added to logs just before shutdown may not be indexed by gloda
- Fixed: 1148330 – Font indicator doesn’t update when cursor is placed in text where core returns sans-serif (Windows). Serif and monospace don’t work (Linux).
- Fixed: 1148512 – TEST-UNEXPECTED-FAIL | mailnews/imap/test/unit/test_dod.js | xpcshell return code: 0||1 | streamMessages – [streamMessages : 94] false == true | application crashed [@ mozalloc_abort(char const * const)]
- Fixed: 1149059 – splitter in compose window can be resized down to completely obscure composition area
- Fixed: 1151206 – Using a theme hides minimize, maximize and close button in composer window [Mac]
- Fixed: 1151475 – Remove use of expression closures in mail/
- Fixed: 1152299 – [autoconfig] Cosmetic changes for WEB.DE config
- Fixed: 1152706 – Upgrade to Correspondents column (combined To/From column) too agressive
- Fixed: 1152796 – chrome://messenger/content/folderDisplay.js, line 697: TypeError: this._savedColumnStates.correspondentCol is undefined
- Fixed: 1152926 – New mail sound preview doesn’t work for default system sound on Mac OS X
- Fixed: 1154737 – Permafail: TEST-UNEXPECTED-FAIL | toolkit/components/telemetry/tests/unit/test_TelemetryPing.js | xpcshell return code: 0
- Fixed: 1154747 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/session-store/test-session-store.js | test-session-store.js::test_message_pane_height_persistence
- Fixed: 1156669 – Trash folder duplication while using IMAP with localized TB
- Fixed: 1157236 – In-content dialogs: Port bug 1043612, bug 1148923 and bug 1141031 to TB
- Fixed: 1157649 – TEST-UNEXPECTED-FAIL | dom/push/test/xpcshell/test_clearAll_successful.js (and most other push tests)
- Fixed: 1158824 – Port bug 138009 to fix packaging errors | Missing file(s): bin/defaults/autoconfig/platform.js
- Fixed: 1159448 – Thunderbird ignores proxy settings on POP3S protocol
- Fixed: 1159627 – resource:///modules/dbViewWrapper.js, line 560: SyntaxError: unreachable code after return statement
- Fixed: 1159630 – components/glautocomp.js, line 155: SyntaxError: unreachable code after return statement
- Fixed: 1159676 – mailnews/mime/jsmime/test/test_custom_headers.js | run_next_test 0 – TypeError: _gRunningTest is undefined at /builds/slave/test/build/tests/xpcshell/head.js:1435 (and other jsmime tests)
- Fixed: 1159688 – After switching/changing the window layout, dragging the splitter between threadpane and messagepane can create gray/grey area/space (misplaced notificationbox)
- Fixed: 1159815 – Take bug 1154791 “Inline spell checker loses red underlines after a backspace is used – take two” in Thunderbird 38
- Fixed: 1159817 – Take “Bug 1100966 – Inline spell checker loses red underlines after a backspace is used” in Thunderbird 38
- Fixed: 1159834 – Consider taking “Bug 756984 – Changing location in editor doesn’t preserve the font when returning to end of text/line” in Thunderbird 38
- Fixed: 1159923 – Take bug 1140105 “Can’t query for a specific font face when the selection is collapsed” in TB 38
- Fixed: 1160105 – Fix strict mode warnings in protovis-r2.6-modded.js
- Fixed: 1160106 – “Searching…” spinner at the bottom of gloda search results never goes away
- Fixed: 1160114 – Strict mode warnings on faceted search
- Fixed: 1160805 – Missing Windows and Linux nightly builds, build step set props: previous_buildid fails
- Fixed: 1161162 – “Join Chat” doesn’t focus the newly joined MUC
- Fixed: 1162396 – Take bug 1140617 “Pasting an image loses the composition style” in TB38
- Fixed: 1163086 – Take bug 967494 “changing spellcheck language in one composition window affects all open and new compositions” in TB38
- Fixed: 1163299 – “TypeError: getBrowser(…) is null” in contentAreaClick with Lightning installed and started in calendar view
- Fixed: 1163343 – Incorrectly formatted error message “sending failed”
- Fixed: 1164415 – Error in comment for imapEnterServerPasswordPrompt
- Fixed: 1164658 – TypeError: Cc[‘@mozilla.org/weave/service;1’] is undefined at resource://gre/modules/FxAccountsWebChannel.jsm:227
- Fixed: 1164707 – missing toolkit_perfmonitoring.xpt in aurora builds
- Fixed: 1165152 – Take bug 1154894 in TB 38 branch: Disable test_plugin_default_state.js so Thunderbird can ship with plugins disabled by default
- Fixed: 1165320 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/notification/test-notification.js
MailNews Core-specific: (30)
- Fixed: 610533 – crash [@ nsMsgDatabase::GetSearchResultsTable(char const*, int, nsIMdbTable**)] with virtual folder
- Fixed: 745664 – Rename Address book aaa to aaa_test, delete another address book bbb, and renamed address book aaa_test will lose its name and appear deleted after restart (dataloss! involving localized names)
- Fixed: 777770 – get rid of nsVoidArray from /mailnews
- Fixed: 786141 – Use nsIFile.exists() instead of stat to check the existence of the file
- Fixed: 1069790 – Email addresses with parenthesis are not pretty-printed anymore
- Fixed: 1072611 – Ctrl+P not working from Composition’s Print Preview window
- Fixed: 1099587 – Make JS callers of ios.newChannel call ios.newChannel2 in mail/ and mailnews/
- Fixed: 1130248 – |To: “email@example.com” <firstname.lastname@example.org>| becomes |”email@example.com”@example.com| when I compose mail to it
- Fixed: 1138220 – some headers are not not properly capitalized
- Fixed: 1141446 – Behaviour of malformed rfc2047 encoded From message header inconsistent
- Fixed: 1143569 – User-agent error when posting to NNTP due to RFC5536 violation of Tb (user-agent header is folded just after user-agent:, “user-agent:[CRLF][SP]Mozilla…”)
- Fixed: 1144693 – Disable libnotify usage on Linux by default for new-mail notifications (doesn’t always work after bug 858919)
- Fixed: 1149320 – fix compile warnings in mailnews/extensions/
- Fixed: 1150891 – Port package-manifest.in changes from Bug 1115495 – Part 2: PAC generator for browsing and system wide proxy
- Fixed: 1151782 – Inputting 29th Feb as a birthday in the addressbook contact replaces it with 1st Mar.
- Fixed: 1152364 – crash in Address Book via nsAbBSDirectory::GetChildNodes nsCOMArrayEnumerator::operator new(unsigned int, nsCOMArray_base const&)
- Fixed: 1152989 – Account Manager Extensions broken in Thunderbird 37/38
- Fixed: 1154521 – jsmime fails on long references header and e-mail gets sent and stored in Sent without headers
- Fixed: 1155491 – Support autoconfig and manual config of gmail IMAP OAuth2 authentication
- Fixed: 1155952 – Nesting level does not match indentation
- Fixed: 1156691 – GUI “Edit filters”: Conditions/actions (for specfic accounts) not visible
- Fixed: 1156777 – nsParseMailbox.cpp:505:55: error: ‘do_QueryObject’ was not declared in this scope
- Fixed: 1158501 – Port bug 1039866 (metro code removal) and bug 1085557 (addition of socorro symbol upload API)
- Fixed: 1158751 – Port NO_JS_MANIFEST changes | mozbuild.frontend.reader.SandboxValidationError: calendar/base/backend/icaljs/moz.build
- Fixed: 1159255 – Build error: MSVC_ENABLE_PGO = True is not permitted to be used in mailnews/intl/moz.build
- Fixed: 1159626 – chrome://messenger/content/accountUtils.js, line 455: SyntaxError: unreachable code after return statement
- Fixed: 1160647 – Port |Bug 1159972 – Remove the fallible version of PL_DHashTableInit()| to comm-central
- Fixed: 1163347 – Don’t require scope in ispdb config for OAuth2
- Fixed: 1165737 – Fix usage of NS_LITERAL_CSTRING in mailnews, port Bug 1155963 to comm-central
- Fixed: 1166842 – Re-enable binary extensions for comm-central
A couple of years ago, I was part of a panel with the remarkable Evgeny Morozov, at an event hosted by the Museum of Vancouver. The event wasn’t remarkable, except that I ended up in a somewhat high-energy debate with Mr. Morozov, without particularly understanding why. He ascribed to me beliefs I didn’t hold, which made a rigorous intellectual argument (which I generally enjoy) quite elusive and baffling.
It took a follow-up discussion with my political theorist brother to elucidate it. In particular, he helped me realize that while for decades I’ve described myself as a technologist, depending on your definition of that word, I was misrepresenting myself. Starting with my first job in my mid teens, my career (modulo an academic side-trip) has essentially been to bring technological skills to bear on a situation. Using the word technologist to describe myself felt right, without much analysis. As my brother pointed out, using an academic lexicon, the word technologist can be used to mean “someone who thinks technology is the answer”. Using that definition, capital is to capitalist as technology is to technologist. Once I understood that, I realized why Mr. Morozov was arguing with me. He thought I believed in technologism, much like the way the New Yorker describes Marc Andreesen (I’m no Andreesen in many ways, but I do think he’d have been a better foil for Morozov). It also made me realize that he either didn’t understand what Mozilla is trying to do, or didn’t believe me/us.
Using that definition, I am not a technologist any more than I am a capitalist or a regulator[ist?]. I resist absolutes, as it seems to me blatantly obvious (and probably boring) that except for rhetorical/marketing purposes (such as Morozov’s), the choices which one should make when building or changing a system, at every scale from the individual to the society, must be thoughtfully balanced. This balance is hard to articulate and even harder to maintain, in a political environment which blurs subtlety and a network environment which amplifies differences.
It is in this balance that lies evolutionary progress. I have been re-re-watching The Wire, thinking about Baltimore. In season 3, one of the district commanders, sick of the status quo, tries to create a “free zone” for unimpeded drug dealing, an Amsterdam-in-Baltimore, in order to draw many of the associated social ills away from the rest of the district. In doing this, he uses his authority (and fearlessness, thanks to his impending retirement), and combines management techniques, marketing, and positive and negative incentives, to try fix a systemic social problem. I want more stories like that (especially less fictional ones).
I don’t believe that technology is “the answer,” just like police vans aren’t the answer. That said, ignoring the impact that technology can have on societal (or business!) challenges is just as silly as saying that technology holds the answer. Yes, technology choices are often political, and that’s just fine, especially if we invite non-techies to help make those political decisions. When it comes to driving behavioral change, tech is a tool like many others, from empathy and consumer marketing to capital and incentives. Let’s understand and use all of these tools.
Human psychology explains why marketing works, and marketing has definitely been used for silly reasons in the past. Still, if part of your goal involves getting people to do something, refusing to use human psychology to further your well-intentioned outcome is cutting your nose to spite your face. Similarly, it’s unarguable that those who wield gigantic capital have had outsize influence in our society, and some of them are sociopaths. Still, refusing to consider how one could use capital and incentives to drive behavior is an equally flawed limit. Lastly, obviously, technology can be dehumanizing. But technology can also, if wielded thoughtfully, be liberating. Each has power, and power isn’t intrinsically evil.1+1+1 = magic
Tech companies of the last decade have shown the outsize impact that these three disciplines, when wielded in coordinated fashion, can have on the world. Uber’s success isn’t due to smart deployment of tech, psychology or capital. Uber’s success is due to a brilliant combination of all three (and more). I’ll leave it history to figure out whether Uber’s impact will be net positive or negative based on metrics that I care about, but the magical quality that combination unleashed is awe inspiring.
This effective combination of disciplines is a critical step which I think eludes many people and organizations, due to specialization without coordination. It is relatively clear how to become a better technologist or marketer. The ladder of capitalist success is equally straightforward. But figuring out how to blend those disciplines and unlock magic is elusive, both within a career path and within organizations.
I wonder if it’s possible to label this pursuit, in a gang-signal sort of way. Venture capitalists, marketers, and technologists all gain a lot by simply affiliating with these fields. I find any one of these dimensions deeply boring, and the combinations so much more provocative. Who’s with me and what do you call yourselves? Combinatorists? Alchemists?
You might have noticed that I had no “Things I’ve Learned This Week” post last week. Sorry about that – by the end of the week, I looked at my Evernote of “lessons from the week”, and it was empty. I’m certain I’d learned stuff, but I just failed to write it down. So I guess the lesson I learned last week was, always write down what you learn.How to make your mozilla-central Mercurial clone work faster
I like Mercurial. I also like Git, but recently, I’ve gotten pretty used to Mercurial.
One complaint I hear over and over (and I’m guilty of it myself sometimes), is that “Mercurial is slow”. I’ve even experienced that slowness during some of my Joy of Coding episodes.
This document did not exist when I first started working with Mercurial – back then, I was using mq or sometimes pbranch, and grumbling about how I missed Git.
But there is some gold in this document.
gps has been doing some killer work documenting best practices with Mercurial, and this document is one of the results of his labour.
watchman is a tool that some folks at Facebook wrote to monitor changes in a folder. hgwatchman is an extension for Mercurial that takes advantage of watchman for a repository, smartly precomputing a bunch of stuff when the folder changes so that when you fire a command, likehg status
It takes a fraction of the time it’d take without hgwatchman. A fraction.
Here’s how I set hgwatchman up on my MacBook (though you should probably go by the Mercurial for Mozillians doc as the official reference):
- Install watchman with brew: brew install watchman
- Clone the hgwatchman extension to some folder that you can easily remember and build it: hg clone https://bitbucket.org/facebook/hgwatchman cd hgwatchman make local
- Add the following lines to my user .hgrc: [extensions] hgwatchman = cloned-in-dir/hgwatchman/hgwatchman
- Make sure the extension is properly installed by running: hg help extensions
- hgwatchman should be listed under “enabled extensions”. If it didn’t work, keep in mind that you want to target the hgwatchman directory
- And then in my mozilla-central .hg/.hgrc: [watchman] mode = on
- Boom, you’re done!
Congratulations, hg should feel snappier now!
In Episode 15, we kept working on the same bug as the last two episodes – proxying the printing dialog on OS X to the parent process from the content process. At the end of Episode 14, we’d finished the serialization bits, and put in the infrastructure for deserialization. In this episode, we did the rest of the deserialization work.
And then we attempted to print a test page. And it worked!
We did it!
Then, we cleaned up the patches and posted them up for review. I had a lot of questions about my Objective-C++ stuff, specifically with regards to memory management (it seems as if some things in Objective-C++ are memory managed, and it’s not immediately obvious what that applies to). So I’ve requested review, and I hope to hear back from someone more experienced soon!
I also plugged a new show that’s starting up! If you’re a designer, and want to see how a designer at Mozilla does their work, you’ll love The Design Hour, by Ricardo Vazquez. His design chops are formidable, and he shows you exactly how he operates. It’s great!
Finally, I failed to mention that I’m on holiday next week, so I can’t stream live. I have, however, pre-recorded a shorter Episode 16, which should air at the right time slot next week. The show must go on!
Keeping Firefox zippy involves running performance tests on each push to make sure we’re not making Firefox slower.
How does that even work? This used to be a mystery. NO LONGER. jmaher lets you peek behind the curtain here in the first episode of Lost in Data!
In this episode, I kept working on the same bug as last week – proxying the print dialog from the content process on OS X. We actually finished the serialization bit, and started doing deserialization!
Hopefully, next episode we can polish off the deserialization and we’l be done. Fingers crossed!
Note that this episode was about 2 hours and 10 minutes, but the standard-definition recording up on Air Mozilla only plays for about 13 minutes and 5 seconds. Not too sure what’s going on there – we’ve filed a bug with the people who’ve encoded it. Hopefully, we’ll have the full episode up for standard-definition soon.
On Firefox Hello, we recently added the eslint linter to be run against the Hello code base. We started of with a minimal set of rules, just enough to get us something running. Now we’re working on enabling more rules.
Since we enabled it, I feel like I’m able to iterate faster on patches. For example, if just as I finish typing I see something like:
Now I think about it, I’m realising it has also helped reduced the amount of review nits on my patches – due to trivial formatting mistakes being caught automatically, e.g. trailing white-space or missing semi-colons.
Talking about reviews, as we’re running eslint on the Hello code, we just have to apply the patch, and run our tests, and we automatically get eslint output:
Hopefully our patch authors will be running eslint before uploading the patch anyway, but this is an additional test, and a few less things that we need to look at during review which helps speed up that cycle as well.
I’ve also put together a global config file for eslint (see below), that I use for outside of the Hello code, on the rest of the Firefox code base (and other projects). This is enough, that, when using it in my editor it gives me a reasonable amount of information about bad syntax, without complaining about everything.
I would definitely recommend giving it a try. My patches feel faster overall, and my test runs are for testing, not stupid-mistake catching!
Want more specific details about the setup and advantages? Read on…
You need to have eslint installed globally, or at least in your path, other than that, just follow the installation instructions given on the SublimeLinter page.
One configuration I change I did have to make to the global configuration:
- Select “Preferences” -> “Settings – More” -> “Syntax Specific – User”
- In the file that appears, set the configuration up as follows (or whatever suits you):
I’ve uploaded my global configuration to a gist, if it changes I’ll update it there. It isn’t intended to catch everything – there’s too many inconsistencies across the code base for that to be sensible at the moment. However, it does at least allow general syntax issues to be highlighted for most files – which is obviously useful in itself.
I haven’t yet tried running it across the whole code base via eslint on the command line – there seems to be some sort of configuration issue that is messing it up and I’ve not tracked it down yet.
Firefox Hello’s Configuration
The configuration files for Hello can be found in the mozilla-central source. There’s a few of these because we have both content and chrome code, and some of the content code is shared with a website that can be viewed by most browsers, and hence isn’t currently able to use all the es6 features, whereas the chrome code can. This is another thing that eslint is good for enforcing.
Our eslint configuration is evolving at the moment, as we enable more rules, which we’re tracking in this bug.
Had to deal with some network issues during this video – sorry if people were getting dropped frames during the live show! I have personally checked this recording, and almost all frames are there.
The only frames that are missing are the ones where I scramble around to connect to the wired network, which was boring anyhow.
In this episode, I worked on proxying the print dialog from the content process on OS X. It was a wild ride, and I learned quite a bit about Cocoa stuff. It was also a throwback to my very first episode, where I essentially did the same thing for Linux!
We’ll probably polish this off in the next episode, or in the episode after.
I actually discovered this during my most recent Joy of Coding episode – there is a static utility method to convert between native Cocoa NSStrings and Gecko nsAStrings – nsCocoaUtils::GetStringForNSString. Very handy, and works exactly as advertised.An “Attach to Process by pid” Keyboard Shortcut for XCode
I actually have colleague Garvan Keeley to thank for this one, and technically I learned this on April 24th. It was only this week that I remembered I had learned it!
When I’m debugging Firefox on OS X, I tend to use XCode, and I usually attach to Firefox after it has started running. I have to navigate some menus in order to bring up the dialog to attach to a process by pid, and I was getting tired of doing that over and over again.
So, as usual, I tweeted my frustration:
Dear lazyweb – is there an XCode keyboard shortcut for “Attach to Process” > “By Process Identifier (PID) or Name”? Mousing it blows.
— Mike Conley (@mike_conley) April 24, 2015
AND LO, THE INTERNET SPOKE BACK:
It seems small, but the savings in time for something that I do so frequently quickly adds up. And it always feels good to go faster!
During July I’ll be visiting family in Mongolia but I’ve also a few things that are very geeky that I want to do.
The first thing I want to do is plug the Ripe Atlas probes I have. It’s litle devices that look like that :
They enable anybody with a ripe atlas or ripe account to make measurements for dns queries and others. This helps making a global better internet. I have three of these probes I’d like to install. It’s good because last time I checked Mongolia didn’t have any active probe. These probes will also help Internet become better in Mongolia. I’ll need to buy some network cables before leaving because finding these in mongolia is going to be challenging. More on atlas at https://atlas.ripe.net/.
The second thing I intend to do is map Mongolia a bit better on two projects the first is related to Mozilla and maps gps coordinateswith wifi access point. Only a little part of The capital Ulaanbaatar is covered as per https://location.services.mozilla.com/map#11/47.8740/106.9485 I want this to be way more because having an open data source for this is important in the future. As mapping is my new thing I’ll probably edit Openstreetmap in order to make the urban parts of mongolia that I’ll visit way more usable on all the services that use OSM as a source of truth. There is already a project to map the capital city at http://hotosm.org/projects/mongolia_mapping_ulaanbaatar but I believe osm can server more than just 50% of mongolia’s population.
I got inspired to write this post by mu son this morning, look what he is doing at 17 months :
Thunderbird meeting notes 2015-05-05. NOON PT (Pacific). Check https://wiki.mozilla.org/Thunderbird/StatusMeetings for meeting time conversion, previous meeting notes and call-in detailsAttendees
aceman, aleth, Jorg K, merike, rkent, roland, wsmwk, MakeMyDay, rolandtanglaoAction items from last meetings
- (done) wsmwk to pat glandium
- (done) wsmwk to email hiro’s bug list to tb-planning
- (done) rkent to review tracking list http://mzl.la/1EOx9Tm
Critical bugs. Leave these here until they’re confirmed fixed. If confirmed, then remove.
- AMO compatibility bump! (is not going to happen)
- In general, the tracking-tb38 flag shows what are critical issues. In the next week or so, that list will be culled to only include true blockers for the Thunderbird 38 release. There will still be many.
- maildir UI: nothing more to do for UI, still want to land a patch for letting IMAP set this.
- gloda IM search regressions: mostly fixed, some db cleanup necessary for users of TB33+
- aleth landed a fix to stop duplicated entries from appearing, nhnt11 patch to clean up the databases of Aurora/Beta/Daily has landed and is awaiting uplift
removing from critical list/fixed:
- We need to decide on how to do release branching. I am uncertain whether Lightning integration requires this or not.
- –> We’ve created THUNDERBIRD_38_VERBRANCH on mozilla-release
- Lightning integration (below) really REALLY critical that we get this finished.
- –> Patches landed, testing beta 2015-04-30
- 31.6.0 shipped
- 38.0b3 shipped 2015-04-26 Sunday
- 38.0b4 shipped 2015-05-03 Sunday
- 38.0b5 (build Fri 5/8? when?)
- 38.0 on May 26?
- 31.7.0 2015-05-12+ Tues+
- As underpass has pointed out repeatedly (thanks for your patience!) , we need to rewrite / heavily modify the lightning articles on support.mozilla.org. let me know irc: rolandtanglao on #tb-support-crew or rtanglao AT mozilla.com OR simply start editing the articles
- We need to fill the “Learn More” page with content, possibly point it to something more specific bug 1159682
- Opt-out dialog: change “disable” to “remove” bug 1159698
- tracking bug for lightning 4.0 bug 1153752
- Thunderbird Events calendar created – send me your events to be added/corrections
- xml https://www.google.com/calendar/feeds/mozilla.com_707562313030%40resource.calendar.google.com/public/basic
- ical https://www.google.com/calendar/ical/mozilla.com_707562313030%40resource.calendar.google.com/public/basic.ics (For google calendar, on the google web page pick “Other Calendars”, “Add by URL”, paste in the ical link – enable email or sms reminders if you wish in Settings | Calendar)
- html https://www.google.com/calendar/embed?src=mozilla.com_707562313030%40resource.calendar.google.com
- Mail composition/spelling: bug 967494, bug 717292 (inline spell dictionary inconsistent), waiting for review by M Conley.
- Editor losing style after image paste: bug 1140617
- bug 1141446 – JSMIME regression, still awaiting final review
- Today looked at “double Trash” issue 1156669
- rail in releng seems to believe that we cannot overlap tb 31 and tb 38 and claims that was the previous practice, but Standard8 does not remember this the same way. At the moment I have been told that we cannot start building on the esr38 repo without disabling builds on esr31. This is still a developing story … until resolved I think we need to keep using comm-beta for TB 38 betas.
- we have a backlog of jsmime issues, jcranmer has been quite tied up with real life. Several of us have been trying to fix these, but we need reviews.
- Let’s review the critical tracking-38 bugs (29 at last count) http://mzl.la/1EOx9Tm
- thunderbird hotfix support – bug 914225 ready to land
— PLEASE INCLUDE YOUR NICK with your bullet item —aleth
Some testing/verification that chat logs are now being properly and completely indexed by gloda would be helpful, cf bug 1146698 (landed on c-c, a possible candidate for uplift).Support team
- Roland owes sumo kb article links for release notes. Hope to have stub articles ready today
- PLEASE PUT THE NEXT MEETING IN YOUR (LIGHTNING) CALENDAR
- Note – meeting notes must be copied from etherpad to wiki before 5AM CET next day so that they will go public in the meeting notes blog.
Have you been using Firefox Nightly and seen this big annoying spinner?
I hate that thing. I hate it.
And while we’re working on making the spinner itself less ugly, I’d like to eliminate, or at least reduce its presence to the absolute minimum.
How do I do that? Well, first, know your enemy.What does it even mean?
That big spinner means that the graphics part of Gecko hasn’t given us a frame yet to paint for this browser tab. That means we have nothing yet to show for the tab you’ve selected.
In the single-process Firefox that we ship today, this graphics operation of preparing a frame is something that Firefox will block on, so the tab will just not switch until the frame is ready. In fact, I’m pretty sure the whole browser will become unresponsive until the frame is ready.
With Electrolysis / multi-process Firefox, things are a bit different. The main browser process tells the content process, “Hey, I want to show the content associated with the tab that the user just selected”, and the content process computes what should be shown, and when the frame is ready, the parent process hears about it and the switch is complete. During that waiting time, the rest of the browser is still responsive – we do not block on it.
So there’s this window of time where the tab switch has been requested, and when the frame is ready.
During that window of time, we keep showing the currently selected tab. If, however, 300ms passes, and we still haven’t gotten a frame to paint, that’s when we show the big spinner.
So that’s what the big spinner means – we waited 300ms, and we still have no frame to draw to the screen.How bad is it?
I suspect it varies. I see the spinner a lot less on my Windows machine than on my MacBook, so I suspect that performance is somehow worse on OS X than on Windows. But that’s purely subjective. We’ve recently landed some Telemetry probes to try to get a better sense of how often the spinner is showing up, and how laggy our tab switching really is. Hopefully we’ll get some useful data out of that, and as we work to improve tab switch times, we’ll see improvement in our Telemetry numbers as well.Where is the badness coming from?
I also seem to see the spinner when I have “many” tabs open (~30), and have a build going on in the background (so my machine is under heavy load).
Maybe we’re just doing things inefficiently in the multi-process case. I recently landed profile markers for the Gecko Profiler for async tab switching, to help figure out what’s going on when I experience slow tab switch. Maybe there are optimizations we can make there.
One thing I’ve noticed is that there’s this function in the graphics layer, “ClientTiledLayerBuffer::ValidateTile”, that takes much, much longer in the content process than in the single-process case. I’ve filed a bug on that, and I’ll ask folks from the Graphics Team this week.How you can help
UPDATE (June 1, 2015): Getting profiles from Windows is currently broken because the symbol server appears to be busted. Any profiles from Windows machines will be useless until this bug is fixed. Alternatively, set profiler.symbolicationUrl to http://symbolapi.mocotoolsstaging.net in about:config.
If you’d like to help me find more potential causes, Profiles are very useful! NOTE – I don’t mean “user profiles”, as in, your bookmarks / customizations / history, etc, in the profile folder. I don’t mean this thing. I mean a performance profile.
A performance profile is a read-out of everything that Firefox / Gecko is doing over a particular span of time. When the profiler is running, Firefox / Gecko will record where the process is in the stack every 1ms or so. It’ll also record information about how long since it’s serviced the event loop, which helps us find jank.
To help, grab the Gecko Profiler add-on, make sure it’s enabled, and then dump a profile when you see the big spinner of doom. The interesting part will be between two markers, “AsyncTabSwitch:Start” and “AsyncTabSwitch:Finish”. There are also markers for when the parent process displays the spinner – “AsyncTabSwitch:SpinnerShown” and “AsyncTabSwitch:SpinnerHidden”. The interesting stuff, I believe, will be in the “Content” section of the profile between those markers. Here are more comprehensive instructions on using the Gecko Profiler add-on.
And here’s a video of me demonstrating how to use the profiler, and how to attach a profile to the bug where we’re working on improving tab switch times:
So hopefully we’ll get some useful data, and we can drive instances of this spinner into the ground.
I’d really like that.