text:
By default, OJS allows Reviewers to enter their review findings via a simple two-field review form: one field for Editor-only text, and one for both Authors and Editors. The Journal Manager can extend this functionality by making custom review forms.
The Journal Manager can associate a custom review form with a Journal Section so that it will be the default form for that section; if more than one form is active, the Editor will also be able to override the default form when a reviewer is assigned to a submission.
Locked Reviews: Any number of review forms can be created; however, review form edits and deletions can be committed only until the form has been put to use (specifically, when an editor assigns a reviewer to a submission, and mandates they use a custom review form). As soon as a form has been put to use, it becomes locked; this happens to ensure a permanent review record. A used review form can be deactivated and removed from the list of forms that can be used; it can also be duplicated by using the Copy action. Both actions are discussed below.
Creating a Review Form
To create a custom review form, the Journal Manager must click the Review Forms link from the Journal Management page, and then click the Create Review Form link at the bottom of the resulting page. A form title and description must be entered. On clicking the Save button the Journal Manager will be returned to the main Review Forms page, where the new form will now be listed.
Managing Review Forms
The Journal Manager will now have a number of options available from the Review Forms page for each review:
Edit: Clicking the Edit link will allow the Journal Manager to change the form title and description. The Journal Manager will also be able to extend the form by clicking the Add Form Items subheading: the resulting page will list any form items (text fields; radio buttons, drop-down boxes and checkboxes; etc.) that have been added to the form, and allows for new items to be added by clicking Create New Item. When a new item is created, the Journal Manager can provide descriptive text, and can make the item mandatory for the Reviewer to complete. Once an item is created, it can be edited or deleted until the review form is locked due to use. Finally, the Journal Manager can click the Preview Form subheading to see what the form will look like to a Reviewer. The Edit option is only permitted until the review form has been used once, at which point the form is locked.
Activate/Deactivate: Clicking the Activate link will allow the form to be chosen as a default form for a journal section (this can be applied in Journal Sections from the Journal Management page), and to be selected by the Editor as an optional form at the time of review assignment. Deactivating the form removes it as an option from these locations, but does not delete the form.
Copy: The Copy action allows the Journal Manager to copy a review form that has already been used in its entirety. Clicking the Copy link will duplicate the form in the Review Forms list, and will populate the duplicated form with the original form's items. The Journal Manager can then change the form name, and edit the form items if need be.
The Journal Manager can also copy any form items from one editable form to another, pre-existing form. To do this, the Journal Manager must click the form name that includes the item to be duplicated; click the Form Items subheading; select the items to be duplicated by checking the box to the left of their name (or alternatively, by clicking the Select All button to choose all of them); choose the form that the items will be copied to from the drop-down menu; and then click Copy to commit the change. Please note that copied items can still be deleted while the form hasn't yet been locked; and that individual items cannot be copied from forms that have already been locked.
Preview: The Preview link allows the Journal Manager to see what the review form will look like to a Reviewer.
Delete: The Delete link only shows up if the form has not yet been locked. If clicked, the Journal Manager will be prompted on whether or not the delete action should indeed be carried through.
The Review Forms page also lists the number of reviews currently being processed against the listed review forms, and the number of reviews that have been completed using each form.


text:
Hen Do Game - Over Or Under? | Ocean Gold
Regular price£2.95
Tax included.
- In stock, ready to ship
- Inventory on the way
Ocean Gold Themed Over Or Under is lots of fun and perfect as part of your Hen Do celebrations.
The Over Or Under Bridal Game is Part of the ready made Bridal Shower Bundle.
Pack Contains :
- Ocean Gold Themed Over Or Under Bridal Party Game
Host your own Hen Do online or print our high quality design off and host in real life.

subset: commoncrawl


text:
Arbor Day Foundation Awards Three Volunteer Center Contest Winners with Combined Service of 150 Hours
Lincoln, Neb. (December 14, 2012) – Lafayette, Indiana, resident Gregory Shaner was the first place grand prize winner for the Arbor Day Foundation's recent Volunteer Center contest, with a total of 86 hours of conservation-oriented volunteering.
David Ruyak of Reading, Pennsylvania, was the second place winner with 48 volunteer hours, and Charline Bridgeman of Evansville, Indiana, was third place with 19 volunteer hours.
Through support from Toyota and an innovative partnership with VolunteerMatch.org, the Volunteer Center at arbordaynow.org offers an interactive and easy-to-use database for locating conservation-oriented volunteering opportunities in all 50 states. Participants who registered on the website and tracked their volunteering hours in the system during the months of October and November were eligible for the contest.
Shaner volunteered with Tree Lafayette and the Indiana Urban Forest Council, Ruyak volunteered with Camp Serranova, Inc., and the Reading Shade Tree Commission and Bridgeman volunteered with Hartman's Arboretum.
The winners also received a Nook HD or iPod touch and Barnes and Noble gift certificate of varying amounts, and had between 25 and 75 trees planted in their honor as part of the Foundation's Trees in Celebration program. Random weekly winners were selected during the length of the contest to receive arbordaynow.org t-shirts.
In April, 50,000 online voters used the Volunteer Center to select five Tree Campus USA schools as winners in a contest for $1,000 to plant trees and recruit new volunteers.
More information on the Volunteer Center is available at arbordaynow.org/volunteer.
About the Arbor Day Foundation: The Arbor Day Foundation is a nonprofit conservation and education organization of one million members, with the mission to inspire people to plant, nurture and celebrate trees. More information on the Foundation and its programs can be found at arborday.org, or by visiting us on Facebook, Twitter or our blog.


text:
Lizzy Loomis is the Readers' Choice in this week's Indies Unlimited Flash Fiction Challenge. The winning entry is decided by the popular vote and rewarded with a special feature here today. (In case of a tie, the writer who submitted an entry first is the winner per our rules.) Without further ado, here's the winning story:
Continue reading "Lizzy Loomis Wins Flash Fiction Popular Vote"


text:
So thank you St. Valentine for being the next holiday to distract us with all kinds of heart art! Here's my first of 2019:
But I digest. The beautiful paper is another vo piece from my stash which I'm determined to stop hoarding. The little heart was cut from red fun foam and glossified.
- Cards in Envy: Love me, love my pet. I'm sad to hear that this challenge will be closing with its post on February 4. Thank you to Sandy and all the past and present Design Team members for their work and dedication over the last six years! (p.s. The little heart on my card is not flat, but it is foamy and squishable for easy mailing.)
- Mix It Up Challenge: Anything goes + sentiment as main focus.
- Moving Along With the Times: Have a heart.
- Simon Says Stamp Monday: Have a heart.
- Stamp Ink Paper: All my love.
- Watercooler Wednesday: All about holidays.
- AAA Cards: Up to one-third + optional masking.
- Color Throwdown: navy, gray, lime.
- Less Is More: Sketch based on a card entered once by my friend Kathy!
ETA: Hammy picked a name out of the hat and the winner of the butterfly die from this post is JoAnn. Congratulations, JoAnn!
Thanks for sharing about the thyroid.
Have a wonderful day. Hugs, JoAnn
Enjoy your day! Enjoy the ride! No, seriously, enjoy! LITS!*
As always, thank you for coming by to visit the Playhouse and special thanks to you if you take the time to join as a follower! Please let me know you came by so I can be sure and return the flavor!


text:
A look at what's happening around the majors today:
Recommended Videos
White Sox manager Tony La Russa will see plenty of familiar faces when his AL Central leaders host his longtime team, the St. Louis Cardinals.
The 76-year-old Hall of Fame skipper guided the Cardinals from 1996-2011, reaching the playoffs nine times and winning two World Series championships. Out of the majors for nearly a decade, he returned to the dugout this season with Chicago.
La Russa sounded eager to see Cards catcher Yadier Molina and the rest of the Redbirds and their classic uniforms.
"I think it's the common-sense stuff, it's you recognize the birds with the bat," La Russa said Sunday. "There are guys there, several guys that were teammates, but they're guys in the coaching staff that I know really well."
La Russa praised St. Louis manager Mike Shildt, whose club leads the NL Central.
"Mike was a teammate starting in 2000 through 2004. Mike Shildt came in the organization in player development and over the years watched him grow, minor league manager of the year. And really, really impressed. No surprise that he's successful as a manager because you watched him go from rookie to A ball and so forth, Double-A won the championship. He has a knack of guys responding to his leadership," La Russa said.
Lance Lynn (4-1, 1.55 ERA) is scheduled to start for the White Sox. The 34-year-old righty was a rookie when he pitched in relief in the final game that La Russa managed for the Cardinals -- a Game 7 victory over Texas for the 2011 crown.
Spencer Turnbull (3-2, 2.88 ERA) pitches at home for the Detroit Tigers against Cleveland in his first start since throwing a no-hitter last Tuesday in Seattle.
The next night, Corey Kluber twirled a gem of his own for the Yankees at Texas -- making it six no-hitters in the majors already this year. The most in any season since 1900 is seven.
Kluber (4-2, 2.86) goes Tuesday at home against Toronto.
Can those two combine for something special on back-to-back nights again? The only pitcher to throw consecutive no-hitters was Johnny Vander Meer for the Cincinnati Reds in 1938.
Fernando Tatis Jr. has been on a tear since Padres manager Jayce Tingler moved the dynamic shortstop into the cleanup spot.
Batting fourth in four games since coming back from a case of COVID-19, Tatis has gone 11 for 14 with four homers, 12 RBIs, four doubles, three walks and three stolen bases.
Tatis hit a grand slam and solo homer, finishing with six RBIs as San Diego routed Seattle 9-2 Sunday to sweep a nine-game homestand. The Padres took three-game sets from St. Louis, Colorado and the Mariners. Overall, they have won 12 of 13 games.
Blake Snell (1-0, 3.79) is scheduled to start the opener of a four-game series at Milwaukee.
Austin Meadows and the Tampa Bay Rays try for their 11th straight win when they close out Toronto's stay in Dunedin, Florida.
Meadows, Manuel Margot and Mike Brosseau drew consecutive bases-loaded walks with two outs in the ninth inning Sunday to rally the Rays past the Blue Jays 6-4.
The comeback win lifted Tampa Bay into a first-place tie with Boston in the AL East.
The Blue Jays have been playing home games this season at TD Ballpark, going 10-10 at their spring training stadium. After this game, they will relocate to their Triple-A facility in Buffalo, New York. The Blue Jays are not allowed to play in Toronto due to COVID-19 restrictions in Canada.
LHP Ryan Yarbrough (2-3) gets the start for the Rays. Tampa Bay's longest streak is 12, set in 2004 when the team was called the Devil Rays.
More AP MLB: https://apnews.com/hub/MLB and https://twitter.com/AP_Sports


text:
Art Directors talked, and we listened! Art Directors told us that they'd prefer to browse art in a gallery-type format, seeing one piece per illustrator displayed. So we've changed the planned Portfolio Display at the Annual Winter Conference to an Art Showcase.
Here's how it the Art Showcase will work:
- Illustrators need only prepare one piece and business cards or postcards rather than a full portfolio.
- Art Directors and other industry professionals will browse the Friday night art display, picking up cards from the illustrators whose work interests them.
- Literally hundreds of invited Agents, Art Directors, Editors and other publishing professionals will be viewing the art.
- It's just $50 to participate in the Porfolio Showcase, but if you enroll in the Illustrators Intensive it's FREE.
- The display will be juried and two cash prizes will be awarded along with one awesome Grand Prize--an all-expenses paid trip to New York and meeting with art directors!
Be sure to visit SCBWI.org for more information and guidelines and don't miss this terrific opportunity to have your work viewed by the decision makers! There's truly no other event where you can have your work seen by so many agents, editors and art directors!
And click here to register for the Annual Winter Conference.


text:
Mac Club Indonesia, is a community gathering of Apple lover and users with all the relevant products. This community was formed in 2002, and already spread all over Indonesia and even overseas.
With a glorious existence since the founding of the year, Mac Club Indonesia has had more than 100,000 registered members who are still active.
In this forum, beside all member can meet, members are also can exchange information related to the latest developments from Apple products. All information include the latest news about Apple products: iMac, Macbook, Apple Service Centers, Dealers Apple, software, articles, tips and tricks, even buying and selling forum for those who need a new Apple product or secondhand.
All information can be in full of the latest product pricing, the price of second product, the Apple Store locations, product accessories or even a bargaining forum.


text:
Designed for total compatibility with the entire tractor range, SAME front loaders are available as either Light Kit or Ready Kit versions and may be used with a huge variety of implements.
Constructed from special fine grain steel, these lightweight front loaders combine superlative performance with outstanding reliability. With a maximum lift height of over 4 metres, hydraulic or mechanical self-levelling functionality and three control systems for different applications and frequency of use, SAME front loaders offer the perfect answer to a wide variety of different needs.
And with the Comfort Drive system which reduces pitching during transport, SAME front loaders also optimise comfort and safety.


text:
This is one of the (many) projects for today.
I *heart* scrap quilts.
(I also love my JUKI sewing machine.)
Pretty colors! Can't wait to see it finished!
What? No obsession part 9? Although, this is technically patchwork too, right?
looks like another beauty!
I'm having a stay at home and craft day today, so I'll be thinking of you as I sew away...
Have fun!
Wow - that looks like a lot of work! Hope you enjoy your day!!
You've been such a busy little quilter, haven't you?
Aren't scrappy quilts the best? Your purses are adorable.


text:
Al B. Sure! White Camo Alpine Premium Snapback
Regular price
This classic snapback features a subtle primarily white camo pattern. As you probably know keeping white hats clean can be exceptionally difficult and this subtle camo pattern may do the trick.
- Classic Snapback Fit
- One Size Fits Most
- Specialty Camo Pattern
- 98/2 cotton/spandex
- Structured, high-profile, six-panel, 3 1/2" crown
- Flat bill with green undervisor
- Sewn eyelets
- White Snapback closure
For environmental and human friendly reason, this product is only made when you order it. Typically, this product will be made in about a week, we will send you tracking information as soon as it's in the mail.


text:
Learn Oracle course with Guaranteed Job Placement! Get certified from the best Oracle training institute in short duration and reasonable fees. Online classes available.
Database is need of every industry and hence, there is a huge demand for data professionals across the world. Multiple technologies are used to create and maintain data. Excel and Oracle which are leading technologies in the world are covered in this training program. Hence the best Oracle course with 100% Job Guarantee! more info
Oracle Developer, SQL Developer etc.
DBA can be added to those interested.
Mon to Sat - 10am to 7pm & upto 4 pm on Sun
Call us -
Email us -
101, 1st Floor, Prestige Chambers CHS Ltd., Behind Dr. Babasaheb Ambedkar Statue, Besides Maurya Hotel, opp. Platform 2 Thane west rly stn.
✓ Among top institutes for IT Training & Placements
✓ ISO certified, Since 2014
✓ Training modes - Live Online and Classroom(Thane)
✓ Training from Experts
✓ Trained Globally - Thousands of students trained across India and from countries like US, UK, Dubai, Australlia etc. in live online training. Hence quality training from us is assured.
✓ Training options - Job Oriented & Job Guarantee Training Programs available. check details on home page.
✓ Training Programs:
>> 100% Job Guarantee Programs - placement support until you get job
>> 100% Job Oriented Programs (min 2 months course duration) - Placement support until you get job for min 12 months
✓ Our live projects - ProposalFinder.com, BiodataKing.com, theVibrantBirdie.com etc.
✓ Corporate trainings delivered - To organizations like GeBBS Healthcare, PDG Softwares, NVest solutions etc.
✓ Individual doubt solving
✓ Interview preparation
✓ Resume building
✓ Best placement service:
⇒ 1000+ companies
⇒ Dedicated HR for placements
⇒ Placement support until you get job
⇒ For quick results, placement support starts even while training is ongoing if some criterias are fulfilled or by default on completion of training.
⇒ As a result, lots of students got placed in ongoing training or within just 30 Days of completion of training!! Check photos with company names on placement page.
You can be the Next Placed Student
Inquire Now
Every week. Classroom/Online/Weekend demos available.
Book you free demo now,
Book Demo
New batches at regular intervals. Limited seats per batch.
Upcoming Batches
Yes. We train students across India and globally in live online trainings.
Inquire Now
It is a virtual classroom where trainers will be live and not pre-recorded lectures so that your gets solved in real time.
Yes. Training language will be English. We train students globally and have trained students from countries like US, UK, Germany, Australia, Dubai etc. Training mode will be live online training.
Inquire Now
Around 90% attendance will help you benefit in all of our training programs. However attendance is not a stopper from your eligibility in our placement process.
1. If unable to join in classroom then you can join online because ours is a hybrid mode of training.
2. Either in classroom or Live Online Trainings if you miss a lecture, then, lecture recording or repeat lecture will be provided (as feasible to us) so that your training completes on time.
Inquire Now
Yes. We are an ISO certified institute so our certifiate is well accepted across the industries.
Inquire Now
Yes available.
Inquire Now
minimum i3 laptop with 4GB or 8GB ram and an internet with minimum 5G internet speed.
please visit job guarantee page and also
talk to our counsellors
Inquiry Form


text:
Welcome to the Invelos forums. Please read the forum rules before posting.
Read access to our public forums is open to everyone. To post messages, a free registration is required.
If you have an Invelos account, sign in to post.
Quote:Anyone willing to help????????????????????
Quote:But please keep in mind, that there is no such thing as a correct name.
Quote:As for Asian names, why do we still have Zhang Ziyi and Ziyi Zhang ...
Quote: Guess it couldn't be that simple, could it?
Quote:Anyone willing to lend us a helping hand?


text:
ACTH stimulation test
Test of adrenal reserve; Cosyntropin stimulation test; Cortrosyn stimulation test; Synacthen stimulation test; Tetracosactide stimulation test
The ACTH stimulation test measures how well the adrenal glands respond to adrenocorticotropic hormone (ACTH). ACTH is a hormone produced in the pituitary gland that stimulates the adrenal glands to release a hormone called cortisol.
How the Test is Performed
The test is done the following way:
- Your blood is drawn.
- You then receive a shot (injection) of ACTH, usually into the muscle in your shoulder. The ACTH may be a man-made (synthetic) form.
- After either 30 minutes or 60 minutes, or both, depending on how much ACTH you receive, your blood is drawn again.
- The lab checks the cortisol level in all the blood samples.
You may also have other blood tests, including ACTH, as part of the first blood test. Along with the blood tests, you may also have a urine cortisol test or urine 17-ketosteroids test, which involves collecting the urine over a 24-hour period. Sometimes the test is done to measure a different hormone called 17-hydroxy progesterone.
How to Prepare for the Test
You may need to limit activities and eat foods that are high in carbohydrates 12 to 24 hours before the test. You may be asked to fast for 6 hours before the test. Sometimes, no special preparation is needed. You may be asked to temporarily stop taking medicines, such as hydrocortisone, which can interfere with the cortisol blood test.
How the Test will Feel
When the needle is inserted to draw blood, some people feel moderate pain. Others feel only a prick or stinging. Afterward, there may be some throbbing or slight bruising. This soon goes away.
The injection into the shoulder may cause moderate pain or stinging.
Some people feel flushed, nervous, or nauseated after the injection of ACTH.
Why the Test is Performed
This test can help determine whether your adrenal and pituitary glands are normal. It is most often used when your health care provider thinks you have an adrenal gland problem, such as Addison disease, or pituitary insufficiency. It is also used to see if your pituitary and adrenal glands have recovered from prolonged use of glucocorticoid medicines, such as prednisone or dexamethasone.
Normal Results
An increase in cortisol after stimulation by ACTH is expected. Cortisol level after ACTH stimulation should be higher than 13 to 14 mcg/dL (358 to 386 nmol/L) depending on the type of cortisol assay used and, on the dose of ACTH used.
Normal value ranges may vary slightly among different laboratories. Some labs use different measurements or may test different specimens. Talk to your provider about the meaning of your specific test results.
What Abnormal Results Mean
This test is helpful in finding out if you have:
- Acute adrenal crisis (life-threatening condition that occurs when there is not enough cortisol)
- Addison disease (adrenal glands do not produce enough cortisol)
- Hypopituitarism (pituitary gland is not producing enough hormones such as ACTH)
There is little risk involved with having your blood taken. Veins and arteries vary in size from one person to another, and from one side of the body to the other. Taking blood from some people may be more difficult than from others.
Other risks associated with having blood drawn are slight, but may include:
- Excessive bleeding
- Fainting or feeling lightheaded
- Multiple punctures to locate veins
- Hematoma (blood accumulating under the skin)
- Infection (a slight risk any time the skin is broken)
Newell-Price JDC, Auchus RJ. The adrenal cortex. In: Melmed S, Auchus RJ, Goldfine AB, Koenig RJ, Rosen CJ, eds. Williams Textbook of Endocrinology. 14th ed. Philadelphia, PA: Elsevier; 2020:chap 15.
Torpy DJ, Bancos I, Husebye E. Adrenal insufficiency. In: Robertson RP, ed. DeGroot's Endocrinology. 8th ed. Philadelphia, PA: Elsevier; 2023:chap 93.
Version Info
Last reviewed on: 8/28/2023
Reviewed by: Sandeep K. Dhaliwal, MD, board-certified in Diabetes, Endocrinology, and Metabolism, Springfield, VA. Also reviewed by David C. Dugdale, MD, Medical Director, Brenda Conaway, Editorial Director, and the A.D.A.M. Editorial team.


text:
Privacy policy
This website, inter.it (the "Site"), and all personal information collected from users of this Site are owned solely by F. C. Internazionale Milano S.p.A. In this Privacy Policy references to "we", "us" and "our" are references to F. C. Internazionale Milano S.p.A. .
We take the privacy of our users seriously
This Privacy Policy (the "Policy") outlines how we treat your personal information and forms part of the "Terms and Conditions" of this Site. This Policy applies only to this Site, and not to the collection and use of personal information by any third party via any website to which there are links on this Site. We are not responsible for the privacy policies of other websites, and encourage you to be aware when you leave our Site.
Your use of this Site signifies your consent to our collecting and using information (sometimes personal information) about you in accordance with this Policy.
What information do we collect?
You may access this Site's home page and browse the Site without disclosing any personal data. In order to provide you with a range of services, however, we may collect personal information from this Site, which we will ask you for when and if needed. In such cases we will explicitly ask for your permission to process the collected data (for example on the registration page).
How do we use your information?
Any personal data relating to you will be used and recorded by us in accordance with current data protection legislation and this Privacy Policy.
We may use your personal information to communicate with you, such as to let you know about new features or offers on inter.it, for record-keeping purposes, and in aggregate form (and therefore anonymously) for market-research purposes, to track activity on our Site, to publish trends and/or to improve usefulness and content and for any other purpose that we may notify you and the relevant data protection authority about.
We may operate one or more mailing lists to send you INTER-related news. These mailing lists currently operate as 'opt-in' mailing lists whereby subscribers add themselves to the list.
We only send emails to addresses which have been subscribed to each list. We do not 'spam'.
If you wish to unsubscribe from a list (see Unsubscribe below), you can do it from your profile page (as a registered user) or by emailing us at firstname.lastname@example.com. We currently do not share, license or sell these email addresses.
We reserve the right to disclose your personal information to anyone who may take over the running of the Site or who may purchase any or all of our assets including your personal information. We reserve the right to disclose your personal information to any law enforcement agency requesting it in connection with the commission of any offence, once we are reasonably satisfied as to the circumstances surrounding the request.
We also reserve the right to access and disclose your personal information in order to comply with applicable laws and lawful government requests, to operate our systems properly or to protect our users and ourselves. Except as expressly stated in this Policy, we will not sell, share, trade or license your personal information to others without your express consent.
We take every precaution to protect your personal information. In addition, we have strict security protocols in place to protect our customer database from unauthorised access, improper use or disclosure, unauthorised modification, and unlawful destruction or accidental loss. We only allow access to the customer database when absolutely necessary, and then under strict guidelines as to how such details may be used. We may ask you for proof of identity before disclosing any personal information to you.
We always aim to improve the services we offer. As a result, we may occasionally canvass our customers using surveys. Participation in surveys is voluntary, and you are under no obligation to reply to any survey you might receive from us. Should you choose to do so, we will treat the information you provide with the same high standard of care as all other customer information.
Your participation on our Site may mean that we occasionally contact you with the opportunity to join activities (such as play online games or enter competitions). Participation in any of these activities is voluntary, and you are under no obligation to take up an invitation from us to participate. Should you choose to join an activity, we will treat the information you provide with the same high standard of care as all other customer information.
When you visit one of our Sites we may send you a cookie. Usage of cookies is in no way linked to any personally identifiable information while on our Site. A cookie is a small file that can be placed on your computer's hard drive for record-keeping purposes, and we may use them to do a number of things. For example, cookies may be used to compile anonymous statistics related to the take-up or use of services, or browsing patterns. When used in this manner, you are not individually identified, and information collected in this manner is only used in aggregate form. Some of our business partners (such as advertisers) may use cookies on our Site or their own sites. We have no access to, or control over, these cookies. You are not required to accept a cookie from us, or any other website, and you may set your browser so that it will not accept cookies, although some features on the Site may not function if you do.
Correcting and updating personal information
If your personal information changes, or if you believe that the personal data we hold about you is incorrect, you may correct it in your profile page or by sending an email to email@example.com.
We hope that you will enjoy using this Site and the services we offer. However, you may request that your personal information is not used in the ways outlined above. This is called "Unsubscribing" and may be achieved by any of the following methods: - sign in and visit the profile page, untick the relevant check box(es) and save your details. - email us at firstname.lastname@example.com, specifying which services you don't require anymore.
At any time you can ask for your personal information to be erased from our databases.
This is called "Deletion" and may be achieved by any of the following methods:
- sign in and visit the profile page, select the "Cancel my registration" option and follow the instructions given;
- email us at firstname.lastname@example.com and follow the instructions we will email you.
Site and service updates
If you are a registered user of the Site, we may send you Site and service announcements or updates. You cannot unsubscribe from service announcements unless you perform a "Deletion".
Notification of changes
We may occasionally modify our Privacy Policy. When this happens, we will notify you via our homepage.
Privacy Support
If you have any queries about our Privacy Policy, please email us at firstname.lastname@example.com.
Inter.it uses cookies of its own and of third parties to collect to simplify and improve browsing. If a browser has blocked the use of cookies, some of the services and functionalities of the website will not be available.
What is a cookie?
A cookie is a small fragment of text that websites send to the browser and that are stored in the user's device, such as their personal computer, mobile telephone, tablet, etc. These files are used by the website to remember information about the visit, such as language preferences and other options, while helps to set things up for their next visit and make the website more useful by personalising its content. Cookies play a very important role improving the experience of using the website.Read more
How are cookies used?
By browsing this website, the user is allowing cookies to be installed in their device to tell us the following information:
- Statistical information about use of the website.
- The user's login, to keep the user logged into the website.
- The preferred web format for access from mobile devices.
- The most recent searches made of the web's services, and the personalised details of these services.
- Information about advertisements that are shown to the user.
- Details for connecting to social networks for users that access the site via their Facebook or Twitter accounts.
Types of cookie used
Functional cookies
These cookies are mandatory to play highlights, buy tickets or season-rickets; each time you return to inter.it you will not have to type login and password again.
Performance and stats cookies
QPiwik, Google Analytics e Google Tag Manager
Social Cookies
To share an inter.it page on your facebook profile or twitter timeline.
In depth
Company | Website | Cookie | Type | Usage |
F.C. Internazionale | www.inter.it | Inter | Technical/functional | Your profile |
F.C. Internazionale | interchannel.inter.it | Inter-Piwik | Stats | Analytics |
F.C. Internazionale | giovanili.inter.it | Doubleclick | 3rd parties | Analytics |
F.C. Internazionale | interclub.inter.it | Google Tag Manager | 3rd parties | Analytics |
F.C. Internazionale | ccic.inter.it | Media Math | 3rd parties | Analytics |
F.C. Internazionale | intercampus.inter.it | Google Analytics | 3rd parties | Analytics |
F.C. Internazionale | 3rd parties | Analytics | ||
F.C. Internazionale | YouTube | 3rd parties | Analytics | |
F.C. Internazionale | 3rd parties | Analytics | ||
F.C. Internazionale | 3rd parties | Analytics |


text:
Showing Collections: 1 - 2 of 2
Baltimore Neighborhoods, Incorporated Records
Collection — Multiple Containers
Identifier: R0015-BNI
Scope and Contents
Collection contains materials documenting the work and history of the Baltimore Neighborhoods, Inc. organization between 1958 and 2018. It includes program descriptions and history, minutes, reports and financial statements, surveys, tenants' manuals, correspondence, reports and studies, and newsletters. Also included are papers of the Research Advisory Committee and the Leadership Council for Fair Housing in Maryland. Also present are outreach materials, photographs, artifacts, audiovisual...
1958-2018; 1967-1970
Found in:
Baltimore Studies Archives
Northeast Community Organization Records
Collection — Multiple Containers
Identifier: R0087-NECO
Scope and Contents
The Northeast Community Organization Records documents the work of the community organization between 1969 and 1979. Subjects of note included in this collection are Baltimore community organizing, neighborhood improvement associations, and housing discrimination. Materials are mainly textual and include meeting minutes, correspondence, subject files, financial records, flyers, newsletters, and organizational records related to staff and the office of the president. Also present are visual...
Found in:
Baltimore Studies Archives
Filter Results
Additional filters:
- Subject
- Affirmative action programs 1
- Neighborhoods 1
- Race relations 1
- Real estate business--Moral and ethical practices 1
- photographs 1
- Names
- Baltimore Neighborhoods, Inc. 1
- Leadership Council for Fair Housing in Maryland 1
- Northeast Community Organization (Baltimore, Md.) 1
- Northeast Real Estate Conservation Program 1


text:
November 13, 2014
Robert O'Callahan -- Relax, Scaling User Interfaces By Non-Integer Scale Factors Is Okay
About seven years ago we implemented "full zoom" in Firefox 3. An old blog post gives some technical background to the architectural changes enabling that feature. When we first implemented it, I expected non-integer scale factors would never work as well as scaling by integer multiples. Apple apparently thinks the same, since (I have been told) on Mac and iOS, application rendering is always to a buffer whose size is an integer multiple of the "logical window size". GNOME developers apparently also agree since their org.gnome.desktop.interface scaling-factor setting only accepts integers. Note that here I'm conflating user-initiated "full zoom" with application-initiated "high-DPI rendering"; technically, they're the same problem.
Several years of experience shows I was wrong, at least for the Web. Non-integer scale factors work just as well as integer scale factors. For implementation reasons we restrict scale factors to 60/N for positive integers N, but in practice this gives you a good range of useful values. There are some subtleties to implementing scaling well, some of which are Web/CSS specific.
For example, normally we snap absolute scaled logical coordinates to screen pixels at rendering time, to ensure rounding error does not accumulate; if the distance between two logical points is N logical units, then the distance between the rendered points stays within one screen pixel of the ideal distance S*N (where S is the scale factor). The downside is that a visual distance of N logical units may be rendered in some places as ceil(S*N) screen pixels and elsewhere as floor(S*N) pixels. Such inconsistency usually doesn't matter much but for CSS borders (and usually not other CSS drawing!), such inconsistent widths are jarring. So for CSS borders (and only CSS borders!) we round each border width to screen pixels at layout time, ensuring borders with the same logical width always get the same screen pixel width.
I'm willing to declare victory in this area. Bug reports about unsatisfactory scaling of Web page layouts are very rare and aren't specific to non-integral scale factors. Image scaling remains hard; the performance vs quality tradeoffs are difficult --- but integral scale factors are no easier to handle than non-integral.
It may be that non-Web contexts are somehow more inimical to non-integral scaling, though I can't think why that would be.
November 13, 2014 11:48 AM
I saw Interstellar today. I enjoyed it --- it was beautiful and thought-provoking --- but about an hour in, it just stops making sense. I don't just mean the physics is bad, though it is, but the narrative fails to hold together on its own terms. Even so I think it's worth seeing on the big screen.
Apparently Jonathan Nolan wants to make one or more movies based on the Foundation series. That doesn't seem like a good idea to me; Foundation is an excellent series (at least the original trilogy; Asimov's later additions are embarrassing) but it's big ideas connected by threadbare narrative and could only make the barest bones of a watchable movie.
I can think of many science fiction stories more amenable to movie treatment. I've recently re-read (or more accurately re-skimmed) Marooned In Realtime by Vernor Vinge, and I think it's actually better than his more famous Hugo winners. It's packed full of big ideas but is genuinely moving in a way I don't get from his other books. Better still, from a movie point of view, there's a coherent narrative in the framework of a police procedural that makes it an easy story to tell. Plus exotic creatures and locations, robots, and space combat. What more could you want?
November 13, 2014 09:11 AM
November 03, 2014
Robert O'Callahan -- HTML5 Video Correctness Across Browsers
A paper presents some results of cross-browser testing of HTML5 video. This sort of work is very helpful since it draws attention away from browser vendor PR efforts and towards the sort of issues that really impact Web developers, with actionable data.
Having said that, it's also very interesting to compare how browsers fare on correctness benchmarks designed without a browser-vendor axe to grind. Gecko usually does very well on such benchmarks and this one is no exception. If you read through the paper, we get almost everything right except a few event-firing issues (that I don't understand yet), more so than the other browsers.
Of course no test suite is perfect, and this one misses the massive Chrome canplaythrough bug: Chrome doesn't really implement canplaythrough at all. It simply fires canplaythrough immediately after canplay in all circumstances. That's still causing problems for other browsers which implement canplaythrough properly, since some Web sites have been written to depend on canplaythrough always firing immediately.
Still, this is good work and I'd like to see more like it.
November 03, 2014 11:20 PM
November 02, 2014
Robert O'Callahan -- Auckland Half Marathon --- Barefoot
I ran the Auckland half-marathon today, barefoot all the way. It went well; I slightly improved my time compared to last year when I wore Vibram foot-gloves. I didn't see any other barefoot runners last year or this year, and maybe there will never be any others, but here are some tips just in case:
- Nothing in the rules says you have to wear shoes and I didn't have any trouble from any officials.
- The race has detailed instructions for tying the timing chip into your shoelaces and dire warnings should those instructions not be followed. Before the race I experimented with a few different ways to attach the chip to my foot, but they all failed. Today I just put the chip in my pocket and at the chip-readers (at the start line, the top of the Auckland Harbour Bridge, and the finish line) I held the chip in my hand as low to the ground as I could as I ran over the chip-reading system. I wasn't sure if that would work, but it did.
- The road surface was reasonably smooth most of the way along the route. The section from Smale's Farm along the motorway until getting off the Harbour Bridge --- several kilometres --- is rougher than the rest but tolerable. There are sections around Halsey Street near the end which are very rough, but they're quite short. Overall the surface was better than I usually get running on footpaths.
- My feet hurt less at the end than they did when I wore the Vibrams last year. Last year my feet got really sweat-soaked so that may have had something to do with it.
- I got a lot of good-natured comments from runners and bystanders. Some people probably thought I was a nutter, but to be fair, they're not clearly wrong.
- Aid stations were surrounded by discarded cups of Powerade, making the road sticky with Powerade underfoot. Icky, but it quickly rubs off :-).
To the question of how you get into shape to run a half-marathon barefoot in the first place, I have little to say. I always run barefoot and I run home from work most days.
Overall it was a great experience and I expect I'll do it again next year.
November 02, 2014 08:22 AM
October 27, 2014
Robert O'Callahan -- Are We Fast Yet? Yes We Are!
Spidermonkey has passed V8 on Octane performance on arewefastyet, and is now leading V8 and JSC on Octane, Sunspider and Kraken.
Does this matter? Yes and no. On one hand, it's just a few JS benchmarks, real-world performance is much more complicated, and it's entirely possible that V8 (or even Chakra) could take the lead again in the future. On the other hand, beating your competitors on their own benchmarks is much more impressive than beating your competitors on benchmarks which you co-designed along with your engine to win on, which is the story behind most JS benchmarking to date.
This puts us in a position of strength, so we can say "these benchmarks are not very interesting; let's talk about other benchmarks (e.g. asm.js-related) and language features" without being accused of being sore losers.
Congratulations to the Spidermonkey team; great job!
October 27, 2014 10:58 PM
October 19, 2014
Robert O'Callahan -- Pinnacles Tramp #2
During the weekend my children and I, plus some people from church and a friend, went tramping to the Pinnacles hut in Kauaeranga Valley in the Coromandel peninsula (near Thames, about two hours drive from Auckland). The weather was wet but the misty environment had its own delicate beauty. We only got rained on for about 45 minutes of the walk so everyone still had a good time. We played some good games of Bang and Dutch Blitz and, since it was only a single night, we brought real food and ate well!
October 19, 2014 09:24 PM
Photos From North America
October 19, 2014 09:14 PM
October 14, 2014
Robert O'Callahan -- Back In New Zealand
I just finished a three-week stint in North America, mostly a family holiday but some work too. Some highlights:
- Visited friends in Vancouver. Did the Grouse Grind in just over an hour. Lovely mountain.
- Work week in Toronto. Felt productive. Ran barefoot from downtown to Humber River and back a couple of times. Lovely.
- Rendezvoused with my family in New York. Spent a day in White Plains where we used to live, and at Trinity Presbyterian Church where we used to be members. Good sermon on the subject of "do not worry", and very interesting autobiographical talk by a Jewish Christian. Great time.
- Visited the 9/11 Museum. Very good, though perhaps a shade overstressing the gravity of 3000 lives lost. One wonders what kind of memorial there will be if a nuke kills 100x that many.
- Our favourite restaurant in Chinatown, Singapore Cafe, is gone :-(.
- Had some great Persian food :-).
- The amazingness of New York is still amazing.
- Train to Boston. Gave a talk about rr at MIT, hosted by my former supervisor. Celebrated 20-year anniversary of me starting as his first (equal) grad student. Had my family watch Dad at work.
- Spent time with wonderful friends.
- Flew to Pittsburgh. More wonderful friends. Showed up at our old church with no prior warning to anyone. Enjoyed reactions. God continues to do great things there.
- La Feria and Fuel-and-Fuddle still great. Still like Pittsburgh a lot.
- Flew to San Francisco. Late arrival due to flight being rerouted through Dallas, but did not catch Ebola.
- Saw numerous of seals and dolphins from the Golden Gate Bridge.
- Showed my family a real Mozilla office.
- Two days in Mountain View for Gecko planning meetings. Hilarious dinner incident. Failed to win at Settlers.
- Took family to Big Basin Redwoods State Park; saw pelicans, deer, a dead snake, a banana slug, and a bobcat.
- Ever since we made liquid nitrogen ice cream for my bachelor party, I've thought it would make a great franchise; Smitten delivers.
- Kiwi friends in town for Salesforce conference; took them to Land's End for a walk. Saw a coyote.
- Watched Fleet Week Blue Angels display from Twin Peaks. Excellent.
- Played disc golf; absolutely hopeless.
- Went to church at Home of Christ #5 with friends. Excellent sermon about the necessity of the cross.
- Flew home on Air NZ's new 777. Upgraded entertainment system is great; more stuff than you could ever hope to watch.
Movie picoreviews:
Edge Of Tomorrow: Groundhog Day meets Starship Troopers. Not as good as Groundhog Day but pretty good.
X-Men: Days Of Future Past: OK.
Godzilla: OK if your expectations are set appropriately.
Dawn Of The Planet Of The Apes: watched without sound, which more or less worked. OK.
Amazing Spider-Man 2: Bad.
Se7en: Good.
October 14, 2014 02:37 AM
September 29, 2014
Robert O'Callahan -- Upcoming rr Talk
Currently I'm in the middle of a 3-week visit to North America. Last week I was at a Mozilla graphics-team work week in Toronto. This week I'm mostly on vacation, but I'm scheduled to give a talk at MIT this Thursday about rr. This is a talk about the design of rr and how it compares to other approaches. I'll make the content of that talk available on the Web in some form as well. Next week I'm also mostly on vacation but will be in Mountain View for a couple of days for a planning meeting. Fun times!
September 29, 2014 12:59 AM
September 08, 2014
Robert O'Callahan -- rr 2.0 Released
Thanks to the hard work of our contributors, rr 2.0 has been released. It has many improvements over our 1.0 release:
- gdb's checkpoint, restart and delete checkpoint commands are supported.
These are implemented using new infrastructure in rr 2.0 for fast cloning of replay sessions. - You can now run debuggee functions from gdb during replay.
This is a big feature for rr, since normally a record-and-replay debugger will only replay what happened during recording --- and of course, function calls from gdb did not happen during recording. So under the hood, rr 2.0 introduces "diversion sessions", which run arbitrary code instead of following a replay. When you run a debuggee function from gdb, we clone the current replay session to a diversion session, run your requested function, then destroy the diversion and resume the replay. - Issues involving Haswell have been fixed. rr now runs reliably on Intel CPU families from Westmere to Haswell.
- Support for running rr in a VM has been improved. Due to a VMWare bug, rr is not as reliable in VMWare guests as in other configurations, but in practice it still works well.
- Trace compression has been implemented, with compression ratios of 5-40x depending on workload, dramatically reducing rr's storage and I/O usage.
- Many many bugs have been fixed to improve reliability and enable rr to handle more diverse workloads.
All the features normally available from gdb now work with rr, making this an important milestone.
The ability to run debuggee functions makes it much easier to use rr to debug Firefox. For example you can dump DOM, frame and layer trees at any point during replay. You can debug Javascript to some extent by calling JS engine helpers such as DumpJSStack(). Some Mozilla developers have successfully used rr to fix real bugs. I use it for most of my Gecko debugging --- the first of my research projects that I've actually wanted to use :-).
Stephen Kitt has packaged rr for Debian.
Considerable progress has been made towards x86-64 support, but it's not ready yet. We expect x86-64 support to be the next milestone.
I recorded a screencast showing a quick demo of rr on Firefox:
September 08, 2014 12:39 PM
VMWare CPUID Conditional Branch Performance Counter Bug
This post will be uninteresting to almost everyone. I'm putting it out as a matter of record; maybe someone will find it useful.
While getting rr working in VMWare guests, we ran into a tricky little bug. Typical usage of CPUID. e.g. to detect SSE2 support, looks like this pseudocode:
CPUID(0); // get maximum supported CPUID subfunction MThus, CPUID calls often occur in pairs with a conditional branch between them. The bug is that in a VMWare guest, when we count the number of conditional branches executed, the conditional branch between those two CPUIDs is usually (but not always) omitted from the count. We assume this is a VMWare bug because it does not happen on the same hardware outside of a VM, and it does not happen in a KVM-based VM.
if (S <= M) {
CPUID(S); // execute subfunction S
Experiments show that some code sequences trigger the bug and other equivalent sequences don't. Single-stepping and other kinds of interference suppress the bug. My best guess is that VMWare optimizes some forms of the above code, perhaps to reduce the number of VM exits, and in so doing skips execution of the conditional branch, without taking into account that this might perturb performance counter values. Admittedly, it's unusual for software to rely on precise performance counter values the way rr does.
This sucks for rr because rr relies on these counts being accurate. We sometimes find that replay diverges because one of these conditional branches was not counted during recording but is counted during replay. (The other way around is possible too, but less frequently observed.) We have some heuristics and workarounds, but it's difficult to fully work around without adding significant complexity and/or slowdown.
The bug is easily reproduced: just use rr to record and replay anything simple. When replaying, rr automatically detects the presence of the bug and prints a warning on the console:
rr: Warning: You appear to be running in a VMWare guest with a bug
where a conditional branch instruction between two CPUID instructions
sometimes fails to be counted by the conditional branch performance
counter. Partial workarounds have been enabled but replay may diverge.
Consider running rr not in a VMWare guest.
Steps forward:
- Find a way to report this bug to VMWare.
- Linux hosts can run rr in KVM-based VMs or directly on the host. Xen VMs might work too.
- Parallels apparently supports PMU virtualization now; if Parallels doesn't have this bug, it might be the best way to run rr on a Mac or Windows host.
- We can add a "careful mode" that would probably almost always replay successfully, albeit with additional overhead.
- The bug is less likely to show up once rr supports x86-64. At least in Firefox, CPUID instructions are most commonly used to detect the presence of SSE2, which is unnecessary on x86-64.
- In practice, recording Firefox in VMWare generally works well without hitting this bug, so maybe we don't need to invest a lot in fixing it.
September 08, 2014 11:37 AM
August 11, 2014
Robert O'Callahan -- Milestones On The Road To Christianity
Around the age of 20 I found myself struggling with some fairly deep philosophical questions. The most important was this: assuming (as I did) naturalism is true, then what should I do?
It seemed clear to me then (and still does) that if naturalism is true, the is-ought problem is insurmountable. There can be no objective moral truths or goals. The best we can do is identify commonly held moral values and pursue them. Unfortunately --- if honesty is one of those values --- we cannot tell others that their behavior is, in any objective sense, wrong. For example, we observe that Hitler's moral opinions are different from ours, but we could not claim that our moral opinions are intrinsically more valid. All we could do is wage war against him and hope our side prevails. Might makes right.
That doesn't make naturalism incoherent, but it opens a chasm between what naturalists can really believe about moral statements and the way almost everyone uses them in practice. The more die-hard naturalists are prone to say things like "naturalism is true, and therefore everyone should ... (stop believing in God, etc)" without respecting the limitation that the consequent ought-statements are subjective opinions, not objectively rational facts. It's really very difficult to be a proper moral relativist through-and-through!
Making this all much more difficult was my awareness of being able to reshape my own moral opinions. The evolutionary-psychology approach of "these are the values imbued by my primate brain; work them out" seems totally inadequate when the rational part of my brain can give priority to any subset of values (or none) and use that as justification for rewriting the others. Given a real choice between being a hero and a monster, on what grounds can one make that decision? It seemed a bit narrow-minded to reject monstrosity simply because it was less popular.
This all made me very dissatisfied with naturalism as a worldview. If it's true, but is powerless to say how one should live --- indeed, denies that there can be any definitive guidance how to live --- it's inadequate. Like a scientific theory that lacks predictive power, whether it's true or not, one has to keep looking for more.
(OK, I was a weird kid, but everyone thinks about this, right?)
August 11, 2014 10:16 AM
August 08, 2014
Robert O'Callahan -- cf1e5386ecde9c2eb9416c9b07416686
August 08, 2014 05:39 AM
Choose Firefox Now, Or Later You Won't Get A Choice
I know it's not the greatest marketing pitch, but it's the truth.
Google is bent on establishing platform domination unlike anything we've ever seen, even from late-1990s Microsoft. Google controls Android, which is winning; Chrome, which is winning; and key Web properties in Search, Youtube, Gmail and Docs, which are all winning. The potential for lock-in is vast and they're already exploiting it, for example by restricting certain Google Docs features (e.g. offline support) to Chrome users, and by writing contracts with Android OEMs forcing them to make Chrome the default browser. Other bad things are happening that I can't even talk about. Individual people and groups want to do the right thing but the corporation routes around them. (E.g. PNaCl and Chromecast avoided Blink's Web standards commitments by declaring themselves not part of Blink.) If Google achieves a state where the Internet is really only accessible through Chrome (or Android apps), that situation will be very difficult to escape from, and it will give Google more power than any company has ever had.
Microsoft and Apple will try to stop Google but even if they were to succeed, their goal is only to replace one victor with another.
So if you want an Internet --- which means, in many ways, a world --- that isn't controlled by Google, you must stop using Chrome now and encourage others to do the same. If you don't, and Google wins, then in years to come you'll wish you had a choice and have only yourself to blame for spurning it now.
Of course, Firefox is the best alternative :-). We have a good browser, and lots of dedicated and brilliant people improving it. Unlike Apple and Microsoft, Mozilla is totally committed to the standards-based Web platform as a long-term strategy against lock-in. And one thing I can say for certain is that of all the contenders, Mozilla is least likely to establish world domination :-).
August 08, 2014 01:33 AM
July 16, 2014
Robert O'Callahan -- Multiverses And Anthropic Reasoning
I liked this article summarizing the current state of science regarding multiverse theories. It's very clear and well-illustrated, and, as far as I know, accurate.
This quote is particularly interesting:
So as appealing as the idea is that there are other Level 1 Multiverses out there with different constants than our own, we have good physical reasons based on observable evidence to think it's unlikely, and zero good reasons (because wanting it to be so is not a good reason) to think it's likely.
He doesn't mention why anyone would "want it to be so", i.e. believe that other universes of a "Level 1 Multiverse" could have different constants to our own. However, I'm pretty sure he had in mind the selection-bias explanation for the anthropic coincidences. That is, if we accept that only a narrow range of possible values for the fundamental physical constants are compatible with the existence of intelligent life (and most scientists do, I think), then we would like to be able to explain why our universe's constants are in that range. If there are an abundance of different universes, each with different values for the physical constants, then most of them would be dead but a lucky few would sustain intelligent life, and naturally we can only observe one of those latter.
This reasoning relies on the assumption that there are abundance of different universes with different values for the physical constants. Scientists obviously would prefer to be able to deduce this from observations rather than pull it out of thin air. As discussed in the above article, theories of chaotic inflation --- which are reasonably well-grounded in observations of our own universe --- predict the existence of alternate universes. If those universes could have different values for physical constants (or even different physical laws), we'd have an observationally-grounded theory that predicts exactly the kind of multiverse needed to power the selection-bias explanation for the anthropic coincidences. Unfortunately for proponents of that explanation, the science isn't working out.
Of course, the selection-bias explanation could still be valid, either because new information shows that chaotic-inflation universes can get different constants after all, or because we assume another level of multiverse, whose existence is not due to chaotic inflation. However, many scientists (such as in the article above) find the assumption of a higher-level multiverse quite unsatisfactory.
Unsurprisingly, I'm comfortable with the explanation that our universe was intentionally created for intelligent life to live in. Incidentally, you don't need to be a classical theist to adopt this explanation; some atheist philosophers argue with varying degrees of seriousness that we are (probably) living in a simulation.
July 16, 2014 01:29 PM
July 02, 2014
Robert O'Callahan -- Implementing Scroll Animations Using Web Animations
It's fashionable for apps to perform fancy animations during scrolling. Some examples:
- Parallax scrolling
- Sticky headers that scroll normally until they would scroll out of view and then stop moving
- Panels that slide laterally as you scroll vertically
- Elements that shrink as their available space decreases instead of scrolling out of view
- Scrollable panels that resist scrolling as you get near the end
Obviously we need to support these behaviors well on the Web. Also obviously, we don't want to create a CSS property for each of them. Normally we'd handle this diversity by exposing a DOM API which lets developers implement their desired behavior in arbitrary Javascript. That's tricky in this case because script normally runs on the HTML5 event loop which is shared with a lot of other page activities, but for smooth touch tracking these scrolling animation calculations need to be performed reliably at the screen refresh rate, typically 60Hz. Even for skilled developers, it's easy to have a bug where once in a while some page activity (e.g. an event handler working through some unexpected large data set) blows the 16ms budget to make touch dragging less than perfect, especially on low-end mobile devices.
There are a few possible approaches to fixing this. One is to not provide any new API, hope that skilled developers can avoid blowing the latency budget, and carefully engineer the browser to minimize its overhead. We took this approach to implementing homescreen panning in FirefoxOS. This approach sounds fragile to me. We could make it less fragile by changing event dispatch policy during a touch-drag, e.g. to suppress the firing of "non-essential" event handlers such as setTimeouts, but that would add platform complexity and possibly create compatibility issues.
Another approach would be to move scroll animation calculations to a Worker script, per an old high-level proposal from Google (which AFAIK they are not currently pursuing). This would be more robust than main-thread calculations. It would probably be a bit clumsy.
Another suggestion is to leverage the Web's existing and proposed animation support. Basically we would allow an animation on an element to be use another element's scroll position instead of time as the input to the animation function. Tab Atkins proposed this with declarative CSS syntax a while ago, though it now seems to make more sense as part of Web Animations. This approach is appealing because this animation data can be processed off the main thread, so these animations can happen at 60Hz regardless of what the main thread is doing. It's also very flexible; versions of all of the above examples can be implemented using it.
One important question is how much of the problem space is covered by the Web Animations approach. There are two sub-issues:
- What scrolling effects depend on more than just the scroll position, e.g. scroll velocity? (There certainly are some, such as headers that appear when you scroll down but disappear when you scroll up.)
- For effects that depend on just the scroll position, which ones can't be expressed just by animating CSS transforms and/or opacity as a function of the scroll position?
July 02, 2014 09:10 PM
May 25, 2014
Robert O'Callahan -- Unnecessary Dichotomy
As the scope of the open Web has expanded we've run into many hard issues such as DRM, support for patented video codecs, and applications needing APIs that increase fingerprintability. These issues are easily but incorrectly framed as choices between "principles" and "pragmatism" --- the former prioritizing Mozilla's mission, the latter prioritizing other things such as developer friendliness for the Web platform and Firefox market share. This framing is incorrect because the latter are essential components of our strategy for pursuing our mission.
For example I believe the optimal way to pursue our goal of unencumbered video codecs is neither to completely rely on platform video codecs (achieving nothing for our goal) nor to refuse to support all patent-encumbered codecs (in the current market, pushing almost all users and developers to avoid Firefox for video playback). Instead it is somewhere in between --- hopefully somewhere close to our current strategy of supporting H.264 in various ways while we support VP8/VP9 and develop an even better free codec, Daala. If we deliberately took a stance on video that made us irrelevant, then we would fail to make progress towards our goal and we would have actually betrayed our mission rather than served it.
Therefore I do not feel any need to apologize for our positions on encumbered codecs, DRM and the like. The positions we have taken are our best estimate of the optimal strategy for pursuing our mission. Our strategy will probably turn out to be suboptimal in some way, because this is a very difficult optimization problem, requiring knowledge of the future ... but we don't need to apologize for being unomniscient either.
A related problem is that our detractors tend to view our stance on any given issue in isolation, whereas we really face a global optimization problem that spans a huge range of issues. For example, when developers turn away from the Web platform for any reason, the Web as a whole is diminished, and likewise when users turn away from Firefox for any reason our influence of most issues is diminished. So the negative impact of taking a "hyper-principled" stand on, say, patent-encumbered video codecs would be felt across many other issues Mozilla is working on.
Having said all that, we need to remain vigilant against corruption and lazy thinking, so we need keep our minds open to people who complain we're veering too much in one direction or another. In particular I hope we continue to recruit contributors into our community who disagree with some of the things we do, because I find it much easier to give credence to contributors than to bystanders.
May 25, 2014 11:29 PM
May 23, 2014
Robert O'Callahan -- Against The "Internet Of Things"
I was lucky to be at the Berkeley "programming systems" retreat in Santa Cruz a couple of weeks ago. One topic that came up was programming in the world of the "Internet of Things" --- the anticipated future where everyone has dozens of very small, very low-power devices with CPUs, sensors and radios. There's certainly a lot of interesting work to be done in that area, but nobody seems to have asked the question "do we really want an Internet of Things?" Because I don't, not until we've addressed the pervasive problems we already have with security, privacy, and general untrustworthiness of our computing infrastructure. It's obvious that these buy-and-forget devices won't get timely security updates (if updates are even adequate for security), so governments and criminal organizations will be battling for control over them, out of sight and mind of their nominal owners. So we're talking about making the surveillance network of the NSA (and even worse actors) a lot more pervasive. These devices will be able to run for years without a battery change, so when you buy a new house or car, you will inherit a miasma of unseen machines doing everyone's bidding but yours.
There's going to be a big market for scanning and cleaning tools. A small handheld EMP unit would be great. Someone should get on this problem.
May 23, 2014 05:04 AM
May 04, 2014
Robert O'Callahan -- Milford Track
I took last week off to walk the Milford Track with some family members (plus a few days in Queenstown). The Milford Track is the most famous multi-day "Great Walk" in New Zealand and you have to book months in advance to do it during the regular season. It deserves every bit of its hyping as the finest walk in the world.
This three-night, four-day walk can be done "guided" or "independently". You pay a lot of money for the "guided" version and in return you stay in lodges with clean sheets, hot showers, and catered meals. For a lot less money the "independent" version has you staying at fairly standard (but slightly fancier than average) Department of Conservation huts, which means no showers and you carry your own food and bedding. We did the independent version. With both versions you must walk in the westward direction and stop for three nights in the designated hut/lodge each night. Each DOC hut has a resident ranger, and they're all brilliant to talk to.
You start by taking a boat to the north end of Lake Te Anau, then walking for just over an hour to the first hut. It's such a short distance you can carry whatever luxuries you can consume on that first night --- sausages, bacon and eggs were popular items amongst our fellow trampers. Then you work your way up to the end of the Clinton Valley, cross Mckinnon pass on the third day, and walk down Arthur Valley to Milford Sound to be transported by boat to the village of Milford itself.
The scenery is, needless to say, astonishing --- mountains, lakes, trees, rivers, waterfalls, and all that. The environment is pristine; every stream and river is crystal clear where not colored by beech tannins, and all are perfectly drinkable. There's fascinating wildlife --- trout, keas, wekas, black robins. The weather is highly variable --- sunshine, rain and snow are all quite common and we had them all in our four days (very little snow though). Having rain near the beginning of the walk, like we did, is excellent because it powers up all the streamlets and waterfalls.
One curious fact is that the Mckinnon Pass area was first explored by Europeans specifically to find a route for tourists to cross overland to Milford. Almost immediately after the pass was first crossed, tourists started using the Milford Track, often in rather appalling conditions by today's standards. For many years there was no road out of Milford so track walkers arriving in Milford generally had to walk straight back out again.
May 04, 2014 11:58 AM
April 09, 2014
Robert O'Callahan -- Getting Back To Work
... is what we need now. So let me give a brief summary of what's happening with me work-wise.
Last year I fully divested my direct reports. No more management work to do, yay! I think they probably all ended up with a better manager than they had.
I've been involved in a lot of different projects and a lot of helping other people get their work done. In between I managed to carve out a few things of my own:
- I built reftests for async panning to try to stem the tide of regressions we were encountering there. Unfortunately that's not quite done because most of those tests aren't running on TBPL yet.
- I worked on CSS scroll snapping with an intern. Unfortunately the spec situation got bogged down; there's an impasse between us and Microsoft over the design of the CSS feature, and Google has decided not to do a CSS feature at all for now and try to do it with JS instead. I'm skeptical that will work will, and looking forward to their proposal, but it's taking a while.
- I landed an implementation of the CSS OM GeometryUtils interface, described in hacks.mozilla.org blog posts here and here. This fixes a functionality gap in the Web platform and was needed by our devtools team. Almost everything you would need to know about the CSS box geometry of your page is now easy to get.
- Lately I've been doing work on rr. People are trying to use it, and they've been uncovering bugs and inconveniences that Chris Jones and I have been fixing as fast as we can. Terrence Cole used it successfully to help fix a JS engine bug! I'm using it a lot myself for general-purpose debugging, and enjoying it. I want to spend a few more days getting some of the obvious rough edges we've found filed off and then make a new release.
Looking forward, I expect to be working on making our async scrolling fully generic (right now there are some edge cases where we can't do it), and working on some improvements to our MediaStreamGraph code for lower latency video and audio.
April 09, 2014 11:54 AM
Fighting Media Narratives
... is perhaps futile. A lot of what I have to say has already been said. Yet, in case it makes a difference:
- Almost all Mozilla staff supported keeping Brendan Eich as CEO, including many prominent LGBT staff, and many made public statements to that effect. A small number of Tweeters calling for him to step down got all the media attention. The narrative that Mozilla staff as a group "turned against Brendan" is false. It should go without saying, but most Mozilla staff, especially me, are very upset that he's gone. I've known him, worked with him and fought alongside him (and sometimes against him :-) ) for fourteen years and having him ripped away like this is agonizing.
- The external pressure for Brendan to step down was the primary factor driving the entire situation. The same issue exploded in 2012 but there was less pressure and he got through it. No doubt Mozilla could have handled it better but the narrative that blames Mozilla for Brendan's departure misses the big picture. Boycotting Mozilla (or anyone for that matter) for cracking under intense pressure is like shooting a shell-shocked soldier.
- As a Christian, Mozilla is as friendly a workplace as any tech organization I've known --- which is to say, not super friendly, but unproblematic. Because of our geographic spread --- not just of headcount, but of actual power --- and our broad volunteer base I think we have more real diversity than many of our competitors. The narrative that Mozilla as a group has landed on one side of the culture war is false, or at least no more true than for other tech organizations. In fact one thing I've really enjoyed over the last couple of weeks is seeing a diverse set of Mozilla people pull together in adversity and form even closer bonds.
I'll also echo something else a lot of people are saying: we have to fix Internet discourse somehow. It's toxic. I wrote about this a while back, and this episode has made me experience the problem at a whole new level. I'll throw one idea out there: let's communicate using only recorded voice+video messages, no tweets, no text. If you want to listen to what I have to say, you have to watch me say it, and hopefully that will trigger some flickers of empathy. If you want me to listen to you, you have to show me your face. Want to be anonymous, do it the old-fashioned way and wear a mask. Yeah I know we'd have to figure out searchability, skimmability, editing, etc etc. Someone get to work on it.
April 09, 2014 11:31 AM
Mozilla Matters
How much does the world need Mozilla? A useful, if uncomfortable, thought experiment is to consider what the world would be like without Mozilla.
Consider the world of Web standards. Microsoft doesn't contribute much to developing new Web features, and neither does Apple these days. Mozilla and Google do. Google, per Blink's own policy (mirroring our own), relies on feedback and implementation by other browser vendors, i.e. usually us. If you take Mozilla out of the equation, it's going to be awfully hard to apply the "two independent implementations" test for new Web features. (Especially since Webkit and Blink still have so much shared heritage.) For example it's hard to see how important stuff like Web Audio, WebGL and WebRTC would have become true multi-vendor standards without us. Without us, most progress would depend on unilateral extensions by individual vendors. That has all the downsides of a single-implementation ecosystem --- a single implementation's bugs become the de-facto standard; the standards process, if there even is one, becomes irrelevant; and even more power accrues to the dominant vendor.
In the bigger picture, it would be dangerous to leave the Web --- and the entire application platform space --- in the hands of three very large US corporations who have few scruples and who each have substantial non-Web interests to protect, including proprietary desktop and mobile platforms. It has always been very important that there be a compelling vendor-neutral platform for people to deploy content and apps on, a platform without gatekeepers and without taxes. The Web is that platform ---- for now. Mozilla is dedicated to preserving and enhancing that, but the other vendors are not.
Mozilla has plenty of faults, and lots of challenges, but our mission is as important as ever ... probably more important, given how computing devices and the Internet penetrate more and more of our lives. More than ever, pursuing our mission is the greatest good I can do with the talents God has given me.
April 09, 2014 10:34 AM
April 06, 2014
Robert O'Callahan -- Responsible Self-Censorship
People may be wondering why I, as one of the most notorious Christians at Mozilla, have been silent during the turmoil of recent days. It is simply because I haven't been able to think of anything to say that won't cause more harm in the current environment. It is not because I am afraid, malicious, or suffering from a lack of freedom of speech in any way. As soon as I have the environment and the words to say something helpful, I will.
By "the current environment" I mean the situation where many of the culture warriors of all stripes are picking over every utterance looking for something to be angry against or something to fuel their anger against others.
Update Actually, right after posting that, I thought of something to say.
I have never loved the people of Mozilla as much as I do right now. With just a few exceptions, your commitment and grace under fire is inspiring and (in the old-fashioned sense) awesome. I'm glad I'm here for this.
April 06, 2014 09:27 PM
March 26, 2014
Robert O'Callahan -- Conflict
I was standing in a long line of people waiting to get their passports checked before departing Auckland to the USA. A man pushed into the line ahead of me. People around me sighed and muttered, but no-one did anything. This triggered my "if no-one else is willing to act, it's up to me" instinct, so I started a conversation:
Roc: Shouldn't you go to the back of the line?
Man: I'm in a hurry to get to my flight.
There are only two flights to the USA in the immediate future and AFAIK neither of them is imminent.
Roc: Which flight are you on?
Man: What's the big deal? I'm hardly going to slow you down.
Roc: But it's rude.
Man: So what do you want me to do?
Roc: I want you to move to the back of the line.
Man: You're going to have to make me.
At that point I couldn't think of anything to say or do so I let it go. It turned out that he was on my flight and it would have been unpleasant if he'd ended up sitting next to me.
I was a bit shocked by this incident, though I probably shouldn't have been. This kind of unapologetic rudeness is not something I encounter very often from strangers in face-to-face situations. I guess that means I'm fortunate. Surprisingly I felt quite calm during the conversation and only felt rage later.
Embarrassingly-much-later, it dawned on me that Jesus wants me to forgive this man. I am now making the effort to do so.
March 26, 2014 09:46 PM
Introducing rr
Bugs that reproduce intermittently are hard to debug with traditional techniques because single stepping, setting breakpoints, inspecting program state, etc, is all a waste of time if the program execution you're debugging ends up not even exhibiting the bug. Even when you can reproduce a bug consistently, important information such as the addresses of suspect objects is unpredictable from run to run. Given that software developers like me spend the majority of their time finding and fixing bugs (either in new code or existing code), nondeterminism has a major impact on my productivity.
Many, many people have noticed that if we had a way to reliably record program execution and replay it later, with the ability to debug the replay, we could largely tame the nondeterminism problem. This would also allow us to deliberately introduce nondeterminism so tests can explore more of the possible execution space, without impacting debuggability. Many record and replay systems have been built in pursuit of this vision. (I built one myself.) For various reasons these systems have not seen wide adoption. So, a few years ago we at Mozilla started a project to create a new record-and-replay tool that would overcome the obstacles blocking adoption. We call this tool rr.
Here are some of our key design parameters:
- We focused on debugging Firefox. Firefox is a complex application, so if rr is useful for debugging Firefox, it is very likely to be generally useful. But, for example, we have not concerned ourselves with record and replay of hostile binaries, or highly parallel applications. Nor have we explored novel techniques just for the sake of novelty.
- We prioritized deployability. For example, we deliberately avoided modifying the OS kernel and even worked hard to eliminate the need for system configuration changes. Of course we ensured rr works on stock hardware.
- We placed high importance on low run-time overhead. We want rr to be the tool of first resort for debugging. That means you need to start getting results with rr about as quickly as you would if you were using a traditional debugger. (This is where my previous project Chronomancer fell down.)
- We tried to take a path that would lead to a quick positive payoff with a small development investment. A large speculative project in this area would fall outside Mozilla's resources and mission.
- Naturally, the tool has to be free software.
I believe we've achieved those goals with our 1.0 release.
There's a lot to say about how rr works, and I'll probably write some followup blog posts about that. In this post I focus on what rr can do.
rr records and replays a Linux process tree, i.e. an initial process and the threads and subprocesses (indirectly) spawned by that process. The replay is exact in the sense that the contents of memory and registers during replay are identical to their values during recording. rr provides a gdbserver interface allowing gdb to debug the state of replayed processes.
Here are performance results for some Firefox testsuite workloads: These represent the ratio of wall-clock run-time of rr recording and replay over the wall-clock run-time of normal execution (except for Octane, where it's the ratio of the normal execution's Octane score over the record/replay Octane scores ... which, of course, are the same). It turns out that reftests are slow under rr because Gecko's current default Linux configuration draws with X11, hence the rendered pixmap of every test and reference page has to be slurped back from the X server over the X socket for comparison, and rr has to record all of that data. So I also show overhead for reftests with Xrender disabled, which causes Gecko to draw locally and avoid the problem.
I should also point out that we stopped focusing on rr performance a while ago because we felt it was already good enough, not because we couldn't make it any faster. It can probably be improved further without much work.
Debugging with rr
The rr project landing page has a screencast illustrating the rr debugging experience. rr lets you use gdb to debug during replay. It's difficult to communicate the feeling of debugging with rr, but if you've ever done something wrong during debugging (e.g. stepped too far) and had that "crap! Now I have to start all over again" sinking feeling --- rr does away with that. Everything you already learned about the execution --- e.g. the addresses of the objects that matter --- remains valid when you start the next replay. Your understanding of the execution increases monotonically.
rr has limitations. Some are inherent to its design, and some are fixable with more work.
- rr emulates a single-core machine. So, parallel programs incur the slowdown of running on a single core. This is an inherent feature of the design. Practical low-overhead recording in a multicore setting requires hardware support; we hope that if rr becomes popular, it will motivate hardware vendors to add such support.
- rr cannot record processes that share memory with processes outside the recording tree. This is an inherent feature of the design. rr automatically disables features such as X11 shared memory for recorded processes to avoid this problem.
- For the same reason, rr tracees cannot use direct-rendering user-space GL drivers. To debug GL code under rr we'll need to find or create a proxy driver that doesn't share memory with the kernel (something like GLX).
- rr requires a reasonably modern x86 CPU. It depends on certain performance counter features that are not available in older CPUs, or in ARM at all currently. rr works on Intel Ivy Bridge and Sandy Bridge microarchitectures. It doesn't currently work on Haswell and we're investigating how to fix that.
- rr currently only supports x86 32-bit processes. (Porting to x86-64 should be straightforward but it's quite a lot of work.)
- rr needs to explicitly support every system call executed by the recorded processes. It already supports a wide range of syscalls --- syscalls used by Firefox --- but running rr on more workloads will likely uncover more syscalls that need to be supported.
- When used with gdb, rr does not provide the ability to call program functions from the debugger, nor does it provide hardware data breakpoints. These issues can be fixed with future work.
We believe rr is already a useful tool. I like to use it myself to debug Gecko bugs; in fact, it's the first "research" tool I've ever built that I like to use myself. If you debug Firefox at the C/C++ level on Linux you should probably try it out. We would love to have feedback --- or better still, contributions!
If you try to debug other large applications with rr, you will probably encounter rr bugs. Therefore we are not yet recommending rr for general-purpose C/C++ debugging. However, if rr interests you, please consider trying it out and reporting/fixing any bugs that you find.
We hope rr is a useful tool in itself, but we also see it as just a first step. rr+gdb is not the ultimate debugging experience (even if gdb's backtracing features get an rr-based backend, which I hope happens!). We have a lot of ideas for making vast improvements to the debugging experience by building on rr. I hope other people find rr useful as a building block for their ideas too.
I'd like to thank the people who've contributed to rr so far: Albert Noll, Nimrod Partush, Thomas Anderegg and Chris Jones --- and to Mozilla Research, especially Andreas Gal, for supporting this project.
March 26, 2014 01:59 AM
March 23, 2014
Robert O'Callahan -- Mozilla And The Silicon Valley Cartel
This article, while overblown (e.g. I don't think "no cold calls" agreements are much of a problem), is an interesting read, especially the court exhibits attached at the end. One interesting fact is that Mozilla does not appear on any of Google's do-not-call lists --- yay us! (I can confirm first-hand that Mozilla people have been relentlessly cold-emailed by Google over the years. They stopped contacting me after I told them not to even bother trying until they open a development office in New Zealand.)
Exhibit 1871 is also very interesting since it appears the trigger that caused Steve Jobs to fly off the handle (which in turn led to the collusion at the heart of the court case) was Ben Goodger referring members of the Safari team for recruitment by Google, at least one of whom was formerly from Mozilla.
March 23, 2014 10:42 PM
March 16, 2014
Robert O'Callahan -- Taroko National Park
This weekend, in between the media and layout work weeks, I had time off so I thought I'd get out of Taipei and see a different part of Taiwan. On Alfredo's recommendation I decided to visit Taroko National Park and do some hiking. I stayed at Taroko Lodge and had a great time --- Rihang Su was an excellent host, very friendly and helpful.
On Saturday I took the train from Songshan station in Taipei to Xincheng. From there I went via the lodge to the park's eastern headquarters and did a short afternoon hike up to near Dali village and back down again. This was short in distance --- about 3.5 km each way in two and half hours --- but reasonably hard work since it's about a 900m vertical climb.
On Saturday night Rihang took the lodge guests to Hualien city for dinner at a hotpot buffet place. The food was reasonable and it was a fun dinner. There were instructions in English and in general I was surprised by how much English signage there was in Hualien (including at the supermarket) --- I had expected none.
On Sunday (today) I got up fairly early for the main goal of my trip: Zhuilu Old Trail. Rihang dropped me off at the western end around 8:15am and I walked the 10km length in a bit under four hours. You're supposed to allow for six, but that's probably a bit conservative, plus I'm fairly fast. It is hard work and tricky in places, however. This trail is quite amazing. There's one stretch in particular where the path winds along the cliff face, mostly about a meter wide, and there's nothing between you and a sheer drop of hundreds of meters --- except a plastic-clad steel cable on the cliff side of the track to hold onto. It reminded me of the National Pass track in Australia's Blue Mountains, but more intense. Much of the track has spectacular views of the Taroko Gorge --- sheer cliffs, marble boulders, lush forest, and mountain streams. In one place I was lucky enough to see macaque monkeys, which was thrilling since I've never seen monkeys in the wild before. The trail has an interesting history; it was originally constructed by the Japanese military in the early 20th century (probably using slave labour, though it wasn't clear from the signage), to improve their control over the native people of the area. Later the Japanese turned it into a tourist destination and that's what it is today. Along the trail there are rest areas where fortified "police stations" used to be.
After finishing that trail, since I was ahead of schedule I continued with the Swallow Grotto walk along the road westward up the gorge. This walk was also amazing but offers quite different views since you're near the bottom of the gorge --- and it's much easier. The walk ends at the bottom of the Zhuilu cliff, which is neck-craningly massive. After that I got picked up and went to the train station to head straight back to Taipei.
This was definitely a very good way to see a bit of Taiwan that's not Taipei. Shuttling around between the train station, the lodge, and hiking destinations, I got a glimpse of what life is like in the region --- gardens, farming, stray dogs, decrepit buildings, industry, narrow roads, etc. But the natural beauty of Taroko gorge was definitely the highlight of the trip. I enjoy hiking with friends and family very much, but it's nice to hike alone for a change; I can go at my own pace, not worry about anyone else, and be a bit more relaxed. All in all it was a great weekend getaway.
March 16, 2014 04:41 PM
I've been in Taiwan for a week. Last Sunday, almost immediately after checking into the hotel I went with a number of Mozilla people to Maokong Gondala and did a short hike around Maokong itself, to Yinhe Cave and back. I really enjoyed this trip. The gondala ride is quite long, and pretty. Maokong itself is devoted to the cultivation and vending of tea. I haven't seen a real tea plantation before, and I also got to see rice paddies up close, so this was quite interesting --- I'm fascinated by agricultural culture, which dominated so many people's lives for such a long time. Yinhe Cave is a cave behind a waterfall which has been fitted out as a Buddhist temple; quite an amazing spot. We capped off the afternoon by having dinner at a tea house in Maokong. A lot of the food was tea-themed --- deep-fried tea leaves, tea-flavoured omelette, etc. It was excellent, a really great destination for visitors to Taipei.
March 16, 2014 10:12 AM
March 10, 2014
Robert O'Callahan -- Introducing Chaos Mode
Some test failures are hard to reproduce. This is often because code (either tests or implementation code) makes unwarranted assumptions about the environment, assumptions that are violated nondeterministically. For example, a lot of tests have used setTimeout to schedule test code and assumed certain events will have happened before the timeout, which may not be true depending on effects such as network speeds and system load.
One way to make such bugs easier to reproduce is to intentionally exercise nondeterminism up to the limits of API contracts. For example, we can intentionally vary the actual time at which timers fire, to simulate the skew between CPU execution time and real time. To simulate different permitted thread schedules, we can assign random priorities to threads. Since hashtable iteration is not defined to have any particular order, we can make a hashtable iterator always start at a randomly chosen item.
I tried applying this to Gecko. I have patches that define a global "chaos mode" switch, and in several different places, if we're in chaos mode, we choose randomly between different valid behaviors of the code. Here's what the patches currently do:
- Sometimes yield just before dispatching an XPCOM event. This gives another thread a chance to win an event-dispatch race.
- On Linux, give threads a random priority and pin some threads to CPU 0 so they contend for CPU.
- Insert sockets in random positions in the list of polled sockets, to effectively randomize the priority of sockets in poll results.
- Similarly, when putting HTTP transactions into the HTTP transaction queue, randomly order them among other transactions with the same specified priority.
- Start hashtable iteration at a random entry.
- Scale timer firing times by random amounts (but don't vary the order in which timers fire, since that would violate the API contract).
- Shuffle mochitests and reftests so they run in random order.
Note that it can be valuable to make a single random choice consistently (for the same object, thread, etc) rather than making lots of fine-grained random decisions. For example, giving a thread a fixed low priority will starve it of CPU which will likely cause more extreme behavior --- hopefully more buggy behavior --- than choosing a random thread to run in each time quantum.
One important source of nondeterminism in Gecko is XPCOM event (i.e. HTML5 task) dispatch. A lot of intermittent bugs are due to event timing and ordering. It would be nice to exploit this in chaos mode, e.g. by choosing the next event to fire randomly from the set of pending events instead of processing them in dispatch order. Unfortunately we can't do that because a lot of code depend on the API contract that firing order follows dispatch order. In general it's hard to determine what the valid alternative firing orders are; the first item on my list above is my best approximation at the moment.
Important Questions
Does this find bugs? Yes:
Which chaos features are the most helpful for producing test failures? I don't know. It would be a very interesting experiment to do try pushes with different patches enabled to figure out which ones are the most important.
Does it help reproduce known intermittent bugs? Sometimes. In bug 975931 there was an intermittent reftest failure I could not reproduce locally without chaos mode, but I could reproduce with chaos mode. On the other hand chaos mode did not help reproduce bug 791480. Extending chaos mode can improve this situation.
Isn't this just fault injection? It's similar to fault injection (e.g. random out-of-memory triggering) but different. With fault injection typically we expect most tests to fail because faults like OOM are not fully recoverable. Chaos mode should not affect any correctness properties of the program.
Wasn't this already done by <insert project name>? Probably. I don't claim this is a new idea.
When is this going to land and how do I turn it on? It has already landed. To turn it on, change isActive() to return true in mfbt/ChaosMode.h. Shuffling of reftests and mochitests has to be done separately.
OK, so this can trigger interesting bugs, but how do we debug them? Indeed, chaos mode makes normal debugging workflows worse by introducing more nondeterminism. We could try to modify chaos mode to reproduce the random number stream between runs but that's inadequate because other sources of nondeterminism would interfere with the order in which the random number stream is sampled. But we are working on a much better solution to debugging nondeterministic programs; I'll be saying more about that very soon!
March 10, 2014 12:46 AM
March 09, 2014
Robert O'Callahan -- My Linkedin Account Is Dead, And Why Is Google Being Stupid?
I tried to delete my Linkedin account a while back, but I still get a lot of "invitation to connect on Linkedin" emails. I plan to never connect to anyone on Linkedin ever again, so whoever wants to connect, please don't be offended when it doesn't happen --- it's not about you.
Linkedin, I despise you for your persistent spam.
PS, I'm visiting Taiwan at the moment and wondering why Google uses that as a cue to switch its Web interface to Chinese even when I'm logged into my regular Google account. Dear Google, surely it is not very likely that my change of location to Taiwan indicates I have suddenly learned Chinese and forgotten English.
March 09, 2014 11:56 PM
Last updated: November 17, 2014 07:00 AM