From 123a486b8ff0fdbb0d05ab96c97d46cf026355fa Mon Sep 17 00:00:00 2001 From: Erin Bond Date: Tue, 11 Sep 2018 15:38:51 -0700 Subject: [PATCH 1/8] females -> female students --- pegasus/sites.v3/code.org/public/diversity.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pegasus/sites.v3/code.org/public/diversity.md b/pegasus/sites.v3/code.org/public/diversity.md index ee6aecb51b34c..764c9dd3be231 100644 --- a/pegasus/sites.v3/code.org/public/diversity.md +++ b/pegasus/sites.v3/code.org/public/diversity.md @@ -18,7 +18,7 @@ social: # Code.org and Diversity in Computer Science -The fields of software, computing and computer science are plagued by tremendous underrepresentation of women, African Americans, and Hispanics. In high school, the Advanced Placement exam in Computer Science has the worst gender diversity across all courses, with 78 percent participation by men and 22 percent by women. Participation by students of color is 13 percent. These underrepresented groups represent 65 percent of the entire US population! +The fields of software, computing and computer science are plagued by tremendous underrepresentation of women, African Americans, and Hispanics. In high school, the Advanced Placement exam in Computer Science has the worst gender diversity across all courses, with 78 percent participation by men and 22 percent by women. Participation by students of color is 13 percent. These underrepresented groups represent 65 percent of the entire US population! This problem extends into the software workplace, which suffers a similar lack of diversity. Obviously there are many issues to address to solve the entire problem of diversity in the tech workforce - from unconscious bias in hiring or retention practices, or capacity-building in university programs. We work with our [Diversity Advisory Council](/about/diversity-council) to help connect our work in K-12 to the bigger picture. @@ -52,7 +52,7 @@ Below are examples of some of the other tactics we use to address diversity issu ## Curriculum materials designed to recruit, engage, and retain women and underrepresented students of color -From elementary school all the way to high school, our courses are designed specifically with a focus on diversity and recruitment of traditionally underrepresented students. This is factored into the curriculum itself. For example, our high school course sequencing begins students with a unit on problem-solving, instead of jumping directly into computer programming - this allows students to learn together on an even playing field, even if some students have already learned to code in a summer camp or after school. +From elementary school all the way to high school, our courses are designed specifically with a focus on diversity and recruitment of traditionally underrepresented students. This is factored into the curriculum itself. For example, our high school course sequencing begins students with a unit on problem-solving, instead of jumping directly into computer programming - this allows students to learn together on an even playing field, even if some students have already learned to code in a summer camp or after school.
@@ -87,12 +87,12 @@ The results are most evident in our roll-out of the [CS Principles](https://code Our early advocacy efforts focused on allowing rigorous computer science courses to count towards math or science high school graduation requirements. Polling done by the Computer Science Teachers Association shows when women or underrepresented minorities decide whether or not to study Computer Science, a key factor in their choice is whether it counts for graduation credit. In the states where computer science counts towards high school graduation, enrollment by underrepresented minorities is 37 percent higher than in the states where it does not. Code.org’s past success at changing graduation policy in 20+ states will hopefully improve enrollment by underrepresented groups. As a simple example, [a comparison of neighboring school districts in Maryland](http://blog.code.org/post/121123281798/md) showed this policy resulting in a **tripling** of female representation in computer science. Overall, comparing the before and after enrollment of states that adjusted graduation policy with our help, we have seen a [24% increase](https://medium.com/@codeorg/does-making-cs-count-make-a-difference-7ab5ca6b8407) in computer science enrollment by female students. -Moving forward, our advocacy efforts are focused on expanding access to computer science, especially in underprivileged schools. By offering computer science in every school, [Arkansas has shown](http://amppob.com/nearly-4000-arkansas-students-enrolled-in-computer-science-in-fall-15/) a 300% increase in enrollment among females, and a 600% increase among African American females! This shows the massive impact of state policy on CS, and helps our advocacy efforts in other states. +Moving forward, our advocacy efforts are focused on expanding access to computer science, especially in underprivileged schools. By offering computer science in every school, [Arkansas has shown](http://amppob.com/nearly-4000-arkansas-students-enrolled-in-computer-science-in-fall-15/) a 300% increase in enrollment among female students, and a 600% increase among African American female students! This shows the massive impact of state policy on CS, and helps our advocacy efforts in other states. ## Marketing to change culture and break stereotypes with the Hour of Code campaign -The Hour of Code is an international campaign to recruit students to try computer science for one hour. A significant reason to do this is to break the stereotype that CS is only for nerdy boys - by showing students that everybody is doing it. This stereotype is a prime reason girls avoid CS. The #1 way we’re organizing participation is by recruiting teachers to offer an Hour of Code in their classroom. These are math teachers, english teachers, science teachers, who have a 50/50 balance of boys and girls, and can communicate that anybody can try. +The Hour of Code is an international campaign to recruit students to try computer science for one hour. A significant reason to do this is to break the stereotype that CS is only for nerdy boys - by showing students that everybody is doing it. This stereotype is a prime reason girls avoid CS. The #1 way we’re organizing participation is by recruiting teachers to offer an Hour of Code in their classroom. These are math teachers, english teachers, science teachers, who have a 50/50 balance of boys and girls, and can communicate that anybody can try. A [recent study](/files/HourOfCodeImpactStudy_Jan2017.pdf) of students participating in the Hour of Code showed significant improvements in attitudes and self-efficacy towards computer science, *especially among female students.* @@ -118,4 +118,4 @@ We’ve also distributed [recruitment posters, videos, and other marketing mater | The teachers attending our professional development | 86% female |

-We are also proud for [USA Today to rank Code.org among the top 25 small-to-medium business workplaces for women](https://www.usatoday.com/story/money/2017/11/28/godaddy-costco-adobe-among-comparablys-best-companies-women/889348001/), according to the women on our team. \ No newline at end of file +We are also proud for [USA Today to rank Code.org among the top 25 small-to-medium business workplaces for women](https://www.usatoday.com/story/money/2017/11/28/godaddy-costco-adobe-among-comparablys-best-companies-women/889348001/), according to the women on our team. From 9958dcb9247f7421224acdbe33eef42893820910 Mon Sep 17 00:00:00 2001 From: Erin Bond Date: Tue, 11 Sep 2018 16:42:21 -0700 Subject: [PATCH 2/8] more females -> females students across pegasus --- dashboard/app/views/home/_privacy_notice.md | 20 +++++++++---------- .../public/about/evaluation/outcomes.md | 12 +++++------ .../public/about/evaluation/summary.md | 20 +++++++++---------- .../code.org/public/administrators.md | 2 +- .../code.org/public/equityDocs/index.md | 12 +++++------ .../code.org/public/privacy-notice.md | 20 +++++++++---------- 6 files changed, 41 insertions(+), 45 deletions(-) diff --git a/dashboard/app/views/home/_privacy_notice.md b/dashboard/app/views/home/_privacy_notice.md index fd7add18c9add..9704904458a9e 100644 --- a/dashboard/app/views/home/_privacy_notice.md +++ b/dashboard/app/views/home/_privacy_notice.md @@ -3,7 +3,7 @@ Date of Last Revision: August 24, 2016 Code.org® is a non-profit dedicated to expanding participation in computer science by making it available in more schools, and increasing participation by women and underrepresented students of color. -Code.org is committed to protecting the privacy of children who use our sites and applications. This notice describes our practices of collecting, using, and disclosing personal information from children under 13. Please review our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>) for additional information. These policies are in accordance with the U.S. Children’s Online Privacy Protection Act (COPPA). If you have any questions about these policies, you may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. +Code.org is committed to protecting the privacy of children who use our sites and applications. This notice describes our practices of collecting, using, and disclosing personal information from children under 13. Please review our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>) for additional information. These policies are in accordance with the U.S. Children’s Online Privacy Protection Act (COPPA). If you have any questions about these policies, you may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. ## 1. Authorization from the School @@ -15,7 +15,7 @@ Providing access to students under the age of 13 means that they can create and We will not collect or store any such information until we have received your consent. If you are an existing Code Studio teacher, your students will continue to have access to Code Studio, but they won’t have access to App Lab or Game Lab if they are under 13 until you explicitly agree to our updated [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>). - + ## 2. Information We Collect and Use Code.org only collects information from students for the use and benefit of the school, and for no commercial purpose. Code.org does not create marketing profiles and online behavioral advertising campaigns using information collected from or created by students. @@ -39,7 +39,7 @@ Display Name (eg “Cool Coder” or “John”) | Mandatory | To provide studen Age (*Not* birthdate) | Mandatory | To understand the developmental stage of students to offer an age-appropriate experience for each student. We use this field to ensure we don’t allow students under age 13 to access age-inappropriate features (such as sharing their coding projects on social media). We collect ages (e.g. 16), as opposed to birthdates (e.g. Feb 13, 1998). 1-way hash of email address (NOT the actual email addresses, which are collected in the web browser but never transmitted to Code.org and thus never stored by us) | Optional if account created by teacher or parent; Mandatory if student signs up directly| If a student creates an account directly, an email address is required. If the account is created by a teacher or parent, it is optional.

Even if provided, student email addresses are NOT stored by Code.org in a retrievable format. To protect student privacy, we only store a 1-way hash of the email address. We do not have any way of sending email to these students or retrieving their actual email address. It is used only for purposes of login. See the [“Student Email Addresses”](<%= CDO.code_org_url('/privacy/#studentemails') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for more details. Login time, IP address, and other technical data | Mandatory (automatic) | This data helps Code.org troubleshoot any problems users experience. It also helps Code.org understand usage patterns, to guide the build out of servers to support all users, and to enable updating the site while minimizing service disruption. See the [“technical information”](<%= CDO.code_org_url('/privacy/#techinfo') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for additional details. -Gender | Optional | This information is only used in aggregate, to measure the percentage of students that are male or female or to measure how males or females react to different computer science challenges, to track our progress towards reducing the gender gap in computer science. +Gender | Optional | This information is only used in aggregate, to measure the percentage of students that are male or female or to measure how male students or female students react to different computer science challenges, to track our progress towards reducing the gender gap in computer science. Race | Optional | Students ages 13 and over have an option to indicate their race. For students under age 13 we do not ask individual race, but we ask the teacher to optionally estimate the racial distribution of the entire classroom.

This information is only used in aggregate, to measure the percentage of students from underrepresented minorities and their aggregate reaction to computer science challenges, in order to track our progress toward improving diversity in computer science. Progress in the course
1- Date/Time each stage is tried
2- Number of tries to solve a puzzle, and whether it was solved successfully or optimally
3- Information on how the student solved the puzzle including time to completion and whether they used hints
4- The code that the student submitted
5- Student-provided answers to simple assessments (e.g. multiple-choice questions) | Mandatory (automatic) | This information is displayed to students and their teachers to see their progress in a course, to see the code they’ve created, and to identify topics they need help with. It also lets students pick up where they left off if they log out and login later. See [example progress report](http://code.org/files/student-progress.pdf), and see the [“technical information”](<%= CDO.code_org_url('/privacy/#techinfo') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for additional details.

This data also helps Code.org improve the course effectiveness. For example, if a puzzle is too hard, Code.org may take action (like [providing better hints](http://code.org/hints)) to improve the learning process. Student Projects - apps, animations, stories, or code-art | Automatic (for students who create such projects)
Creating apps and projects is part of our course progressions.|The code and underlying assets for these apps are stored by Code.org, so that students can retrieve their projects each time they log in.

When students work in the context of a classroom, their teacher also has access to view the projects created by any students in the classroom.

Student projects and code creations each have a custom URL that students can use to share with friends or their teacher, or post to the Code.org public gallery. On the public gallery, projects are displayed with only the first letter of the student’s name to protect student privacy.

Students may “remix” (and change or improve upon) projects made by themselves or by other students.
Students over age 13 can also, at their discretion, post their projects to social media.

In our elementary school courses, students create stories, games or art using tools, such as Play Lab, which are limited to using artwork and sounds provided by Code.org. Students can write dialogues for these projects. Text provided by students in these tools will be automatically analyzed to prevent sharing any personal email addresses, phone numbers, or street addresses.

Our middle school and high school courses teach students to make more mature apps and games. These tools allow the students to upload custom photos, sounds and/or videos. (see below) @@ -54,20 +54,20 @@ In addition to the information that your students may give us directly, we may c To track information about use of our Sites, we use various technological tools. For example, like most websites, whether or not the user is a registered member, we may send one or more cookies – small text files containing a string of alphanumeric characters – to the user’s computer. Cookies remember information about the user’s activities on a website and enable us to provide the user with a more personalized learning experience. Code.org may use both session cookies and persistent cookies. A session cookie disappears automatically after the browser is closed. A persistent cookie remains after the browser is closed and may be used by the browser on subsequent visits to the Website. Please note that without cookies, the students will not have access to certain services and features on the Website. -A pixel tag (also known as a “clear GIF” or “web beacon”) is a tiny image – typically just one-pixel – that can be placed on a Web page or in an email to tell us when the user has displayed that page or opened that email. +A pixel tag (also known as a “clear GIF” or “web beacon”) is a tiny image – typically just one-pixel – that can be placed on a Web page or in an email to tell us when the user has displayed that page or opened that email. The list of third-party operators whose technology we’ve used to build Code Studio, and who may collect persistent identifiers as part of the implementation our sites and applications is available in the [“Third Parties”](<%= CDO.code_org_url('/privacy/#thirdparties') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>). ### Geolocation -We may collect and store information about the school or classroom location to provide educational experiences or email updates that are tailored for your region. The location information we have access to may include: (1) a ZIP or postal code, if you (as the teacher) provide one to us in order to allow us to display the classroom location on a map or in search results for parents looking for schools that teach computer science; and (2) the approximate geographic region the computers or mobile devices are located in, as determined from the IP addresses (although you change the settings on the computers or mobile devices to prevent them from providing us with such IP information). Code.org does not request or collect exact GPS locations, and your billing and shipping addresses are not used for these purposes. +We may collect and store information about the school or classroom location to provide educational experiences or email updates that are tailored for your region. The location information we have access to may include: (1) a ZIP or postal code, if you (as the teacher) provide one to us in order to allow us to display the classroom location on a map or in search results for parents looking for schools that teach computer science; and (2) the approximate geographic region the computers or mobile devices are located in, as determined from the IP addresses (although you change the settings on the computers or mobile devices to prevent them from providing us with such IP information). Code.org does not request or collect exact GPS locations, and your billing and shipping addresses are not used for these purposes. ## 3. Disclosure of Information Code.org does not rent or sell personal information that we collect from the students, or exploit it for financial gain in any way. Code.org will never share or grant rights to personal information with other third-party organizations to use without your express prior authorization, except as part of a specific program or feature for which you will have the explicit ability and choice to opt-in. In particular, we do not share any Personal Information you provide with our donors or sponsors. -However, Code.org may disclose anonymous or aggregate data to learn more about our users. In certain occasions, Code.org may work with third parties (such as educational researchers and universities) to improve our services or offerings. We may disclose automatically collected and other aggregate non-personal information to authorized partners to conduct research on online education or assist in understanding the usage, viewing, and demographic patterns for certain programs, content, services, promotions, and/or functionality on the Website. We may also publish anonymized information about student performance on our tutorials and Websites; however, we will never publicly disclose personal information in these reports. Data about student performance will remain anonymized, but aggregated, anonymized data over large populations of students may be reported by demographic criteria such as age, general location, gender, ethnicity, and socioeconomic status. +However, Code.org may disclose anonymous or aggregate data to learn more about our users. In certain occasions, Code.org may work with third parties (such as educational researchers and universities) to improve our services or offerings. We may disclose automatically collected and other aggregate non-personal information to authorized partners to conduct research on online education or assist in understanding the usage, viewing, and demographic patterns for certain programs, content, services, promotions, and/or functionality on the Website. We may also publish anonymized information about student performance on our tutorials and Websites; however, we will never publicly disclose personal information in these reports. Data about student performance will remain anonymized, but aggregated, anonymized data over large populations of students may be reported by demographic criteria such as age, general location, gender, ethnicity, and socioeconomic status. For a more detailed explanation of how we share and transfer data, please read the [“How We Share or Transfer Data”](<%= CDO.code_org_url('/privacy/#sharedata') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>). @@ -77,9 +77,7 @@ At any time, you (as the teacher) can refuse to permit us to collect further per You may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101, to request access to review, change, or delete a student’s personal information. -## 5. Revoking and Deleting Your Consent -At any time, you may revoke your consent, refuse to allow us to further use or collect your students’ personal information, and direct us to delete the information. If you revoke your consent, we will no longer permit your students to participate in certain activities on Code.org. Your students will continue to have access to other activities on Code.org which do not require your students’ personal information. - -To revoke your consent, write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. - +## 5. Revoking and Deleting Your Consent +At any time, you may revoke your consent, refuse to allow us to further use or collect your students’ personal information, and direct us to delete the information. If you revoke your consent, we will no longer permit your students to participate in certain activities on Code.org. Your students will continue to have access to other activities on Code.org which do not require your students’ personal information. +To revoke your consent, write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. diff --git a/pegasus/sites.v3/code.org/public/about/evaluation/outcomes.md b/pegasus/sites.v3/code.org/public/about/evaluation/outcomes.md index 7945a45c5b9e2..38aa047e3ada6 100644 --- a/pegasus/sites.v3/code.org/public/about/evaluation/outcomes.md +++ b/pegasus/sites.v3/code.org/public/about/evaluation/outcomes.md @@ -9,7 +9,7 @@ theme: responsive ## What learning outcomes have Code.org students achieved? -[Code Studio](http://studio.code.org), our online learning platform, is designed to host our interactive CS courses. Students are using [Code Studio](https://studio.code.org), on their own and in classroom settings, to demonstrate the use of a number of computer programming concepts at the scale of tens of thousands of classrooms. +[Code Studio](http://studio.code.org), our online learning platform, is designed to host our interactive CS courses. Students are using [Code Studio](https://studio.code.org), on their own and in classroom settings, to demonstrate the use of a number of computer programming concepts at the scale of tens of thousands of classrooms. We saw phenomenal growth in the 2014-15 school year for both student and teacher account creation. @@ -23,9 +23,9 @@ We saw phenomenal growth in the 2014-15 school year for both student and teacher *Source: Code Studio database*

-The diversity of the audience we are reaching is also interesting to note. Across all student accounts that self-reported demographic data, **43% self-identified as female** and **37% were identified as African-American or Hispanic** by their teacher. +The diversity of the audience we are reaching is also interesting to note. Across all student accounts that self-reported demographic data, **43% self-identified as female** and **37% were identified as African-American or Hispanic** by their teacher. -By comparison, the [demographic breakdown](/files/APCS-2014.pdf) of students taking the most recent AP Computer Science exam in high school was **20% females** and **17% African American, Hispanic, or other historically underrepresented students**. +By comparison, the [demographic breakdown](/files/APCS-2014.pdf) of students taking the most recent AP Computer Science exam in high school was **20% female students** and **17% African American, Hispanic, or other historically underrepresented students**. --- @@ -46,7 +46,7 @@ Code.org offers a series of 20-hour long courses we refer to as ["Computer Scien

-In looking at our completion data for any of our three 20-hour [CS Fundamentals](/educate/k5) courses versus our shorter [hour long tutorials](/learn), we see unsurprisingly **a higher completion rate** for shorter tutorials than we do for courses which require more time and expertise to complete. +In looking at our completion data for any of our three 20-hour [CS Fundamentals](/educate/k5) courses versus our shorter [hour long tutorials](/learn), we see unsurprisingly **a higher completion rate** for shorter tutorials than we do for courses which require more time and expertise to complete. --- @@ -54,13 +54,13 @@ In looking at our completion data for any of our three 20-hour [CS Fundamentals] Students working on Code Studio courses 2-4 with a teacher’s guidance **are more likely to complete** the course than students working on their own, outside of a classroom setting. This shows how students who complete a course with adult guidance have an advantage, in terms of their overall persistence in learning CS. Teachers also benefit because Code.org focuses on teacher support and professional development. -Students who are learning with the support of their teacher in a classroom setting complete courses more than those learning on their own, supporting Code.org’s focus on a mix of teacher development and self-guided material. +Students who are learning with the support of their teacher in a classroom setting complete courses more than those learning on their own, supporting Code.org’s focus on a mix of teacher development and self-guided material. --- ## Measuring Learning Outcomes for ECS -During the 2014-15 school year, Code.org partnered with [Exploring Computer Science (ECS)](http://www.exploringcs.org) to deliver professional development for the program at scale. In order to gauge the impact of that work, Code.org conducted a pilot evaluation of student learning outcomes in [Exploring Computer Science (ECS)](http://www.exploringcs.org) using a concepts assessment developed with Outlier as well as a programming test developed independently on Code Studio. Results are promising, but more rigorous design is needed to validate and measure mastery learning and transfer. +During the 2014-15 school year, Code.org partnered with [Exploring Computer Science (ECS)](http://www.exploringcs.org) to deliver professional development for the program at scale. In order to gauge the impact of that work, Code.org conducted a pilot evaluation of student learning outcomes in [Exploring Computer Science (ECS)](http://www.exploringcs.org) using a concepts assessment developed with Outlier as well as a programming test developed independently on Code Studio. Results are promising, but more rigorous design is needed to validate and measure mastery learning and transfer. A [programming challenge](https://studio.code.org/s/CodeStudioPuzzleChallenge/) was designed by Code.org and piloted to about 1,000 ECS students via Code Studio to see if student programming skills would transfer to a different environment. The data below shows the percentage of students who successfully completed a puzzle challenge related to a particular concept/task (untimed, no hints, unlimited attempts). Further work is required to validate and revise the questions. diff --git a/pegasus/sites.v3/code.org/public/about/evaluation/summary.md b/pegasus/sites.v3/code.org/public/about/evaluation/summary.md index 01610078fdd71..14ecbb5196fc8 100644 --- a/pegasus/sites.v3/code.org/public/about/evaluation/summary.md +++ b/pegasus/sites.v3/code.org/public/about/evaluation/summary.md @@ -7,7 +7,7 @@ theme: responsive # Code.org's Impact on Computer Science Education: June 2014 - June 2015 Program Report -Code.org is is a nonprofit dedicated to expanding participation in computer science by making it available in more schools, and increasing participation by women and underrepresented students of color. +Code.org is is a nonprofit dedicated to expanding participation in computer science by making it available in more schools, and increasing participation by women and underrepresented students of color. Code.org partners with [Outlier Research & Evaluation at the University of Chicago](http://outlier.uchicago.edu/), a third-party evaluator, to understand our impact and progress towards meeting our mission. This report summarizes our program evaluation work for June 2014 through June 2015, which focused on answering the following key questions: @@ -19,7 +19,7 @@ Code.org partners with [Outlier Research & Evaluation at the University of Chica - [What next steps can Code.org take to improve our programs?](#nextsteps) ## Evaluation Design -We have gathered data from a number of sources -- internal data collected via Code Studio as well as external data collected by third parties -- in order to evaluate our impact and make decisions about future program direction. A [full summary](http://outlier.uchicago.edu/evaluation_codeorg/) of Outlier's findings is available [on their website](http://outlier.uchicago.edu/evaluation_codeorg/). All other data cited in this summary are available [upon request](mailto:info@code.org). +We have gathered data from a number of sources -- internal data collected via Code Studio as well as external data collected by third parties -- in order to evaluate our impact and make decisions about future program direction. A [full summary](http://outlier.uchicago.edu/evaluation_codeorg/) of Outlier's findings is available [on their website](http://outlier.uchicago.edu/evaluation_codeorg/). All other data cited in this summary are available [upon request](mailto:info@code.org). --- @@ -30,7 +30,7 @@ From June 2014 through June 2015, over 11,000* teachers across K-12 attended Cod - a day-long, face-to-face workshop delivered to K-5 teachers via our [Affiliate Program](/educate/k5-affiliates) or via our [District Partnership Program](/educate/k5-district-partnership) - a multi-phase, year-long blended PD experience delivered to Middle and High School teachers via our [District Partnership Program](/educate/districts) -## Key Finding: +## Key Finding: Through our professional development efforts, we are helping a large, diverse audience of K-12 educators feel more prepared to teach Computer Science using [Code.org](/educate) resources.

### Table: Overall Participation and Satisfaction in Code.org Professional Development, June 1 2014 - June 15 2015 @@ -55,7 +55,7 @@ Through our professional development efforts, we are helping a large, diverse au In 2014-15, Code.org [partnered with 35 districts](/educate/districts) across the United States to bring curriculum, professional development and support to over 500 new CS teachers. -## Key Finding: +## Key Finding: Through our district partnerships, we are helping districts increase the priority of computer science locally in the face of some big challenges.

Additionally, Code.org studied the attitudes of administrators and counselors in an effort to understand the relationship between school leadership and program sustainability. Further study is warranted. @@ -66,7 +66,7 @@ Additionally, Code.org studied the attitudes of administrators and counselors in ## What learning outcomes have Code.org students achieved? -## Key Finding: +## Key Finding: Students across thousands of Code.org classrooms have demonstrated the ability to use computer science and computer programming concepts, starting as early as elementary school.

[Code Studio](http://studio.code.org), our online learning platform, is designed to host our interactive CS courses. All online courses are complemented by lesson plans teachers can deliver in the classroom. We saw phenomenal growth in the 2014-15 school year for both student and teacher account creation. @@ -81,11 +81,11 @@ Students across thousands of Code.org classrooms have demonstrated the ability t *Source: Code Studio database*

-The diversity of the audience we are reaching is also interesting to note. Across all student accounts that reported demographic data, **43% self-identified as female** and **37% were identified as African-American or Hispanic** by their teacher. +The diversity of the audience we are reaching is also interesting to note. Across all student accounts that reported demographic data, **43% self-identified as female** and **37% were identified as African-American or Hispanic** by their teacher. -By comparison, the [demographic breakdown](/files/APCS-2014.pdf) of students taking the most recent AP Computer Science exam in high school was **20% females** and **17% African American, Hispanic, or other historically underrepresented students**. +By comparison, the [demographic breakdown](/files/APCS-2014.pdf) of students taking the most recent AP Computer Science exam in high school was **20% female students** and **17% African American, Hispanic, or other historically underrepresented students**. -Overall, Code Studio course participation is high, and basic measures of learning are encouraging. Students who are learning with the support of their teacher in a classroom setting complete courses more than those learning on their own, supporting Code.org’s focus on a mix of teacher development and self-guided material. +Overall, Code Studio course participation is high, and basic measures of learning are encouraging. Students who are learning with the support of their teacher in a classroom setting complete courses more than those learning on their own, supporting Code.org’s focus on a mix of teacher development and self-guided material.

[](/about/evaluation/outcomes)

@@ -113,7 +113,7 @@ Although we are still early in terms of making a direct link between computer sc Our 2015-16 evaluation plan, developed in concert with [Outlier](http://outlier.uchicago.edu/), covers: - Student outcomes on curricular (part of the course materials) and extra-curricular assessments (general CS concepts test). -- Changes in student attitudes about the value and relevance of computer science, sense of belonging, and self-efficacy, using pre/post survey data. +- Changes in student attitudes about the value and relevance of computer science, sense of belonging, and self-efficacy, using pre/post survey data. - Program improvement based on classroom implementation studies and teacher feedback. - Teacher pre/post attitudinal and pedagogical outcomes. - Effect of CS in Algebra and K-5 courses on Math/Science/Reading scores. @@ -129,4 +129,4 @@ Internally, through participant surveys and data science projects, we will conti ## Learn More About Our Approach In this recorded session, you’ll hear from [Pat Yongpradit](http://twitter.com/mryongpradit), Chief Academic Officer at [Code.org](https://code.org) and [Heather King](http://outlier.uchicago.edu/outlier/team/), program manager at [Outlier](http://outlier.uchicago.edu/), about the results of our programs over the course of the 2014-15 school year. What did teachers take away from professional development? What did students learn? What did we learn from our district partnerships? Learn from our successes and challenges as we discuss how we might work together as a CS education community to increase access to CS education for all. - \ No newline at end of file + diff --git a/pegasus/sites.v3/code.org/public/administrators.md b/pegasus/sites.v3/code.org/public/administrators.md index 9425a8bea3a57..d50ab82a8df70 100644 --- a/pegasus/sites.v3/code.org/public/administrators.md +++ b/pegasus/sites.v3/code.org/public/administrators.md @@ -160,7 +160,7 @@ Code.org has partnered with more than
diff --git a/pegasus/sites.v3/code.org/public/equityDocs/index.md b/pegasus/sites.v3/code.org/public/equityDocs/index.md index 65c668ec9f0b6..c4d0b5bd7209d 100644 --- a/pegasus/sites.v3/code.org/public/equityDocs/index.md +++ b/pegasus/sites.v3/code.org/public/equityDocs/index.md @@ -18,9 +18,9 @@ social: # Code.org and Diversity in Computer Science -The fields of software, computing and computer science are plagued by tremendous underrepresentation of women, African Americans, and Hispanics. In high school, the Advanced Placement exam in Computer Science has the worst gender diversity across all courses, with 78 percent participation by men and 22 percent by women. Participation by students of color is 13 percent. These underrepresented groups represent 65 percent of the entire US population! +The fields of software, computing and computer science are plagued by tremendous underrepresentation of women, African Americans, and Hispanics. In high school, the Advanced Placement exam in Computer Science has the worst gender diversity across all courses, with 78 percent participation by men and 22 percent by women. Participation by students of color is 13 percent. These underrepresented groups represent 65 percent of the entire US population! -This problem extends into the software workplace, which suffers a similar lack of diversity. Obviously there are many issues to address to solve the entire problem of diversity in the tech workforce - from unconscious bias in hiring or retention practices, or capacity-building in university programs. +This problem extends into the software workplace, which suffers a similar lack of diversity. Obviously there are many issues to address to solve the entire problem of diversity in the tech workforce - from unconscious bias in hiring or retention practices, or capacity-building in university programs. Our focus is primarily on K-12 learning, which is where the diversity problem begins: Among women, those who try AP Computer Science in high school are 10 times more likely to major in computer science. Black and Hispanic students who try AP Computer Science in high school are 7-8 times more likely to major in computer science (see tables 3, 7, 8 in [this document](http://research.collegeboard.org/sites/default/files/publications/2012/7/researchreport-2007-4-ap-students-college-analysis-five-year-academic-careers.pdf)). @@ -31,7 +31,7 @@ Addressing diversity issues is foundational to Code.org’s work, and is woven t ## Curriculum materials, professional development designed to recruit and retain women and underrepresented students of color -From elementary school all the way to high school, our courses are designed specifically with a focus on diversity and recruitment of traditionally underrepresented students. This is factored into the curriculum itself and also the professional development model. For example, our high school course sequencing begins students with a unit on problem-solving, instead of jumping directly into computer programming - this allows students to learn together on an even playing field, even if some students have already learned to code in a summer camp or after school. +From elementary school all the way to high school, our courses are designed specifically with a focus on diversity and recruitment of traditionally underrepresented students. This is factored into the curriculum itself and also the professional development model. For example, our high school course sequencing begins students with a unit on problem-solving, instead of jumping directly into computer programming - this allows students to learn together on an even playing field, even if some students have already learned to code in a summer camp or after school. Across all the [video tutorials](/educate/videos) we produce, we've recruited a wide cast of "lecturers", some of which are celebrity geeks like Bill Gates or Mark Zuckerberg, but others are women in computing such as Paola Minaya (hispanic engineer at Microsoft), Tess Winlock (female engineer at Google), Makinde Adeagbo (early African American engineer at Facebook and Pinterest), or [Kate Starbird](http://en.wikipedia.org/wiki/Kate_Starbird) (WNBA basketball player, now computer scientist at University of Washington). By casting a wide range of lecturers, diverse CS role models from different industries are baked into our curriculum materials. @@ -52,7 +52,7 @@ The results speak for themselves: In 2014 we offered incentives to teachers (via [DonorsChoose.org](http://www.donorschoose.org/)) tied directly to recruitment of more girls in K-8 CS classes they establish with us. (we offered $250 per teacher for recruiting more than 10 girls into a K-8 course), with additional rewards for course completion. However, we found that we can achieve a 45% female ratio without using these incentives, so we discontinued this program. -Instead, all of our professional development workshops include a session on equity and access, to help teachers build awareness of their own stereotypes, and to give them tools to recruit or retain a diverse CS student population. In particular, we host professional development workshops with district administrators and counselors, who play a critical role in helping high school students choose their fields of study, in order to guide them to help recruit diverse students to the new computer sciences we help them establish in their schools. +Instead, all of our professional development workshops include a session on equity and access, to help teachers build awareness of their own stereotypes, and to give them tools to recruit or retain a diverse CS student population. In particular, we host professional development workshops with district administrators and counselors, who play a critical role in helping high school students choose their fields of study, in order to guide them to help recruit diverse students to the new computer sciences we help them establish in their schools. **The results:** among our school district partnerships, the students in our high school computer science classes are 37% female, and 56% black or Hispanic. @@ -60,9 +60,9 @@ Instead, all of our professional development workshops include a session on equi ## Changing state level policies to increase participation in CS -Our early advocacy efforts focused on allowing rigorous computer science courses to count towards math or science high school graduation requirements. Polling done by the Computer Science Teachers Association shows that a key factor in their decision whether or not to study Computer Science is whether it counts for graduation credit. In the states where computer science counts towards high school graduation, enrollment by students of color is 37 percent higher than in the states where it does not, and enrollment by women is 3 percent higher. Code.org’s past success at changing graduation policy in 16+ states will hopefully improve enrollment by these underrepresented groups. As a simple example, [a comparison of neighboring school districts in Maryland](http://blog.code.org/post/121123281798/md) showed this policy resulting in a tripling of female representation in computer science. +Our early advocacy efforts focused on allowing rigorous computer science courses to count towards math or science high school graduation requirements. Polling done by the Computer Science Teachers Association shows that a key factor in their decision whether or not to study Computer Science is whether it counts for graduation credit. In the states where computer science counts towards high school graduation, enrollment by students of color is 37 percent higher than in the states where it does not, and enrollment by women is 3 percent higher. Code.org’s past success at changing graduation policy in 16+ states will hopefully improve enrollment by these underrepresented groups. As a simple example, [a comparison of neighboring school districts in Maryland](http://blog.code.org/post/121123281798/md) showed this policy resulting in a tripling of female representation in computer science. -Moving forward, our advocacy efforts are focused on expanding access to computer science, especially in underprivileged schools. By offering computer science in every school, [Arkansas has shown](http://amppob.com/nearly-4000-arkansas-students-enrolled-in-computer-science-in-fall-15/) a 300% increase in enrollment among females, and a 600% increase among African American females. This shows the massive impact of state policy on CS, and helps our advocacy efforts in other states. +Moving forward, our advocacy efforts are focused on expanding access to computer science, especially in underprivileged schools. By offering computer science in every school, [Arkansas has shown](http://amppob.com/nearly-4000-arkansas-students-enrolled-in-computer-science-in-fall-15/) a 300% increase in enrollment among female students, and a 600% increase among African American female students. This shows the massive impact of state policy on CS, and helps our advocacy efforts in other states. ## Marketing to change culture and break stereotypes with the Hour of Code campaign diff --git a/pegasus/sites.v3/code.org/public/privacy-notice.md b/pegasus/sites.v3/code.org/public/privacy-notice.md index 2acee0fd2b903..51952e1e83695 100644 --- a/pegasus/sites.v3/code.org/public/privacy-notice.md +++ b/pegasus/sites.v3/code.org/public/privacy-notice.md @@ -10,7 +10,7 @@ Date of Last Revision: August 24, 2016 Code.org® is a nonprofit dedicated to expanding participation in computer science by making it available in more schools, and increasing participation by women and underrepresented students of color. -Code.org is committed to protecting the privacy of children who use our sites and applications. This notice describes our practices of collecting, using, and disclosing personal information from children under 13. Please review our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>) for additional information. These policies are in accordance with the U.S. Children’s Online Privacy Protection Act (COPPA). If you have any questions about these policies, you may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. +Code.org is committed to protecting the privacy of children who use our sites and applications. This notice describes our practices of collecting, using, and disclosing personal information from children under 13. Please review our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>) for additional information. These policies are in accordance with the U.S. Children’s Online Privacy Protection Act (COPPA). If you have any questions about these policies, you may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. ## 1. Authorization from the School @@ -22,7 +22,7 @@ Providing access to students under the age of 13 means that they can create and We will not collect or store any such information until we have received your consent. If you are an existing Code Studio teacher, your students will continue to have access to Code Studio, but they won’t have access to App Lab or Game Lab if they are under 13 until you explicitly agree to our updated [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) and [Terms of Use Agreement](<%= CDO.code_org_url('/tos') %>). - + ## 2. Information We Collect and Use Code.org only collects information from students for the use and benefit of the school, and for no commercial purpose. Code.org does not create marketing profiles and online behavioral advertising campaigns using information collected from or created by students. @@ -46,7 +46,7 @@ Display Name (eg “Cool Coder” or “John”) | Mandatory | To provide studen Age (*Not* birthdate) | Mandatory | To understand the developmental stage of students to offer an age-appropriate experience for each student. We use this field to ensure we don’t allow students under age 13 to access age-inappropriate features (such as sharing their coding projects on social media). We collect ages (e.g. 16), as opposed to birthdates (e.g. Feb 13, 1998). 1-way hash of email address (NOT the actual email addresses, which are collected in the web browser but never transmitted to Code.org and thus never stored by us) | Optional if account created by teacher or parent; Mandatory if student signs up directly| If a student creates an account directly, an email address is required. If the account is created by a teacher or parent, it is optional.

Even if provided, student email addresses are NOT stored by Code.org in a retrievable format. To protect student privacy, we only store a 1-way hash of the email address. We do not have any way of sending email to these students or retrieving their actual email address. It is used only for purposes of login. See the [“Student Email Addresses”](<%= CDO.code_org_url('/privacy/#studentemails') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for more details. Login time, IP address, and other technical data | Mandatory (automatic) | This data helps Code.org troubleshoot any problems users experience. It also helps Code.org understand usage patterns, to guide the build out of servers to support all users, and to enable updating the site while minimizing service disruption. See the [“technical information”](<%= CDO.code_org_url('/privacy/#techinfo') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for additional details. -Gender | Optional | This information is only used in aggregate, to measure the percentage of students that are male or female or to measure how males or females react to different computer science challenges, to track our progress towards reducing the gender gap in computer science. +Gender | Optional | This information is only used in aggregate, to measure the percentage of students that are male or female or to measure how male students or female students react to different computer science challenges, to track our progress towards reducing the gender gap in computer science. Race | Optional | Students ages 13 and over have an option to indicate their race. For students under age 13 we do not ask individual race, but we ask the teacher to optionally estimate the racial distribution of the entire classroom.

This information is only used in aggregate, to measure the percentage of students from underrepresented minorities and their aggregate reaction to computer science challenges, in order to track our progress toward improving diversity in computer science. Progress in the course
1- Date/Time each stage is tried
2- Number of tries to solve a puzzle, and whether it was solved successfully or optimally
3- Information on how the student solved the puzzle including time to completion and whether they used hints
4- The code that the student submitted
5- Student-provided answers to simple assessments (e.g. multiple-choice questions) | Mandatory (automatic) | This information is displayed to students and their teachers to see their progress in a course, to see the code they’ve created, and to identify topics they need help with. It also lets students pick up where they left off if they log out and login later. See [example progress report](http://code.org/files/student-progress.pdf), and see the [“technical information”](<%= CDO.code_org_url('/privacy/#techinfo') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>) for additional details.

This data also helps Code.org improve the course effectiveness. For example, if a puzzle is too hard, Code.org may take action (like [providing better hints](http://code.org/hints)) to improve the learning process. Student Projects - apps, animations, stories, or code-art | Automatic (for students who create such projects)
Creating apps and projects is part of our course progressions.|The code and underlying assets for these apps are stored by Code.org, so that students can retrieve their projects each time they log in.

When students work in the context of a classroom, their teacher also has access to view the projects created by any students in the classroom.

Student projects and code creations each have a custom URL that students can use to share with friends or their teacher, or post to the Code.org public gallery. On the public gallery, projects are displayed with only the first letter of the student’s name to protect student privacy.

Students may “remix” (and change or improve upon) projects made by themselves or by other students.
Students over age 13 can also, at their discretion, post their projects to social media.

In our elementary school courses, students create stories, games or art using tools, such as Play Lab, which are limited to using artwork and sounds provided by Code.org. Students can write dialogues for these projects. Text provided by students in these tools will be automatically analyzed to prevent sharing any personal email addresses, phone numbers, or street addresses.

Our middle school and high school courses teach students to make more mature apps and games. These tools allow the students to upload custom photos, sounds and/or videos. (see below) @@ -61,20 +61,20 @@ In addition to the information that your students may give us directly, we may c To track information about use of our Sites, we use various technological tools. For example, like most websites, whether or not the user is a registered member, we may send one or more cookies – small text files containing a string of alphanumeric characters – to the user’s computer. Cookies remember information about the user’s activities on a website and enable us to provide the user with a more personalized learning experience. Code.org may use both session cookies and persistent cookies. A session cookie disappears automatically after the browser is closed. A persistent cookie remains after the browser is closed and may be used by the browser on subsequent visits to the Website. Please note that without cookies, the students will not have access to certain services and features on the Website. -A pixel tag (also known as a “clear GIF” or “web beacon”) is a tiny image – typically just one-pixel – that can be placed on a Web page or in an email to tell us when the user has displayed that page or opened that email. +A pixel tag (also known as a “clear GIF” or “web beacon”) is a tiny image – typically just one-pixel – that can be placed on a Web page or in an email to tell us when the user has displayed that page or opened that email. The list of third-party operators whose technology we’ve used to build Code Studio, and who may collect persistent identifiers as part of the implementation our sites and applications is available in the [“Third Parties”](<%= CDO.code_org_url('/privacy/#thirdparties') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>). ### Geolocation -We may collect and store information about the school or classroom location to provide educational experiences or email updates that are tailored for your region. The location information we have access to may include: (1) a ZIP or postal code, if you (as the teacher) provide one to us in order to allow us to display the classroom location on a map or in search results for parents looking for schools that teach computer science; and (2) the approximate geographic region the computers or mobile devices are located in, as determined from the IP addresses (although you change the settings on the computers or mobile devices to prevent them from providing us with such IP information). Code.org does not request or collect exact GPS locations, and your billing and shipping addresses are not used for these purposes. +We may collect and store information about the school or classroom location to provide educational experiences or email updates that are tailored for your region. The location information we have access to may include: (1) a ZIP or postal code, if you (as the teacher) provide one to us in order to allow us to display the classroom location on a map or in search results for parents looking for schools that teach computer science; and (2) the approximate geographic region the computers or mobile devices are located in, as determined from the IP addresses (although you change the settings on the computers or mobile devices to prevent them from providing us with such IP information). Code.org does not request or collect exact GPS locations, and your billing and shipping addresses are not used for these purposes. ## 3. Disclosure of Information Code.org does not rent or sell personal information that we collect from the students, or exploit it for financial gain in any way. Code.org will never share or grant rights to personal information with other third-party organizations to use without your express prior authorization, except as part of a specific program or feature for which you will have the explicit ability and choice to opt-in. In particular, we do not share any Personal Information you provide with our donors or sponsors. -However, Code.org may disclose anonymous or aggregate data to learn more about our users. In certain occasions, Code.org may work with third parties (such as educational researchers and universities) to improve our services or offerings. We may disclose automatically collected and other aggregate non-personal information to authorized partners to conduct research on online education or assist in understanding the usage, viewing, and demographic patterns for certain programs, content, services, promotions, and/or functionality on the Website. We may also publish anonymized information about student performance on our tutorials and Websites; however, we will never publicly disclose personal information in these reports. Data about student performance will remain anonymized, but aggregated, anonymized data over large populations of students may be reported by demographic criteria such as age, general location, gender, ethnicity, and socioeconomic status. +However, Code.org may disclose anonymous or aggregate data to learn more about our users. In certain occasions, Code.org may work with third parties (such as educational researchers and universities) to improve our services or offerings. We may disclose automatically collected and other aggregate non-personal information to authorized partners to conduct research on online education or assist in understanding the usage, viewing, and demographic patterns for certain programs, content, services, promotions, and/or functionality on the Website. We may also publish anonymized information about student performance on our tutorials and Websites; however, we will never publicly disclose personal information in these reports. Data about student performance will remain anonymized, but aggregated, anonymized data over large populations of students may be reported by demographic criteria such as age, general location, gender, ethnicity, and socioeconomic status. For a more detailed explanation of how we share and transfer data, please read the [“How We Share or Transfer Data”](<%= CDO.code_org_url('/privacy/#sharedata') %>) section of our general [Privacy Policy](<%= CDO.code_org_url('/privacy') %>). @@ -84,9 +84,7 @@ At any time, you (as the teacher) can refuse to permit us to collect further per You may write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101, to request access to review, change, or delete a student’s personal information. -## 5. Revoking and Deleting Your Consent -At any time, you may revoke your consent, refuse to allow us to further use or collect your students’ personal information, and direct us to delete the information. If you revoke your consent, we will no longer permit your students to participate in certain activities on Code.org. Your students will continue to have access to other activities on Code.org which do not require your students’ personal information. - -To revoke your consent, write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. - +## 5. Revoking and Deleting Your Consent +At any time, you may revoke your consent, refuse to allow us to further use or collect your students’ personal information, and direct us to delete the information. If you revoke your consent, we will no longer permit your students to participate in certain activities on Code.org. Your students will continue to have access to other activities on Code.org which do not require your students’ personal information. +To revoke your consent, write us at [http://code.org/contact](<%= CDO.code_org_url('/contact') %>) or at 1501 4th Avenue, Suite 900, Seattle, WA 98101. From 8f8f33d1820b0a6805b1fc2e51facb5e4af20341 Mon Sep 17 00:00:00 2001 From: David Bailey Date: Thu, 13 Sep 2018 10:25:12 -0700 Subject: [PATCH 3/8] log noisy AnimationBucketWarning to firehose, not honeybadger --- shared/middleware/helpers/animation_bucket.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/shared/middleware/helpers/animation_bucket.rb b/shared/middleware/helpers/animation_bucket.rb index 74418ce9f8b17..591c42ff2a7c4 100644 --- a/shared/middleware/helpers/animation_bucket.rb +++ b/shared/middleware/helpers/animation_bucket.rb @@ -1,3 +1,5 @@ +require 'cdo/firehose' + # # AnimationBucket # @@ -47,10 +49,11 @@ def s3_get_object(key, if_modified_since, version) # If the fallback is successful, let's notify Honeybadger, because we'd # like these to go down over time. - Honeybadger.notify( - error_class: "#{self.class.name}Warning", - error_message: 'AnimationBucket served latest version instead of requested version', - context: { + FirehoseClient.put_record( + study: 'animation-bucket-warning', + event: 'served-latest-version', + data_string: 'AnimationBucket served latest version instead of requested version', + data_json: { s3_key: key, requested_version: version, served_version: s3_object.version_id From 987ff08654006059b0b5cb398b49a4a830e3378f Mon Sep 17 00:00:00 2001 From: Will Jordan Date: Wed, 12 Sep 2018 15:50:31 -0700 Subject: [PATCH 4/8] More puma tuning - Use nakayoshi_fork to reduce copy-on-write memory usage - Adjust jemalloc tuning parameters for lower memory usage - reduce threads per worker to 5 - Use Puma fork for more stable request balancing and out-of-band GC --- Gemfile | 5 ++++- Gemfile.lock | 12 ++++++++++-- cookbooks/cdo-jemalloc/attributes/default.rb | 12 ++++++------ dashboard/config/puma.rb | 13 ++++++++++++- pegasus/config/puma.rb | 15 ++++++++++++++- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 0985e57c0c8c0..f9051dc7a9e76 100644 --- a/Gemfile +++ b/Gemfile @@ -131,7 +131,10 @@ gem 'open_uri_redirections', require: false, group: [:development, :staging, :te # Ref: https://github.com/tmm1/gctools/pull/17 gem 'gctools', github: 'wjordan/gctools', ref: 'ruby-2.5' -gem 'puma' +# Optimizes copy-on-write memory usage with GC before web-application fork. +gem 'nakayoshi_fork' +# Ref: https://github.com/puma/puma/pull/1646 +gem 'puma', github: 'wjordan/puma', ref: 'out_of_band' gem 'unicorn', '~> 5.1.0' gem 'chronic', '~> 0.10.2' diff --git a/Gemfile.lock b/Gemfile.lock index e669c4f59f15e..749e6c4cee21b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -164,6 +164,13 @@ GIT multi_json (>= 1.0.3) omniauth-oauth2 (~> 1.4) +GIT + remote: https://github.com/wjordan/puma.git + revision: 2ab96d67341a0ae1a4baf6bf80790389abc159ac + ref: out_of_band + specs: + puma (3.12.0) + GIT remote: https://github.com/wjordan/sass-rails.git revision: 06e833d92d083fbcb137364ffebc597b2577db23 @@ -553,6 +560,7 @@ GEM multipart-post (2.0.0) mustermann (1.0.1) mysql2 (0.3.21) + nakayoshi_fork (0.0.4) naturally (2.1.0) net-http-persistent (2.9.4) net-scp (1.2.1) @@ -623,7 +631,6 @@ GEM powerpack (0.1.1) progress (3.3.1) public_suffix (3.0.3) - puma (3.12.0) pusher (1.3.1) httpclient (~> 2.7) multi_json (~> 1.0) @@ -953,6 +960,7 @@ DEPENDENCIES minitest-reporters (~> 1.2.0.beta3) mocha mysql2 (~> 0.3.13) + nakayoshi_fork naturally net-http-persistent net-scp @@ -977,7 +985,7 @@ DEPENDENCIES petit! pg phantomjs (~> 1.9.7.1) - puma + puma! pusher (~> 1.3.1) rack-cache rack-mini-profiler diff --git a/cookbooks/cdo-jemalloc/attributes/default.rb b/cookbooks/cdo-jemalloc/attributes/default.rb index 27cdc04e3e7c8..031e41e47f583 100644 --- a/cookbooks/cdo-jemalloc/attributes/default.rb +++ b/cookbooks/cdo-jemalloc/attributes/default.rb @@ -2,15 +2,15 @@ default['cdo-jemalloc']['checksum'] = '5396e61cc6103ac393136c309fae09e44d74743c86f90e266948c50f3dbb7268' default['cdo-jemalloc']['lib'] = '/usr/local/lib/libjemalloc.so.2' -# See: https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md +# See: +# https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md +# http://jemalloc.net/jemalloc.3.html # To convert this attributes hash to a malloc_conf string, run: # node['cdo-jemalloc']['malloc_conf'].map {|x| x.join(':')}.join(',') default['cdo-jemalloc']['malloc_conf'] = { - # Enable dynamic thread to arena association based on running CPU. - # This has the potential to improve locality, e.g. when thread to CPU affinity is present. - # - # Suggested: try percpu_arena:percpu or percpu_arena:phycpu if thread migration between processors is expected to be infrequent. - percpu_arena: 'percpu', + # Maximum number of arenas to use for automatic multiplexing of threads and arenas. + # The default is four times the number of CPUs, or one if there is a single CPU. + narenas: 2, # Enabling jemalloc background threads generally improves the tail latency for application threads, # since unused memory purging is shifted to the dedicated background threads. diff --git a/dashboard/config/puma.rb b/dashboard/config/puma.rb index 5a2971b20941e..a4d62b5113e99 100644 --- a/dashboard/config/puma.rb +++ b/dashboard/config/puma.rb @@ -8,7 +8,12 @@ bind "tcp://#{CDO.dashboard_host}:#{CDO.dashboard_port}" end workers CDO.dashboard_workers unless CDO.dashboard_workers.to_i < 2 -threads 8, 16 +threads 1, 5 + +drain_on_shutdown + +# nginx already buffers/queues requests so disable Puma's own queue. +queue_requests false pidfile "#{File.expand_path(__FILE__)}.pid" preload_app! @@ -16,12 +21,18 @@ directory deploy_dir('dashboard') before_fork do + PEGASUS_DB.disconnect + DASHBOARD_DB.disconnect ActiveRecord::Base.connection_pool.disconnect! end on_worker_boot do |_index| + ActiveRecord::Base.establish_connection require 'dynamic_config/gatekeeper' require 'dynamic_config/dcdo' Gatekeeper.after_fork DCDO.after_fork end + +require 'gctools/oobgc' +out_of_band {GC::OOB.run} diff --git a/pegasus/config/puma.rb b/pegasus/config/puma.rb index 723ced03288dc..88b1bf02ca534 100644 --- a/pegasus/config/puma.rb +++ b/pegasus/config/puma.rb @@ -7,7 +7,12 @@ end workers CDO.pegasus_workers unless CDO.pegasus_workers.to_i < 2 -threads 8, 16 +threads 1, 5 + +drain_on_shutdown + +# nginx already buffers/queues requests so disable Puma's own queue. +queue_requests false pidfile "#{File.expand_path(__FILE__)}.pid" @@ -16,9 +21,17 @@ stdout_redirect pegasus_dir('log', 'puma_stdout.log'), pegasus_dir('log', 'puma_stderr.log'), true directory deploy_dir('pegasus') +before_fork do + PEGASUS_DB.disconnect + DASHBOARD_DB.disconnect +end + on_worker_boot do |_index| require 'dynamic_config/gatekeeper' require 'dynamic_config/dcdo' Gatekeeper.after_fork DCDO.after_fork end + +require 'gctools/oobgc' +out_of_band {GC::OOB.run} From 05834fe1b638a7bee07fcc0d855789d44f20cd8f Mon Sep 17 00:00:00 2001 From: David Bailey Date: Thu, 13 Sep 2018 10:32:37 -0700 Subject: [PATCH 5/8] fix animation bucket tests --- shared/middleware/helpers/animation_bucket.rb | 4 ++-- shared/test/test_animations.rb | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/shared/middleware/helpers/animation_bucket.rb b/shared/middleware/helpers/animation_bucket.rb index 591c42ff2a7c4..f33a2da23822b 100644 --- a/shared/middleware/helpers/animation_bucket.rb +++ b/shared/middleware/helpers/animation_bucket.rb @@ -49,7 +49,7 @@ def s3_get_object(key, if_modified_since, version) # If the fallback is successful, let's notify Honeybadger, because we'd # like these to go down over time. - FirehoseClient.put_record( + FirehoseClient.instance.put_record( study: 'animation-bucket-warning', event: 'served-latest-version', data_string: 'AnimationBucket served latest version instead of requested version', @@ -57,7 +57,7 @@ def s3_get_object(key, if_modified_since, version) s3_key: key, requested_version: version, served_version: s3_object.version_id - } + }.to_json ) s3_object end diff --git a/shared/test/test_animations.rb b/shared/test/test_animations.rb index 3272b2a849eb5..18e9894d2164d 100644 --- a/shared/test/test_animations.rb +++ b/shared/test/test_animations.rb @@ -97,6 +97,7 @@ def test_nonexistent_animation soft_delete(filename) # Not a no-op - creates a delete marker Honeybadger.expects(:notify).never + FirehoseClient.any_instance.expects(:put_record).never @api.get_object(filename) assert not_found? end @@ -119,7 +120,8 @@ def test_get_bad_version_returns_latest_version upload(filename, v2_file_data) # Ask for the missing version - Honeybadger.expects(:notify).once + Honeybadger.expects(:notify).never + FirehoseClient.any_instance.expects(:put_record).once @api.get_object_version(filename, v1_version_id) assert successful? @@ -149,7 +151,8 @@ def test_get_bad_version_returns_latest_nondeleted_version soft_delete(filename) # Ask for the missing version - Honeybadger.expects(:notify).once + Honeybadger.expects(:notify).never + FirehoseClient.any_instance.expects(:put_record).once @api.get_object_version(filename, v1_version_id) assert successful? @@ -172,6 +175,7 @@ def test_get_bad_version_is_404_when_all_versions_are_deleted # Ask for an invalid version # No Honeybadger notification on this case - it's an expected 404. Honeybadger.expects(:notify).never + FirehoseClient.any_instance.expects(:put_record).never @api.get_object_version(filename, v1_version_id) assert not_found? end From a54229c0a5de33e48f8697407cad135148f77a27 Mon Sep 17 00:00:00 2001 From: Erin Peach Date: Thu, 13 Sep 2018 12:19:31 -0700 Subject: [PATCH 6/8] Register 3rd party provider --- .../teacherDashboard/SectionActionDropdown.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/src/templates/teacherDashboard/SectionActionDropdown.jsx b/apps/src/templates/teacherDashboard/SectionActionDropdown.jsx index 38b0df5a26803..d94f41069bcb8 100644 --- a/apps/src/templates/teacherDashboard/SectionActionDropdown.jsx +++ b/apps/src/templates/teacherDashboard/SectionActionDropdown.jsx @@ -17,6 +17,8 @@ import BaseDialog from '../BaseDialog'; import Button from '../Button'; import DialogFooter from "./DialogFooter"; import QuickActionsCell from "@cdo/apps/templates/tables/QuickActionsCell"; +import {getStore} from "@cdo/apps/redux"; +import {setRosterProvider} from "@cdo/apps/templates/teacherDashboard/teacherSectionsRedux"; const styles = { xIcon: { @@ -45,12 +47,19 @@ class SectionActionDropdown extends Component { sectionCode: PropTypes.string, sectionName: PropTypes.string, updateRoster: PropTypes.func.isRequired, + setRosterProvider: PropTypes.func }; state = { deleting: false, }; + componentDidMount() { + if (this.props.sectionData.loginType === "google_classroom" || this.props.sectionData.loginType === "clever") { + getStore().dispatch(this.props.setRosterProvider(this.props.sectionData.loginType)); + } + } + onConfirmDelete = () => { const {removeSection } = this.props; const section = this.props.sectionData; @@ -192,4 +201,5 @@ export default connect((state, props) => ({ removeSection, toggleSectionHidden, updateRoster: importOrUpdateRoster, + setRosterProvider, })(SectionActionDropdown); From c9da1e7e1d3e9abd14fa4684075c02e2548cfefe Mon Sep 17 00:00:00 2001 From: David Bailey Date: Thu, 13 Sep 2018 12:22:16 -0700 Subject: [PATCH 7/8] move other noncritical bucket warnings to firehose --- shared/middleware/helpers/animation_bucket.rb | 5 ++-- shared/middleware/helpers/bucket_helper.rb | 24 +++++++++++-------- shared/test/test_animations.rb | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/shared/middleware/helpers/animation_bucket.rb b/shared/middleware/helpers/animation_bucket.rb index f33a2da23822b..2172a28e69633 100644 --- a/shared/middleware/helpers/animation_bucket.rb +++ b/shared/middleware/helpers/animation_bucket.rb @@ -47,10 +47,11 @@ def s3_get_object(key, if_modified_since, version) # Try getting the first (non-delete-marker) version s3_object = super(key, if_modified_since, versions.first.version_id) - # If the fallback is successful, let's notify Honeybadger, because we'd + # If the fallback is successful, let's notify Firehose, because we'd # like these to go down over time. FirehoseClient.instance.put_record( - study: 'animation-bucket-warning', + study: 'bucket-warning', + study_group: self.class.name, event: 'served-latest-version', data_string: 'AnimationBucket served latest version instead of requested version', data_json: { diff --git a/shared/middleware/helpers/bucket_helper.rb b/shared/middleware/helpers/bucket_helper.rb index f653747e4dd22..b0605fdb4d6b0 100644 --- a/shared/middleware/helpers/bucket_helper.rb +++ b/shared/middleware/helpers/bucket_helper.rb @@ -392,24 +392,28 @@ def restore_previous_version(encrypted_channel_id, filename, version_id, user_id } ) version_restored = true - Honeybadger.notify( - error_class: "#{self.class.name}Warning", - error_message: "Restore at Specified Version Failed. Restored most recent.", - context: { + FirehoseClient.instance.put_record( + study: 'bucket-warning', + study_group: self.class.name, + event: 'restore-specific-version', + data_string: 'Restore at Specified Version Failed. Restored most recent.', + data_json: { source: "#{@bucket}/#{key}?versionId=#{version_id}" - } + }.to_json ) else # Couldn't restore specific version and didn't find a latest version either. # It is probably deleted. # In this case, we want to do nothing. response = {status: 'NOT_MODIFIED'} - Honeybadger.notify( - error_class: "#{self.class.name}Warning", - error_message: "Restore at Specified Version Failed on deleted object. No action taken.", - context: { + FirehoseClient.instance.put_record( + study: 'bucket-warning', + study_group: self.class.name, + event: 'restore-deleted-object', + data_string: 'Restore at Specified Version Failed on deleted object. No action taken.', + data_json: { source: "#{@bucket}/#{key}?versionId=#{version_id}" - } + }.to_json ) end end diff --git a/shared/test/test_animations.rb b/shared/test/test_animations.rb index 18e9894d2164d..eb026051a2328 100644 --- a/shared/test/test_animations.rb +++ b/shared/test/test_animations.rb @@ -173,8 +173,8 @@ def test_get_bad_version_is_404_when_all_versions_are_deleted delete_all_animation_versions(filename) # Ask for an invalid version - # No Honeybadger notification on this case - it's an expected 404. Honeybadger.expects(:notify).never + # No Firehose notification on this case - it's an expected 404. FirehoseClient.any_instance.expects(:put_record).never @api.get_object_version(filename, v1_version_id) assert not_found? From 3b419b781189db9cb6c4dd330afa2fa11c5eec1c Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Thu, 13 Sep 2018 20:34:07 +0000 Subject: [PATCH 8/8] Updated cookbook versions --- cookbooks/Berksfile.lock | 2 +- cookbooks/cdo-jemalloc/metadata.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cookbooks/Berksfile.lock b/cookbooks/Berksfile.lock index ea7664f499db7..09f0e03e1700f 100644 --- a/cookbooks/Berksfile.lock +++ b/cookbooks/Berksfile.lock @@ -113,7 +113,7 @@ GRAPH cdo-java-7 (>= 0.0.0) cdo-java-7 (0.1.1) build-essential (>= 0.0.0) - cdo-jemalloc (0.1.1) + cdo-jemalloc (0.1.2) ark (>= 0.0.0) cdo-mysql (0.1.11) apt (~> 2.6.0) diff --git a/cookbooks/cdo-jemalloc/metadata.rb b/cookbooks/cdo-jemalloc/metadata.rb index 1ad5ce8dbaa93..cfac565b56714 100644 --- a/cookbooks/cdo-jemalloc/metadata.rb +++ b/cookbooks/cdo-jemalloc/metadata.rb @@ -4,6 +4,6 @@ license 'All rights reserved' description 'Installs/Configures cdo-jemalloc' long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version '0.1.1' +version '0.1.2' depends 'ark'