├── .gitignore ├── .nojekyll ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── SECURITY.md ├── bulk-targeted-sponsorship └── README.md ├── learning_resources ├── 2022-code-of-conduct-workshop │ ├── 1-introduction │ │ ├── 1-welcome.md │ │ ├── 2-history.md │ │ └── 3-intention-without-strategy.md │ ├── 2-standards │ │ ├── 1-introduction.md │ │ ├── 2-code-of-conduct.md │ │ ├── 3-protected-groups.md │ │ ├── 4-etiquette-guidelines.md │ │ └── 5-scope.md │ ├── 3-triaging-a-report │ │ ├── 1-introduction.md │ │ ├── 2-triage.md │ │ └── 3-enforcement-action.md │ ├── 4-activity │ │ └── 1-activity.md │ ├── 5-onward │ │ ├── 1-self-care.md │ │ ├── 2-towards-equity.md │ │ └── 3-resources.md │ ├── README.md │ ├── assets │ │ ├── ladder.jpg │ │ └── triage-text.pdf │ └── images │ │ ├── Final-dark-mode_external.jpg │ │ ├── Final-dark-mode_external.pdf │ │ ├── Final-light-mode_external.jpg │ │ ├── Final-light-mode_external.pdf │ │ ├── Final-light-mode_external_small.jpg │ │ ├── Slide9.jpg │ │ ├── coc-1.jpg │ │ ├── coc-2.jpg │ │ ├── history.jpg │ │ ├── ladder.jpg │ │ ├── mb.jpg │ │ ├── p1.jpeg │ │ ├── p2.jpeg │ │ ├── p3.jpeg │ │ ├── p4.jpeg │ │ ├── reporting.jpg │ │ ├── scope.jpeg │ │ ├── we-create.jpg │ │ └── welcome.jpg ├── mapping-your-oss-career │ ├── 1-introduction │ │ ├── 1-open-source.md │ │ ├── 2-my-open-source-story.md │ │ ├── 3-innersource.md │ │ ├── 4- opensource-at-company.md │ │ ├── 5-four-pillars.md │ │ └── 6-open-source-and-you.md │ ├── 2-me myself maintainer │ │ ├── 1-my-open-source-story.md │ │ ├── 2-takeaways.md │ │ └── 3-dei.md │ ├── 3-mapping your open source journey │ │ ├── 1-my-open-source-story.md │ │ ├── 2-main-activity.md │ │ └── 3-wrapping-up.md │ ├── README.md │ ├── Resources │ │ └── my-opensource-career-map.pdf │ ├── assets │ │ ├── the-way-1.png │ │ └── the-way-2.png │ └── images │ │ ├── image-1.jpg │ │ ├── image-2.jpg │ │ ├── image-3.jpg │ │ ├── innersourcememe.jpg │ │ ├── johannes-schindelin.jpeg │ │ ├── karen-chu.jpeg │ │ ├── main.jpg │ │ ├── mapping.jpg │ │ ├── nell.jpeg │ │ ├── onward.jpg │ │ ├── opensign.jpg │ │ └── path.jpg ├── moderating-oss │ └── moderating-oss-repos.md ├── onboarding │ ├── 2022-onboarding-checklist.md │ └── README.md ├── releasing-oss │ └── releasing-oss-strategy.md └── using-oss │ └── investment-framework.md ├── repository_cohorts ├── README.md └── framework │ ├── .gitignore │ ├── .nojekyll │ ├── README.md │ ├── dist │ ├── _file │ │ └── data │ │ │ └── microsoft_repos_public_20240319.2fba835b.csv │ ├── _import │ │ └── components │ │ │ └── cohorts.ead07fbc.js │ ├── _npm │ │ ├── @duckdb │ │ │ └── duckdb-wasm@1.28.0 │ │ │ │ ├── +esm.js │ │ │ │ └── dist │ │ │ │ ├── duckdb-browser-eh.worker.js │ │ │ │ ├── duckdb-browser-mvp.worker.js │ │ │ │ ├── duckdb-eh.wasm │ │ │ │ └── duckdb-mvp.wasm │ │ ├── @observablehq │ │ │ └── plot@0.6.14 │ │ │ │ └── +esm.js │ │ ├── apache-arrow@15.0.2 │ │ │ └── +esm.js │ │ ├── binary-search-bounds@2.0.5 │ │ │ └── +esm.js │ │ ├── d3-array@3.2.4 │ │ │ └── +esm.js │ │ ├── d3-axis@3.0.0 │ │ │ └── +esm.js │ │ ├── d3-brush@3.0.0 │ │ │ └── +esm.js │ │ ├── d3-chord@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-color@3.1.0 │ │ │ └── +esm.js │ │ ├── d3-contour@4.0.2 │ │ │ └── +esm.js │ │ ├── d3-delaunay@6.0.4 │ │ │ └── +esm.js │ │ ├── d3-dispatch@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-drag@3.0.0 │ │ │ └── +esm.js │ │ ├── d3-dsv@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-ease@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-fetch@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-force@3.0.0 │ │ │ └── +esm.js │ │ ├── d3-format@3.1.0 │ │ │ └── +esm.js │ │ ├── d3-geo@3.1.1 │ │ │ └── +esm.js │ │ ├── d3-hierarchy@3.1.2 │ │ │ └── +esm.js │ │ ├── d3-interpolate@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-path@3.1.0 │ │ │ └── +esm.js │ │ ├── d3-polygon@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-quadtree@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-random@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-scale-chromatic@3.1.0 │ │ │ └── +esm.js │ │ ├── d3-scale@4.0.2 │ │ │ └── +esm.js │ │ ├── d3-selection@3.0.0 │ │ │ └── +esm.js │ │ ├── d3-shape@3.2.0 │ │ │ └── +esm.js │ │ ├── d3-time-format@4.1.0 │ │ │ └── +esm.js │ │ ├── d3-time@3.1.0 │ │ │ └── +esm.js │ │ ├── d3-timer@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-transition@3.0.1 │ │ │ └── +esm.js │ │ ├── d3-zoom@3.0.0 │ │ │ └── +esm.js │ │ ├── d3@7.9.0 │ │ │ └── +esm.js │ │ ├── delaunator@5.0.1 │ │ │ └── +esm.js │ │ ├── flatbuffers@23.5.26 │ │ │ └── +esm.js │ │ ├── htl@0.3.1 │ │ │ └── +esm.js │ │ ├── internmap@2.0.3 │ │ │ └── +esm.js │ │ ├── interval-tree-1d@1.0.4 │ │ │ └── +esm.js │ │ ├── isoformat@0.2.1 │ │ │ └── +esm.js │ │ ├── robust-predicates@3.0.2 │ │ │ └── +esm.js │ │ └── tslib@2.6.2 │ │ │ └── +esm.js │ ├── _observablehq │ │ ├── client.js │ │ ├── runtime.js │ │ ├── stdlib.js │ │ ├── stdlib │ │ │ ├── duckdb.js │ │ │ ├── inputs.css │ │ │ └── inputs.js │ │ └── theme-air,near-midnight.css │ └── index.html │ ├── docs │ ├── components │ │ └── cohorts.js │ ├── data │ │ └── microsoft_repos_public_20240319.csv │ └── index.md │ ├── observablehq.config.js │ ├── package-lock.json │ └── package.json └── surveys ├── README.md ├── about-you ├── group.md └── team-role.md ├── company-innersource └── participation │ └── recent-activity.md ├── company-opensource ├── ecosystem │ ├── company-efforts.md │ └── external-sentiment.md ├── engineering-oss │ └── workflow ├── maintainer │ ├── data-metrics-outcome.md │ └── data-metrics.md ├── participation │ ├── activity-future.md │ ├── contribution-types.md │ ├── future-participation.md │ ├── leadership.md │ ├── recent-participation.md │ ├── roles.md │ └── support-needed.md ├── recognition-belonging │ ├── community-belonging.md │ ├── incentive-value-recognition.md │ └── manager-support.md ├── security │ └── upstream-risks.md └── support-resources │ ├── strategy.md │ └── support-types.md └── foss-fund ├── award-usefulness.md ├── gaps.md └── inclusion.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/.nojekyll -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | - Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support) 11 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | # Contributing to OSPO Courses 4 | 5 | This is an open source project created share some of the training we've built to encourage and inclusive, empowered open source culture at Microsoft. We will continue to share updates and improvements - and welcome your contributions including improvements as well. 6 | 7 | There may also be an open issue, if you see one you like - would love your help. Thank you! 8 | 9 | # Code of Conduct 10 | 11 | Help us keep this project open and inclusive. Please read and follow our [Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 12 | 13 | # Getting Started 14 | 15 | One of the best ways to learn about the project, take a look through the [README](README.md) to see the categories, best practices and standards we're currently working with. 16 | 17 | # How to get involved 18 | Ready to jump in? Great! Here are some ways you can help: 19 | 20 | - Translations 21 | - Grammatical fixes 22 | - Updates (this topic is always evolving, help us keep it relevant) 23 | - Feedback 24 | - Issues 25 | 26 | 27 | ## Found an Issue? 28 | If you find a bug in the source code or a mistake in the documentation, you can help us by 29 | [submitting an issue](#submit-issue) to the GitHub Repository. Even better, you can 30 | [submit a Pull Request](#submit-pr) with a fix. 31 | 32 | ## Submission Guidelines 33 | 34 | ### Submitting an Issue 35 | Before you submit an issue, search the archive, maybe your question was already answered. 36 | 37 | If your issue appears to be a bug, and hasn't been reported, open a new issue. 38 | Help us to maximize the effort we can spend fixing issues and adding new 39 | features, by not reporting duplicate issues. 40 | 41 | 42 | ## Share what you learn! 43 | Another great way to help this project is to blog about your experience, and what you've learned in a blog post to bring others in to collaborate, test and learn. 44 | 45 | # Contribution Policy 46 | 47 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 48 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 49 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. 50 | 51 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 52 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 53 | provided by the bot. You will only need to do this once across all repos using our CLA. 54 | 55 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 56 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 57 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Microsoft OSPO 2 | A place where we'll share various resources we've created to help our team and others learn about open source and how to work in an open source way. Currently this includes learning resources, survey questions, and other resources. We hope you find these useful and welcome contributions to make them better. 3 | 4 | ## Content by directory 5 | 6 | ### Learning Resources 7 | 8 | - [Releasing an open source project](learning_resources/releasing-oss/releasing-oss-strategy.md) 9 | - [Teaching open source risk and investment - a framework](learning_resources/using-oss/investment-framework.md) 10 | - [Moderating OSS - pocket guide](learning_resources/moderating-oss/moderating-oss-repos.md) 11 | 12 | ### Surveys 13 | 14 | - [Examples of survey questions for OSPOs](surveys/foss-fund/) 15 | 16 | ### Repository cohorts 17 | 18 | The repository cohorts directory holds an example of the repository cohorts concept. 19 | Some of the content in this directory is associated with a 2024 Open Source Summit talk. 20 | The `framework` directory within the `repository_cohorts directory` holds an Observable Framework project 21 | that builds a static GitHub pages page that should be viewable [here](https://microsoft.github.io/OSPO/repository_cohorts/framework/dist/) 22 | . It implements the repository cohorts concept for a fixed export of Microsoft public repository metadata. 23 | 24 | ## LICENSE 25 | 26 | [Creative Commons Attribution 4.0 International](LICENSE) 27 | 28 | ## Contributing 29 | 30 | This project welcomes contributions and suggestions. Individual top-level directories may have further guidance in their READMEs. 31 | 32 | Most contributions require you to agree to a 33 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 34 | the rights to use your contribution. For details, visit . 35 | 36 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 37 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 38 | provided by the bot. You will only need to do this once across all repos using our CLA. 39 | 40 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 41 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 42 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 43 | 44 | ## Trademarks 45 | 46 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 47 | trademarks or logos is subject to and must follow 48 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). 49 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 50 | Any use of third-party trademarks or logos are subject to those third-party's policies. 51 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/1-introduction/1-welcome.md: -------------------------------------------------------------------------------- 1 | # Diversity, Equity and Inclusion in Open Source 2 | 3 | ![welcome - an image of three individuals with varying ethnic backgrounds sit with laptops together](../images/welcome.jpg) 4 | 5 | Photo by Christina @ wocintechchat.com on Unsplash 6 | 7 | 8 | > "*Diversity is a number, inclusion is a process, equity is the outcome*" - Jess Mitchell 9 | 10 | This quote is really important framing for diversity, equity and inclusion in open source. Take a moment to think about it - diversity is a **NUMBER**. While it's true that seeing an increase in number of those who have been historically unrepresented in open source can be a positive signal, it's not the end goal. **The end goal is equity, and inclusion is the process to get there**. Open source governance needs inclusive processes to ensure equity across our projects and communities. 11 | 12 | > "*looking at the root causes of harm, asking those questions about what it takes to make things equal, make things right, make things fair, it requires people to be vulnerable & people who have historically held power don't like doing that*" -David Ryan Barcega Castro-Harris 13 | 14 | In the context of building inclusive communities, this is an important reminder that equity requires we all consider power dynamics when we're building governance, and especially the enforcement of a code of conduct; that we be willing to be wrong and to learn - which ultimately builds trust. 15 | 16 | This course will walk you through a brief history of DEI in open source, the standards and process to support inclusion in your community including examples of how they work in practice. 17 | 18 | This course also comes with an activity to build Etiquette Guidelines for your community, which is a great community and team exercise. 19 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/1-introduction/2-history.md: -------------------------------------------------------------------------------- 1 | # This isn't news 2 | 3 | [Open Source has a diversity problem](https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/). But this isn’t [news](https://www.ashedryden.com/blog/the-ethics-of-unpaid-labor-and-the-oss-community). [Women](https://modelviewculture.com/pieces/leaving-toxic-open-source-communities), people of color, non-binary, parents, non-native English speakers and other marginalized people and allies have been sharing stories of challenge and overcoming for years. For decades, actually. 4 | 5 | ![Collage of articles all telling the story of open source being less diverse overall](../images/history.jpg) 6 | 7 | It’s simply not enough to count who makes it through the gauntlet of tasks and exclusive cultural norms that lead to a first pull request; it’s not enough to celebrate increased diversity if the experiences of those who are underrepresented don't feel safe, or lacking equity. 8 | 9 | If you take a look at this college of articles about diversity in open source, you can see one on the top left 'Women in Open Source - the Canary in the Coal Mine'... **that article is from 2002**. Today, initiatives like [All In](https://github.com/AllInOpenSource/All-In) from GitHub, and community efforts like [Open Source Diversity](https://opensourcediversity.org/), are still tacking this same problem. **Twenty years later**. 10 | 11 | This is not news. For this reason, it is a perquisite of this course is that you already understand how critical diversity is for people, for innovation, for communities - and that we have a long way to go. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/1-introduction/3-intention-without-strategy.md: -------------------------------------------------------------------------------- 1 | # Intention is Nice But... 2 | 3 | > "*Intention without strategy is chaos*"- [Kim Crayton](https://www.kimcrayton.com/) 4 | 5 | This is one of my favorite quotes, when describing why we need policy, process and standards for inclusion in open source. Intention is great! You're (hopefully) reading this because you have intention to do more, to do better and to be part of the evolution of open source into equitable experience for all - but without strategy what does that look like? It's probably going to be a bit chaotic and even random. 6 | 7 | **Open is not the same as inclusive.** 8 | 9 | # Meritocracy and the myth of open 10 | **The open source story, is actually one filled with intention - intention that by saying a project is 'open' everyone is welcome, everyone can contribute and everyone can be successful, which we know hasn't been how its played out**. In large part, this is also a result meritocratic governance being primary and dominant approach to governance for well over a decade. 11 | 12 | ![Mitchell Baker speaking on stage](../images/mb.jpg) 13 | 14 | [Mitchell Baker](https://www.flickr.com/photos/hfiguiere/11370773124/), by Hubert Figuière, [CC BY-SA-2.0](https://creativecommons.org/licenses/by-sa/2.0/) 15 | 16 | Mitchell Baker of the Mozilla project summarizes why they removed meritocracy from their governance page: 17 | 18 | > “Sometimes good words and good aspirations get tarnished with history, and need to be set aside. I personally aspire to many aspects of our work being a meritocracy. And the original meaning I took for meritocracy in open source meant empowering individuals, rather than managers, or manager’s managers or tenure-based authority. I still long to develop these things. 19 | 20 | > However, it’s now clear that so-called meritocracies have included effective forms of discrimination. 21 | This might be hidden bias, where some aspect of identity causes a person’s contributions to be routinely devalued. 22 | It might be over discrimination or harassment. 23 | It might be threats that minimize the contributions even offered. Whatever the cause, open source “meritocracies” suffer from these problems – open source projects tend to have less diversity than other software organizations. 24 | > Fairly or not, the word “meritocracy” has come to signal systems where there is little effective restraint on perpetuating discrimination. 25 | It may even become a code-word for organizations that resist the need to build diverse and inclusive organizations. 26 | > I personally long for a word that conveys a person’s ability to demonstrate competence and expertise and commitment separate from job title, or college degree, or management hierarchy, and to be evaluated fairly by one’s peers. 27 | I long for a word that makes it clear that each individual who shares our mission is welcome, and valued, and will get a fair deal at Mozilla – that they will be recognized and celebrated for their contributions without regard to other factors. 28 | > Sadly, “meritocracy” is not that word. 29 | Maybe it once was, or could have been. But not today. 30 | 31 | In the next module, we'll review ways we're being strategic about inclusion in open source. 32 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/2-standards/1-introduction.md: -------------------------------------------------------------------------------- 1 | # Standards for Inclusion 2 | 3 | ![brick wall with graffiti - wording says We Create Together](../images/we-create.jpg) 4 | 5 | Photo by "My Life Through A Lens" on Unsplash 6 | 7 | As mentioned in the previous module, having standards and process for inclusion are a critical part of moving towards the equitable future and that inclusion is the process to get us there. Our strategy to create safe and inclusive spaces includes the enforcement of our code of conduct, and encouragement for every project and community to have a set of Etiquette Guidelines that extend the Code Code of Conduct in the context of their specific workspaces, and discussion channels. 8 | 9 | Microsoft's Code of Conduct applies to all Microsoft projects and communities. There are a couple of exceptions, for example .NET has its own Code of Conduct. All GitHub repositories in the Microsoft organization are expected to include a [CODE_OF_CONDUCT.md](../CODE_OF_CONDUCT.md) file, which links to our [main document](https://opensource.microsoft.com/codeofconduct/). It's a standard. 10 | 11 | Etiquette Guidelines are specific to your project or community, and can be built over time to address support inclusive behaviors and interactions. 12 | 13 | It sometimes helps engineers to describe the Code of Conduct, and Etiquette Guidelines, as being similar in how the scope of variables work: **The Code of Conduct is global**, and **Etiquette Guidelines are local** to the project. We will get into the details of each next. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/2-standards/2-code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # What is a Code of Conduct? 2 | 3 | > A code of conduct is a document that establishes expectations for behavior for your projects participants, this includes those working for an organization and any external collaborators. 4 | 5 | It's also so much more than a document. In that Microsoft's Code of Conduct is based on an open source projected called the Contributor Covenant, which is use by over 40,000 other open source projects including Ruby Rails, Swift, Go and .Net! It provides examples of both expected behaviors, and those which will not be tolerated. It is not exhaustive, but it should be fairly clear that what's not acceptable in a professional context is not acceptable in open source collaborations. 6 | 7 | ![Image circling the expected behaviors portion of the code of conduct](../images/coc-2.jpg) 8 | 9 | **NOTE**: we have avoided terms like 'don't be a jerk, or be nice' to avoid personal interpretation and hidden bias of what those terms might mean to a person, or even culturally. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/2-standards/3-protected-groups.md: -------------------------------------------------------------------------------- 1 | # Protected Groups 2 | 3 | At the top of our Code of Conduct you'll see 'Our Pledge', which then lists what we call 'protected groups', or 'supported groups'. These groups are those we know have historically been excluded, made invisible or harmed in open source. Providing this list signals an accountability for the experiences the most vulnerable and margenlized groups in our communities, and accountability to ourselves for reaching that equitable outcome. 4 | 5 | ![the list of supported groups is circled on the code of conduct](../images/coc-1.jpg) 6 | 7 | This is really important to grasp. Once again, this is not an exhaustive of everyone who can possibly participate. It instead, prioritizes the experiences of those who without such governance and enforcement would be at risk. This is getting us closer to making 'open' actually 'inclusive'. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/2-standards/4-etiquette-guidelines.md: -------------------------------------------------------------------------------- 1 | # What are Etiquette Guidelines and How are they Different? 2 | 3 | > Etiquette Guidelines are best practices or guard rails customized to your project's ways of working. 4 | 5 | Etiquette Guidelines (also sometimes called Participation Guidelines) are a way to extend the values, and purpose of the Code of Conduct into the context of daily interactions in your project. It does not replace the Code of Conduct, but rather compliments it - and helps explain to your project and community the way in which it applies to your project. It isn't necessary to have Etiquette Guidelines, but it is highly recommended not for the value of the document itself, but because creating one is a helpful exercise for community alignment around inclusion. 6 | 7 | Etiquette Guidelines can be crafted to describe inclusive interactions in: 8 | - Forums and chat channels 9 | - Issues and Pull Requests 10 | - Meetings, meetups and other in-person events 11 | 12 | # Examples 13 | 14 | Some examples of Etiquette Guidelines include: 15 | 16 | - [Open Source Etiquette Guidebook](https://css-tricks.com/open-source-etiquette-guidebook/) - Examples for the maintainer, and user. 17 | - [Drupal](https://www.drupal.org/docs/develop/issues/issue-procedures-and-etiquette) - Issue procedures and etiquette. 18 | - [Mozilla Etiquette Guide](https://wiki.mozilla.org/NDA-Slack/Etiquette-Guide) - for NDA contributors in their Slack instance. 19 | - [Red Hat Participation Guidelines](https://www.redhat.com/en/resources/open-source-participation-guidelines-overview) 20 | 21 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/2-standards/5-scope.md: -------------------------------------------------------------------------------- 1 | # Scope 2 | 3 | ![scope](../images/scope.jpeg) 4 | 5 | Microsoft's Code of Conduct, and any related Etiquette Guidelines apply to all open source collaborators: employees, contractors, contributors, and community members - although the process may be different depending on each. In Open Source, the lines dividing these groups is often fluid - as often community members are hired into projects, and staff often stay as part of the community when they move between roles or companies. 6 | 7 | Also included in the scope of this document those externally influencing our projects and communities. Basically this means, that **we won't ignore harm done ot our communities if caused by an external person or group**. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/3-triaging-a-report/1-introduction.md: -------------------------------------------------------------------------------- 1 | # Taking and Giving a Report 2 | 3 | ![a non-binary femme student talking to a someone in front of a locker](../images/reporting.jpg) 4 | 5 | Credit: [The Gender Spectrum Collection](https://genderphotos.vice.com/), [CC BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/) 6 | 7 | The heart of our workplace and communities, whether online or in-person - are the people. In this module you'll learn some of the best practices for taking and giving a report in a way that prioritizes the safety and well-being of those involved. 8 | 9 | ## When to Report 10 | 11 | Please report all incidents where someone has engaged in behavior which violates Microsoft's Code of Conduct, and **which you are not able to personally resolve**. This includes activities that make you, or someone else, feel unsafe, unwelcome, or uncomfortable. If you are not sure if a behavior is a violation, it's still OK to report. 12 | 13 | ## Taking a Report 14 | 15 | If someone reports to you, in either written or verbal terms, make space for pauses in their story. As much as possible, practice active listening: absorb not only the words that are being said, but also the feelings that are being conveyed and any related context. These details can help you and others supporting the process understand the situation and will better inform the next steps. Additionally: 16 | 17 | * Do not question or judge their experience. 18 | * Do not promise any particular response or outcome. 19 | * If they have questions about the code of conduct process, send them to our [FAQ page](https://opensource.microsoft.com/codeofconduct/faq/). 20 | * Do try to capture any digital assets (screenshots, text chats) that demonstrate the incident. 21 | 22 | ## Data Privacy 23 | 24 | If you are documenting a report, your first focus will be on the person or people reporting. However, ensuring participants are protected goes beyond the process responsiveness. Because someone may share personal or sensitive information about themselves or others, by default, all incident notes should be labeled as **Highly Confidential** and be limited in access to only yourself. Access to this document may change on a case-by-case basis as stakeholders are identified, and only for individual emails (not group alias where membership can change). As needs-to-know access changes, access should also be removed. Please familiarize yourself with your organization's data privacy and email classification labels. 25 | 26 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/3-triaging-a-report/2-triage.md: -------------------------------------------------------------------------------- 1 | # Triaging a Report 2 | 3 | This infographic, while only for educational use, and not a substitute for legal, HR, and other guidance, is helpful for determining how to evaluate and prioritize reports. Take a moment to review the triage steps, paying particular attention to how priority might be assigned, and order of actions to take. 4 | 5 | ![light info-graphic please see text based link below for text version](../images/Final-light-mode_external_small.jpg) 6 | 7 | For non-urgent reports the steps are fairly straightforward: 8 | 9 | If the reported person is a current [Company] FTE, contractor, or vendor then follow the standards outline in the following resources: 10 | 11 | * [Company] policy for reporting workplace concerns 12 | * [Company] policy for physical and digital security 13 | 14 | If the report does not involve a staff member, use the relevant option to your project/community: 15 | 16 | * Contact the alias, or individual(s) listed on your project code of conduct/participation guidelines, or other governance document for enforcement. 17 | * Reach out directly to someone you trust to help you navigate the reporting process, should it be unclear who that alias goes to, or you lack trust in one or more of those individuals. 18 | 19 | # Available versions 20 | 21 | * [Text based, PDF](../assets/triage-report-text.pdf) 22 | * [Text based, Google Doc](https://docs.google.com/document/d/1MEXZDZIykxHpVGW76v0elbDZinXTkHgZ6zfX9RY08DY/edit#heading=h.f9zu6t8w9cal) 23 | * [Text based, Word Doc](https://microsoft-my.sharepoint.com/:w:/p/emmairwin/EQfVzxHnVuxMo2vqSE7tAVMBM7PCuuvh98fxTJeqpuA0UA?e=Kjlhwa) 24 | * [Infographic - Light JPG](../images/Final-light-mode_external.jpg) 25 | * [Infographic - Light PDF](../images/Final-light-mode_external.pdf) 26 | * [Infographic - Dark JPG](../images/Final-light-mode_external.jpg) 27 | * [Infographic - Light PDF](../images/Final-light-mode_external.pdf) -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/3-triaging-a-report/3-enforcement-action.md: -------------------------------------------------------------------------------- 1 | # Enforcement Action 2 | 3 | Deciding on enforcement action can sometimes be easy. If someone has caused harm, or in some way been found to have violated a code of conduct in the way described in the triage chart as **P1**, banning them or asking them to step back for a period of time feels like a pretty easy decision to arrive at. Not always, but usually. 4 | 5 | Similarly if someone has violated the CoC in a way that they might not have realized impacted another person, and where that impact was low like a **P3**, issuing a warning feels easy enough to arrive at as a first decision. 6 | 7 | However, incidents in communities are as unique as the people in them and thus consequences may also need to vary. Generally, thinking of enforcement as being a ladder of possibilities is helpful. It's not prescriptive, rather it's a way to think about escalation and seriousness. 8 | 9 | ![ladder with 4 rungs, starting at the bottom is warning, then public warning, temporary ban, then full ban](../images/ladder.jpg)] 10 | 11 | There are four areas of risk that we think about in CoC enforcement: 12 | 13 | * **Safety** -- Physical, sexual, and psychological safety for all involved. 14 | * **Privacy** -- Privacy, confidentiality, and security of people's data related to reports. 15 | * **Legal** -- Failure to recognize applicable law, or follow required processes, resulting in potential legal liability. This includes the geographic region where reporter & reported individuals reside. 16 | * **Brand** -- Mishandling, or not handling, can create mistrust in organizations and narratives beyond their ability to manage. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/4-activity/1-activity.md: -------------------------------------------------------------------------------- 1 | # Activity 2 | 3 | As mentioned, creating Etiquette Guidelines can be very helpful in encouraging the inclusive behaviors, and being clear about which which within the context of your specific community channels, forums and issue tracker are appropriate and expected. 4 | 5 | Below you'll find a worksheet to help you, and your team brainstorm your Etiquette Guidelines. It asks: 6 | 7 | * **Who will be participating in your project?** Some example answers might be 'staff engineers', 'contributing engineers', 'technical writers', and 'program managers'. 8 | * **What tools will you use, and how will people use that tool to collaborate?**: Some answers might be 'GitHub (issues, PRs, Discussions)', or 'Slack(post a question, respond to a question)'. 9 | 10 | **And then for each:** 11 | 12 | * **Actions to encourage**: Some examples might be 'read the code of conduct', 'read the documentation before opening an issue', be 'patient waiting for maintainer responses', 'be respectful if you disagree'. 13 | * **Actions to discourage**: Some examples might be 'don't use ALL CAPS', 'use mentions sparingly', 'don't comment on people's appearance', 'avoid technical jargon'. 14 | 15 | From here you can begin go build out your guidelines. We recommend that you do this as a group activity, to align with others in the community where ultimately the responsibility to lead by example lives. 16 | 17 | ## Resources 18 | * Example (completed) Etiquette Guidelines Worksheet ([Google Doc](https://docs.google.com/document/d/1oX0odXst7eu13-8MDQU1hiqab0Jlycigq2tD9y63PlQ/edit)), ([PDF](../assets/example-worksheet.pdf)) 19 | * Blank Etiquette Guidelines Worksheet ([Google Doc](https://docs.google.com/document/d/1spQaOg0wVN6gH0zgJXbpikPDF-vsT_jSCkjW1kRosbU/edit)), ([PDF](../assets/worksheet.pdf)) 20 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/5-onward/1-self-care.md: -------------------------------------------------------------------------------- 1 | # Self Care 2 | 3 | As one person supporting another, whether taking a report or helping find resolution, its completely normal and expected that you might also feel impacted. There's no 'right' way to feel, or to manage feelings where you encounter someone in distress but its incredibly important that you feel safe supported as part of the process. Minimally, you should feel empowered to step away and if needed, ask for help from your manager or consult HR resources to look for ways [Company] ca support your wellbeing. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/5-onward/2-towards-equity.md: -------------------------------------------------------------------------------- 1 | #Toward Equity 2 | 3 | You may have started this course thinking about how things like the code of conduct are enforcement mechanisms, but we hope that you're wrapping up seeing these process as part of a bigger strategy for inclusion, and our end goal of equity. 4 | 5 | It's a continually journey of learning, listening and evolving together and we're so grateful to have you join us. -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/5-onward/3-resources.md: -------------------------------------------------------------------------------- 1 | # Resources 2 | 3 | Additional resources, please submit a PR for those you think should be here! 4 | 5 | * Toxicity in Open Source ([Research Paper](https://cmustrudel.github.io/papers/osstoxicity22.pdf)) 6 | * [Walking the Cultural Tightrope: why we need Codes of Conduct - and why they're not enough (Aeva Black @linuxfoundation Member Summit)](https://t.co/qMaYBHEE49) -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Inclusive Open Source Governance 4 | 5 | ## Description 6 | This course provides a high level overview of inclusive open governance in open source through equitiable enforcement of a code of conduct, with an introduction to standards at Microsoft which support equitable outcomes in open collaboration. 7 | 8 | # Learning Goals 9 | 10 | **By the end of this course learners will be able to:** 11 | 12 | * Articulate the history of open source, and why lack of intention and strategy has led to exclusion and harm of underrepresented and marginalized groups. 13 | * Understand that equity and trust are prequisite to enforcement. 14 | * Find clarity and trust around what support, resources and tools exist at Microsoft to ensure your success. 15 | * Describe the difference between a Code of Conduct and Etiquette Guidelines, as well as the purpose of each. 16 | * Describe basic steps in taking and handling a report, including those that prioritize the safety and privacy of individuals and organizations. 17 | * Create a first-draft of your very own Etiquette Guidelines. 18 | 19 | 20 | # Format 21 | 22 | As outlined in the main README.md, this course is structured into modules with files within prefixed by number to indicate order. Depending on your LMS experience these can easily be pulled into something like Jekyll or Hugo or cut and paste into Moodle (etc). 23 | 24 | # Additional Resources 25 | 26 | * Aeva Black SeaGL 2021 talk: [Walking the Cultural Tightrope - Why we need Codes of Conduct and why they are not enough](https://www.youtube.com/watch?t=8160&v=1GiwoMkuSHg&feature=youtu.be&ab_channel=SeattleGnuLinuxConference). 27 | * [Prioritizing inclusion - our commitment to building healthy open source communities](https://cloudblogs.microsoft.com/opensource/2021/05/04/prioritizing-inclusion-our-commitment-to-building-healthy-open-source-communities/) - Microsoft Open Source Blog. 28 | 29 | # Notes 30 | 31 | **This course makes an assumption that the learner already understands why inclusion matters and wants to consider how they can use their power within the system to listen to, and create equity for those most vulnerable. It is a prerequisite.** 32 | -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/assets/ladder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/assets/ladder.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/assets/triage-text.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/assets/triage-text.pdf -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/Final-dark-mode_external.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/Final-dark-mode_external.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/Final-light-mode_external.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/Final-light-mode_external.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/Final-light-mode_external_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/Final-light-mode_external_small.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/Slide9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/Slide9.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/coc-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/coc-1.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/coc-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/coc-2.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/history.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/history.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/ladder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/ladder.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/mb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/mb.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/p1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/p1.jpeg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/p2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/p2.jpeg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/p3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/p3.jpeg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/p4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/p4.jpeg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/reporting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/reporting.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/scope.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/scope.jpeg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/we-create.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/we-create.jpg -------------------------------------------------------------------------------- /learning_resources/2022-code-of-conduct-workshop/images/welcome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/2022-code-of-conduct-workshop/images/welcome.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/1-open-source.md: -------------------------------------------------------------------------------- 1 | # Introduction - Open Source 2 | 3 | ![welcome image](../images/image-1.jpg) 4 | 5 | Photo by Thought Catalog on Unsplash 6 | 7 | Simply put, open source software ("OSS"), is that which has the source code freely available for possible modification and redistribution as described in an open source license. OSS has accelerated the pace of innovation through ecosystem collaboration making software more secure, of higher quality and more accessible to diverse groups of developers and users. 8 | 9 | Today, the open source ecosystem continues to evolve with challenges of humanity on topics of ethics, access and economics. **The opportunity of open source at this moment in time has never been greater to supercharge your career, bring value back to our customers and the world**. 10 | 11 | # Welcome! 12 | ![Satya-quote](../images/image-2.jpg) 13 | 14 | This course provides an inspiring overview of the potential of open source to supercharge your career as told through the inspiring stories of open source maintainers. 15 | 16 | On average this course takes about one hour to complete, and includes a mapping exercise to help you connect your work, goals and dreams with open source at [COMPANY]. 17 | 18 | # Learning Goals 19 | 20 | **By the end of this course you will be able to:** 21 | 22 | * Describe the four pillars of open source: use, contribute, release, grow. 23 | * Distinguish between Open Source and InnerSource. 24 | * Describe basic opportunities and challenges of maintaining an open source project. 25 | * Find inspiration in the video stories of three maintainers leading open source projects. 26 | * Connect with networks of peers, experts and mentors as they apply to your goals. 27 | * Create a ‘Career Map’ connecting personal, career and project goals with open source skills. 28 | * Have talking points for manager discussions. 29 | 30 | 31 | 32 | ** This is recommended training for engineers all staff working in community-facing roles.** 33 | -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/2-my-open-source-story.md: -------------------------------------------------------------------------------- 1 | # My Open Source Story - Nell Shamrell-Harrington 2 | 3 | Nell is a Principle Software Engineer at Microsoft, Lead Maintainer of [Clearly Defined](https://clearlydefined.io/?sort=releaseDate&sortDesc=true) and Board Director at the [Rust Foundation](https://foundation.rust-lang.org/board/). 4 | 5 | Watch their open source story below. 6 | 7 | --- 8 | 9 | [![Nell Shamrell Harrington](../images/nell.jpeg)](https://www.youtube.com/watch?v=abfuRJ6G9EQ&ab_channel=Microsoft) -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/3-innersource.md: -------------------------------------------------------------------------------- 1 | # InnerSource or Open Source? 2 | 3 | While this course does not specifically cover InnerSource, it's important to understand both the similarities and differences. Both require collaboration, both usually involve some mechanism for sharing code and building on the work of others, as well as tooling to track issues and respond to pull requests. 4 | 5 | The main difference is WHO you collaborate with, which tools, and whether or not the code is licensed open source. 6 | 7 | ![innersource meme](../images/innersourcememe.jpg) 8 | 9 | :point_right: **InnerSource** is the collaboration between teams **inside an organization** on projects and products that are not publicly available. At [company] we use OnBranch for InnerSource collaboration. 10 | 11 | :point_right: **Open Source** is a collaboration with those **external to the organization** on software that licensed open source. At [company] we use GitHub.com for Open Source collaboration. 12 | 13 | Note, that just putting code on GitHub does not make it open source, it's the [open source license](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository) that does that. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/4- opensource-at-company.md: -------------------------------------------------------------------------------- 1 | 2 | # Open Source at Microsoft 3 | 4 | ![oss-at-microsoft](../images/main.jpg) 5 | 6 | Microsoft helps maintain open source projects like [.NET](https://dotnet.microsoft.com/), [TypeScript](https://www.typescriptlang.org/), [PowerToys](https://docs.microsoft.com/en-us/windows/powertoys/) and [ClearlyDefined](https://clearlydefined.io/?sort=releaseDate&sortDesc=true). You can find a longer list on the opensource.microsoft.com website under ['Projects'](https://opensource.microsoft.com/projects/). 7 | 8 | Beyond building and use of open source, Microsoft is invested in nurturing and funding the broader ecosystem of which we are a part including our investment in the [Rust Foundation](https://foundation.rust-lang.org/), [Open Source Initiative](https://opensource.org/) (OSI), [OpenSSF](https://openssf.org/), [OpenJS](https://openjsf.org/), [OpenInfra](https://openinfra.dev/) and more. 9 | 10 | To further support open source projects and we use, and to fund diversity, equity and inclusion we also run a monthly [FOSS Fund](https://github.com/microsoft/foss-fund/blob/main/README.md), to have additional impact its a requirement that employees have contributed to open source in order to vote. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/5-four-pillars.md: -------------------------------------------------------------------------------- 1 | # Four Pillars of Open Source 2 | 3 | ![opensign](../images/opensign.jpg)] 4 | 5 | Photo by Tim Mossholder on Unsplash 6 | 7 | 8 | At Microsoft, when we talk about open source software ("OSS") we do so under the following four pillars: 9 | 10 | * **Use**: Using open source at Microsoft is encouraged. Building on the efforts of others allows us to create meaningful value for our customers to faster and engage with new ecosystems and user-bases in a natural way. Use requires adherence to legal, license and other compliance criteria. 11 | * **Release**: Microsoft encourages you to release code as an open source project whenever it makes sense for your business, and provided you have goals for working in the open. 12 | * **Contribute**: Contributing back to the projects we track as a key element of the open source process. We encourage everyone to contribute back to projects we use. 13 | * **Grow**: Where goals are aligned, Microsoft encourages projects to inclusively grow and evolve projects in the ecosystem of contributors, users and collaborators of which you are a part. 14 | 15 | 16 | > * COURSE NOTE: Each of these bullets should link to internal documentation for compliance and policy for each. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/1-introduction/6-open-source-and-you.md: -------------------------------------------------------------------------------- 1 | # Open Source and You! 2 | 3 | ![welcome image](../images/image-3.jpg) 4 | 5 | It can feel intimidating to jump into activities under any of the four pillars, and this is a normal feeling. 6 | 7 | Photo by Prateek Katyal on Unsplash 8 | 9 | The good news is that Microsoft, and more specifically the Open Source Programs office at Microsoft(“OSPO”) is setup to support your success. In the next few modules we’ll walk you through a process of discovery to help you connect with the opportunity, and inspiration to help you visualize success on your goal, and connect you with people, tools and processes setup to support your success. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/2-me myself maintainer/1-my-open-source-story.md: -------------------------------------------------------------------------------- 1 | # My Open Source Story - Johannes Schindelin 2 | 3 | Johannes Schindelin, is a Principal Engineer at Microsoft, and Maintainer of [Git for Windows](https://gitforwindows.org/). 4 | 5 | Watch Johanne's open source story below: 6 | 7 | 8 | ![Johannes Schindelin](../images/johannes-schindelin.jpeg) -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/2-me myself maintainer/2-takeaways.md: -------------------------------------------------------------------------------- 1 | # The Pathway to Open Source Leadership 2 | 3 | ![path](../images/path.jpg) 4 | 5 | In addition to code development, the first responsibilities of a new open source maintainer is a focus on **responsiveness**: to issues, pull requests and user feedback. 6 | 7 | As a project grows the role requires has added responsibilities to ensure that that developer documentation is up-to-date, code of conduct is enforced and that decision[^1] making is transparent and inclusive of community. 8 | 9 | > Roles of influence like the maintainer role, requires strong collaboration skills and a focus on enabling the success of others. There are many who contribute non-technical skills including documentation, testing, translation, running events and publishing their experiences on social media - the success of each, is as critical to success as the code itself. 10 | 11 | As Nell and Johannes' stories demonstrate, the role of maintainer represents excellence in engineering and empathetic community development. These are highly sought-after skills in the ecosystem, and we hope you're feeling inspired! 12 | 13 | # Activity 14 | 15 | Read GitHub's '[Best Practices for Maintainers](https://opensource.guide/best-practices/)' and get a sense of challenges and opportunities of maintaining a project. 16 | 17 | --- 18 | --- 19 | [^1][Minimal Viable Governance](https://github.blog/2021-07-22-minimum-viable-governance-lightweight-community-structure-foss-projects/) - a lightweight community structure to grow your FOSS projects. 20 | 21 | 22 | -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/2-me myself maintainer/3-dei.md: -------------------------------------------------------------------------------- 1 | # Diversity, Equity and Inclusion in Open Source 2 | 3 | > "*Diversity is a number, inclusion is a process, equity is the outcome*" 4 | - Jess Mitchell 5 | 6 | To ensure that all of Microsoft's projects are inclusive and welcoming, our projects abide by our [Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). The Code of Conduct is something we strictly enforce, and for which everyone is expected to follow. 7 | 8 | It is highly recommended that all who are planning to release, or grow an open project complete this complementary training [TODO - Link]. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/3-mapping your open source journey/1-my-open-source-story.md: -------------------------------------------------------------------------------- 1 | # My Open Source Story - Karen Chu 2 | 3 | Karen Chu is a community PM on Microsoft Azure Container Computer Upstream, with a focus on open source tools such as Helm, CNAB, Brigade, Virtual Kubelet and more. She is a CNCF Ambassador, as well as meetup and conference organizer. Watch her open source story below: 4 | 5 | 6 | ![Karen Chu](../images/karen-chu.jpeg) 7 | 8 | --- 9 | 10 | As mentioned, Karen worked on, and keynoted the Illustrated Children's Guide to Kubernetes book series. You can watch the video of that story below, or find it for download in various formats and languages on the [CNCF website](https://www.cncf.io/phippy/). 11 | 12 | [![The Illustrated Children's Guide to Kubernetes](https://img.youtube.com/vi/4ht22ReBjno/0.jpg)](https://www.youtube.com/watch?v=4ht22ReBjno&ab_channel=Microsoft) -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/3-mapping your open source journey/2-main-activity.md: -------------------------------------------------------------------------------- 1 | # Main Activity 2 | 3 | We hope by this point you feel inspired, motivated and even more curious about the opportunity of open source in your career. As Karen's story shows us, there's endless potential for the combination of curiosity, creativity and leadership in open source. 4 | 5 | ![mapping your open source journey](../images/mapping.jpg)) 6 | 7 | Photo by ian dooley on Unsplash 8 | 9 | 10 | ## Pulling it All Together - Mapping your Career 11 | 12 | Please select one of the following formats to start mapping your open source career: 13 | - [PDF](https://github.com/microsoft/OSPO-Courses/blob/main/mapping-your-oss-career/Resources/my-opensource-career-map.pdf) 14 | - [Google Doc](https://docs.google.com/document/d/1NG2zFUsJDZB9NCk25e_uQrPZMuduXBc4T0fIXL6P-BA/edit?usp=sharing) 15 | 16 | This document is a private workspace for you. You will not be asked to share answers as the purpose is to ensure you have freedom to imagine, freedom to dream as part of the mapping process. 17 | 18 | Once you have completed the map, you will have a set of action items to bring to your next manager discussions. 19 | 20 | NOTE: we are actively working to create translations of the mapping resources. 21 | -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/3-mapping your open source journey/3-wrapping-up.md: -------------------------------------------------------------------------------- 1 | # Onward! 2 | 3 | ![onward](../images/onward.png) 4 | Photo by Cookie the Pom on Unsplash 5 | 6 | 7 | Congratulations! You have taken the important first steps needed to ensure that your open source activities, be that as part of your role, or in your personal time align with your goals and vision for success! 8 | 9 | It's important to bring what you've learned through activities in this course, to your manager and even team discussions. The more you communicate the value of open source, the more others will begin to ask the right questions about where OSS strategy fits into their goals. Ultimately the ecosystem, and our customers benefit. Win, win and win. 10 | 11 | Want to get started in open source right now? Check out this resource '[8 ways to contribute to open source today](https://github.com/microsoft/foss-fund/blob/main/assets/8-ways-to-contribute.md)', to begin your journey. -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Mapping Your Open Source Career 3 | 4 | ## Description 5 | This course provides learners with an inspiring overview of the skills, knowledge, opportunities that open source can provide to their personal and career goals - with an activity that helps pull everything together in a 'career map'. 6 | 7 | # Learning Goals 8 | 9 | **By the end of this course learners will be able to:** 10 | 11 | * Describe the four pillars of open source: use, contribute, release, grow. 12 | * Distinguish between Open Source and InnerSource. 13 | * Describe basic opportunities and challenges of maintaining an open source project. 14 | * Find inspiration in the inclusive video stories of three maintainers leading open source projects. 15 | * Connect with networks of peers, experts and mentors as they apply to your goals. 16 | * Create a ‘Career Map’ connecting personal, career and project goals with the opportunity of open source. 17 | * Have talking points for manager discussions and connects. 18 | 19 | # Format 20 | 21 | As outlined in the main README.md, this course is structured into modules with files within prefixed by number to indicate order. Depending on your LMS experience these can easily be pulled into something like Jekyll or Hugo or cut and paste into Moodle (etc). 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/Resources/my-opensource-career-map.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/Resources/my-opensource-career-map.pdf -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/assets/the-way-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/assets/the-way-1.png -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/assets/the-way-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/assets/the-way-2.png -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/image-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/image-1.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/image-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/image-2.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/image-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/image-3.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/innersourcememe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/innersourcememe.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/johannes-schindelin.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/johannes-schindelin.jpeg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/karen-chu.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/karen-chu.jpeg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/main.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/mapping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/mapping.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/nell.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/nell.jpeg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/onward.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/onward.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/opensign.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/opensign.jpg -------------------------------------------------------------------------------- /learning_resources/mapping-your-oss-career/images/path.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/learning_resources/mapping-your-oss-career/images/path.jpg -------------------------------------------------------------------------------- /learning_resources/onboarding/2022-onboarding-checklist.md: -------------------------------------------------------------------------------- 1 | # Getting Involved - Open Source at [COMPANY] 2 | *NOTE: This list contains specific action items, but its up to the individual or organization to update with links relevant to your group. 3 | 4 | Below, organized by priority, you will find a list of tasks that will connect you with tools, policy, procedures (and most importantly) people in our open source at [COMPANY] community. 5 | 6 | ## First Steps! (quick first steps to connect with the open source community inside of [COMPANY]) 7 | *Setup for connection and opportunity by joining these important open source mailing lists*. 8 | 9 | - [ ] [Join our Open Source Channel and say hello!]()! Meet others working across [COMPANY] on open source - this is a great place to ask questions, but also to share your expertise. 10 | - [ ] [Sign up for the Open Source Newsletter](). 11 | - [ ] [Sign up to get invites to the monthly Open Source Meetups]() (consider presenting in future!). 12 | - [ ] [Join the mailing list to stay connected with open source workshops and other learning activities](). 13 | 14 | ## Second Steps! (important things learn and do) 15 | *Begin investing in learning through available training and documentation on open source and InnerSource* 16 | 17 | - [ ] [Take the GitHub at [Company] 101, self study course](). 18 | - [ ] Check out the [internal open source docs]() docs site! Here you'll find up to date information for releasing, contributing to, and using open source at [Company]. 19 | - [ ] Check out the InnerSource information site at [link](). You find information on InnerSource, guidance about sharing as well as pointers to data to support internal collaboration. 20 | 21 | ## Getting Settled (leveling up your skillset and participation ) 22 | *Join in! Participate, learn and experiment.* 23 | 24 | - [ ] [Join an Open Source Workshop!](). Whether you are new to open source, or interested in learning more about contributing on behalf of [COMPANY], understanding Innersource, creating inclusive communities, or growing your project - there's something for everyone. New registration dates are added regularly. 25 | - [ ] [Nominate a project](https://github.com/microsoft/foss-fund/blob/main/README.md) for the monthly FOSS Fund (and make sure to vote). Help [COMPANY] support the open source ecosystem! 26 | - [ ] Familiarize yourself with [Engineering Productivity metrics for InnerSource collaboration](). 27 | 28 | ## Feeling Settled (ongoing!) 29 | *Make learning, participation and collaboration part of your monthly goals* 30 | 31 | - [ ] [Setup a 1:1 with an Open Source Champ]()! Reach out to one of our inspiring Champs to learn more about the role of this program in supporting your success. 32 | - [ ] [Map your Open Source Career](https://github.com/microsoft/OSPO-Courses/tree/main/mapping-your-oss-career)) at [Company] with this self study course. This course is setup to inspire you in the role of open source in helping you reach your career goals at [company]; includes a worksheet for career discussions with your manager. 33 | 34 | 35 | ## Ongoing 36 | 37 | - [ ] Contribute to open source. [Company] encourages you to contribute to open source, especially upstream projects that we use. Not sure how to get started? Check out these [8 ways you can contribute to open source today](https://github.com/microsoft-sponsorships/microsoft-foss-fund/blob/main/assets/8-ways-to-contribute.md)! 38 | - [ ] Contribute shout outs, and other content to the Open Source newsletter. 39 | 40 | ## Optional 41 | - [ ] [Learn about component detection](https://github.com/microsoft/component-detection). 42 | 43 | -------------------------------------------------------------------------------- /learning_resources/onboarding/README.md: -------------------------------------------------------------------------------- 1 | # Onboarding to Open Source at Microsoft 101 2 | 3 | Microsoft Internal Link: https://aka.ms/opensource/onboarding 4 | 5 | ## Description 6 | There's a lot of information to process when joining Microsoft, starting in Open Source, or both! With this in mind, the Open Source Programs Office has created an easy-to-navigate GitHub project board: "Onboarding to Open Source at Microsoft.". 7 | 8 | This project groups activities in a way that allows people to connect with the open source community at Microsoft, gradually and at a manageable pace. From the board they can track their progress as they learn about tools, processes, and policy and complete foundational training for releasing, contributing to and using open source. This also works as a great tool for manager and Connect discussions. 9 | 10 | A personalized version of this project board can be created with the simple click of a button by visiting [LINK]. 11 | 12 | **NOTE**: the open source version of the project board 'generator' is not yet available. In the meantime we have both an example board you can copy, or checklist for easier reference. 13 | -------------------------------------------------------------------------------- /repository_cohorts/README.md: -------------------------------------------------------------------------------- 1 | ## Repository Cohorts 2 | 3 | The repository cohorts directory holds example of the repository cohorts concept. 4 | 5 | Some of the content in this directory will be presented at 6 | the [2024 Open Source Summit](https://ossna2024.sched.com/event/1aBPX/repository-cohorts-how-ospos-can-programmatically-categorize-all-their-repositories-justin-gosses-microsoft-natalia-luzuriaga-remy-decausemaker-isaac-milarsky-centers-for-medicare-medicaid-services?iframe=no). 7 | 8 | ### Directories 9 | 10 | The framework directory holds an Observable Framework project that will build a static page for GitHub pages 11 | that should be viewable at https://microsoft.github.io/OSPO/repository_cohorts/framework/dist/ 12 | or https://aka.ms/RepositoryCohorts/Demo/Microsoft 13 | 14 | *More information can be found in the README of the framework directory.* 15 | 16 | -------------------------------------------------------------------------------- /repository_cohorts/framework/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | docs/.observablehq/cache/ 3 | node_modules/ 4 | yarn-error.log 5 | -------------------------------------------------------------------------------- /repository_cohorts/framework/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/repository_cohorts/framework/.nojekyll -------------------------------------------------------------------------------- /repository_cohorts/framework/README.md: -------------------------------------------------------------------------------- 1 | # Repository Cohorts 2 | 3 | This directory builds a small front-end page whose main purpose is to be a demo that lets users see the repository cohorts concept put into practice with a fixed export of Microsoft public repository metadata. 4 | 5 | It is designed to act as a companion to a talk that will be given at Open Source Summit North America 2024 titled ["Repository Cohorts: How OSPO's Can Programmatically Categorize All Their Repositories"](https://ossna2024.sched.com/event/1aBPX/repository-cohorts-how-ospos-can-programmatically-categorize-all-their-repositories-justin-gosses-microsoft-natalia-luzuriaga-remy-decausemaker-isaac-milarsky-centers-for-medicare-medicaid-services?iframe=no). The presentation slides [are online](https://docs.google.com/presentation/d/18bDgY8OnZIUfYe6E_TJmp0EARf7K98l8/edit?usp=sharing&ouid=104365002391330854633&rtpof=true&sd=true). 6 | 7 | The content of this directory holds a front-end only website built with 8 | the [Observable Framework](https://observablehq.com/framework) library. 9 | It is intended as demonstration of using repository cohorts concept to turn 10 | repository metadata into more easily undestandable groups or 'cohorts' of repositories. 11 | 12 | Relevant to the top directory of this repository, 13 | the data processing code is in `repository_cohorts/framework/docs/components/cohorts.js`. 14 | Visualization code is in the `repository_cohorts/framework/docs/index.md` file. 15 | 16 | This directory builds a static page for GitHub pages 17 | that should be viewable at https://microsoft.github.io/OSPO/repository_cohorts/framework/dist/ 18 | or https://aka.ms/RepositoryCohorts/Demo/Microsoft 19 | 20 | ## Contributing 21 | 22 | The code in the files mentioned above is intended to be reused via example, not necessarily directly imported. 23 | 24 | Internally, we largely due this analysis using the 25 | [KQL (Kusto Query Language)](https://learn.microsoft.com/en-us/azure/data-explorer/kql-learning-resources). 26 | However, we are demoing repository cohorts here in JavaScript to make it more reusable. 27 | 28 | If you have a cohort that you use that is not in this code, but could be easily contributed if added to the JSON 29 | consumed by the `repos_cohort_processed_BaseCohorts` function in `cohorts.js`, then please submit a pull request. 30 | We would love to see what others are finding is useful cohorts to examine. 31 | 32 | ## Getting started 33 | 34 | This is an [Observable Framework](https://observablehq.com/framework) project. To start the local preview server, run: 35 | 36 | *These commands should be run from the directory `framework` not this repository's root!* 37 | 38 | ``` 39 | npm install 40 | ``` 41 | 42 | Then 43 | 44 | ``` 45 | npm run dev 46 | ``` 47 | 48 | Then visit to preview your project. 49 | 50 | For more, see . 51 | 52 | ## Project structure 53 | 54 | ```ini 55 | . 56 | ├─ docs 57 | │ ├─ components 58 | │ │ └─ cohorts.js # an importable module used to calculate repository cohorts 59 | │ ├─ data 60 | │ │ ├─ microsoft_repos_public_20240319.csv # a data file with a fixed export of Microsoft repository metadata 61 | │ └─ index.md # the home page for repository cohorts 62 | ├─ .gitignore 63 | ├─ observablehq.config.js # the project config file 64 | ├─ package.json # defines our dependencies 65 | └─ README.md 66 | ``` 67 | 68 | **`docs`** - This is the “source root” — where your source files live. Pages go here. Each page is a Markdown file. Observable Framework uses [file-based routing](https://observablehq.com/framework/routing), which means that the name of the file controls where the page is served. You can create as many pages as you like. Use folders to organize your pages. 69 | 70 | **`docs/index.md`** - This is the home page for your site. You can have as many additional pages as you’d like, but you should always have a home page, too. 71 | 72 | **`docs/data`** - You can put [data loaders](https://observablehq.com/framework/loaders) or static data files anywhere in your source root, but we recommend putting them here. 73 | 74 | **`docs/components`** - You can put shared [JavaScript modules](https://observablehq.com/framework/javascript/imports) anywhere in your source root, but we recommend putting them here. This helps you pull code out of Markdown files and into JavaScript modules, making it easier to reuse code across pages, write tests and run linters, and even share code with vanilla web applications. 75 | 76 | **`observablehq.config.js`** - This is the [project configuration](https://observablehq.com/framework/config) file, such as the pages and sections in the sidebar navigation, and the project’s title. 77 | 78 | ## Command reference 79 | 80 | | Command | Description | 81 | | ----------------- | -------------------------------------------------------- | 82 | | `npm install` | Install or reinstall dependencies | 83 | | `npm run dev` | Start local preview server | 84 | | `npm run build` | Build your static site, generating `./dist` | 85 | | `npm run deploy` | Deploy your project to Observable | 86 | | `npm run clean` | Clear the local data loader cache | 87 | | `npm run observable` | Run commands like `observable help` | 88 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-eh.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/repository_cohorts/framework/dist/_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-eh.wasm -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-mvp.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/OSPO/005a8861009d357c8ea6333cabfb41efa87a3160/repository_cohorts/framework/dist/_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-mvp.wasm -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/binary-search-bounds@2.0.5/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/binary-search-bounds@2.0.5/search-bounds.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | function r(r,n,t,o,e){for(var u=e+1;o<=e;){var i=o+e>>>1,f=r[i];(void 0!==t?t(f,n):f-n)>=0?(u=i,e=i-1):o=i+1}return u}function n(r,n,t,o,e){for(var u=e+1;o<=e;){var i=o+e>>>1,f=r[i];(void 0!==t?t(f,n):f-n)>0?(u=i,e=i-1):o=i+1}return u}function t(r,n,t,o,e){for(var u=o-1;o<=e;){var i=o+e>>>1,f=r[i];(void 0!==t?t(f,n):f-n)<0?(u=i,o=i+1):e=i-1}return u}function o(r,n,t,o,e){for(var u=o-1;o<=e;){var i=o+e>>>1,f=r[i];(void 0!==t?t(f,n):f-n)<=0?(u=i,o=i+1):e=i-1}return u}function e(r,n,t,o,e){for(;o<=e;){var u=o+e>>>1,i=r[u],f=void 0!==t?t(i,n):i-n;if(0===f)return u;f<=0?o=u+1:e=u-1}return-1}function u(r,n,t,o,e,u){return"function"==typeof t?u(r,n,t,void 0===o?0:0|o,void 0===e?r.length-1:0|e):u(r,n,void 0,void 0===t?0:0|t,void 0===o?r.length-1:0|o)}var i={ge:function(n,t,o,e,i){return u(n,t,o,e,i,r)},gt:function(r,t,o,e,i){return u(r,t,o,e,i,n)},lt:function(r,n,o,e,i){return u(r,n,o,e,i,t)},le:function(r,n,t,e,i){return u(r,n,t,e,i,o)},eq:function(r,n,t,o,i){return u(r,n,t,o,i,e)}},f=i.eq,v=i.ge,a=i.gt,c=i.le,d=i.lt;export{i as default,f as eq,v as ge,a as gt,c as le,d as lt}; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-axis@3.0.0/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-axis@3.0.0/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | function t(t){return t}var n=1,r=2,e=3,i=4,a=1e-6;function o(t){return"translate("+t+",0)"}function u(t){return"translate(0,"+t+")"}function c(t){return n=>+t(n)}function l(t,n){return n=Math.max(0,t.bandwidth()-2*n)/2,t.round()&&(n=Math.round(n)),r=>+t(r)+n}function s(){return!this.__axis}function f(f,d){var m=[],h=null,g=null,p=6,k=6,x=3,y="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,A=f===n||f===i?-1:1,M=f===i||f===r?"x":"y",v=f===n||f===e?o:u;function w(o){var u=null==h?d.ticks?d.ticks.apply(d,m):d.domain():h,w=null==g?d.tickFormat?d.tickFormat.apply(d,m):t:g,_=Math.max(p,0)+x,F=d.range(),V=+F[0]+y,z=+F[F.length-1]+y,H=(d.bandwidth?l:c)(d.copy(),y),b=o.selection?o.selection():o,C=b.selectAll(".domain").data([null]),S=b.selectAll(".tick").data(u,d).order(),P=S.exit(),I=S.enter().append("g").attr("class","tick"),N=S.select("line"),O=S.select("text");C=C.merge(C.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(I),N=N.merge(I.append("line").attr("stroke","currentColor").attr(M+"2",A*p)),O=O.merge(I.append("text").attr("fill","currentColor").attr(M,A*_).attr("dy",f===n?"0em":f===e?"0.71em":"0.32em")),o!==b&&(C=C.transition(o),S=S.transition(o),N=N.transition(o),O=O.transition(o),P=P.transition(o).attr("opacity",a).attr("transform",(function(t){return isFinite(t=H(t))?v(t+y):this.getAttribute("transform")})),I.attr("opacity",a).attr("transform",(function(t){var n=this.parentNode.__axis;return v((n&&isFinite(n=n(t))?n:H(t))+y)}))),P.remove(),C.attr("d",f===i||f===r?k?"M"+A*k+","+V+"H"+y+"V"+z+"H"+A*k:"M"+y+","+V+"V"+z:k?"M"+V+","+A*k+"V"+y+"H"+z+"V"+A*k:"M"+V+","+y+"H"+z),S.attr("opacity",1).attr("transform",(function(t){return v(H(t)+y)})),N.attr(M+"2",A*p),O.attr(M,A*_).text(w),b.filter(s).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",f===r?"start":f===i?"end":"middle"),b.each((function(){this.__axis=H}))}return w.scale=function(t){return arguments.length?(d=t,w):d},w.ticks=function(){return m=Array.from(arguments),w},w.tickArguments=function(t){return arguments.length?(m=null==t?[]:Array.from(t),w):m.slice()},w.tickValues=function(t){return arguments.length?(h=null==t?null:Array.from(t),w):h&&h.slice()},w.tickFormat=function(t){return arguments.length?(g=t,w):g},w.tickSize=function(t){return arguments.length?(p=k=+t,w):p},w.tickSizeInner=function(t){return arguments.length?(p=+t,w):p},w.tickSizeOuter=function(t){return arguments.length?(k=+t,w):k},w.tickPadding=function(t){return arguments.length?(x=+t,w):x},w.offset=function(t){return arguments.length?(y=+t,w):y},w}function d(t){return f(n,t)}function m(t){return f(r,t)}function h(t){return f(e,t)}function g(t){return f(i,t)}export{h as axisBottom,g as axisLeft,m as axisRight,d as axisTop};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-chord@3.0.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-chord@3.0.1/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{path as n}from"../d3-path@3.1.0/+esm.js";var t=Math.abs,e=Math.cos,r=Math.sin,u=Math.PI,l=u/2,o=2*u,a=Math.max,i=1e-12;function c(n,t){return Array.from({length:t-n},((t,e)=>n+e))}function f(){return p(!1,!1)}function s(){return p(!1,!0)}function g(){return p(!0,!1)}function p(n,t){var e=0,r=null,u=null,l=null;function i(i){var f,s=i.length,g=new Array(s),p=c(0,s),h=new Array(s*s),d=new Array(s),v=0;i=Float64Array.from({length:s*s},t?(n,t)=>i[t%s][t/s|0]:(n,t)=>i[t/s|0][t%s]);for(let t=0;tr(g[n],g[t])));for(const e of p){const r=t;if(n){const n=c(1+~s,s).filter((n=>n<0?i[~n*s+e]:i[e*s+n]));u&&n.sort(((n,t)=>u(n<0?-i[~n*s+e]:i[e*s+n],t<0?-i[~t*s+e]:i[e*s+t])));for(const r of n)if(r<0){(h[~r*s+e]||(h[~r*s+e]={source:null,target:null})).target={index:e,startAngle:t,endAngle:t+=i[~r*s+e]*v,value:i[~r*s+e]}}else{(h[e*s+r]||(h[e*s+r]={source:null,target:null})).source={index:e,startAngle:t,endAngle:t+=i[e*s+r]*v,value:i[e*s+r]}}d[e]={index:e,startAngle:r,endAngle:t,value:g[e]}}else{const n=c(0,s).filter((n=>i[e*s+n]||i[n*s+e]));u&&n.sort(((n,t)=>u(i[e*s+n],i[e*s+t])));for(const r of n){let n;if(ei&&(t(M-T)>2*A+i?M>T?(T+=A,M-=A):(T-=A,M+=A):T=M=(T+M)/2,t(w-q)>2*A+i?w>q?(q+=A,w-=A):(q-=A,w+=A):q=w=(q+w)/2),b.moveTo(m*e(T),m*r(T)),b.arc(0,0,m,T,M),T!==q||M!==w)if(u){var R=C-+u.apply(this,arguments),P=(q+w)/2;b.quadraticCurveTo(0,0,R*e(q),R*r(q)),b.lineTo(C*e(P),C*r(P)),b.lineTo(R*e(w),R*r(w))}else b.quadraticCurveTo(0,0,C*e(q),C*r(q)),b.arc(0,0,C,q,w);if(b.quadraticCurveTo(0,0,m*e(T),m*r(T)),b.closePath(),d)return b=null,d+""||null}return u&&(M.headRadius=function(n){return arguments.length?(u="function"==typeof n?n:d(+n),M):u}),M.radius=function(n){return arguments.length?(c=f="function"==typeof n?n:d(+n),M):c},M.sourceRadius=function(n){return arguments.length?(c="function"==typeof n?n:d(+n),M):c},M.targetRadius=function(n){return arguments.length?(f="function"==typeof n?n:d(+n),M):f},M.startAngle=function(n){return arguments.length?(s="function"==typeof n?n:d(+n),M):s},M.endAngle=function(n){return arguments.length?(g="function"==typeof n?n:d(+n),M):g},M.padAngle=function(n){return arguments.length?(p="function"==typeof n?n:d(+n),M):p},M.source=function(n){return arguments.length?(o=n,M):o},M.target=function(n){return arguments.length?(a=n,M):a},M.context=function(n){return arguments.length?(b=null==n?null:n,M):b},M}function C(){return M()}function q(){return M(b)}export{f as chord,g as chordDirected,s as chordTranspose,C as ribbon,q as ribbonArrow};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-contour@4.0.2/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-contour@4.0.2/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{thresholdSturges as r,extent as n,ticks as t,nice as o,blur2 as e,max as i}from"../d3-array@3.2.4/+esm.js";var u=Array.prototype.slice;function a(r,n){return r-n}var f=r=>()=>r;function c(r,n){for(var t,o=-1,e=n.length;++oo!=g>o&&t<(d-c)*(o-h)/(g-h)+c&&(e=-e)}return e}function s(r,n,t){var o,e,i,u;return function(r,n,t){return(n[0]-r[0])*(t[1]-r[1])==(t[0]-r[0])*(n[1]-r[1])}(r,n,t)&&(e=r[o=+(r[0]===n[0])],i=t[o],u=n[o],e<=i&&i<=u||u<=i&&i<=e)}function l(){}var d=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function g(){var e=1,i=1,h=r,s=A;function g(r){var e=h(r);if(Array.isArray(e))e=e.slice().sort(a);else{const i=n(r,v);for(e=t(...o(i[0],i[1],e),e);e[e.length-1]>=i[1];)e.pop();for(;e[1]E(r,n)))}function E(r,n){const t=null==n?NaN:+n;if(isNaN(t))throw new Error(`invalid value: ${n}`);var o=[],u=[];return function(r,n,t){var o,u,a,f,c,h,s=new Array,l=new Array;o=u=-1,f=p(r[0],n),d[f<<1].forEach(g);for(;++o=n,d[c<<2].forEach(g);for(;++o0?o.push([n]):u.push(n)})),u.forEach((function(r){for(var n,t=0,e=o.length;t0&&o0&&u=0&&t>=0))throw new Error("invalid size");return e=n,i=t,g},g.thresholds=function(r){return arguments.length?(h="function"==typeof r?r:Array.isArray(r)?f(u.call(r)):f(r),g):h},g.smooth=function(r){return arguments.length?(s=r?A:l,g):s===A},g}function v(r){return isFinite(r)?r:NaN}function p(r,n){return null!=r&&+r>=n}function y(r){return null==r||isNaN(r=+r)?-1/0:r}function w(r,n,t,o){const e=o-n,i=t-n,u=isFinite(e)||isFinite(i)?e/i:Math.sign(e)/Math.sign(i);return isNaN(u)?r:r+u-.5}function E(r){return r[0]}function M(r){return r[1]}function A(){return 1}function N(){var r=E,n=M,o=A,a=960,c=500,h=20,s=2,l=3*h,d=a+2*l>>s,v=c+2*l>>s,p=f(20);function y(t){var i=new Float32Array(d*v),u=Math.pow(2,-s),a=-1;for(const e of t){var f=(r(e,++a,t)+l)*u,c=(n(e,a,t)+l)*u,g=+o(e,a,t);if(g&&f>=0&&f=0&&cr*e)))(n).map(((r,n)=>(r.value=+o[n],N(r))))}function N(r){return r.coordinates.forEach(m),r}function m(r){r.forEach(z)}function z(r){r.forEach(b)}function b(r){r[0]=r[0]*Math.pow(2,s)-l,r[1]=r[1]*Math.pow(2,s)-l}function x(){return d=a+2*(l=3*h)>>s,v=c+2*l>>s,w}return w.contours=function(r){var n=y(r),t=g().size([d,v]),o=Math.pow(2,2*s),e=r=>{r=+r;var e=N(t.contour(n,r*o));return e.value=r,e};return Object.defineProperty(e,"max",{get:()=>i(n)/o}),e},w.x=function(n){return arguments.length?(r="function"==typeof n?n:f(+n),w):r},w.y=function(r){return arguments.length?(n="function"==typeof r?r:f(+r),w):n},w.weight=function(r){return arguments.length?(o="function"==typeof r?r:f(+r),w):o},w.size=function(r){if(!arguments.length)return[a,c];var n=+r[0],t=+r[1];if(!(n>=0&&t>=0))throw new Error("invalid size");return a=n,c=t,x()},w.cellSize=function(r){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return s=Math.floor(Math.log(r)/Math.LN2),x()},w.thresholds=function(r){return arguments.length?(p="function"==typeof r?r:Array.isArray(r)?f(u.call(r)):f(r),w):p},w.bandwidth=function(r){if(!arguments.length)return Math.sqrt(h*(h+1));if(!((r=+r)>=0))throw new Error("invalid bandwidth");return h=(Math.sqrt(4*r*r+1)-1)/2,x()},w}export{N as contourDensity,g as contours};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-dispatch@3.0.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-dispatch@3.0.1/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | var n={value:()=>{}};function r(){for(var n,r=0,e=arguments.length,o={};r=0&&(r=n.slice(t+1),n=n.slice(0,t)),n&&!i.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}}))),f=-1,u=a.length;if(!(arguments.length<2)){if(null!=r&&"function"!=typeof r)throw new Error("invalid callback: "+r);for(;++f0)for(var t,e,o=new Array(t),i=0;i()=>e;function s(e,{sourceEvent:t,subject:n,target:r,identifier:o,active:a,x:i,y:u,dx:c,dy:l,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:i,enumerable:!0,configurable:!0},y:{value:u,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:s}})}function f(e){return!e.ctrlKey&&!e.button}function d(){return this.parentNode}function g(e,t){return null==t?{x:e.x,y:e.y}:t}function h(){return navigator.maxTouchPoints||"ontouchstart"in this}function m(){var m,v,p,b,y=f,x=d,_=g,w=h,E={},T=e("start","drag","end"),j=0,k=0;function M(e){e.on("mousedown.drag",P).filter(w).on("touchstart.drag",S).on("touchmove.drag",U,r).on("touchend.drag touchcancel.drag",I).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function P(e,n){if(!b&&y.call(this,e,n)){var r=X(this,x.call(this,e,n),e,n,"mouse");r&&(t(e.view).on("mousemove.drag",z,o).on("mouseup.drag",D,o),u(e.view),a(e),p=!1,m=e.clientX,v=e.clientY,r("start",e))}}function z(e){if(i(e),!p){var t=e.clientX-m,n=e.clientY-v;p=t*t+n*n>k}E.mouse("drag",e)}function D(e){t(e.view).on("mousemove.drag mouseup.drag",null),c(e.view,p),i(e),E.mouse("end",e)}function S(e,t){if(y.call(this,e,t)){var n,r,o=e.changedTouches,i=x.call(this,e,t),u=o.length;for(n=0;n9999?"+"+o(n,6):o(n,4))+"-"+o(r.getUTCMonth()+1,2)+"-"+o(r.getUTCDate(),2)+(u?"T"+o(t,2)+":"+o(e,2)+":"+o(a,2)+"."+o(u,3)+"Z":a?"T"+o(t,2)+":"+o(e,2)+":"+o(a,2)+"Z":e||t?"T"+o(t,2)+":"+o(e,2)+"Z":"")}function u(o){var u=new RegExp('["'+o+"\n\r]"),i=o.charCodeAt(0);function f(t,e){var o,a=[],u=t.length,f=0,c=0,s=u<=0,l=!1;function d(){if(s)return n;if(l)return l=!1,r;var e,o,a=f;if(34===t.charCodeAt(a)){for(;f++=u?s=!0:10===(o=t.charCodeAt(f++))?l=!0:13===o&&(l=!0,10===t.charCodeAt(f)&&++f),t.slice(a+1,e-1).replace(/""/g,'"')}for(;f+n;function t(n){return n*n}function e(n){return n*(2-n)}function a(n){return((n*=2)<=1?n*n:--n*(2-n)+1)/2}function u(n){return n*n*n}function r(n){return--n*n*n+1}function s(n){return((n*=2)<=1?n*n*n:(n-=2)*n*n+2)/2}var o=function n(t){function e(n){return Math.pow(n,t)}return t=+t,e.exponent=n,e}(3),i=function n(t){function e(n){return 1-Math.pow(1-n,t)}return t=+t,e.exponent=n,e}(3),c=function n(t){function e(n){return((n*=2)<=1?Math.pow(n,t):2-Math.pow(2-n,t))/2}return t=+t,e.exponent=n,e}(3),f=Math.PI,h=f/2;function M(n){return 1==+n?1:1-Math.cos(n*h)}function p(n){return Math.sin(n*h)}function I(n){return(1-Math.cos(f*n))/2}function l(n){return 1.0009775171065494*(Math.pow(2,-10*n)-.0009765625)}function O(n){return l(1-+n)}function x(n){return 1-l(n)}function d(n){return((n*=2)<=1?l(1-n):2-l(n-1))/2}function v(n){return 1-Math.sqrt(1-n*n)}function B(n){return Math.sqrt(1- --n*n)}function C(n){return((n*=2)<=1?1-Math.sqrt(1-n*n):Math.sqrt(1-(n-=2)*n)+1)/2}var E=4/11,m=6/11,P=8/11,w=3/4,b=9/11,k=10/11,q=15/16,y=21/22,Q=63/64,S=1/E/E;function L(n){return 1-g(1-n)}function g(n){return(n=+n)s(n,r).then((n=>(new DOMParser).parseFromString(n,t)))}var v=x("application/xml"),d=x("text/html"),g=x("image/svg+xml");export{o as blob,f as buffer,h as csv,c as dsv,d as html,m as image,p as json,g as svg,s as text,l as tsv,v as xml};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-force@3.0.0/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-force@3.0.0/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{quadtree as n}from"../d3-quadtree@3.0.1/+esm.js";import{dispatch as t}from"../d3-dispatch@3.0.1/+esm.js";import{timer as r}from"../d3-timer@3.0.1/+esm.js";function e(n,t){var r,e=1;function i(){var i,o,u=r.length,f=0,a=0;for(i=0;iy+l||ex+l||ih.index){var v=y-u.x-u.vx,d=x-u.y-u.vy,p=v*v+d*d;pn.r&&(n.r=n[t].r)}function y(){if(r){var n,i,o=r.length;for(e=new Array(o),n=0;n[h(n,t,e),n])));for(i=0,u=new Array(a);i(n=(v*n+y)%x)/x}();function s(){p(),h.call("tick",e),i1?(null==t?c.delete(n):c.set(n,w(t)),e):c.get(n)},find:function(t,r,e){var i,o,u,f,a,c=0,l=n.length;for(null==e?e=1/0:e*=e,c=0;c1?(h.on(n,t),e):h.on(n)}}}function M(){var t,r,e,u,f,a=i(-30),c=1,l=1/0,h=.81;function v(e){var i,o=t.length,f=n(t,g,s).visitAfter(x);for(u=e,i=0;i=l)){(n.data!==r||n.next)&&(0===v&&(g+=(v=o(e))*v),0===y&&(g+=(y=o(e))*y),g1?r[0]+r.slice(2):r,+t.slice(n+1)]}function i(i){return(i=t(Math.abs(i)))?i[1]:NaN}var n,r=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function e(t){if(!(i=r.exec(t)))throw new Error("invalid format: "+t);var i;return new o({fill:i[1],align:i[2],sign:i[3],symbol:i[4],zero:i[5],width:i[6],comma:i[7],precision:i[8]&&i[8].slice(1),trim:i[9],type:i[10]})}function o(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function a(i,n){var r=t(i,n);if(!r)return i+"";var e=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+e:e.length>o+1?e.slice(0,o+1)+"."+e.slice(o+1):e+new Array(o-e.length+2).join("0")}e.prototype=o.prototype,o.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var s={"%":(t,i)=>(100*t).toFixed(i),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,i)=>t.toExponential(i),f:(t,i)=>t.toFixed(i),g:(t,i)=>t.toPrecision(i),o:t=>Math.round(t).toString(8),p:(t,i)=>a(100*t,i),r:a,s:function(i,r){var e=t(i,r);if(!e)return i+"";var o=e[0],a=e[1],s=a-(n=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,h=o.length;return s===h?o:s>h?o+new Array(s-h+1).join("0"):s>0?o.slice(0,s)+"."+o.slice(s):"0."+new Array(1-s).join("0")+t(i,Math.max(0,r+s-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function h(t){return t}var c,l,u,f=Array.prototype.map,m=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function d(t){var r,o,a=void 0===t.grouping||void 0===t.thousands?h:(r=f.call(t.grouping,Number),o=t.thousands+"",function(t,i){for(var n=t.length,e=[],a=0,s=r[0],h=0;n>0&&s>0&&(h+s+1>i&&(s=Math.max(1,i-h)),e.push(t.substring(n-=s,n+s)),!((h+=s+1)>i));)s=r[a=(a+1)%r.length];return e.reverse().join(o)}),c=void 0===t.currency?"":t.currency[0]+"",l=void 0===t.currency?"":t.currency[1]+"",u=void 0===t.decimal?".":t.decimal+"",d=void 0===t.numerals?h:function(t){return function(i){return i.replace(/[0-9]/g,(function(i){return t[+i]}))}}(f.call(t.numerals,String)),g=void 0===t.percent?"%":t.percent+"",p=void 0===t.minus?"−":t.minus+"",v=void 0===t.nan?"NaN":t.nan+"";function M(t){var i=(t=e(t)).fill,r=t.align,o=t.sign,h=t.symbol,f=t.zero,M=t.width,y=t.comma,x=t.precision,b=t.trim,w=t.type;"n"===w?(y=!0,w="g"):s[w]||(void 0===x&&(x=12),b=!0,w="g"),(f||"0"===i&&"="===r)&&(f=!0,i="0",r="=");var S="$"===h?c:"#"===h&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",k="$"===h?l:/[%p]/.test(w)?g:"",z=s[w],A=/[defgprs%]/.test(w);function N(t){var e,s,h,c=S,l=k;if("c"===w)l=z(t)+l,t="";else{var g=(t=+t)<0||1/t<0;if(t=isNaN(t)?v:z(Math.abs(t),x),b&&(t=function(t){t:for(var i,n=t.length,r=1,e=-1;r0&&(e=0)}return e>0?t.slice(0,e)+t.slice(i+1):t}(t)),g&&0==+t&&"+"!==o&&(g=!1),c=(g?"("===o?o:p:"-"===o||"("===o?"":o)+c,l=("s"===w?m[8+n/3]:"")+l+(g&&"("===o?")":""),A)for(e=-1,s=t.length;++e(h=t.charCodeAt(e))||h>57){l=(46===h?u+t.slice(e+1):t.slice(e))+l,t=t.slice(0,e);break}}y&&!f&&(t=a(t,1/0));var N=c.length+t.length+l.length,j=N>1)+c+t+l+j.slice(N);break;default:t=j+c+t+l}return d(t)}return x=void 0===x?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x)),N.toString=function(){return t+""},N}return{format:M,formatPrefix:function(t,n){var r=M(((t=e(t)).type="f",t)),o=3*Math.max(-8,Math.min(8,Math.floor(i(n)/3))),a=Math.pow(10,-o),s=m[8+o/3];return function(t){return r(a*t)+s}}}}function g(t){return c=d(t),l=c.format,u=c.formatPrefix,c}function p(t){return Math.max(0,-i(Math.abs(t)))}function v(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(i(n)/3)))-i(Math.abs(t)))}function M(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,i(n)-i(t))+1}g({thousands:",",grouping:[3],currency:["$",""]});export{o as FormatSpecifier,l as format,g as formatDefaultLocale,d as formatLocale,u as formatPrefix,e as formatSpecifier,p as precisionFixed,v as precisionPrefix,M as precisionRound};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-interpolate@3.0.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-interpolate@3.0.1/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{rgb as t,color as n,hsl as r,lab as e,hcl as a,cubehelix as o}from"../d3-color@3.1.0/+esm.js";function u(t,n,r,e,a){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*r+(1+3*t+3*o-3*u)*e+u*a)/6}function i(t){var n=t.length-1;return function(r){var e=r<=0?r=0:r>=1?(r=1,n-1):Math.floor(r*n),a=t[e],o=t[e+1],i=e>0?t[e-1]:2*a-o,c=e()=>t;function s(t,n){return function(r){return t+r*n}}function f(t,n){var r=n-t;return r?s(t,r>180||r<-180?r-360*Math.round(r/360):r):l(isNaN(t)?n:t)}function h(t){return 1==(t=+t)?p:function(n,r){return r-n?function(t,n,r){return t=Math.pow(t,r),n=Math.pow(n,r)-t,r=1/r,function(e){return Math.pow(t+e*n,r)}}(n,r,t):l(isNaN(n)?r:n)}}function p(t,n){var r=n-t;return r?s(t,r):l(isNaN(t)?n:t)}var v=function n(r){var e=h(r);function a(n,r){var a=e((n=t(n)).r,(r=t(r)).r),o=e(n.g,r.g),u=e(n.b,r.b),i=p(n.opacity,r.opacity);return function(t){return n.r=a(t),n.g=o(t),n.b=u(t),n.opacity=i(t),n+""}}return a.gamma=n,a}(1);function g(n){return function(r){var e,a,o=r.length,u=new Array(o),i=new Array(o),c=new Array(o);for(e=0;eo&&(a=n.slice(o,a),i[u]?i[u]+=a:i[++u]=a),(r=r[0])===(e=e[0])?i[u]?i[u]+=e:i[++u]=e:(i[++u]=null,c.push({i:u,x:X(r,e)})),o=Y.lastIndex;return o180?n+=360:n-t>180&&(t+=360),o.push({i:r.push(a(r)+"rotate(",null,e)-2,x:X(t,n)})):n&&r.push(a(r)+"rotate("+n+e)}(o.rotate,u.rotate,i,c),function(t,n,r,o){t!==n?o.push({i:r.push(a(r)+"skewX(",null,e)-2,x:X(t,n)}):n&&r.push(a(r)+"skewX("+n+e)}(o.skewX,u.skewX,i,c),function(t,n,r,e,o,u){if(t!==r||n!==e){var i=o.push(a(o)+"scale(",null,",",null,")");u.push({i:i-4,x:X(t,r)},{i:i-2,x:X(n,e)})}else 1===r&&1===e||o.push(a(o)+"scale("+r+","+e+")")}(o.scaleX,o.scaleY,u.scaleX,u.scaleY,i,c),o=u=null,function(t){for(var n,r=-1,e=c.length;++r=0))throw new Error(`invalid digits: ${t}`);if(i>15)return _;const h=10**i;return function(t){this._+=t[0];for(let i=1,s=t.length;ih)if(Math.abs(l*r-o*p)>h&&n){let x=_-$,d=e-a,y=r*r+o*o,M=x*x+d*d,c=Math.sqrt(y),f=Math.sqrt(u),w=n*Math.tan((t-Math.acos((y+u-M)/(2*c*f)))/2),v=w/f,g=w/c;Math.abs(v-1)>h&&this._append`L${i+v*p},${s+v*l}`,this._append`A${n},${n},0,0,${+(l*x>p*d)},${this._x1=i+g*r},${this._y1=s+g*o}`}else this._append`L${this._x1=i},${this._y1=s}`;else;}arc(_,e,n,$,a,r){if(_=+_,e=+e,r=!!r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=n*Math.cos($),p=n*Math.sin($),l=_+o,u=e+p,x=1^r,d=r?$-a:a-$;null===this._x1?this._append`M${l},${u}`:(Math.abs(this._x1-l)>h||Math.abs(this._y1-u)>h)&&this._append`L${l},${u}`,n&&(d<0&&(d=d%i+i),d>s?this._append`A${n},${n},0,1,${x},${_-o},${e-p}A${n},${n},0,1,${x},${this._x1=l},${this._y1=u}`:d>h&&this._append`A${n},${n},0,${+(d>=t)},${x},${this._x1=_+n*Math.cos(a)},${this._y1=e+n*Math.sin(a)}`)}rect(t,i,h,s){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+i}h${h=+h}v${+s}h${-h}Z`}toString(){return this._}}function n(){return new e}function $(t=3){return new e(+t)}n.prototype=e.prototype;export{e as Path,n as path,$ as pathRound};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-polygon@3.0.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-polygon@3.0.1/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | function n(n){for(var r,t=-1,o=n.length,e=n[o-1],l=0;++t1&&(l=n[t[e-2]],u=n[t[e-1]],f=n[o],(u[0]-l[0])*(f[1]-l[1])-(u[1]-l[1])*(f[0]-l[0])<=0);)--e;t[e++]=o}var l,u,f;return t.slice(0,e)}function e(n){if((e=n.length)<3)return null;var r,e,l=new Array(e),u=new Array(e);for(r=0;r=0;--r)i.push(n[l[f[r]][2]]);for(r=+g;rf!=g>f&&u<(a-t)*(f-o)/(g-o)+t&&(h=!h),a=t,g=o;return h}function u(n){for(var r,t,o=-1,e=n.length,l=n[e-1],u=l[0],f=l[1],a=0;++o=(h=(y+d)/2))?y=h:d=h,(l=r>=(s=(v+p)/2))?v=s:p=s,e=x,!(x=x[_=l<<1|u]))return e[_]=c,t;if(o=+t._x.call(null,x.data),a=+t._y.call(null,x.data),i===o&&r===a)return c.next=x,e?e[_]=c:t._root=c,t;do{e=e?e[_]=new Array(4):t._root=new Array(4),(u=i>=(h=(y+d)/2))?y=h:d=h,(l=r>=(s=(v+p)/2))?v=s:p=s}while((_=l<<1|u)==(f=(a>=s)<<1|o>=h));return e[f]=x,e[_]=c,t}function i(t,i,r,n,e){this.node=t,this.x0=i,this.y0=r,this.x1=n,this.y1=e}function r(t){return t[0]}function n(t){return t[1]}function e(t,i,e){var s=new h(null==i?r:i,null==e?n:e,NaN,NaN,NaN,NaN);return null==t?s:s.addAll(t)}function h(t,i,r,n,e,h){this._x=t,this._y=i,this._x0=r,this._y0=n,this._x1=e,this._y1=h,this._root=void 0}function s(t){for(var i={data:t.data},r=i;t=t.next;)r=r.next={data:t.data};return i}var o=e.prototype=h.prototype;o.copy=function(){var t,i,r=new h(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=s(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var e=0;e<4;++e)(i=n.source[e])&&(i.length?t.push({source:i,target:n.target[e]=new Array(4)}):n.target[e]=s(i));return r},o.add=function(i){const r=+this._x.call(null,i),n=+this._y.call(null,i);return t(this.cover(r,n),r,n,i)},o.addAll=function(i){var r,n,e,h,s=i.length,o=new Array(s),a=new Array(s),u=1/0,l=1/0,_=-1/0,f=-1/0;for(n=0;n_&&(_=e),hf&&(f=h));if(u>_||l>f)return this;for(this.cover(u,l).cover(_,f),n=0;nt||t>=e||n>i||i>=h;)switch(o=(ix||(s=u.y0)>c||(o=u.x1)<_||(a=u.y1)=p)<<1|t>=d)&&(u=y[y.length-1],y[y.length-1]=y[y.length-1-l],y[y.length-1-l]=u)}else{var w=t-+this._x.call(null,v.data),N=r-+this._y.call(null,v.data),g=w*w+N*N;if(g=(o=(c+v)/2))?c=o:v=o,(l=s>=(a=(y+d)/2))?y=a:d=a,i=x,!(x=x[_=l<<1|u]))return this;if(!x.length)break;(i[_+1&3]||i[_+2&3]||i[_+3&3])&&(r=i,f=_)}for(;x.data!==t;)if(n=x,!(x=x.next))return this;return(e=x.next)&&delete x.next,n?(e?n.next=e:delete n.next,this):i?(e?i[_]=e:delete i[_],(x=i[0]||i[1]||i[2]||i[3])&&x===(i[3]||i[2]||i[1]||i[0])&&!x.length&&(r?r[f]=x:this._root=x),this):(this._root=e,this)},o.removeAll=function(t){for(var i=0,r=t.length;i1);return r+t*a*Math.sqrt(-2*Math.log(u)/u)}}return t.source=r,t}(r),u=function r(n){var t=o.source(n);function u(){var r=t.apply(this,arguments);return function(){return Math.exp(r())}}return u.source=r,u}(r),a=function r(n){function t(r){return(r=+r)<=0?()=>0:function(){for(var t=0,o=r;o>1;--o)t+=n();return t+o*n()}}return t.source=r,t}(r),e=function r(n){var t=a.source(n);function o(r){if(0==(r=+r))return n;var o=t(r);return function(){return o()/r}}return o.source=r,o}(r),i=function r(n){function t(r){return function(){return-Math.log1p(-n())/r}}return t.source=r,t}(r),c=function r(n){function t(r){if((r=+r)<0)throw new RangeError("invalid alpha");return r=1/-r,function(){return Math.pow(1-n(),r)}}return t.source=r,t}(r),f=function r(n){function t(r){if((r=+r)<0||r>1)throw new RangeError("invalid p");return function(){return Math.floor(n()+r)}}return t.source=r,t}(r),l=function r(n){function t(r){if((r=+r)<0||r>1)throw new RangeError("invalid p");return 0===r?()=>1/0:1===r?()=>1:(r=Math.log1p(-r),function(){return 1+Math.floor(Math.log1p(-n())/r)})}return t.source=r,t}(r),s=function r(n){var t=o.source(n)();function u(r,o){if((r=+r)<0)throw new RangeError("invalid k");if(0===r)return()=>0;if(o=null==o?1:+o,1===r)return()=>-Math.log1p(-n())*o;var u=(r<1?r+1:r)-1/3,a=1/(3*Math.sqrt(u)),e=r<1?()=>Math.pow(n(),1/r):()=>1;return function(){do{do{var r=t(),i=1+a*r}while(i<=0);i*=i*i;var c=1-n()}while(c>=1-.0331*r*r*r*r&&Math.log(c)>=.5*r*r+u*(1-i+Math.log(i)));return u*i*e()*o}}return u.source=r,u}(r),h=function r(n){var t=s.source(n);function o(r,n){var o=t(r),u=t(n);return function(){var r=o();return 0===r?0:r/(r+u())}}return o.source=r,o}(r),M=function r(n){var t=l.source(n),o=h.source(n);function u(r,n){return r=+r,(n=+n)>=1?()=>r:n<=0?()=>0:function(){for(var u=0,a=r,e=n;a*e>16&&a*(1-e)>16;){var i=Math.floor((a+1)*e),c=o(i,a-i+1)();c<=e?(u+=i,a-=i,e=(e-c)/(1-c)):(a=i-1,e/=c)}for(var f=e<.5,l=t(f?e:1-e),s=l(),h=0;s<=a;++h)s+=l();return u+(f?h:a-h)}}return u.source=r,u}(r),v=function r(n){function t(r,t,o){var u;return 0==(r=+r)?u=r=>-Math.log(r):(r=1/r,u=n=>Math.pow(n,r)),t=null==t?0:+t,o=null==o?1:+o,function(){return t+o*u(-Math.log1p(-n()))}}return t.source=r,t}(r),d=function r(n){function t(r,t){return r=null==r?0:+r,t=null==t?1:+t,function(){return r+t*Math.tan(Math.PI*n())}}return t.source=r,t}(r),m=function r(n){function t(r,t){return r=null==r?0:+r,t=null==t?1:+t,function(){var o=n();return r+t*Math.log(o/(1-o))}}return t.source=r,t}(r),g=function r(n){var t=s.source(n),o=M.source(n);function u(r){return function(){for(var u=0,a=r;a>16;){var e=Math.floor(.875*a),i=t(e)();if(i>a)return u+o(e-1,a/i)();u+=e,a-=i}for(var c=-Math.log1p(-n()),f=0;c<=a;++f)c-=Math.log1p(-n());return u+f}}return u.source=r,u}(r);const p=1/4294967296;function w(r=Math.random()){let n=0|(0<=r&&r<1?r/p:Math.abs(r));return()=>(n=1664525*n+1013904223|0,p*(n>>>0))}export{e as randomBates,f as randomBernoulli,h as randomBeta,M as randomBinomial,d as randomCauchy,i as randomExponential,s as randomGamma,l as randomGeometric,t as randomInt,a as randomIrwinHall,w as randomLcg,u as randomLogNormal,m as randomLogistic,o as randomNormal,c as randomPareto,g as randomPoisson,n as randomUniform,v as randomWeibull};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3-time@3.1.0/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3-time@3.1.0/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{bisector as e,tickStep as t}from"../d3-array@3.2.4/+esm.js";const n=new Date,s=new Date;function r(e,t,a,o){function l(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return l.floor=t=>(e(t=new Date(+t)),t),l.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),l.round=e=>{const t=l(e),n=l.ceil(e);return e-t(t(e=new Date(+e),null==n?1:Math.floor(n)),e),l.range=(n,s,r)=>{const a=[];if(n=l.ceil(n),r=null==r?1:Math.floor(r),!(n0))return a;let o;do{a.push(o=new Date(+n)),t(n,r),e(n)}while(or((t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)}),((e,s)=>{if(e>=e)if(s<0)for(;++s<=0;)for(;t(e,-1),!n(e););else for(;--s>=0;)for(;t(e,1),!n(e););})),a&&(l.count=(t,r)=>(n.setTime(+t),s.setTime(+r),e(n),e(s),Math.floor(a(n,s))),l.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?l.filter(o?t=>o(t)%e==0:t=>l.count(0,t)%e==0):l:null)),l}const a=r((()=>{}),((e,t)=>{e.setTime(+e+t)}),((e,t)=>t-e));a.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?r((t=>{t.setTime(Math.floor(t/e)*e)}),((t,n)=>{t.setTime(+t+n*e)}),((t,n)=>(n-t)/e)):a:null);const o=a.range,l=1e3,g=6e4,u=36e5,i=864e5,T=6048e5,c=2592e6,f=31536e6,C=r((e=>{e.setTime(e-e.getMilliseconds())}),((e,t)=>{e.setTime(+e+t*l)}),((e,t)=>(t-e)/l),(e=>e.getUTCSeconds())),U=C.range,M=r((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*l)}),((e,t)=>{e.setTime(+e+t*g)}),((e,t)=>(t-e)/g),(e=>e.getMinutes())),h=M.range,m=r((e=>{e.setUTCSeconds(0,0)}),((e,t)=>{e.setTime(+e+t*g)}),((e,t)=>(t-e)/g),(e=>e.getUTCMinutes())),D=m.range,F=r((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*l-e.getMinutes()*g)}),((e,t)=>{e.setTime(+e+t*u)}),((e,t)=>(t-e)/u),(e=>e.getHours())),Y=F.range,d=r((e=>{e.setUTCMinutes(0,0,0)}),((e,t)=>{e.setTime(+e+t*u)}),((e,t)=>(t-e)/u),(e=>e.getUTCHours())),H=d.range,y=r((e=>e.setHours(0,0,0,0)),((e,t)=>e.setDate(e.getDate()+t)),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*g)/i),(e=>e.getDate()-1)),w=y.range,v=r((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/i),(e=>e.getUTCDate()-1)),S=v.range,p=r((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/i),(e=>Math.floor(e/i))),k=p.range;function z(e){return r((t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),((e,t)=>{e.setDate(e.getDate()+7*t)}),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*g)/T))}const O=z(0),W=z(1),x=z(2),b=z(3),j=z(4),q=z(5),A=z(6),B=O.range,E=W.range,G=x.range,I=b.range,J=j.range,K=q.range,L=A.range;function N(e){return r((t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+7*t)}),((e,t)=>(t-e)/T))}const P=N(0),Q=N(1),R=N(2),V=N(3),X=N(4),Z=N(5),$=N(6),_=P.range,ee=Q.range,te=R.range,ne=V.range,se=X.range,re=Z.range,ae=$.range,oe=r((e=>{e.setDate(1),e.setHours(0,0,0,0)}),((e,t)=>{e.setMonth(e.getMonth()+t)}),((e,t)=>t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())),(e=>e.getMonth())),le=oe.range,ge=r((e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)}),((e,t)=>t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())),(e=>e.getUTCMonth())),ue=ge.range,ie=r((e=>{e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,t)=>{e.setFullYear(e.getFullYear()+t)}),((e,t)=>t.getFullYear()-e.getFullYear()),(e=>e.getFullYear()));ie.every=e=>isFinite(e=Math.floor(e))&&e>0?r((t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,n)=>{t.setFullYear(t.getFullYear()+n*e)})):null;const Te=ie.range,ce=r((e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)}),((e,t)=>t.getUTCFullYear()-e.getUTCFullYear()),(e=>e.getUTCFullYear()));ce.every=e=>isFinite(e=Math.floor(e))&&e>0?r((t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)})):null;const fe=ce.range;function Ce(n,s,r,o,U,M){const h=[[C,1,l],[C,5,5e3],[C,15,15e3],[C,30,3e4],[M,1,g],[M,5,3e5],[M,15,9e5],[M,30,18e5],[U,1,u],[U,3,108e5],[U,6,216e5],[U,12,432e5],[o,1,i],[o,2,1728e5],[r,1,T],[s,1,c],[s,3,7776e6],[n,1,f]];function m(s,r,o){const l=Math.abs(r-s)/o,g=e((([,,e])=>e)).right(h,l);if(g===h.length)return n.every(t(s/f,r/f,o));if(0===g)return a.every(Math.max(t(s,r,o),1));const[u,i]=h[l/h[g-1][2]=0&&r._call.call(void 0,n),r=r._next;--e}function h(){l=(a=c.now())+u,e=r=0;try{p()}finally{e=0,function(){var e,r,o=t,i=1/0;for(;o;)o._call?(i>o._time&&(i=o._time),e=o,o=o._next):(r=o._next,o._next=null,o=e?e._next=r:t=r);n=e,x(i)}(),l=0}}function v(){var t=c.now(),n=t-a;n>i&&(u-=n,a=t)}function x(t){e||(r&&(r=clearTimeout(r)),t-l>24?(t<1/0&&(r=setTimeout(h,t-c.now()-u)),o&&(o=clearInterval(o))):(o||(a=c.now(),o=setInterval(v,i)),e=1,s(h)))}function y(t,n,e){var r=new w;return n=null==n?0:+n,r.restart((e=>{r.stop(),t(e+n)}),n,e),r}function d(t,n,e){var r=new w,o=n;return null==n?(r.restart(t,n,e),r):(r._restart=r.restart,r.restart=function(t,n,e){n=+n,e=null==e?f():+e,r._restart((function i(a){a+=o,r._restart(i,o+=n,e),t(a)}),n,e)},r.restart(t,n,e),r)}w.prototype=m.prototype={constructor:w,restart:function(e,r,o){if("function"!=typeof e)throw new TypeError("callback is not a function");o=(null==o?f():+o)+(null==r?0:+r),this._next||n===this||(n?n._next=this:t=this,n=this),this._call=e,this._time=o,x()},stop:function(){this._call&&(this._call=null,this._time=1/0,x())}};export{d as interval,f as now,y as timeout,m as timer,p as timerFlush};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/d3@7.9.0/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/d3@7.9.0/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | export*from"../d3-array@3.2.4/+esm.js";export*from"../d3-axis@3.0.0/+esm.js";export*from"../d3-brush@3.0.0/+esm.js";export*from"../d3-chord@3.0.1/+esm.js";export*from"../d3-color@3.1.0/+esm.js";export*from"../d3-contour@4.0.2/+esm.js";export*from"../d3-delaunay@6.0.4/+esm.js";export*from"../d3-dispatch@3.0.1/+esm.js";export*from"../d3-drag@3.0.0/+esm.js";export*from"../d3-dsv@3.0.1/+esm.js";export*from"../d3-ease@3.0.1/+esm.js";export*from"../d3-fetch@3.0.1/+esm.js";export*from"../d3-force@3.0.0/+esm.js";export*from"../d3-format@3.1.0/+esm.js";export*from"../d3-geo@3.1.1/+esm.js";export*from"../d3-hierarchy@3.1.2/+esm.js";export*from"../d3-interpolate@3.0.1/+esm.js";export*from"../d3-path@3.1.0/+esm.js";export*from"../d3-polygon@3.0.1/+esm.js";export*from"../d3-quadtree@3.0.1/+esm.js";export*from"../d3-random@3.0.1/+esm.js";export*from"../d3-scale@4.0.2/+esm.js";export*from"../d3-scale-chromatic@3.1.0/+esm.js";export*from"../d3-selection@3.0.0/+esm.js";export*from"../d3-shape@3.2.0/+esm.js";export*from"../d3-time@3.1.0/+esm.js";export*from"../d3-time-format@4.1.0/+esm.js";export*from"../d3-timer@3.0.1/+esm.js";export*from"../d3-transition@3.0.1/+esm.js";export*from"../d3-zoom@3.0.0/+esm.js";export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/delaunator@5.0.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/delaunator@5.0.1/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import{orient2d as t}from"../robust-predicates@3.0.2/+esm.js";const s=Math.pow(2,-52),i=new Uint32Array(512);class e{static from(t,s=o,i=_){const h=t.length,n=new Float64Array(2*h);for(let e=0;e>1;if(s>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const i=Math.max(2*s-5,0);this._triangles=new Uint32Array(3*i),this._halfedges=new Int32Array(3*i),this._hashSize=Math.ceil(Math.sqrt(s)),this._hullPrev=new Uint32Array(s),this._hullNext=new Uint32Array(s),this._hullTri=new Uint32Array(s),this._hullHash=new Int32Array(this._hashSize),this._ids=new Uint32Array(s),this._dists=new Float64Array(s),this.update()}update(){const{coords:i,_hullPrev:e,_hullNext:n,_hullTri:a,_hullHash:o}=this,_=i.length>>1;let c=1/0,f=1/0,u=-1/0,d=-1/0;for(let t=0;t<_;t++){const s=i[2*t],e=i[2*t+1];su&&(u=s),e>d&&(d=e),this._ids[t]=t}const g=(c+u)/2,y=(f+d)/2;let w,b,A;for(let t=0,s=1/0;t<_;t++){const e=h(g,y,i[2*t],i[2*t+1]);e0&&(b=t,s=e)}let x=i[2*b],z=i[2*b+1],U=1/0;for(let t=0;t<_;t++){if(t===w||t===b)continue;const s=r(k,S,x,z,i[2*t],i[2*t+1]);se&&(t[s++]=h,e=n)}return this.hull=t.subarray(0,s),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(t(k,S,x,z,p,M)<0){const t=b,s=x,i=z;b=A,x=p,z=M,A=t,p=s,M=i}const T=function(t,s,i,e,h,n){const r=i-t,l=e-s,a=h-t,o=n-s,_=r*r+l*l,c=a*a+o*o,f=.5/(r*o-l*a);return{x:t+(o*_-l*c)*f,y:s+(r*c-a*_)*f}}(k,S,x,z,p,M);this._cx=T.x,this._cy=T.y;for(let t=0;t<_;t++)this._dists[t]=h(i[2*t],i[2*t+1],T.x,T.y);l(this._ids,this._dists,0,_-1),this._hullStart=w;let m=3;n[w]=e[A]=b,n[b]=e[w]=A,n[A]=e[b]=w,a[w]=0,a[b]=1,a[A]=2,o.fill(-1),o[this._hashKey(k,S)]=w,o[this._hashKey(x,z)]=b,o[this._hashKey(p,M)]=A,this.trianglesLen=0,this._addTriangle(w,b,A,-1,-1,-1);for(let h,r,l=0;l0&&Math.abs(c-h)<=s&&Math.abs(f-r)<=s)continue;if(h=c,r=f,_===w||_===b||_===A)continue;let u=0;for(let t=0,s=this._hashKey(c,f);t=0;)if(g=d,g===u){g=-1;break}if(-1===g)continue;let y=this._addTriangle(g,_,n[g],-1,-1,a[g]);a[_]=this._legalize(y+2),a[g]=y,m++;let k=n[g];for(;d=n[k],t(c,f,i[2*k],i[2*k+1],i[2*d],i[2*d+1])<0;)y=this._addTriangle(k,_,d,a[_],-1,a[k]),a[_]=this._legalize(y+2),n[k]=k,m--,k=d;if(g===u)for(;d=e[g],t(c,f,i[2*d],i[2*d+1],i[2*g],i[2*g+1])<0;)y=this._addTriangle(d,_,g,-1,a[g],a[d]),this._legalize(y+2),a[d]=y,n[g]=g,m--,g=d;this._hullStart=e[_]=g,n[g]=e[k]=_,n[_]=k,o[this._hashKey(c,f)]=_,o[this._hashKey(i[2*g],i[2*g+1])]=g}this.hull=new Uint32Array(m);for(let t=0,s=this._hullStart;t0?3-i:1+i)/4}(t-this._cx,s-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:s,_halfedges:e,coords:h}=this;let r=0,l=0;for(;;){const a=e[t],o=t-t%3;if(l=o+(t+2)%3,-1===a){if(0===r)break;t=i[--r];continue}const _=a-a%3,c=o+(t+1)%3,f=_+(a+2)%3,u=s[l],d=s[t],g=s[c],y=s[f];if(n(h[2*u],h[2*u+1],h[2*d],h[2*d+1],h[2*g],h[2*g+1],h[2*y],h[2*y+1])){s[t]=y,s[a]=u;const h=e[f];if(-1===h){let s=this._hullStart;do{if(this._hullTri[s]===f){this._hullTri[s]=t;break}s=this._hullPrev[s]}while(s!==this._hullStart)}this._link(t,h),this._link(a,e[l]),this._link(l,f);const n=_+(a+1)%3;r=i&&s[t[r]]>n;)t[r+1]=t[r--];t[r+1]=e}else{let h=i+1,n=e;a(t,i+e>>1,h),s[t[i]]>s[t[e]]&&a(t,i,e),s[t[h]]>s[t[e]]&&a(t,h,e),s[t[i]]>s[t[h]]&&a(t,i,h);const r=t[h],o=s[r];for(;;){do{h++}while(s[t[h]]o);if(n=n-i?(l(t,s,h,e),l(t,s,i,n-1)):(l(t,s,i,n-1),l(t,s,h,e))}}function a(t,s,i){const e=t[s];t[s]=t[i],t[i]=e}function o(t){return t[0]}function _(t){return t[1]}export{e as default}; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/flatbuffers@23.5.26/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/flatbuffers@23.5.26/mjs/flatbuffers.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | const t=2,e=4,s=4,i=4,r=new Int32Array(2),n=new Float32Array(r.buffer),h=new Float64Array(r.buffer),a=1===new Uint16Array(new Uint8Array([1,0]).buffer)[0];var o;!function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING"}(o||(o={}));class l{constructor(t){this.bytes_=t,this.position_=0,this.text_decoder_=new TextDecoder}static allocate(t){return new l(new Uint8Array(t))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(t){this.position_=t}capacity(){return this.bytes_.length}readInt8(t){return this.readUint8(t)<<24>>24}readUint8(t){return this.bytes_[t]}readInt16(t){return this.readUint16(t)<<16>>16}readUint16(t){return this.bytes_[t]|this.bytes_[t+1]<<8}readInt32(t){return this.bytes_[t]|this.bytes_[t+1]<<8|this.bytes_[t+2]<<16|this.bytes_[t+3]<<24}readUint32(t){return this.readInt32(t)>>>0}readInt64(t){return BigInt.asIntN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<>8}writeUint16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeInt32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeUint32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeInt64(t,e){this.writeInt32(t,Number(BigInt.asIntN(32,e))),this.writeInt32(t+4,Number(BigInt.asIntN(32,e>>BigInt(32))))}writeUint64(t,e){this.writeUint32(t,Number(BigInt.asUintN(32,e))),this.writeUint32(t+4,Number(BigInt.asUintN(32,e>>BigInt(32))))}writeFloat32(t,e){n[0]=e,this.writeInt32(t,r[0])}writeFloat64(t,e){h[0]=e,this.writeInt32(t,r[a?0:1]),this.writeInt32(t+4,r[a?1:0])}getBufferIdentifier(){if(this.bytes_.lengththis.minalign&&(this.minalign=t);const s=1+~(this.bb.capacity()-this.space+e)&t-1;for(;this.space=0&&0==this.vtable[e];e--);const s=e+1;for(;e>=0;e--)this.addInt16(0!=this.vtable[e]?t-this.vtable[e]:0);this.addInt16(t-this.object_start);const i=2*(s+2);this.addInt16(i);let r=0;const n=this.space;t:for(e=0;e=0;e--)this.writeInt8(t.charCodeAt(e))}this.prep(this.minalign,4+i),this.addOffset(t),i&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(t,e){this.finish(t,e,!0)}requiredField(t,e){const s=this.bb.capacity()-t,i=s-this.bb.readInt32(s);if(!(e{if(null===e.firstChild)return null;if(e.firstChild===e.lastChild)return e.removeChild(e.firstChild);const t=document.createElement("span");return t.appendChild(e),t})),{fragment:oe(e,(e=>e))}),n=Object.assign(oe(t,(e=>null===e.firstChild?null:e.firstChild===e.lastChild?e.removeChild(e.firstChild):e)),{fragment:oe(t,(e=>{const t=document.createDocumentFragment();for(;e.firstChild;)t.appendChild(e.firstChild);return t}))}),a=9,s=10,i=12,o=13,c=32,l=65,f=90,u=97,d=122,p=60,k=62,b=47,h=45,g=33,m=61,w=34,C=39,x=63,v=1,y=2,A=3,N=4,L=5,T=6,S=7,U=8,$=9,E=10,M=11,B=12,O=13,P=14,R=15,j=16,q=17,H=18,X=19,D=20,F=21,W=22,Y=23,I=24,z=25,V=26,Z=27,G=28,J=29,K=128,Q=1,_=8,ee=1,te="http://www.w3.org/2000/svg",re="http://www.w3.org/1999/xlink",ne="http://www.w3.org/XML/1998/namespace",ae="http://www.w3.org/2000/xmlns/",se=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),ie=new Map([["xlink:actuate",re],["xlink:arcrole",re],["xlink:href",re],["xlink:role",re],["xlink:show",re],["xlink:title",re],["xlink:type",re],["xml:lang",ne],["xml:space",ne],["xmlns",ae],["xmlns:xlink",ae]]);function oe(e,t){return function({raw:r}){let n,a,s,i,o=v,c="",l=0;for(let e=0,t=arguments.length;e0){const n=arguments[e];switch(o){case V:if(null!=n){const e=`${n}`;if(pe(a))c+=e.replace(/[<]/g,ce);else{if(new RegExp(`/]`,"i").test(c.slice(-a.length-2)+e))throw new Error("unsafe raw text");c+=e}}break;case v:null==n||(n instanceof Node||"string"!=typeof n&&n[Symbol.iterator]||/(?:^|>)$/.test(r[e-1])&&/^(?:<|$)/.test(t)?(c+="\x3c!--::"+e+"--\x3e",l|=K):c+=`${n}`.replace(/[<&]/g,ce));break;case $:{let a;if(o=B,/^[\s>]/.test(t)){if(null==n||!1===n){c=c.slice(0,s-r[e-1].length);break}if(!0===n||""==(a=`${n}`)){c+="''";break}if("style"===r[e-1].slice(s,i)&&ue(n)||"function"==typeof n){c+="::"+e,l|=Q;break}}if(void 0===a&&(a=`${n}`),""===a)throw new Error("unsafe unquoted empty string");c+=a.replace(/^['"]|[\s>&]/g,ce);break}case B:c+=`${n}`.replace(/[\s>&]/g,ce);break;case M:c+=`${n}`.replace(/['&]/g,ce);break;case E:c+=`${n}`.replace(/["&]/g,ce);break;case T:if(ue(n)){c+="::"+e+"=''",l|=Q;break}throw new Error("invalid binding");case q:break;default:throw new Error("invalid binding")}}for(let e=0,r=t.length;e=0;--n)a=t.insertBefore(r[n],a);else for(const n of r)null!=n&&t.insertBefore(n instanceof Node?n:document.createTextNode(n),e);else t.insertBefore(document.createTextNode(r),e);d.push(e)}}}for(const e of d)e.parentNode.removeChild(e);return t(f)}}function ce(e){return`&#${e.charCodeAt(0).toString()};`}function le(e){return l<=e&&e<=f||u<=e&&e<=d}function fe(e){return e===a||e===s||e===i||e===c||e===o}function ue(e){return e&&e.toString===Object.prototype.toString}function de(e){return"script"===e||"style"===e||pe(e)}function pe(e){return"textarea"===e||"title"===e}function ke(e,t,r){return e.slice(t,r).toLowerCase()}function be(e,t,r){e.namespaceURI===te&&(t=t.toLowerCase(),t=se.get(t)||t,ie.has(t))?e.setAttributeNS(ie.get(t),t,r):e.setAttribute(t,r)}function he(e,t){e.namespaceURI===te&&(t=t.toLowerCase(),t=se.get(t)||t,ie.has(t))?e.removeAttributeNS(ie.get(t),t):e.removeAttribute(t)}function ge(e,t){for(const r in t){const n=t[r];r.startsWith("--")?e.setProperty(r,n):e[r]=n}}export{r as html,n as svg};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/internmap@2.0.3/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/internmap@2.0.3/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | class e extends Map{constructor(e,t=u){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[t,r]of e)this.set(t,r)}get(e){return super.get(r(this,e))}has(e){return super.has(r(this,e))}set(e,t){return super.set(n(this,e),t)}delete(e){return super.delete(s(this,e))}}class t extends Set{constructor(e,t=u){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const t of e)this.add(t)}has(e){return super.has(r(this,e))}add(e){return super.add(n(this,e))}delete(e){return super.delete(s(this,e))}}function r({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function n({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function s({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function u(e){return null!==e&&"object"==typeof e?e.valueOf():e}export{e as InternMap,t as InternSet};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/interval-tree-1d@1.0.4/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/interval-tree-1d@1.0.4/interval-tree.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | import t from"../binary-search-bounds@2.0.5/+esm.js";var i=t,r=function(t){if(!t||0===t.length)return new m(null);return new m(v(t))};function n(t,i,r,n,s){this.mid=t,this.left=i,this.right=r,this.leftPoints=n,this.rightPoints=s,this.count=(i?i.count:0)+(r?r.count:0)+n.length}var s=n.prototype;function h(t,i){t.mid=i.mid,t.left=i.left,t.right=i.right,t.leftPoints=i.leftPoints,t.rightPoints=i.rightPoints,t.count=i.count}function e(t,i){var r=v(i);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function o(t,i){var r=t.intervals([]);r.push(i),e(t,r)}function f(t,i){var r=t.intervals([]),n=r.indexOf(i);return n<0?0:(r.splice(n,1),e(t,r),1)}function u(t,i,r){for(var n=0;n=0&&t[n][1]>=i;--n){var s=r(t[n]);if(s)return s}}function g(t,i){for(var r=0;r>1],h=[],e=[],o=[];for(r=0;r3*(r+1)?o(this,t):this.left.insert(t):this.left=v([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(r+1)?o(this,t):this.right.insert(t):this.right=v([t]);else{var n=i.ge(this.leftPoints,t,P),s=i.ge(this.rightPoints,t,a);this.leftPoints.splice(n,0,t),this.rightPoints.splice(s,0,t)}},s.remove=function(t){var r=this.count-this.leftPoints;if(t[1]3*(r-1)?f(this,t):2===(o=this.left.remove(t))?(this.left=null,this.count-=1,1):(1===o&&(this.count-=1),o):0;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(r-1)?f(this,t):2===(o=this.right.remove(t))?(this.right=null,this.count-=1,1):(1===o&&(this.count-=1),o):0;if(1===this.count)return this.leftPoints[0]===t?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var n=this,s=this.left;s.right;)n=s,s=s.right;if(n===this)s.right=this.right;else{var e=this.left,o=this.right;n.count-=s.count,n.right=s.left,s.left=e,s.right=o}h(this,s),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?h(this,this.left):h(this,this.right);return 1}for(e=i.ge(this.leftPoints,t,P);ethis.mid){var r;if(this.right)if(r=this.right.queryPoint(t,i))return r;return l(this.rightPoints,t,i)}return g(this.leftPoints,i)},s.queryInterval=function(t,i,r){var n;if(tthis.mid&&this.right&&(n=this.right.queryInterval(t,i,r)))return n;return ithis.mid?l(this.rightPoints,t,r):g(this.leftPoints,r)};var p=m.prototype;p.insert=function(t){this.root?this.root.insert(t):this.root=new n(t[0],null,null,[t],[t])},p.remove=function(t){if(this.root){var i=this.root.remove(t);return 2===i&&(this.root=null),0!==i}return!1},p.queryPoint=function(t,i){if(this.root)return this.root.queryPoint(t,i)},p.queryInterval=function(t,i,r){if(t<=i&&this.root)return this.root.queryInterval(t,i,r)},Object.defineProperty(p,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(p,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});export{r as default}; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_npm/isoformat@0.2.1/+esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2. 3 | * Original file: /npm/isoformat@0.2.1/src/index.js 4 | * 5 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 6 | */ 7 | function t(t,n){if(t instanceof Date||(t=new Date(+t)),isNaN(t))return"function"==typeof n?n(t):n;const o=t.getUTCHours(),d=t.getUTCMinutes(),r=t.getUTCSeconds(),u=t.getUTCMilliseconds();return`${$=t.getUTCFullYear(),$<0?`-${e(-$,6)}`:$>9999?`+${e($,6)}`:e($,4)}-${e(t.getUTCMonth()+1,2)}-${e(t.getUTCDate(),2)}${o||d||r||u?`T${e(o,2)}:${e(d,2)}${r||u?`:${e(r,2)}${u?`.${e(u,3)}`:""}`:""}Z`:""}`;var $}function e(t,e){return`${t}`.padStart(e,"0")}const n=/^(?:[-+]\d{2})?\d{4}(?:-\d{2}(?:-\d{2})?)?(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{3})?)?(?:Z|[-+]\d{2}:?\d{2})?)?$/;function o(t,e){return n.test(t+="")?new Date(t):"function"==typeof e?e(t):e}export{t as format,o as parse};export default null; 8 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_observablehq/stdlib.js: -------------------------------------------------------------------------------- 1 | var k=Object.defineProperty;var i=(t,e)=>k(t,"name",{value:e,configurable:!0});var z=Object.defineProperty,c=i((t,e)=>z(t,"name",{value:e,configurable:!0}),"o$3");const d=new Map;function b(t,e){const r=new URL(t,location).href;e==null?d.delete(r):d.set(r,e)}i(b,"p$1"),c(b,"registerFile");function h(t,e=location.href){if(new.target!==void 0)throw new TypeError("FileAttachment is not a constructor");const r=new URL(t,e).href,n=d.get(r);if(!n)throw new Error(`File not found: ${t}`);const{path:a,mimeType:o}=n;return new p(new URL(a,location).href,t.split("/").pop(),o)}i(h,"u$1"),c(h,"FileAttachment");async function s(t){const e=await fetch(await t.url());if(!e.ok)throw new Error(`Unable to load file: ${t.name}`);return e}i(s,"i$5"),c(s,"remote_fetch");async function y(t,e,{array:r=!1,typed:n=!1}={}){const[a,o]=await Promise.all([t.text(),import("../_npm/d3-dsv@3.0.1/+esm.js")]);return(e===" "?r?o.tsvParseRows:o.tsvParse:r?o.csvParseRows:o.csvParse)(a,n&&o.autoType)}i(y,"f$3"),c(y,"dsv");let w=class{static{i(this,"m")}static{c(this,"AbstractFile")}constructor(e,r="application/octet-stream"){Object.defineProperty(this,"name",{value:`${e}`,enumerable:!0}),Object.defineProperty(this,"mimeType",{value:`${r}`,enumerable:!0})}async blob(){return(await s(this)).blob()}async arrayBuffer(){return(await s(this)).arrayBuffer()}async text(e){return e===void 0?(await s(this)).text():new TextDecoder(e).decode(await this.arrayBuffer())}async json(){return(await s(this)).json()}async stream(){return(await s(this)).body}async csv(e){return y(this,",",e)}async tsv(e){return y(this," ",e)}async image(e){const r=await this.url();return new Promise((n,a)=>{const o=new Image;new URL(r,document.baseURI).origin!==new URL(location).origin&&(o.crossOrigin="anonymous"),Object.assign(o,e),o.onload=()=>n(o),o.onerror=()=>a(new Error(`Unable to load file: ${this.name}`)),o.src=r})}async arrow(){const[e,r]=await Promise.all([import("../_npm/apache-arrow@15.0.2/+esm.js"),s(this)]);return e.tableFromIPC(r)}async parquet(){const[e,r,n]=await Promise.all([import("../_npm/apache-arrow@15.0.2/+esm.js"),import("../_npm/parquet-wasm@0.5.0/esm/arrow1.js").then(async a=>(await a.default(),a)),this.arrayBuffer()]);return e.tableFromIPC(r.readParquet(new Uint8Array(n)).intoIPCStream())}async sqlite(){const[{SQLiteDatabaseClient:e},r]=await Promise.all([import("./stdlib/sqlite.js"),this.arrayBuffer()]);return e.open(r)}async zip(){const[{ZipArchive:e},r]=await Promise.all([import("./stdlib/zip.js"),this.arrayBuffer()]);return e.from(r)}async xml(e="application/xml"){return new DOMParser().parseFromString(await this.text(),e)}async html(){return this.xml("text/html")}async xlsx(){const[{Workbook:e},r]=await Promise.all([import("./stdlib/xlsx.js"),this.arrayBuffer()]);return e.load(r)}},p=class extends w{static{i(this,"l")}static{c(this,"FileAttachmentImpl")}constructor(e,r,n){super(r,n),Object.defineProperty(this,"_url",{value:e})}async url(){return`${await this._url}`}};Object.defineProperty(p,"name",{value:"FileAttachment"}),h.prototype=p.prototype;var U=Object.defineProperty,B=i((t,e)=>U(t,"name",{value:e,configurable:!0}),"r$3");async function*l(t){let e,r,n=!1;const a=t(o=>(r=o,e?(e(o),e=null):n=!0,o));if(a!=null&&typeof a!="function")throw new Error(typeof a.then=="function"?"async initializers are not supported":"initializer returned something, but not a dispose function");try{for(;;)yield n?(n=!1,r):new Promise(o=>e=o)}finally{a?.()}}i(l,"u"),B(l,"observe");var C=Object.defineProperty,g=i((t,e)=>C(t,"name",{value:e,configurable:!0}),"o$2");function P(){return l(t=>{let e;const r=matchMedia("(prefers-color-scheme: dark)"),n=g(()=>{const a=getComputedStyle(document.body).getPropertyValue("color-scheme")==="dark";e!==a&&t(e=a)},"changed");return n(),r.addEventListener("change",n),()=>r.removeEventListener("change",n)})}i(P,"m"),g(P,"dark");var _=Object.defineProperty,f=i((t,e)=>_(t,"name",{value:e,configurable:!0}),"e$1");function $(t){return l(e=>{const r=O(t);let n=v(t);const a=f(()=>e(v(t)),"inputted");return t.addEventListener(r,a),n!==void 0&&e(n),()=>t.removeEventListener(r,a)})}i($,"o$1"),f($,"input");function v(t){switch(t.type){case"range":case"number":return t.valueAsNumber;case"date":return t.valueAsDate;case"checkbox":return t.checked;case"file":return t.multiple?t.files:t.files[0];case"select-multiple":return Array.from(t.selectedOptions,e=>e.value);default:return t.value}}i(v,"a"),f(v,"valueof");function O(t){switch(t.type){case"button":case"submit":case"checkbox":return"click";case"file":return"change";default:return"input"}}i(O,"f$2"),f(O,"eventof");var I=Object.defineProperty,T=i((t,e)=>I(t,"name",{value:e,configurable:!0}),"e");async function*j(){for(;;)yield Date.now()}i(j,"i$3"),T(j,"now");var q=Object.defineProperty,D=i((t,e)=>q(t,"name",{value:e,configurable:!0}),"r$2");async function*x(t){let e;const r=[],n=t(a=>(r.push(a),e&&(e(r.shift()),e=null),a));if(n!=null&&typeof n!="function")throw new Error(typeof n.then=="function"?"async initializers are not supported":"initializer returned something, but not a dispose function");try{for(;;)yield r.length?r.shift():new Promise(a=>e=a)}finally{n?.()}}i(x,"l"),D(x,"queue");var M=Object.defineProperty,S=i((t,e)=>M(t,"name",{value:e,configurable:!0}),"i$2");function F(t,e){return l(r=>{let n;const a=new ResizeObserver(([o])=>{const u=o.contentRect.width;u!==n&&r(n=u)});return a.observe(t,e),()=>a.disconnect()})}i(F,"d$1"),S(F,"width");var G=Object.freeze({__proto__:null,dark:P,input:$,now:j,observe:l,queue:x,width:F}),N=Object.defineProperty,Q=i((t,e)=>N(t,"name",{value:e,configurable:!0}),"r$1");function A(t){let e;return Object.defineProperty(l(r=>{e=r,t!==void 0&&e(t)}),"value",{get:()=>t,set:r=>void e(t=r)})}i(A,"f$1"),Q(A,"Mutable");var V=Object.defineProperty,E=i((t,e)=>V(t,"name",{value:e,configurable:!0}),"o");function L(t,e){const r=document.createElement("div");r.style.position="relative",t.length!==1&&(r.style.height="100%");const n=new ResizeObserver(([a])=>{const{width:o,height:u}=a.contentRect;for(;r.lastChild;)r.lastChild.remove();if(o>0){const m=t(o,u);t.length!==1&&R(m)&&(m.style.position="absolute"),r.append(m)}});return n.observe(r),e?.then(()=>n.disconnect()),r}i(L,"d"),E(L,"resize");function R(t){return t.nodeType===1}i(R,"v"),E(R,"isElement");var W=Object.defineProperty,Z=i((t,e)=>W(t,"name",{value:e,configurable:!0}),"t");class H{static{i(this,"p")}static{Z(this,"Library")}}const J=void 0;export{w as AbstractFile,h as FileAttachment,J as FileAttachments,G as Generators,H as Library,A as Mutable,b as registerFile,L as resize}; 2 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_observablehq/stdlib/duckdb.js: -------------------------------------------------------------------------------- 1 | var L=Object.defineProperty;var s=(t,a)=>L(t,"name",{value:a,configurable:!0});import*as l from"../../_npm/@duckdb/duckdb-wasm@1.28.0/+esm.js";var S=Object.defineProperty,o=s((t,a)=>S(t,"name",{value:a,configurable:!0}),"s");const A=await l.selectBundle({mvp:{mainModule:import.meta.resolve("../../_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-mvp.wasm"),mainWorker:import.meta.resolve("../../_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-browser-mvp.worker.js")},eh:{mainModule:import.meta.resolve("../../_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-eh.wasm"),mainWorker:import.meta.resolve("../../_npm/@duckdb/duckdb-wasm@1.28.0/dist/duckdb-browser-eh.worker.js")}}),C=new l.ConsoleLogger(l.LogLevel.WARNING);let w,f=[];const d=new Map;function E(t,a){a==null?(d.delete(t),w=u.of(),f=Array.from(d,e=>w.then(r=>y(r._db,...e)))):(d.set(t,a),w??=u.of(),f.push(w.then(e=>y(e._db,t,a))))}s(E,"I"),o(E,"registerTable");async function I(t,...a){return(await p()).query(t.join("?"),a)}s(I,"k"),o(I,"sql");async function p(){return await Promise.all(f),await(w??=u.of())}s(p,"b"),o(p,"getDefaultClient");class u{static{s(this,"c")}static{o(this,"DuckDBClient")}constructor(a){Object.defineProperties(this,{_db:{value:a}})}async queryStream(a,e){const r=await this._db.connect();let n,i;try{if(e?.length>0?n=await(await r.prepare(a)).send(...e):n=await r.send(a),i=await n.next(),i.done)throw new Error("missing first batch")}catch(c){throw await r.close(),c}return{schema:i.value.schema,async*readRows(){try{for(;!i.done;)yield i.value.toArray(),i=await n.next()}finally{await r.close()}}}}async query(a,e){const r=await this._db.connect();let n;try{e?.length>0?n=await(await r.prepare(a)).query(...e):n=await r.query(a)}catch(i){throw await r.close(),i}return n}async queryRow(a,e){const r=(await this.queryStream(a,e)).readRows();try{const{done:n,value:i}=await r.next();return n||!i.length?null:i[0]}finally{await r.return()}}async sql(a,...e){return await this.query(a.join("?"),e)}queryTag(a,...e){return[a.join("?"),e]}escape(a){return`"${a}"`}async describeTables(){return(await this.query("SHOW TABLES")).map(({name:a})=>({name:a}))}async describeColumns({table:a}={}){return(await this.query(`DESCRIBE ${this.escape(a)}`)).map(({column_name:e,column_type:r,null:n})=>({name:e,type:v(r),nullable:n!=="NO",databaseType:r}))}static async of(a={},e={}){const r=await g();return e.query?.castTimestampToDate===void 0&&(e={...e,query:{...e.query,castTimestampToDate:!0}}),e.query?.castBigIntToDouble===void 0&&(e={...e,query:{...e.query,castBigIntToDouble:!0}}),await r.open(e),await Promise.all(Object.entries(a).map(([n,i])=>y(r,n,i))),new u(r)}}Object.defineProperty(u.prototype,"dialect",{value:"duckdb"});async function y(t,a,e){if(e=await e,B(e))await b(t,a,e);else if(T(e))await m(t,a,e);else if(Array.isArray(e))await h(t,a,e);else if(D(e))await q(t,a,e);else if("data"in e){const{data:r,...n}=e;T(r)?await m(t,a,r,n):await h(t,a,r,n)}else if("file"in e){const{file:r,...n}=e;await b(t,a,r,n)}else throw new Error(`invalid source: ${e}`)}s(y,"d"),o(y,"insertSource");async function b(t,a,e,r){const n=await e.url();if(n.startsWith("blob:")){const c=await e.arrayBuffer();await t.registerFileBuffer(e.name,new Uint8Array(c))}else await t.registerFileURL(e.name,new URL(n,location).href,4);const i=await t.connect();try{switch(e.mimeType){case"text/csv":case"text/tab-separated-values":return await i.insertCSVFromPath(e.name,{name:a,schema:"main",...r}).catch(async c=>{if(c.toString().includes("Could not convert"))return await k(i,e,a);throw c});case"application/json":return await i.insertJSONFromPath(e.name,{name:a,schema:"main",...r});default:if(/\.arrow$/i.test(e.name)){const c=new Uint8Array(await e.arrayBuffer());return await i.insertArrowFromIPCStream(c,{name:a,schema:"main",...r})}if(/\.parquet$/i.test(e.name))return await i.query(`CREATE VIEW '${a}' AS SELECT * FROM parquet_scan('${e.name}')`);throw new Error(`unknown file type: ${e.mimeType}`)}}finally{await i.close()}}s(b,"p"),o(b,"insertFile");async function k(t,a,e){return await(await t.prepare(`CREATE TABLE '${e}' AS SELECT * FROM read_csv_auto(?, ALL_VARCHAR=TRUE)`)).send(a.name)}s(k,"q"),o(k,"insertUntypedCSV");async function m(t,a,e,r){const n=await t.connect();try{await n.insertArrowTable(e,{name:a,schema:"main",...r})}finally{await n.close()}}s(m,"l"),o(m,"insertArrowTable");async function q(t,a,e){const r=(await import("../../_npm/apache-arrow@15.0.2/+esm.js")).tableFromIPC(e.toArrowBuffer());return await m(t,a,r)}s(q,"L"),o(q,"insertArqueroTable");async function h(t,a,e,r){const n=(await import("../../_npm/apache-arrow@15.0.2/+esm.js")).tableFromJSON(e);return await m(t,a,n,r)}s(h,"h"),o(h,"insertArray");async function g(){const t=await l.createWorker(A.mainWorker),a=new l.AsyncDuckDB(C,t);return await a.instantiate(A.mainModule),a}s(g,"S"),o(g,"createDuckDB");function v(t){switch(t){case"BIGINT":case"HUGEINT":case"UBIGINT":return"bigint";case"DOUBLE":case"REAL":case"FLOAT":return"number";case"INTEGER":case"SMALLINT":case"TINYINT":case"USMALLINT":case"UINTEGER":case"UTINYINT":return"integer";case"BOOLEAN":return"boolean";case"DATE":case"TIMESTAMP":case"TIMESTAMP WITH TIME ZONE":return"date";case"VARCHAR":case"UUID":return"string";default:return/^DECIMAL\(/.test(t)?"integer":"other"}}s(v,"B"),o(v,"getDuckDBType");function B(t){return t&&typeof t.name=="string"&&typeof t.url=="function"&&typeof t.arrayBuffer=="function"}s(B,"R"),o(B,"isFileAttachment");function D(t){return t&&typeof t.toArrowBuffer=="function"}s(D,"N"),o(D,"isArqueroTable");function T(t){return t&&typeof t.getChild=="function"&&typeof t.toArray=="function"&&t.schema&&Array.isArray(t.schema.fields)}s(T,"T"),o(T,"isArrowTable");export{u as DuckDBClient,p as getDefaultClient,E as registerTable,I as sql}; 2 | -------------------------------------------------------------------------------- /repository_cohorts/framework/dist/_observablehq/stdlib/inputs.css: -------------------------------------------------------------------------------- 1 | .inputs-3a86ea{--length1: 3.25px;--length2: 6.5px;--length3: 13px;--label-width: 120px;--input-width: 240px;font:13px/1.2 var(--sans-serif)}form.inputs-3a86ea{display:flex;align-items:center;flex-wrap:wrap;min-height:25.5px;margin:var(--length3) 0}form.inputs-3a86ea>label{width:100%;padding-bottom:3px}form.inputs-3a86ea-toggle{flex-wrap:nowrap}form.inputs-3a86ea-toggle>label{align-self:start;padding:5px 0 4px;margin-right:var(--length2)}form.inputs-3a86ea-toggle>label,form.inputs-3a86ea-toggle .inputs-3a86ea-input{width:initial}@media only screen and (min-width: 30em){form.inputs-3a86ea{flex-wrap:nowrap;width:calc(var(--input-width) + var(--label-width));max-width:100%;margin:initial}form.inputs-3a86ea>label{flex-shrink:0;align-self:start;padding:5px 0 4px;width:var(--label-width);margin-right:var(--length2)}}.inputs-3a86ea button,.inputs-3a86ea input,.inputs-3a86ea select,.inputs-3a86ea table,.inputs-3a86ea textarea{color:inherit;font:inherit;box-sizing:border-box}.inputs-3a86ea button,.inputs-3a86ea input{line-height:normal}.inputs-3a86ea button{margin:0}.inputs-3a86ea button+button{margin-left:var(--length1)}.inputs-3a86ea-textarea{--input-width: 520px}.inputs-3a86ea-textarea>div{width:100%;text-align:right}.inputs-3a86ea-textarea>div textarea{display:block;width:100%;margin:0;padding:4px;min-height:calc(2.5em + 8px);max-height:calc(14em + 8px);resize:vertical}.inputs-3a86ea-textarea>div button{margin:4px 0 0}.inputs-3a86ea input[type=radio],.inputs-3a86ea input[type=checkbox]{margin-right:var(--length2)}.inputs-3a86ea-input{display:flex;align-items:center;width:100%}.inputs-3a86ea-input>input,.inputs-3a86ea-input>button,.inputs-3a86ea-input>output{width:inherit;min-width:0}.inputs-3a86ea-input>button,.inputs-3a86ea-input>output,.inputs-3a86ea-input>input[type=number]{flex-shrink:2.5}.inputs-3a86ea-input>output{white-space:pre;margin-left:var(--length2)}.inputs-3a86ea-input>button{margin-left:var(--length1)}.inputs-3a86ea-input>input[type=number]{font-variant-numeric:tabular-nums;flex-shrink:1.5;text-overflow:ellipsis}.inputs-3a86ea-input>input[type=color]~output{font-family:ui-monospace,var(--monospace)}.inputs-3a86ea-input:not(:only-child)>input[type=color]~output{flex-shrink:1}.inputs-3a86ea-input>input[type=range]{margin:0;margin-left:var(--length2)}.inputs-3a86ea-input>input[type=date],.inputs-3a86ea-input>input[type=datetime-local]{height:22px}form.inputs-3a86ea-checkbox{width:auto;max-width:640px}.inputs-3a86ea-checkbox div label{display:inline-flex;align-items:center;margin-right:var(--length3)}form.inputs-3a86ea-table{display:block;overflow-y:auto;width:100%}.inputs-3a86ea-table table{max-width:initial;min-height:33px;margin:0;border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums}.inputs-3a86ea-table tr:not(:last-child) td,.inputs-3a86ea-table tr:not(:last-child) th{border-bottom:solid 1px var(--theme-foreground-faintest)}.inputs-3a86ea-table thead tr td,.inputs-3a86ea-table thead tr th{border-bottom:solid 1px var(--theme-foreground-fainter)}.inputs-3a86ea-table thead th span{display:inline-block;width:.5em;margin-left:-.5em}.inputs-3a86ea-table td,.inputs-3a86ea-table th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:3px 6.5px 3px 0}.inputs-3a86ea-table tr>:not(:first-of-type){padding-left:var(--length2)}.inputs-3a86ea-table tr>:last-of-type{padding-right:var(--length3)}.inputs-3a86ea-table tr>:first-of-type{text-overflow:unset;width:19px}.inputs-3a86ea-table tr>:first-of-type input{opacity:0;margin:0 3px 1px 4px}.inputs-3a86ea-table tr:hover>:first-of-type input:enabled,.inputs-3a86ea-table tr>:first-of-type input:focus,.inputs-3a86ea-table tr>:first-of-type input:checked,.inputs-3a86ea-table tr>:first-of-type input[type=checkbox]:indeterminate{opacity:inherit}.inputs-3a86ea-table thead tr{border-bottom:none}.inputs-3a86ea-table thead th{position:sticky;top:0;background:var(--theme-background);cursor:ns-resize}.inputs-3a86ea-table tbody tr:first-child td{padding-top:4px} 2 | -------------------------------------------------------------------------------- /repository_cohorts/framework/observablehq.config.js: -------------------------------------------------------------------------------- 1 | // See https://observablehq.com/framework/config for documentation. 2 | export default { 3 | // The project’s title; used in the sidebar and webpage titles. 4 | title: "framework", 5 | 6 | // The pages and sections in the sidebar. If you don’t specify this option, 7 | // all pages will be listed in alphabetical order. Listing pages explicitly 8 | // lets you organize them into sections and have unlisted pages. 9 | // pages: [ 10 | // { 11 | // name: "Examples", 12 | // pages: [ 13 | // {name: "Dashboard", path: "/example-dashboard"}, 14 | // {name: "Report", path: "/example-report"} 15 | // ] 16 | // } 17 | // ], 18 | 19 | // Some additional configuration options and their defaults: 20 | // theme: "default", // try "light", "dark", "slate", etc. 21 | // header: "", // what to show in the header (HTML) 22 | // footer: "Built with Observable.", // what to show in the footer (HTML) 23 | // toc: true, // whether to show the table of contents 24 | // pager: true, // whether to show previous & next links in the footer 25 | // root: "docs", // path to the source root for preview 26 | // output: "dist", // path to the output root for build 27 | // search: true, // activate search 28 | }; 29 | -------------------------------------------------------------------------------- /repository_cohorts/framework/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "private": true, 4 | "scripts": { 5 | "clean": "rimraf docs/.observablehq/cache", 6 | "build": "rimraf dist && observable build", 7 | "dev": "observable preview", 8 | "deploy": "observable deploy", 9 | "observable": "observable" 10 | }, 11 | "dependencies": { 12 | "@observablehq/framework": "latest" 13 | }, 14 | "devDependencies": { 15 | "rimraf": "^5.0.5" 16 | }, 17 | "engines": { 18 | "node": ">=18" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /surveys/README.md: -------------------------------------------------------------------------------- 1 | # Microsoft OSPO-Surveys 2 | A collection of survey questions we've used at Microsoft's Open Source Programs Office (OSPO). 3 | 4 | ## Categories 5 | Questions are grouped by topic area, and then survey question which we welcome contributions to, should you use these and identify ways of improving. 6 | Beneath each topic are, is the list of questions. 7 | 8 | - About You 9 | - [Group](about-you/group.md) 10 | - [Team Role](about-you/team-role.md) 11 | - Company InnerSource 12 | - [Participation](company-innersource/participation/recent-activity.md) 13 | - Company Open Source 14 | - Ecosystem 15 | - [Evaluation of Company Efforts](company-opensource/ecosystem/company-efforts.md) 16 | - [Sentiment](company-opensource/ecosystem/external-sentiment.md) 17 | - Open Source Maintainer 18 | - [Existing Data and Metrics](company-opensource/maintainer/data-metrics.md) 19 | - [Data and Metric Needs](company-opensource/maintainer/data-metrics-outcome.md) 20 | - Open Source Participation 21 | - [Contribution Types](company-opensource/participation/contribution-types.md) 22 | - [Leadership Roles](company-opensource/maintainer/roles.md) 23 | - [Participation - Current](company-opensource/participation/recent-participation.md) 24 | - [Participation - Goals](company-opensource/participation/participation-future.md) 25 | - [Upstream Security](company-opensource/security/upstream-risks.md) 26 | - Recognition/Belonging 27 | - [Belonging](company-opensource/recognition-belonging/community-belonging.md) 28 | - [Recognition](company-opensource/recognition-belonging) 29 | - [Manager Alignment](company-opensource/recognition-belonging/manager-support.md) 30 | - Security 31 | - [Understanding the Upstream](https://github.com/microsoft/OSPO-Surveys/blob/main/company-opensource/security/upstream-risks.md) 32 | - Support Needed 33 | - [OS Strategy](company-opensource/support-resources/strategy.md) 34 | - [Support Requests](company-opensource/participation/support-needed.md) 35 | 36 | 37 | We've also included survey questions for FOSS Fund awardees, to better understand how to support maintainers with and beyond the fund. 38 | These questions should all be optional. 39 | 40 | - FOSS Fund 41 | - [Funding Use](foss-fund/award-usefulness.md) 42 | - [Funding Support Gaps](foss-fund/gaps.md) 43 | - [Diversity and Inclusion Support](foss-fund/inclusion.md) 44 | 45 | ## Question Standards 46 | 47 | Something we learned in previous surveys is that providing a *'Neither Agree Nor Disagree'* option, dilutes the responses if a large number of people opt for that. It really tells us nothing and makes the other responses less actionable. As a result the question standard for agreement is structured this way: 48 | - Strongly Agree 49 | - Agree 50 | - Disagree 51 | - Strongly Disagree 52 | - Other _______________________ 53 | 54 | With 'Other' being a place people can elborate on why none of those responses fit. 55 | 56 | ## Question Best Practices 57 | 58 | * Each section should include a final question 'If you would like, please use this space to expand your answers about the [Section Area].' 59 | * Unless you have a specific need to know *who* responded in what way, provide an option for people to respond anonymously to encourage honestly. 60 | * All surveys run on behalf of an Open Source Program's Office (OSPO) should include privacy and data retention policy. 61 | * Unless otherwise agreed upon by your legal and HR team, **no senstive information should be collected including dimensions of diversity**. 62 | * Should you run an external-facing survey you can sometimes asking questions about diversity dimensions, but only if there ais no personally identifying information including location. For more running external surveys please reach out to the [CHAOSS DEI working group](https://github.com/chaoss/wg-dei). 63 | 64 | ## Contributing 65 | 66 | Contributions are welcome! Please checkout our [CONTRIBUTING.md](CONTRIBUTING.md) file to learn more. 67 | 68 | --- 69 | 70 | 71 | Copyright (c) Microsoft Corporation. 72 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. 73 | 74 | Trademarks This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies. 75 | -------------------------------------------------------------------------------- /surveys/about-you/group.md: -------------------------------------------------------------------------------- 1 | # Group or Division 2 | To help understand where in your company someone is providing feedback is important as organizational structures can and will have impact on whether or not people feel empowered in open source as part of that role. 3 | These will of course differ from company to company. 4 | 5 | **What group/division are you in?** 6 | [Textbox] 7 | 8 | 9 | 10 | 11 | 12 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/about-you/team-role.md: -------------------------------------------------------------------------------- 1 | # Team Role 2 | Different roles, have different goals! Here are a few we have started with. Our initial survey outreach we saw mostly engineers respond. 3 | 4 | **What is your team role?** 5 | - Engineer 6 | - Program Manager 7 | - Legal 8 | - Other 9 | 10 | **What is your team role?** 11 | - How would you best describe your job function? 12 | - PM Manager, GPM, or Director 13 | - Marketing or Communications 14 | - Field Role 15 | - Business Operations 16 | - Engineering Manager or Director 17 | - Individual Contributor 18 | - Other 19 | 20 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-innersource/participation/recent-activity.md: -------------------------------------------------------------------------------- 1 | # InnerSource Participation 2 | The goal of this question is to understand how recently, and in what capacity people have participated in InnerSource activities. 3 | People may have previous experience longer than a year ago, but getting at their longer history would be a different thpe of question. 4 | 5 | Not everyone will be sure of which projects are InnerSource, providing a list would be helpful. 6 | 7 | **NOTE: Contributing to InnerSource means contributing to a project that has not been publically released, and does does not have an open source license.** 8 | 9 | **In the LAST YEAR...** 10 | - As part of my work, I have used an InnerSource project. 11 | - As part of my work, I have contributed to an InnerSource project. 12 | - As part of my work, I/we have accepted InnerSource contributions. 13 | - Other________________________________________ 14 | 15 | 16 | 17 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/ecosystem/company-efforts.md: -------------------------------------------------------------------------------- 1 | # Company Efforts 2 | This question is to better understand sentiment around the role of the company in sustaining, and supporting the open source ecosystem. It can be used in combination with other questions to undertand what efforts are known. 3 | 4 | 5 | **[COMPANY] is doing enough to foster a healthy, safe and sustainable open source ecosystem?** 6 | - Strongly Agree 7 | - Agree 8 | - Disagree 9 | - Strongly Disagree 10 | - Other ____________________________ 11 | 12 | 13 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/ecosystem/external-sentiment.md: -------------------------------------------------------------------------------- 1 | # External Reputation/Sentiment 2 | How your employees feel about their role in open source can be directly tied to how they feel about the company's reputation. This question is good to compare with those asking about future plans, and recognition. 3 | 4 | **Externally, I am proud to associate my open source work with [Company].** 5 | - Strongly Agree 6 | - Agree 7 | - Disagree 8 | - Strongly Disagree 9 | - Other _________________ 10 | 11 | 12 | **[Company] is doing enough to foster a healthy, safe and sustainable open source ecosystem.** 13 | - Strongly Agree 14 | - Agree 15 | - Disagree 16 | - Strongly Disagree 17 | - Other _________________ 18 | 19 | 20 | 21 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. 22 | -------------------------------------------------------------------------------- /surveys/company-opensource/engineering-oss/workflow: -------------------------------------------------------------------------------- 1 | # Engineering Workflow 2 | 3 | If [COMPANY] could build out a feature, bot, or experience to improve your open source workflow, what would it be? 4 | 5 | [OPEN TEXT BOX] 6 | 7 | If you could have just one new GitHub feature this year, what would it be? 8 | 9 | [OPEN TEXT BOX] 10 | 11 | If you would like to, please use this space to share any other thoughts about engineering and open source. 12 | 13 | [OPEN TEXT BOX] 14 | 15 | 16 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/maintainer/data-metrics-outcome.md: -------------------------------------------------------------------------------- 1 | # Data/Metrics Outcome 2 | There are lots of ways people might want to meausre success in open source, here are those identified by CHAOSS project to stay connected to broader efforts. 3 | Maximum of 3 otherwise, its likely people will select all. These options are derived from CHAOSS Working groups specifically: 4 | 5 | - [Common Metrics](https://github.com/chaoss/wg-common): Contributions, People, Places, Timing 6 | - [Diversity and Inclusion](https://github.com/chaoss/wg-dei): Communication, Events, Governence, Leadership, Project + Community, Regonition 7 | - [Evolution](https://github.com/chaoss/wg-evolution): Code Development, Efficiency, Quality, Issue Resolution, Community Growth. 8 | - [Risk](https://github.com/chaoss/wg-risk): Business Risk, Code Quality, Licensing, Security, Transparency, Dependency Risk 9 | - [Value](https://github.com/chaoss/wg-value): Social, Organizational, Individual, Communinal, Academic 10 | 11 | 12 | 13 | **What type of metrics are you most interested in (select up to 3)** 14 | - Community Growth 15 | - Community Health 16 | - Diversity, Equity and Inclusion 17 | - Project Maintainer Effectiveness (response time etc.) 18 | - PR Quality 19 | - Contributor Impact 20 | - Economics of a Contribution (volunteer, employed by a company, self-employed, student) 21 | - Other ______________________ 22 | 23 | 24 | 25 | 26 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/maintainer/data-metrics.md: -------------------------------------------------------------------------------- 1 | # Data/Metrics 2 | This is an important one. If employees aren't sure how to evaluate their success and/or their open source project's success that's both a challenge and opportunity space for an OSPO. 3 | The [data and metrics type](data-metrics-types.md) can help you dig into gaps a bit more. 4 | 5 | **I have the information I need (data & metrics) that allows me to effectively understand ecosystem engagement our open source projects.** 6 | - Strongly Agree 7 | - Agree 8 | - Disagree 9 | - Strongly Disagree 10 | - Other ________________ 11 | 12 | 13 | 14 | 15 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/activity-future.md: -------------------------------------------------------------------------------- 1 | # Activity Future 2 | A question to evaluate intention for participation, or contribution in open source in the next year (or time period you are interested in). 3 | 4 | **I expect my activities to continue in [TIME FRAME].** 5 | - Strongly Agree 6 | - Agree 7 | - Disagree 8 | - Strongly Disagree 9 | - Other _________________ 10 | 11 | 12 | 13 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/contribution-types.md: -------------------------------------------------------------------------------- 1 | # Contribution Types 2 | Often we have visiblity into code contribution, but to better understand impact and potential impact, as well as for recognition of contribution this question is intended to surface a number of ways people can help a project. 3 | 4 | 5 | **If you have contributed to open source project (as part of Microsoft, or otherwise), what type of contributions have you made?** 6 | *Select all that apply* 7 | - Writing code 8 | - Reviewing code 9 | - Bug triage 10 | - Governance 11 | - Accessiblity 12 | - Code of Conduct enforcement 13 | - QA/Testing 14 | - Localization/Translation 15 | - Technical writing 16 | - Community building and management 17 | - Teaching/tutorial building 18 | - User support 19 | - Creative work/design 20 | - User interface/experience 21 | - Social media 22 | - Security 23 | - Documentation/writing articles 24 | - Diversity, equity and inclusion 25 | - Public relations (i.e. press interview) 26 | - Speaking at events 27 | - Marketing and campaign advocacy 28 | - Legal council 29 | - Financial management 30 | - Board member 31 | - Project maintainer 32 | - Building relationships with open source communities 33 | - Other _________________________ 34 | 35 | 36 | 37 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/future-participation.md: -------------------------------------------------------------------------------- 1 | # Participation Future 2 | As perhaps obvious, this question gets at people's intention for the future. Keeping in mind that intention is only part of the recipe for success, this can help us evaluate in another survey how many people achieved their goals. 3 | 4 | **I expect my activities in open source to increase in 2021** 5 | - Yes 6 | - No 7 | - Maybe 8 | - Other _________________ 9 | 10 | 11 | 12 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/leadership.md: -------------------------------------------------------------------------------- 1 | # Leadership 2 | 3 | Are you part of any (formal, or informal) leadership programs inside the company, where your expertise in open source is called-upon? If so, please share a little bit about how that is working (or not working) for you. 4 | 5 | [Open Text Box] 6 | 7 | 8 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/recent-participation.md: -------------------------------------------------------------------------------- 1 | # Open Source Participation 2 | The goal of this question is to understand how recently, and in what capacity people have participated in open source activities. 3 | People may have previous experience longer than a year ago, but getting at their longer history would be a different thpe of question. 4 | 5 | **In the LAST YEAR...** 6 | - [ ] As part of my work, I have used open source code. 7 | - [ ] As part of my work, I have used open source code.As part of my work, I have used open source code. 8 | - [ ] As part of my work, I have contributed to a not-Microsoft-sponsored open source project. 9 | - [ ] As part of my work, I have released open source. 10 | - [ ] Other________________________________________ 11 | 12 | 13 | 14 | 15 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/roles.md: -------------------------------------------------------------------------------- 1 | # Leadership 2 | These questions are to help surface existing leadership (or if you prefer, 'roles of influence') that someone might hold. This is helpful to understanding what supports, challenges, and perspectives those with influence hold, and ways to support their success. 3 | 4 | **Do you hold a leadership role in any upstream projects used by [Company]?** 5 | - Yes 6 | - No 7 | - Other_____________ 8 | 9 | 10 | **Are you part of any (formal, or informal) leadership programs inside the company, where your expertise in open source is called-upon?** 11 | - Yes 12 | - No 13 | - Other_____________ 14 | 15 | 16 | **Are you part of any (formal, or informal) leadership programs inside the company, where your expertise in open source is called-upon? If so, please share a little bit about how that is working (or not working) for you.** 17 | 18 | [Open Text Box] 19 | 20 | 21 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/participation/support-needed.md: -------------------------------------------------------------------------------- 1 | # Support Needed 2 | This question will help you get to the type of support people need from technical, to cultural. 3 | 4 | **What type of support do you anticipate would be most supportive of your goals for [TIME PERIOD]?** 5 | * Open Source 101 6 | * Licensing and compliance 7 | * Security 8 | * Community building 9 | * Best practices - contributing on behalf of [COMPANY] 10 | * Diversity, equity and inclusion in open source 11 | * Selecting OSS projects for use 12 | * Using GitHub 13 | * Data and metrics standards (best practices for measuring success for maintainers) 14 | * Connecting with others working on OSS at [COMPANY] 15 | * Connecting with others working on OSS outside of [COMPANY] 16 | * A way to ppitch my ideas, and hear the ideas of others 17 | * InnerSource 18 | * Growing a project in the open 19 | * OTHER___________________ 20 | -------------------------------------------------------------------------------- /surveys/company-opensource/recognition-belonging/community-belonging.md: -------------------------------------------------------------------------------- 1 | # Community Belonging 2 | Belonging to internal communities includes a number of attributes: Empowerment, Purpose and Trust. 3 | 4 | **I am a valued part of the broader community at [COMPANY] working on open source.** 5 | - Strongly Agree 6 | - Agree 7 | - Disagree 8 | - Strongly Disagree 9 | - Other _________________ 10 | 11 | 12 | 13 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/recognition-belonging/incentive-value-recognition.md: -------------------------------------------------------------------------------- 1 | # Company Recognition 2 | 3 | **[COMPANY] appropriately recognizes my work in open source.** 4 | - Strongly Agree 5 | - Agree 6 | - Disagree 7 | - Strongly Disagree 8 | - Other _________________ 9 | 10 | **I have the language and tools to describe how my work in open source brings value to our customers.** 11 | - Strongly Agree 12 | - Agree 13 | - Disagree 14 | - Strongly Disagree 15 | - Other ____________________________ 16 | 17 | 18 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/recognition-belonging/manager-support.md: -------------------------------------------------------------------------------- 1 | # Manager Support 2 | To be clear, this question is only to get at someone's perception of manager support, for further work on communication and alignment. It may be that a manager is fully supportive, but needs more information. 3 | 4 | **My manager is supportive of my open source endeavors** 5 | - Strongly Agree 6 | - Agree 7 | - Disagree 8 | - Strongly Disagree 9 | - Other _________________ 10 | 11 | 12 | **I have the language, and tools to explain how my work in open source brings value to my manager.** 13 | - Strongly Agree 14 | - Agree 15 | - Disagree 16 | - Strongly Disagree 17 | - Other _________________ 18 | 19 | 20 | **What type of resources would be helpful to you in manager discussion?** 21 | - Reports on your OSS activities on GitHub 22 | - A way to track and report on my non-GitHub contribution 23 | - Recognition of high-value contribution (i.e. impacting security of a project, improving DEI) 24 | - Leaderboards 25 | - Kudos or badging acknowledgements 26 | 27 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/security/upstream-risks.md: -------------------------------------------------------------------------------- 1 | # Upstream Risks 2 | People don't always know, what they don't know - and this question is to surface what approach people would take in the case of an upstream security issue, which is important. 3 | You will want to make sure the correct answer for your company is listed as a choice. 4 | 5 | **If there is a security risk with upstream code, which of these represents your most common approach?** 6 | - Ask for support, or open an issue in the upstream project and wait for their response. 7 | - Raise the issue internally and wait for a response. 8 | - Fix/patch locally, and commit to upstream immediately. 9 | - Fix/patch locally , and commit to upstream on a later date. 10 | - Other _________________ 11 | 12 | 13 | 14 | 15 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/company-opensource/support-resources/strategy.md: -------------------------------------------------------------------------------- 1 | # Strategy 2 | 3 | 4 | **I have the information I need (data & metrics) that allows me be strategic about open source.** 5 | - Strongly Agree 6 | - Agree 7 | - Disagree 8 | - Strongly Disagree 9 | - Other ____________________________ 10 | 11 | **Which of the folllowing information/data would be helpful to your goals for ecosystem engagement.** 12 | - Contributor motivations (paid work, student, hobbiest) 13 | - Use cases (what are people using our open source projects for) 14 | - Information around sponsorship of our contributors (identifying gaps in contributor sustainability) 15 | - Why people starred our project on GitHub 16 | 17 | -------------------------------------------------------------------------------- /surveys/company-opensource/support-resources/support-types.md: -------------------------------------------------------------------------------- 1 | # Support Type 2 | This question is to understand what type of support people feel is important to their progress in open source (use, contributing, releasing, growing) and to feel a sense of belonging in their internal community. 3 | 4 | **What type of support do you anticipate woudl be most support of your goals for [TIME PERIOD]?** 5 | - Open Source 101 6 | - Licensing and compliance 7 | - Security 8 | - Community building 9 | - Best practices - contributing on behalf of [COMPANY] 10 | - Diversity, equity and inclusion in OSS 11 | - Selecting OSS for use 12 | - Using GitHub 13 | - Measuring community and project health 14 | - Connecting with others working on OSS @ Microsoft 15 | - Connecting with others working on OSS outside of Microsoft 16 | - A way to pitch my ideas, and hear the ideas of others 17 | - Funding projects, maintainers and/or specific contributors 18 | - InnerSource 19 | - Growing a project in the open 20 | - Open Source strategy 21 | 22 | 23 | 24 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. -------------------------------------------------------------------------------- /surveys/foss-fund/award-usefulness.md: -------------------------------------------------------------------------------- 1 | # Award Usefulness 2 | This is to help undestand ways in which funding helps (or rather to test hypothesis around that). 3 | We also want to understand what blockers might be to using funds. 4 | 5 | 6 | **How was the FOSS Fund award most useful to your project?** 7 | *Note: there is no 'right or preferred way' for funds to be used, the goal of this question is to understand where the fund has been helpful so we can perhaps do more in that area for future.* 8 | - I haven’t used it yet 9 | - Travel to an event 10 | - Hired a contractor 11 | - Sponsored another community member/maintainer 12 | - Created design assets 13 | - Living expenses 14 | - Training, coaching 15 | - Technology or services 16 | - Other ___________ 17 | 18 | **If you answered ‘I haven’t used it’, please use this space to describe any obstacles or challenges you’ve experienced in allocating the funds** 19 | ____________ 20 | 21 | 22 | 23 | 24 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. 25 | -------------------------------------------------------------------------------- /surveys/foss-fund/gaps.md: -------------------------------------------------------------------------------- 1 | # Improvements 2 | What supplementary support would help awardees? Here are some we've heard, but also would be interesting to know what other gaps exist. 3 | 4 | **Would resources or support on any of these have helped you? [please select all that apply]** 5 | *We’ve heard a few things would be helpful, and we’re wondering what ways we can close gaps for future awardees.* 6 | 7 | - Tax and accounting considerations. 8 | - Hiring contractors or other temporary help. 9 | - Managing community expectations around disbursement and use of funds. 10 | - How to find other funding sources. 11 | - Helping train new maintainers 12 | - Improving diversity and inclusion 13 | - Succession planning 14 | - Other __________________________________________ 15 | 16 | 17 | 18 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. 19 | test 20 | -------------------------------------------------------------------------------- /surveys/foss-fund/inclusion.md: -------------------------------------------------------------------------------- 1 | # Inclusion 2 | For Funds encouraging nomination of projects actively working on diversity, equity and inclusion this question can help draw out the challenges people are facing, or problem areas they are interested in working on. 3 | 4 | **Recently [COMPANY] has added ‘projects that advance diversity, equity and inclusion’ in open source as a category for nomination. How do you think we could better support inclusion in your project?** 5 | __________________________ 6 | 7 | 8 | 9 | 10 | Licensed under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. --------------------------------------------------------------------------------