<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://acawiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Charmonium</id>
	<title>AcaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://acawiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Charmonium"/>
	<link rel="alternate" type="text/html" href="https://acawiki.org/Special:Contributions/Charmonium"/>
	<updated>2026-05-12T23:44:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://acawiki.org/index.php?title=Reproducibility_vs._Replicability:_A_Brief_History_of_a_Confused_Terminology&amp;diff=12372</id>
		<title>Reproducibility vs. Replicability: A Brief History of a Confused Terminology</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Reproducibility_vs._Replicability:_A_Brief_History_of_a_Confused_Terminology&amp;diff=12372"/>
		<updated>2023-05-19T17:09:52Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Reproducibility vs. Replicability: A Brief History of a Confused Terminology&lt;br /&gt;
|authors=Hans E. Plesser&lt;br /&gt;
|url=https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5778115/&lt;br /&gt;
|tags=reproducibility&lt;br /&gt;
|journal=Frontiers in Neuroinformatics&lt;br /&gt;
|pub_date=2017&lt;br /&gt;
|doi=10.3389/fninf.2017.00076&lt;br /&gt;
|summary=&lt;br /&gt;
* Jon Claerbout defines ''reproducibility'' as running same software on same inputs, getting same outputs in [[Electronic documents give reproducible research a new meaning]].&lt;br /&gt;
* Pre-existing scientific tradition defines&lt;br /&gt;
** ''Repeatability'': the exact same procedure and exact same results.&lt;br /&gt;
** ''Reproducibility'': is testing the same hypothesis with variations in the unspecified part of the method.&lt;br /&gt;
* ACM adopted:&lt;br /&gt;
** ''Repeatability'': Same team, same experimental setup&lt;br /&gt;
** ''Replicability'': Different team, same experimental setup&lt;br /&gt;
** ''Reproducibility'': Different team, different experimental setup&lt;br /&gt;
* Three years after this was published, ACM changed their tune to be more consistent with metrology [https://www.acm.org/publications/policies/artifact-review-and-badging-current]:&lt;br /&gt;
** ''Reproducibility'': Different team, same experimental setup&lt;br /&gt;
** ''Replicability'': Different team, different experimental setup&lt;br /&gt;
* Goodman lexicon resolves the ambiguity.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Goodman !! Claerbout !! ACM (unknown date &amp;lt;2017) !! ACM 2020&lt;br /&gt;
|-&lt;br /&gt;
|         ||           || Repeatability || Repeatability&lt;br /&gt;
|-&lt;br /&gt;
| Methods reproducibility || Reproducibility || Replicability || Reproducibility&lt;br /&gt;
|-&lt;br /&gt;
| Results reproducibility || Replicability || Reproducibility || Replicability&lt;br /&gt;
|-&lt;br /&gt;
| Inferential reproducibility || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12243</id>
		<title>Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12243"/>
		<updated>2022-04-07T17:38:03Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Software Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Human factors =&lt;br /&gt;
* [[What Predicts Software Developers' Productivity?]]&lt;br /&gt;
* [[Software Engineering at Google]]&lt;br /&gt;
&lt;br /&gt;
= Technical factors =&lt;br /&gt;
* [[CoDeSe: fast deserialization via code generation]]&lt;br /&gt;
&lt;br /&gt;
= Software Testing =&lt;br /&gt;
* [[SRRTA: Regression Testing Acceleration via State Reuse]]&lt;br /&gt;
* [[Practical regression test selection with dynamic file dependencies]]&lt;br /&gt;
* [[Regression testing minimization, selection and prioritization: a survey]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Computer Science reading list]]&lt;br /&gt;
* [[Research Software Engineering reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Regression_testing_minimization,_selection_and_prioritization:_a_survey&amp;diff=12242</id>
		<title>Regression testing minimization, selection and prioritization: a survey</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Regression_testing_minimization,_selection_and_prioritization:_a_survey&amp;diff=12242"/>
		<updated>2022-04-07T17:37:47Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Regression testing minimization, selection and prioritization: a survey |authors=S. Yoo, M. Harman |url=https://onlinelibrary.wiley.com/doi/epdf/10.1002/stvr....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Regression testing minimization, selection and prioritization: a survey&lt;br /&gt;
|authors=S. Yoo, M. Harman&lt;br /&gt;
|url=https://onlinelibrary.wiley.com/doi/epdf/10.1002/stvr.430&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=* Test Suite Minimization Problem&lt;br /&gt;
** GE: Greedily select tests that test a set of requirements, until all requirements are covered.&lt;br /&gt;
** GRE: remove all redundant test cases in the test suite, then run GE.&lt;br /&gt;
** the dual of the minimal hittingset problem, i.e. the set cover problem&lt;br /&gt;
** Integer linear programming&lt;br /&gt;
** More&lt;br /&gt;
** Observations:&lt;br /&gt;
*** The reduction in size is greater intest suites with a higher block coverage in most cases.&lt;br /&gt;
*** The fault-detection effectiveness was decreasedby test case reduction, but the overall decrease in fault-detection effectiveness is not excessive&lt;br /&gt;
**** Not in all studies&lt;br /&gt;
* Test Case Selection Problem&lt;br /&gt;
** Integer Programming&lt;br /&gt;
** Dataflow&lt;br /&gt;
*** Not all deps might be captured&lt;br /&gt;
** Symbolic execution&lt;br /&gt;
*** Slow&lt;br /&gt;
*** Pointer aliasing&lt;br /&gt;
** Slice&lt;br /&gt;
*** Relevant slice &amp;amp;gt;= execution slice &amp;amp;gt;= dynamic slice&lt;br /&gt;
*** If CFG changes, not complete&lt;br /&gt;
** Control Dependence Graph&lt;br /&gt;
*** Could use CFG, but that might not be complete due to data dep&lt;br /&gt;
*** TestTube system adds other program entities such as defns and macros&lt;br /&gt;
** Firewall based on module modification&lt;br /&gt;
*** Conservative&lt;br /&gt;
** CFG cluster identification&lt;br /&gt;
*** Sounds like CDG&lt;br /&gt;
** Design-based&lt;br /&gt;
*** Why not use “empirical” design (aka static analysis)&lt;br /&gt;
* Test Case Prioritization Problem&lt;br /&gt;
** Prioiritize tests with high coverage (branches, conditions, statements, mutant-killing) x (additional, total)&lt;br /&gt;
*** Mutant-killing &amp;amp;lt;= statement coverage&lt;br /&gt;
*** “approaches with coarser granularity would produce lower APFD values, which was confirmed statistically”&lt;br /&gt;
*** Newer tests more likelu to reveal faults&lt;br /&gt;
*** Greedy algorithm is generally efficient [128]&lt;br /&gt;
** Interaction-based prio/coverage&lt;br /&gt;
** Distribution-based Approach: reduce clusters of tests which have similar traces&lt;br /&gt;
|journal=Software Testing, Verification and Reliability&lt;br /&gt;
|pub_date=2012&lt;br /&gt;
|doi=10.1002/stvr.430&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Practical_regression_test_selection_with_dynamic_file_dependencies&amp;diff=12241</id>
		<title>Practical regression test selection with dynamic file dependencies</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Practical_regression_test_selection_with_dynamic_file_dependencies&amp;diff=12241"/>
		<updated>2022-04-07T16:55:43Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Practical regression test selection with dynamic file dependencies&lt;br /&gt;
|authors=Milos Gligoric, Lamyaa Eloussi, Darko Marinov&lt;br /&gt;
|url=https://dl.acm.org/doi/10.1145/2771783.2771784&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=* Google TAP can only preform RTS _across_ projects.&lt;br /&gt;
** I don't think this is true anymore. Perhaps they are talking about libraries that compile down to one file.&lt;br /&gt;
* Try to build an RTS usable in practice&lt;br /&gt;
** Use Maven (33%), use JUnit (78%), &lt;br /&gt;
* Total runtime = Analysis + Execution + Collection&lt;br /&gt;
* In Ekstazi, granularity is file/class instead of method.&lt;br /&gt;
** File/class is always superset of method (has extra).&lt;br /&gt;
** Method-granularity often select classes anyway, since the class could override a parent method, and could have final fields.&lt;br /&gt;
** For external libs, &amp;quot;collecting only the classes is not safe, and hence Ekstazi uses files as dependencies&amp;quot;. This is not explained.&lt;br /&gt;
** Don't use strace because:&lt;br /&gt;
*** Multiple tests could be run on the same JVM process&lt;br /&gt;
*** Multiple claseses bundled in one `.jar` file.&lt;br /&gt;
*** Instead dynamically instrument the bytecode and monitors the execution&lt;br /&gt;
*** Checksum&lt;br /&gt;
**** From bytecode, not source; robust to syntactic sugar.&lt;br /&gt;
**** Omit debug info&lt;br /&gt;
*** In the future, use DB for dep graph.&lt;br /&gt;
|journal=ISTA 2015&lt;br /&gt;
|pub_date=13/07/2015&lt;br /&gt;
|doi=10.1145/2771783.2771784&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Elsewhere =&lt;br /&gt;
* [https://pubpeer.com/publications/B4E71C3A06D84A90FF654F0FC4FA4B PubPeer]&lt;br /&gt;
* [http://ekstazi.org/ Code]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12240</id>
		<title>Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12240"/>
		<updated>2022-04-07T16:54:17Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Software Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Human factors =&lt;br /&gt;
* [[What Predicts Software Developers' Productivity?]]&lt;br /&gt;
* [[Software Engineering at Google]]&lt;br /&gt;
&lt;br /&gt;
= Technical factors =&lt;br /&gt;
* [[CoDeSe: fast deserialization via code generation]]&lt;br /&gt;
&lt;br /&gt;
= Software Testing =&lt;br /&gt;
* [[SRRTA: Regression Testing Acceleration via State Reuse]]&lt;br /&gt;
* [[Practical regression test selection with dynamic file dependencies]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Computer Science reading list]]&lt;br /&gt;
* [[Research Software Engineering reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Practical_regression_test_selection_with_dynamic_file_dependencies&amp;diff=12239</id>
		<title>Practical regression test selection with dynamic file dependencies</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Practical_regression_test_selection_with_dynamic_file_dependencies&amp;diff=12239"/>
		<updated>2022-04-07T16:53:54Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Practical regression test selection with dynamic file dependencies |authors=Milos Gligoric, Lamyaa Eloussi, Darko Marinov |url=https://dl.acm.org/doi/10.1145/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Practical regression test selection with dynamic file dependencies&lt;br /&gt;
|authors=Milos Gligoric, Lamyaa Eloussi, Darko Marinov&lt;br /&gt;
|url=https://dl.acm.org/doi/10.1145/2771783.2771784&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=* Google TAP can only preform RTS _across_ projects.&lt;br /&gt;
** I don't think this is true anymore. Perhaps they are talking about libraries that compile down to one file.&lt;br /&gt;
* Try to build an RTS usable in practice&lt;br /&gt;
** Use Maven (33%), use JUnit (78%), &lt;br /&gt;
* Total runtime = Analysis + Execution + Collection&lt;br /&gt;
* In Ekstazi, granularity is file/class instead of method.&lt;br /&gt;
** File/class is always superset of method (has extra).&lt;br /&gt;
** Method-granularity often select classes anyway, since the class could override a parent method, and could have final fields.&lt;br /&gt;
** For external libs, &amp;quot;collecting only the classes is not safe, and hence Ekstazi uses files as dependencies&amp;quot;. This is not explained.&lt;br /&gt;
** Don't use strace because:&lt;br /&gt;
*** Multiple tests could be run on the same JVM process&lt;br /&gt;
*** Multiple claseses bundled in one `.jar` file.&lt;br /&gt;
*** Instead dynamically instrument the bytecode and monitors the execution&lt;br /&gt;
*** Checksum&lt;br /&gt;
**** From bytecode, not source; robust to syntactic sugar.&lt;br /&gt;
**** Omit debug info&lt;br /&gt;
*** In the future, use DB for dep graph.&lt;br /&gt;
|journal=ISTA 2015&lt;br /&gt;
|pub_date=13/07/2015&lt;br /&gt;
|doi=10.1145/2771783.2771784&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=What_Predicts_Software_Developers%27_Productivity%3F&amp;diff=12238</id>
		<title>What Predicts Software Developers' Productivity?</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=What_Predicts_Software_Developers%27_Productivity%3F&amp;diff=12238"/>
		<updated>2022-04-07T16:03:55Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=What Predicts Software Developers' Productivity?&lt;br /&gt;
|authors=Emerson Murphy-Hill, Ciera Jaspan, Caitlin Sadowski, David Shepherd, Michael Phillips, Collin Winter, Andrea Knight, Edward Smith, Matthew Jorde&lt;br /&gt;
|url=https://doi.org/10.1109/TSE.2019.2900308&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=The authors use survey developers on their productivity and other activities the authors believe might affect productivity in a variety of different companies. The authors have settled on a couple of factors they believe correlate the most with productivity. Of which, the most important are: job enthusiasm, peer support for new ideas, useful feedback about job performance.&lt;br /&gt;
|relevance=This is one of the most complete and large-scale estimations of productivity factors. New research on developer productivity often starts from this study.&lt;br /&gt;
|journal=IEEE Transactions on Software Engineering&lt;br /&gt;
|pub_date=2019/02/19&lt;br /&gt;
|doi=10.1109/TSE.2019.2900308&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Research Questions =&lt;br /&gt;
* What factors most strongly predict developers' self-rated productivity?&lt;br /&gt;
* How do these factors differ across companies?&lt;br /&gt;
* What predicts developer self-rated productivity, in particular, compared to other knowledge workers?&lt;br /&gt;
&lt;br /&gt;
= Companies Studied =&lt;br /&gt;
[[File:Screenshot from 2021-08-15 15-31-09.png|800px]]&lt;br /&gt;
&lt;br /&gt;
= Methodology =&lt;br /&gt;
== Questions ==&lt;br /&gt;
&lt;br /&gt;
* Dependent factor: self-rating of &amp;quot;productivity&amp;quot;&lt;br /&gt;
** Wanted the question to be a fixed-point of reference, with a high ceiling, that focuses on frequency and intensity of productivity.&lt;br /&gt;
** Rated on [https://en.wikipedia.org/Articles/Likert_Scale Likert Scale] &amp;quot;I regularly reach a high level of productivity.&amp;quot;&lt;br /&gt;
* Independent factors&lt;br /&gt;
** Subjective survey factors: based on survey questions from prior literature&lt;br /&gt;
** Demographic factors: gender, tenure, seniority.&lt;br /&gt;
** Attention question: to make sure people are reading the survey carefully &amp;quot;Respond with 'Somewhat disagree' to this item&amp;quot;&lt;br /&gt;
* Compare to software developers to other knowledge workers, to find unique differences. For &amp;quot;other knowledge workers,&amp;quot; use Google data analysts.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
* Hold demographic factors constant for regression.&lt;br /&gt;
* Use Benjamini-Hochberg method to correct p-value over multiple linear models.&lt;br /&gt;
* For causality, look at how prior work relates the survey factors with productivity. This study itself does not attempt to establish that.&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
* Significant positive correlation for both, CL merges more strongly, but there is still much unexplained variance.&lt;br /&gt;
* Google had a much higher response-rate than NI and ABB.&lt;br /&gt;
* Between 5 and 20% of the responses failed the attention question.&lt;br /&gt;
&lt;br /&gt;
== Demographic correlations ==&lt;br /&gt;
* Only at ABB was gender statistically significant.&lt;br /&gt;
** Female respondants statistically significantly rated their productivity greater than their male counterparts, and custom genders reported greater than females.&lt;br /&gt;
* Tenure at position was statistically significant only at ABB.&lt;br /&gt;
&lt;br /&gt;
== Research Questions ==&lt;br /&gt;
&lt;br /&gt;
* RQ1: What factors most strongly predict developers' self-rated productivity?&lt;br /&gt;
** Job enthusiasm, peer support for new ideas, useful feedback about job performance&lt;br /&gt;
*** What makes software developers enthusiastic about their job? What accounts for differences in levels of enthusiasm between developers? What interventions can increase enthusiasm? This work can extend existing work on developer happiness [24] and motivation [25].&lt;br /&gt;
*** What kinds of new ideas are commonly expressed in software development practice? What actions influence developers' feelings of support for those ideas? What interventions can increase support for new ideas, while maintaining current commitments?&lt;br /&gt;
*** What kinds of job feedback do software engineers receive, and what makes it useful? What kinds of feedback is not useful? What interventions can increase the regularity and usefulness of feedback?&lt;br /&gt;
** COCOMO factors were not as predictive. Either COCOMO is missing important factors or COCOMO measures something different than this kind of productivity.&lt;br /&gt;
* RQ2: How do these factors differ across companies?&lt;br /&gt;
** Most consistent-between-companies: Use of remote work to concentrate, Useful feedback about job performance, Peer support for new ideas&lt;br /&gt;
*** These are all social/environemntal, not technical.&lt;br /&gt;
** Most variant-betwee-companies: Use of best tools and practices, code reuse, accuracy of incoming information&lt;br /&gt;
*** Use of best tools/practices only matters in big codebases. Google has this, NI does not.&lt;br /&gt;
*** Code reuse is easier in a monorepo. Google has this, ABB does not.&lt;br /&gt;
*** Accurate information mattered more at NI than ABB. ABB has more support teams and layers at which to correct such information.&lt;br /&gt;
* RQ3: What predicts developer self-rated productivity, in particular, compared to other knowledge workers?&lt;br /&gt;
** Analysts' productivity correlates uniquely with positive feelings about their teammates and time management autonomy.&lt;br /&gt;
** Software developers' productivity correlates uniquely with doing a variety of tasks and working effectively way from their desk.&lt;br /&gt;
&lt;br /&gt;
== Future work ==&lt;br /&gt;
&lt;br /&gt;
* Systematic literature review&lt;br /&gt;
* Consider more factors, such as demogrpahics&lt;br /&gt;
* Multiple dimensions and metrics of productivity&lt;br /&gt;
* Determine costs of changing factors which affect productivity.&lt;br /&gt;
&lt;br /&gt;
== Threats to validity ==&lt;br /&gt;
&lt;br /&gt;
* They use self-rated productivity rather than objective metrics.&lt;br /&gt;
** Prior literature seems to validate this choice.&lt;br /&gt;
* Their question had no time-window (productivity this year vs productivity today).&lt;br /&gt;
* They couldn't put too many questions, so they had to group things together. E.g. Q14 &amp;quot;Do you use best practices?&amp;quot;, doesn't distinguish *which* best practices.&lt;br /&gt;
* They rely on prior work to establish causality and just measure correlation.&lt;br /&gt;
** Maybe higher productivity causes higher enthusiasm, not the other way around.&lt;br /&gt;
* Maybe companies are not representative.&lt;br /&gt;
** They tried to pick an archetype of each &amp;quot;kind&amp;quot; of company, new big tech (Google), old big tech (ABB), small tech (NI).&lt;br /&gt;
** But the results are not weighted by prevalence of these kinds of companies. Maybe it is best to zoom in to the data which match your kind of company.&lt;br /&gt;
* Maybe analysts are not representative of other knowledge workers like lawyers.&lt;br /&gt;
* Maybe two factors are linked; no covariance analysis.&lt;br /&gt;
* Respondants might not be totally blind if they could guess the study's objectives from the survey questions.&lt;br /&gt;
* Had to reword the questions from software developers to suit analysts.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://news.ycombinator.com/item?id=23766987 Hackernews discussion]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12237</id>
		<title>Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12237"/>
		<updated>2022-04-07T16:01:55Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Human factors =&lt;br /&gt;
* [[What Predicts Software Developers' Productivity?]]&lt;br /&gt;
* [[Software Engineering at Google]]&lt;br /&gt;
&lt;br /&gt;
= Technical factors =&lt;br /&gt;
* [[CoDeSe: fast deserialization via code generation]]&lt;br /&gt;
&lt;br /&gt;
= Software Testing =&lt;br /&gt;
* [[SRRTA: Regression Testing Acceleration via State Reuse]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Computer Science reading list]]&lt;br /&gt;
* [[Research Software Engineering reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12234</id>
		<title>Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12234"/>
		<updated>2022-01-31T05:30:07Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science&lt;br /&gt;
|authors=Reed Milewicz, Miranda Mundt&lt;br /&gt;
|url=https://arxiv.org/abs/2201.04007&lt;br /&gt;
|summary=&lt;br /&gt;
* Software engineering researchers (SE researchers) and computational science/engineering (CSE) have had a symbiotic relationship.&lt;br /&gt;
* But few formal interactions between DOE laboratories (CSE) and SE researchers.&lt;br /&gt;
** Only few papers coauthored by DOE lab staff.&lt;br /&gt;
* Opportunities:&lt;br /&gt;
** Take SE research to CSE domain.&lt;br /&gt;
** Conduct novel SE research in CSE domain.&lt;br /&gt;
*** Currently CSE problems is underrepresented in SE research.&lt;br /&gt;
** Make DOE care about SE research.&lt;br /&gt;
|journal=arXiv&lt;br /&gt;
|pub_date=2022/01/11&lt;br /&gt;
|arxiv=2201.04007&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12233</id>
		<title>Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12233"/>
		<updated>2022-01-31T05:22:54Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science&lt;br /&gt;
|authors=Reed Milewicz, Miranda Mundt&lt;br /&gt;
|url=https://arxiv.org/abs/2201.04007&lt;br /&gt;
|summary=&lt;br /&gt;
* Software engineering researchers (SE researchers) and computational science/engineering (CSE) have had a symbiotic relationship.&lt;br /&gt;
* But few formal interactions between DOE laboratories (CSE) and SE researchers.&lt;br /&gt;
** Only few papers coauthored by DOE lab staff.&lt;br /&gt;
&lt;br /&gt;
Placeholder&lt;br /&gt;
|journal=arXiv&lt;br /&gt;
|pub_date=2022/01/11&lt;br /&gt;
|arxiv=2201.04007&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=SRRTA:_Regression_Testing_Acceleration_via_State_Reuse&amp;diff=12232</id>
		<title>SRRTA: Regression Testing Acceleration via State Reuse</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=SRRTA:_Regression_Testing_Acceleration_via_State_Reuse&amp;diff=12232"/>
		<updated>2022-01-31T05:13:03Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=SRRTA: Regression Testing Acceleration via State Reuse&lt;br /&gt;
|authors=Jinhao Dong, Yiling Lou, Dan Hao&lt;br /&gt;
|url=https://ieeexplore.ieee.org/abstract/document/9286088&lt;br /&gt;
|summary=Placeholder&lt;br /&gt;
|journal=ASE '20: Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering&lt;br /&gt;
|pub_date=2020/12&lt;br /&gt;
|doi=10.1145/3324884.3418928&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12231</id>
		<title>Research Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12231"/>
		<updated>2022-01-26T17:49:32Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* RSE Departments, Organizations, and Institutes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RSE Departments, Organizations, and Institutes =&lt;br /&gt;
* [[Addressing Research Software Sustainability via Institutes]]&lt;br /&gt;
* [[Research Software Development &amp;amp; Management in Universities: Case Studies from Manchester's RSDS Group, Illinois' NCSA, and Notre Dame's CRC]]&lt;br /&gt;
* [[Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department]]&lt;br /&gt;
* [[Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science]]&lt;br /&gt;
&lt;br /&gt;
= Current Practices =&lt;br /&gt;
* Practices which can be improved&lt;br /&gt;
** [[Technical Debt in Computational Science]]&lt;br /&gt;
** [[Troubling Trends in Scientific Software Use]] (ecology)&lt;br /&gt;
* Pure observations&lt;br /&gt;
** [https://zenodo.org/record/14809#.YNdUKDpOkUE UK Research Software Survey (dataset)]&lt;br /&gt;
** [[Vertical Integration]]&lt;br /&gt;
** [[Developers Perception of Peer Code Review in Research Software Development]]&lt;br /&gt;
* Improved practices&lt;br /&gt;
** [[The Research Software Engineer]]&lt;br /&gt;
** [[Ten Simple Rules for the Open Development of Scientific Software]]&lt;br /&gt;
** [[Reducing Technical Debt with Reproducible Containers]]&lt;br /&gt;
** [[A Workflow for Increasing the Quality of Scientific Software (in Computational Science and Engineering)]]&lt;br /&gt;
** [[Mining Development Data to Understand and Improve Software Engineering Processes in HPC Projects]]&lt;br /&gt;
** [[Easing the burden of code review]]&lt;br /&gt;
** [[Software Engineering Challenges and Best Practices for Multi-Institutional Scientific Software Development]]&lt;br /&gt;
** [[Some Simple Guidelines for Effective Data Management]]&lt;br /&gt;
&lt;br /&gt;
= Famous Bugs =&lt;br /&gt;
* [[A Scientist's Nightmare: Software Problem Leads to Five Retractions]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Open Academia reading list]]&lt;br /&gt;
* [[Reproducibility reading list]]&lt;br /&gt;
* [[Software Engineering reading list]]&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12230</id>
		<title>Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Building_Bridges:_Establishing_a_Dialogue_Between_Software_Engineering_Research_and_Computational_Science&amp;diff=12230"/>
		<updated>2022-01-26T17:46:12Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science |authors=Reed Milewicz, Miranda Mundt |url=https://a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Building Bridges: Establishing a Dialogue Between Software Engineering Research and Computational Science&lt;br /&gt;
|authors=Reed Milewicz, Miranda Mundt&lt;br /&gt;
|url=https://arxiv.org/abs/2201.04007&lt;br /&gt;
|summary=Placeholder&lt;br /&gt;
|journal=arXiv&lt;br /&gt;
|pub_date=2022/01/11&lt;br /&gt;
|arxiv=2201.04007&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12229</id>
		<title>Research Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12229"/>
		<updated>2022-01-26T16:39:05Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Institutions and Incentives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RSE Departments, Organizations, and Institutes =&lt;br /&gt;
* [[Addressing Research Software Sustainability via Institutes]]&lt;br /&gt;
* [[Research Software Development &amp;amp; Management in Universities: Case Studies from Manchester's RSDS Group, Illinois' NCSA, and Notre Dame's CRC]]&lt;br /&gt;
* [[Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department]]&lt;br /&gt;
&lt;br /&gt;
= Current Practices =&lt;br /&gt;
* Practices which can be improved&lt;br /&gt;
** [[Technical Debt in Computational Science]]&lt;br /&gt;
** [[Troubling Trends in Scientific Software Use]] (ecology)&lt;br /&gt;
* Pure observations&lt;br /&gt;
** [https://zenodo.org/record/14809#.YNdUKDpOkUE UK Research Software Survey (dataset)]&lt;br /&gt;
** [[Vertical Integration]]&lt;br /&gt;
** [[Developers Perception of Peer Code Review in Research Software Development]]&lt;br /&gt;
* Improved practices&lt;br /&gt;
** [[The Research Software Engineer]]&lt;br /&gt;
** [[Ten Simple Rules for the Open Development of Scientific Software]]&lt;br /&gt;
** [[Reducing Technical Debt with Reproducible Containers]]&lt;br /&gt;
** [[A Workflow for Increasing the Quality of Scientific Software (in Computational Science and Engineering)]]&lt;br /&gt;
** [[Mining Development Data to Understand and Improve Software Engineering Processes in HPC Projects]]&lt;br /&gt;
** [[Easing the burden of code review]]&lt;br /&gt;
** [[Software Engineering Challenges and Best Practices for Multi-Institutional Scientific Software Development]]&lt;br /&gt;
** [[Some Simple Guidelines for Effective Data Management]]&lt;br /&gt;
&lt;br /&gt;
= Famous Bugs =&lt;br /&gt;
* [[A Scientist's Nightmare: Software Problem Leads to Five Retractions]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Open Academia reading list]]&lt;br /&gt;
* [[Reproducibility reading list]]&lt;br /&gt;
* [[Software Engineering reading list]]&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12228</id>
		<title>Research Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12228"/>
		<updated>2022-01-26T05:53:34Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Institutions and Incentives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Institutions and Incentives =&lt;br /&gt;
* [[Addressing Research Software Sustainability via Institutes]]&lt;br /&gt;
* [[Research Software Development &amp;amp; Management in Universities: Case Studies from Manchester's RSDS Group, Illinois' NCSA, and Notre Dame's CRC]]&lt;br /&gt;
* [[Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department]]&lt;br /&gt;
&lt;br /&gt;
= Current Practices =&lt;br /&gt;
* Practices which can be improved&lt;br /&gt;
** [[Technical Debt in Computational Science]]&lt;br /&gt;
** [[Troubling Trends in Scientific Software Use]] (ecology)&lt;br /&gt;
* Pure observations&lt;br /&gt;
** [https://zenodo.org/record/14809#.YNdUKDpOkUE UK Research Software Survey (dataset)]&lt;br /&gt;
** [[Vertical Integration]]&lt;br /&gt;
** [[Developers Perception of Peer Code Review in Research Software Development]]&lt;br /&gt;
* Improved practices&lt;br /&gt;
** [[The Research Software Engineer]]&lt;br /&gt;
** [[Ten Simple Rules for the Open Development of Scientific Software]]&lt;br /&gt;
** [[Reducing Technical Debt with Reproducible Containers]]&lt;br /&gt;
** [[A Workflow for Increasing the Quality of Scientific Software (in Computational Science and Engineering)]]&lt;br /&gt;
** [[Mining Development Data to Understand and Improve Software Engineering Processes in HPC Projects]]&lt;br /&gt;
** [[Easing the burden of code review]]&lt;br /&gt;
** [[Software Engineering Challenges and Best Practices for Multi-Institutional Scientific Software Development]]&lt;br /&gt;
** [[Some Simple Guidelines for Effective Data Management]]&lt;br /&gt;
&lt;br /&gt;
= Famous Bugs =&lt;br /&gt;
* [[A Scientist's Nightmare: Software Problem Leads to Five Retractions]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Open Academia reading list]]&lt;br /&gt;
* [[Reproducibility reading list]]&lt;br /&gt;
* [[Software Engineering reading list]]&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Research,_Develop,_Deploy:_Building_a_Full_Spectrum_Software_Engineering_and_Research_Department&amp;diff=12227</id>
		<title>Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Research,_Develop,_Deploy:_Building_a_Full_Spectrum_Software_Engineering_and_Research_Department&amp;diff=12227"/>
		<updated>2022-01-26T05:53:04Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department |authors=Reed Milewicz, James Willenbring, Dena Vigil |url=ht...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Research, Develop, Deploy: Building a Full Spectrum Software Engineering and Research Department&lt;br /&gt;
|authors=Reed Milewicz, James Willenbring, Dena Vigil&lt;br /&gt;
|url=https://arxiv.org/abs/2010.04660&lt;br /&gt;
|summary=* Description of the Software Engineering and Research Department at Sandia National Laboratories&lt;br /&gt;
** Used to be Software Engineering, Maintenance, Support, but this was not an official department.&lt;br /&gt;
*** Lack of departmental status made it difficult to hire, retain, and advance RSEs.&lt;br /&gt;
** Uses [https://www.metaltoad.com/blog/beware-matrix-model Matrix-management] rather than hierarchical management (reporting to multiple rather than one member).&lt;br /&gt;
** See also, University of Manchester's Research Software and Data Science (RSDS) group.&lt;br /&gt;
* Authors believe placing RSEs in inter-disciplinary (cross-functional) teams makes the team more productive.&lt;br /&gt;
* RSEs engage in three activities: Research, Develop, Deploy, with a focus on develop.&lt;br /&gt;
** Research: Applied research in software engineering&lt;br /&gt;
** Develop: Embeded development, maintenance, and support for scientific software&lt;br /&gt;
** Deploy: maintain systems (e.g. Jenkins build/test farms)&lt;br /&gt;
|journal=arXiv&lt;br /&gt;
|pub_date=2020/10/09&lt;br /&gt;
|arxiv=2010.04660&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Introducing_distributed_dynamic_data-intensive_(D3)_science:_Understanding_applications_and_infrastructure&amp;diff=12226</id>
		<title>Introducing distributed dynamic data-intensive (D3) science: Understanding applications and infrastructure</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Introducing_distributed_dynamic_data-intensive_(D3)_science:_Understanding_applications_and_infrastructure&amp;diff=12226"/>
		<updated>2022-01-22T01:17:07Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Introducing distributed dynamic data-intensive (D3) science: Understanding applications and infrastructure&lt;br /&gt;
|authors=Shantenu Jha, Daniel S. Katz, Andre Luckow, Neil Chue Hong, Omer Rana, Yogesh Simmhan&lt;br /&gt;
|url=https://onlinelibrary.wiley.com/doi/10.1002/cpe.4032&lt;br /&gt;
|summary=* Traditional application := program run by one group written to find answer to scientific question.&lt;br /&gt;
* Infrastructure application := a program written in multiple stages run by different groups.&lt;br /&gt;
* Big data&lt;br /&gt;
* Distributed := presence of data in different physical or logical locations. This could because the data comes from different sensors, it could be too big to be processed by a single node on a timely manner, it could be because you want more reliability given by redundancy and load-balancing, it could be for privacy or policy reasons.&lt;br /&gt;
** Replicated&lt;br /&gt;
** Partitioning&lt;br /&gt;
** Streaming&lt;br /&gt;
* Dynamic := an application with spatiotemporal variability.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
* Next Generation Sequencing (NGS) := map/align short reads to a reference genome.&lt;br /&gt;
** Application type: traditional&lt;br /&gt;
** Data: terrabyte scale data of DNA sequences&lt;br /&gt;
** Distribution: the problem can be distributed, but it is unclear how to get optimal performance. Few workflow systems natively manage distribution.&lt;br /&gt;
** Dynamic: the data itself is not dynamic, but properties of the running program are (when tasks complete).&lt;br /&gt;
* ATLAS := Analyze experimental physics data (pleasingly parallel)&lt;br /&gt;
** Application type: infrastructure; data generation and processing are controlled by different people. Scientists submit requests to run certain analyses on the data.&lt;br /&gt;
** Data: 20Tb per day of serialized C++ objects&lt;br /&gt;
** Distribution: 250,000 cores over 140 sites.&lt;br /&gt;
** Dynamic: data streams in continuously, and applications is run 2 or 3 times per year.&lt;br /&gt;
* Large Synoptic Survey Telescope (LSST) := find and study moving objects using a telescope.&lt;br /&gt;
** Application type: infrastructure; the data gets used by others downstream.&lt;br /&gt;
** Data: tens of TB per day of FITS images&lt;br /&gt;
** Distributional: talks to other telescopes, compute resources, and storage resources&lt;br /&gt;
** Dynamic: Data streams in. The system has to decide whether or not to interrupt its existing observing program to get another look at an anomalous object.&lt;br /&gt;
* SOA Astronomy := uses the data from LSST&lt;br /&gt;
** Application type: Infrastructure&lt;br /&gt;
** Data: 1Gb images&lt;br /&gt;
** Distribution: Data exists on different servers and is processed in a distributed cluster.&lt;br /&gt;
** Dynamic: Source data is constantly in flux.&lt;br /&gt;
* ... others&lt;br /&gt;
|journal=Concurrency and Computation: Practice and Experience&lt;br /&gt;
|pub_date=2017/02/02&lt;br /&gt;
|doi=10.1002/cpe.4032&lt;br /&gt;
|arxiv=1609.03647&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Introducing_distributed_dynamic_data-intensive_(D3)_science:_Understanding_applications_and_infrastructure&amp;diff=12225</id>
		<title>Introducing distributed dynamic data-intensive (D3) science: Understanding applications and infrastructure</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Introducing_distributed_dynamic_data-intensive_(D3)_science:_Understanding_applications_and_infrastructure&amp;diff=12225"/>
		<updated>2022-01-21T23:07:00Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Introducing distributed dynamic data-intensive (D3) science: Understanding applications and infrastructure |authors=Shantenu Jha, Daniel S. Katz, Andre Luckow...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Introducing distributed dynamic data-intensive (D3) science: Understanding applications and infrastructure&lt;br /&gt;
|authors=Shantenu Jha, Daniel S. Katz, Andre Luckow, Neil Chue Hong, Omer Rana, Yogesh Simmhan&lt;br /&gt;
|url=https://onlinelibrary.wiley.com/doi/10.1002/cpe.4032&lt;br /&gt;
|journal=Concurrency and Computation: Practice and Experience&lt;br /&gt;
|pub_date=2017/02/02&lt;br /&gt;
|doi=10.1002/cpe.4032&lt;br /&gt;
|arxiv=1609.03647&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=SRRTA:_Regression_Testing_Acceleration_via_State_Reuse&amp;diff=12224</id>
		<title>SRRTA: Regression Testing Acceleration via State Reuse</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=SRRTA:_Regression_Testing_Acceleration_via_State_Reuse&amp;diff=12224"/>
		<updated>2022-01-21T21:13:26Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=SRRTA: Regression Testing Acceleration via State Reuse |authors=Jinhao Dong, Yiling Lou, Dan Hao |url=https://ieeexplore.ieee.org/abstract/document/9286088 |s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=SRRTA: Regression Testing Acceleration via State Reuse&lt;br /&gt;
|authors=Jinhao Dong, Yiling Lou, Dan Hao&lt;br /&gt;
|url=https://ieeexplore.ieee.org/abstract/document/9286088&lt;br /&gt;
|summary=Regression testing := Running tests&lt;br /&gt;
|journal=ASE '20: Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering&lt;br /&gt;
|pub_date=2020/12&lt;br /&gt;
|doi=10.1145/3324884.3418928&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=What%27s_the_use_of_factor_contents%3F&amp;diff=12223</id>
		<title>What's the use of factor contents?</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=What%27s_the_use_of_factor_contents%3F&amp;diff=12223"/>
		<updated>2022-01-19T05:24:23Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=What's the use of factor contents?&lt;br /&gt;
|authors=Edward E. Leamer&lt;br /&gt;
|url=https://www.sciencedirect.com/science/article/pii/S0022199699000045&lt;br /&gt;
|journal=Journal of International Economics&lt;br /&gt;
|pub_date=2000/02&lt;br /&gt;
|doi=10.1016/S0022-1996(99)00004-5&lt;br /&gt;
|subject=Economics&lt;br /&gt;
|journal_volume=50&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=What%27s_the_use_of_factor_contents%3F&amp;diff=12222</id>
		<title>What's the use of factor contents?</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=What%27s_the_use_of_factor_contents%3F&amp;diff=12222"/>
		<updated>2022-01-19T05:23:27Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=What's the use of factor contents?&lt;br /&gt;
|authors=Leamer, Edward E.&lt;br /&gt;
|journal=Journal of International Economics&lt;br /&gt;
|pub_date=2000&lt;br /&gt;
|journal_volume=50&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12221</id>
		<title>Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Software_Engineering_reading_list&amp;diff=12221"/>
		<updated>2022-01-19T05:12:25Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Human factors =&lt;br /&gt;
* [[What Predicts Software Developers' Productivity?]]&lt;br /&gt;
* [[Software Engineering at Google]]&lt;br /&gt;
&lt;br /&gt;
= Technical factors =&lt;br /&gt;
* [[CoDeSe: fast deserialization via code generation]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Computer Science reading list]]&lt;br /&gt;
* [[Research Software Engineering reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12220</id>
		<title>Compilers reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12220"/>
		<updated>2022-01-19T05:11:47Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Core ==&lt;br /&gt;
&lt;br /&gt;
* [[Compilers: Principles, Techniques, and Tools]] ([https://www.worldcat.org/title/compilers-principles-techniques-and-tools/oclc/1022369647 WorldCat])&lt;br /&gt;
* [[A data locality optimizing algorithm]]&lt;br /&gt;
* [[Parameterized object sensitivity for points-to analysis for Java]] (needs work)&lt;br /&gt;
* [[Code Generation Schema for Modulo Scheduled Loops]]&lt;br /&gt;
&lt;br /&gt;
== Internal Organization ==&lt;br /&gt;
* [[An Overview of the PL.8 Compiler]]&lt;br /&gt;
* [[LLVM: A Compilation Framework for Lifelong Program Analysis &amp;amp; Transformation]]&lt;br /&gt;
&lt;br /&gt;
== Dataflow Analysis ==&lt;br /&gt;
* [[Global Data Flow Analysis and Iterative Algorithms]]&lt;br /&gt;
* [[Engineering a Compiler]] ([https://www.worldcat.org/title/engineering-a-compiler/oclc/1153004203 WorldCat])&lt;br /&gt;
&lt;br /&gt;
== Single Static Assignment ==&lt;br /&gt;
* [[Efficiently Computing Static Single Assignment Form and the Control Dependence Graph]]&lt;br /&gt;
&lt;br /&gt;
== Interprocedural Analysis ==&lt;br /&gt;
* [[Program Analysis via Graph Reachability]]&lt;br /&gt;
&lt;br /&gt;
== Pointer analysis ==&lt;br /&gt;
* [[The Ant and the Grasshopper: Fast and Accurate Pointer Analysis for Millions of Lines of Code]]&lt;br /&gt;
&lt;br /&gt;
== Vectorization ==&lt;br /&gt;
* [[Exploiting Superword Level Parallelism with Multimedia Instruction Sets]]&lt;br /&gt;
&lt;br /&gt;
== Program Synthesis ==&lt;br /&gt;
* [[A Fast Fourier Transform Compiler]]&lt;br /&gt;
* [[A Comparison of Empirical and Model-Driven Optimization]]&lt;br /&gt;
&lt;br /&gt;
== JIT ==&lt;br /&gt;
* [[CoDeSe: fast deserialization via code generation]]&lt;br /&gt;
&lt;br /&gt;
== Dynamic Analysis ==&lt;br /&gt;
* [[Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation]]&lt;br /&gt;
* [[Trace-based Just-in-Time Type Specialization for Dynamic Languages]]&lt;br /&gt;
&lt;br /&gt;
== Native Code Generation ==&lt;br /&gt;
* [[Improvements to Graph Coloring Register Allocation]]&lt;br /&gt;
* [[Automatic Generation of Peephole Superoptimizers]]&lt;br /&gt;
&lt;br /&gt;
== Correctness ==&lt;br /&gt;
* [[Automatic Predicate Abstraction of C Programs]]&lt;br /&gt;
* [[Saturn: A Scalable Framework for Error Detection Using Boolean Satisfiability]]&lt;br /&gt;
* [[ABCD: Eliminating Array Bounds Checks on Demand]]&lt;br /&gt;
&lt;br /&gt;
== Static Analysis ==&lt;br /&gt;
* [[Lessons from Building Static Analysis Tools at Google]]&lt;br /&gt;
* [[A few billion lines of code later: using static analysis to find bugs in the real world]]&lt;br /&gt;
* [[Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale]]&lt;br /&gt;
&lt;br /&gt;
== Related fields ==&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12219</id>
		<title>CoDeSe: fast deserialization via code generation</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12219"/>
		<updated>2022-01-19T05:10:53Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=CoDeSe: fast deserialization via code generation&lt;br /&gt;
|authors=Milos Gligoric, Darko Marinov, Sam Kamin&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001456&lt;br /&gt;
|summary=* Serialization/marshalling := encoding the state of an object into a stream of bytes.&lt;br /&gt;
* Deserialization/unmarshalling := restoring the state of an object from that stream of serialized bytes.&lt;br /&gt;
* Traditional de/serialization maps data elements to bytes repeatedly.&lt;br /&gt;
* On the other hand, CoDeSe (COde-based DEserialization and SErialization) serialization writes executable code into the bytestream, while deserialization just executes that code.&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001456&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [http://mir.cs.illinois.edu/codese Code repository]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12218</id>
		<title>CoDeSe: fast deserialization via code generation</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12218"/>
		<updated>2022-01-19T05:10:30Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=CoDeSe: fast deserialization via code generation&lt;br /&gt;
|authors=Milos Gligoric, Darko Marinov, Sam Kamin&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001456&lt;br /&gt;
|summary=* Serialization/marshalling := encoding the state of an object into a stream of bytes.&lt;br /&gt;
* Deserialization/unmarshalling := restoring the state of an object from that stream of serialized bytes.&lt;br /&gt;
* Traditional de/serialization maps data elements to bytes repeatedly.&lt;br /&gt;
* On the other hand, CoDeSe (COde-based DEserialization and SErialization) serialization writes executable code into the bytestream, while deserialization just executes that code.&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001456&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12217</id>
		<title>CoDeSe: fast deserialization via code generation</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=CoDeSe:_fast_deserialization_via_code_generation&amp;diff=12217"/>
		<updated>2022-01-19T05:04:46Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=CoDeSe: fast deserialization via code generation |authors=Milos Gligoric, Darko Marinov, Sam Kamin |url=https://dl.acm.org/doi/abs/10.1145/2001420.2001456 |jo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=CoDeSe: fast deserialization via code generation&lt;br /&gt;
|authors=Milos Gligoric, Darko Marinov, Sam Kamin&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001456&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001456&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Template:Summary&amp;diff=12216</id>
		<title>Template:Summary</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Template:Summary&amp;diff=12216"/>
		<updated>2022-01-18T19:27:25Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This is the 'Summary' template.&lt;br /&gt;
It should be called in the following format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Summary&lt;br /&gt;
|authors=&lt;br /&gt;
|journal=&lt;br /&gt;
|journal_volume=&lt;br /&gt;
|url=&lt;br /&gt;
|pub_date=&lt;br /&gt;
|issn=&lt;br /&gt;
|doi=&lt;br /&gt;
|arxiv=&lt;br /&gt;
|subject=&lt;br /&gt;
|tags=&lt;br /&gt;
|summary=&lt;br /&gt;
|relevance=&lt;br /&gt;
|pub_open_access=&lt;br /&gt;
|wikidata=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit the page to see the template text.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:Summary]][[title::{{PAGENAME}}| ]][[type::article| ]]&lt;br /&gt;
&amp;lt;!-- COIN --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;Z3988&amp;quot; title=&amp;quot;ctx_ver=Z39.88-2004&amp;amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:journal&amp;amp;amp;rfr_id=info:sid/acawiki.org:summary&amp;amp;amp;rft.genre=article&amp;amp;amp;rft_id=info:doi/{{{doi}}}&amp;amp;amp;rft.atitle={{urlencode:{{#if:{{{title|}}}|{{{title}}}|{{PAGENAME}}}}}}&amp;amp;amp;rft.jtitle={{urlencode:{{{journal}}}}}&amp;amp;amp;rft.date={{urlencode:{{{pub_date}}}}}{{#arraymap:{{{authors|}}}|,|xxx|&amp;amp;amp;rft.au={{urlencode:xxx}}| }}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; __NOFACTBOX__ __NOTOC__ '''Citation:''' ''{{#arraymap:{{{authors|}}}|,|xxx|[[Author::xxx]]|,&amp;amp;nbsp; }} {{#if:{{{pub_date|}}}| ([[Date::{{{pub_date|}}}]]) | }} {{PAGENAME}}. {{#if:{{{journal|}}}|&lt;br /&gt;
[{{fullurl:Special:BrowseData/Summary|Journal={{anchorencode:{{{journal|}}}}}}} {{{journal|}}}] [[Journal::{{{journal|}}}| ]] {{#if:{{{journal_volume|}}}| (Volume [[Volume::{{{journal_volume|}}}]]) | }} ({{#ask:[[Journal::{{{journal|}}}]]| rsstitle={{{journal|}}} | rssdescription=All summaries from {{{journal|}}} | format=rss }})&lt;br /&gt;
| }}''&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{doi|}}}|&amp;lt;b&amp;gt;DOI (original publisher):&amp;lt;/b&amp;gt; [http://dx.doi.org/{{{doi|}}} {{{doi|}}}] [[DOI::{{{doi|}}}| ]]&amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{arxiv|}}}|&amp;lt;b&amp;gt;arXiv (preprint):&amp;lt;/b&amp;gt; [http://arxiv.org/{{{arxiv|}}} arXiv:{{{arxiv|}}}]&amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{doi|}}}|&amp;lt;b&amp;gt;Semantic Scholar (metadata)&amp;lt;/b&amp;gt;: [https://api.semanticscholar.org/{{{doi|}}} {{{doi|}}}]&amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{doi|}}}|&amp;lt;b&amp;gt;Sci-Hub (fulltext)&amp;lt;/b&amp;gt;: [https://sci-hub.se/{{{doi}}} {{{doi}}}]&amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;b&amp;gt;Internet Archive Scholar (search for fulltext)&amp;lt;/b&amp;gt;: [https://scholar.archive.org/search?q={{urlencode:{{PAGENAME}}}} {{PAGENAME}}]&amp;lt;br/&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{wikidata|}}}|&amp;lt;b&amp;gt;Wikidata (metadata):&amp;lt;/b&amp;gt; [https://www.wikidata.org/wiki/{{{wikidata|}}} {{{wikidata|}}}] [[Wikidata::{{{wikidata|}}}| ]]&amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;{{#if:{{{issn|}}}|'''issn:''' [[ISSN::{{{issn|}}}| ]]&amp;lt;br/&amp;gt; | }} {{#if:{{{url|}}}| '''Download:''' {{#arraymap:{{{url}}}|,|xxx|[[URL::xxx]]|,&amp;amp;nbsp; }} &amp;lt;br/&amp;gt; | }}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;'''Tagged:''' {{#if:{{{subject|}}}| [{{fullurl:Special:BrowseData/Summary|Subject={{anchorencode:{{{subject|}}}}}}} {{{subject|}}}] [[Subject::{{{subject|}}}| ]]&lt;br /&gt;
({{#ask:[[Subject::{{{subject|}}}]][[Category:Summary]]| rsstitle={{{subject|}}} | rssdescription=All summaries with this subject {{{subject|}}} | format=rss }})&lt;br /&gt;
| }} {{#if:{{{tags|}}}|&lt;br /&gt;
{{#arraymap:{{{tags|}}}|,|xxx|[{{fullurl:Special:BrowseData/Summary|Tag={{anchorencode:xxx}}}} xxx] [[Tag::xxx| ]]({{#ask:[[Tag::xxx]][[Category:Summary]]| rsstitle=xxx | rssdescription=All summaries tagged with xxx | format=rss }})|,&amp;amp;nbsp; }}&lt;br /&gt;
 | }}&lt;br /&gt;
{{#if:{{{summary|}}}|&lt;br /&gt;
= Summary =&lt;br /&gt;
{{{summary|}}}&lt;br /&gt;
| }} &lt;br /&gt;
{{#if:{{{relevance|}}}|&lt;br /&gt;
== Theoretical and Practical Relevance ==&lt;br /&gt;
{{{relevance|}}}&lt;br /&gt;
| }} &lt;br /&gt;
{{#if:{{{pub_open_access|}}}|&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
[[Published in an Open Access journal::{{{pub_open_access|}}}| ]]&lt;br /&gt;
{{{{{pub_open_access|}}} Published in an Open Access journal}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| }} &amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12194</id>
		<title>Compilers reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12194"/>
		<updated>2021-10-26T18:42:33Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Static Analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Core ==&lt;br /&gt;
&lt;br /&gt;
* [[Compilers: Principles, Techniques, and Tools]] ([https://www.worldcat.org/title/compilers-principles-techniques-and-tools/oclc/1022369647 WorldCat])&lt;br /&gt;
* [[A data locality optimizing algorithm]]&lt;br /&gt;
* [[Parameterized object sensitivity for points-to analysis for Java]] (needs work)&lt;br /&gt;
* [[Code Generation Schema for Modulo Scheduled Loops]]&lt;br /&gt;
&lt;br /&gt;
== Internal Organization ==&lt;br /&gt;
* [[An Overview of the PL.8 Compiler]]&lt;br /&gt;
* [[LLVM: A Compilation Framework for Lifelong Program Analysis &amp;amp; Transformation]]&lt;br /&gt;
&lt;br /&gt;
== Dataflow Analysis ==&lt;br /&gt;
* [[Global Data Flow Analysis and Iterative Algorithms]]&lt;br /&gt;
* [[Engineering a Compiler]] ([https://www.worldcat.org/title/engineering-a-compiler/oclc/1153004203 WorldCat])&lt;br /&gt;
&lt;br /&gt;
== Single Static Assignment ==&lt;br /&gt;
* [[Efficiently Computing Static Single Assignment Form and the Control Dependence Graph]]&lt;br /&gt;
&lt;br /&gt;
== Interprocedural Analysis ==&lt;br /&gt;
* [[Program Analysis via Graph Reachability]]&lt;br /&gt;
&lt;br /&gt;
== Pointer analysis ==&lt;br /&gt;
* [[The Ant and the Grasshopper: Fast and Accurate Pointer Analysis for Millions of Lines of Code]]&lt;br /&gt;
&lt;br /&gt;
== Vectorization ==&lt;br /&gt;
* [[Exploiting Superword Level Parallelism with Multimedia Instruction Sets]]&lt;br /&gt;
&lt;br /&gt;
== Program Synthesis ==&lt;br /&gt;
* [[A Fast Fourier Transform Compiler]]&lt;br /&gt;
* [[A Comparison of Empirical and Model-Driven Optimization]]&lt;br /&gt;
&lt;br /&gt;
== Dynamic Analysis ==&lt;br /&gt;
* [[Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation]]&lt;br /&gt;
* [[Trace-based Just-in-Time Type Specialization for Dynamic Languages]]&lt;br /&gt;
&lt;br /&gt;
== Native Code Generation ==&lt;br /&gt;
* [[Improvements to Graph Coloring Register Allocation]]&lt;br /&gt;
* [[Automatic Generation of Peephole Superoptimizers]]&lt;br /&gt;
&lt;br /&gt;
== Correctness ==&lt;br /&gt;
* [[Automatic Predicate Abstraction of C Programs]]&lt;br /&gt;
* [[Saturn: A Scalable Framework for Error Detection Using Boolean Satisfiability]]&lt;br /&gt;
* [[ABCD: Eliminating Array Bounds Checks on Demand]]&lt;br /&gt;
&lt;br /&gt;
== Static Analysis ==&lt;br /&gt;
* [[Lessons from Building Static Analysis Tools at Google]]&lt;br /&gt;
* [[A few billion lines of code later: using static analysis to find bugs in the real world]]&lt;br /&gt;
* [[Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale]]&lt;br /&gt;
&lt;br /&gt;
== Related fields ==&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12193</id>
		<title>Compilers reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Compilers_reading_list&amp;diff=12193"/>
		<updated>2021-10-26T18:42:18Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Core ==&lt;br /&gt;
&lt;br /&gt;
* [[Compilers: Principles, Techniques, and Tools]] ([https://www.worldcat.org/title/compilers-principles-techniques-and-tools/oclc/1022369647 WorldCat])&lt;br /&gt;
* [[A data locality optimizing algorithm]]&lt;br /&gt;
* [[Parameterized object sensitivity for points-to analysis for Java]] (needs work)&lt;br /&gt;
* [[Code Generation Schema for Modulo Scheduled Loops]]&lt;br /&gt;
&lt;br /&gt;
== Internal Organization ==&lt;br /&gt;
* [[An Overview of the PL.8 Compiler]]&lt;br /&gt;
* [[LLVM: A Compilation Framework for Lifelong Program Analysis &amp;amp; Transformation]]&lt;br /&gt;
&lt;br /&gt;
== Dataflow Analysis ==&lt;br /&gt;
* [[Global Data Flow Analysis and Iterative Algorithms]]&lt;br /&gt;
* [[Engineering a Compiler]] ([https://www.worldcat.org/title/engineering-a-compiler/oclc/1153004203 WorldCat])&lt;br /&gt;
&lt;br /&gt;
== Single Static Assignment ==&lt;br /&gt;
* [[Efficiently Computing Static Single Assignment Form and the Control Dependence Graph]]&lt;br /&gt;
&lt;br /&gt;
== Interprocedural Analysis ==&lt;br /&gt;
* [[Program Analysis via Graph Reachability]]&lt;br /&gt;
&lt;br /&gt;
== Pointer analysis ==&lt;br /&gt;
* [[The Ant and the Grasshopper: Fast and Accurate Pointer Analysis for Millions of Lines of Code]]&lt;br /&gt;
&lt;br /&gt;
== Vectorization ==&lt;br /&gt;
* [[Exploiting Superword Level Parallelism with Multimedia Instruction Sets]]&lt;br /&gt;
&lt;br /&gt;
== Program Synthesis ==&lt;br /&gt;
* [[A Fast Fourier Transform Compiler]]&lt;br /&gt;
* [[A Comparison of Empirical and Model-Driven Optimization]]&lt;br /&gt;
&lt;br /&gt;
== Dynamic Analysis ==&lt;br /&gt;
* [[Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation]]&lt;br /&gt;
* [[Trace-based Just-in-Time Type Specialization for Dynamic Languages]]&lt;br /&gt;
&lt;br /&gt;
== Native Code Generation ==&lt;br /&gt;
* [[Improvements to Graph Coloring Register Allocation]]&lt;br /&gt;
* [[Automatic Generation of Peephole Superoptimizers]]&lt;br /&gt;
&lt;br /&gt;
== Correctness ==&lt;br /&gt;
* [[Automatic Predicate Abstraction of C Programs]]&lt;br /&gt;
* [[Saturn: A Scalable Framework for Error Detection Using Boolean Satisfiability]]&lt;br /&gt;
* [[ABCD: Eliminating Array Bounds Checks on Demand]]&lt;br /&gt;
&lt;br /&gt;
== Static Analysis ==&lt;br /&gt;
* [Lessons from Building Static Analysis Tools at Google]&lt;br /&gt;
* [A few billion lines of code later: using static analysis to find bugs in the real world]&lt;br /&gt;
* [Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale]&lt;br /&gt;
&lt;br /&gt;
== Related fields ==&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12192</id>
		<title>Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12192"/>
		<updated>2021-10-26T18:39:33Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale&lt;br /&gt;
|authors=Yechan Bae, Youngsuk Kim, Ammar Askar, Jungwon Lim, Taesoo Kim&lt;br /&gt;
|url=https://dl.acm.org/doi/10.1145/3477132.3483570&lt;br /&gt;
|tags=programming languages&lt;br /&gt;
|journal=SOSP '21: Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles&lt;br /&gt;
|pub_date=10/26/2021&lt;br /&gt;
|doi=10.1145/3477132.3483570&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
|summary=&lt;br /&gt;
Rust has a safe and unsafe mode; the former guarantees memory safety but the latter gives the programmer more control over the system, often needed for high-performance. For example, the standard library uses unsafe code internally. The authors build Rudra, a static analyzer for unsafe Rust. They find a large amount of bugs in real-world unsafe Rust code.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* There is a tradeoff between safety and control. Giving programmer low-level control makes it harder for compiler to check safety.&lt;br /&gt;
* [https://www.rust-lang.org/ Rust language] balances this with safe and unsafe rust.&lt;br /&gt;
** In unsafe rust, programmer is responsible for memory safety, but has full control.&lt;br /&gt;
** Safety of a program depends on safety of all unsafe code.&lt;br /&gt;
** Unsafe code either exposed directly in API or wrapped in a safe API. Bugs in the wrapper are serious problems, because user can cause memory safety bug without typing &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Solution =&lt;br /&gt;
* Rudra: Static analyzer for unsafe Rust.&lt;br /&gt;
** Checks for these bugs:&lt;br /&gt;
*** Panic-unsafety: incorrect resource deallocation in compiler-inserted invisible code paths.&lt;br /&gt;
*** Higher-order invariant bug: unchecked assumptions on user-provided higher-order values. E.g., assuming comparator is reflexive, anti-symmetric, and transitive.&lt;br /&gt;
*** Send/sync variance bug: incorrect condition for manual thread safety assertions.&lt;br /&gt;
** Challenges:&lt;br /&gt;
*** Incomplete definitions (e.g. higher-order invariants are rarely specified).&lt;br /&gt;
*** Some information is not available in later compilation stages (e.g. types get dropped after checking).&lt;br /&gt;
** Use high-level IR to find unsafe blocks and mid-level IR to find callgraph and other things.&lt;br /&gt;
** Unsafe-dataflow checker checks panic-unsafety and higher-order invariant bugs; send/sync variance bug requires its own checker.&lt;br /&gt;
&lt;br /&gt;
= Evaluation =&lt;br /&gt;
* Run on all Rust crates.&lt;br /&gt;
* 2 bugs in Rust standard library.&lt;br /&gt;
* 112 Rust security advisories.&lt;br /&gt;
* 76 CVEs.&lt;br /&gt;
* Compare with dynamic fuzzers, Fuzzers and Miri, and other static analyzers, UAFChecker.&lt;br /&gt;
** None found bugs that Rudra found.&lt;br /&gt;
** Miri found bugs that Rudra didn't find.&lt;br /&gt;
&lt;br /&gt;
= Limitations&lt;br /&gt;
* Rudra is not exhaustive.&lt;br /&gt;
* Rudra has a high false-positive rate (50% for high precision, 80% for high scalability).&lt;br /&gt;
* Rudra finds Bugs at the definition site: pro and con.&lt;br /&gt;
** Is the buggy code-path in API definition actually invoked by callers?&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [https://www.youtube.com/watch?v=7pI9GfYEu-s short video]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Hfl6EQquUU0 long video]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12191</id>
		<title>Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12191"/>
		<updated>2021-10-26T18:32:30Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale&lt;br /&gt;
|authors=Yechan Bae, Youngsuk Kim, Ammar Askar, Jungwon Lim, Taesoo Kim&lt;br /&gt;
|url=https://dl.acm.org/doi/10.1145/3477132.3483570&lt;br /&gt;
|tags=programming languages&lt;br /&gt;
|journal=SOSP '21: Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles&lt;br /&gt;
|pub_date=10/26/2021&lt;br /&gt;
|doi=10.1145/3477132.3483570&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
|summary=&lt;br /&gt;
&lt;br /&gt;
* There is a tradeoff between safety and control. Giving programmer low-level control makes it harder for compiler to check safety.&lt;br /&gt;
* [https://www.rust-lang.org/ Rust language] balances this with safe and unsafe rust.&lt;br /&gt;
** In unsafe rust, programmer is responsible for memory safety, but has full control.&lt;br /&gt;
** Safety of a program depends on safety of all unsafe code.&lt;br /&gt;
** Unsafe code either exposed directly in API or wrapped in a safe API. Bugs in the wrapper are serious problems, because they break the trust barrier between Rust packages, and user can cause memory safety bug without typing &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Rudra: Static analyzer for unsafe Rust.&lt;br /&gt;
** Checks for these bugs:&lt;br /&gt;
*** Panic-unsafety: incorrect resource deallocation in compiler-inserted invisible code paths.&lt;br /&gt;
*** Higher-order invariant bug: unchecked assumptions on user-provided higher-order values. E.g., assuming comparator is reflexive, anti-symmetric, and transitive.&lt;br /&gt;
*** Send/sync variance bug: incorrect condition for manual thread safety assertions.&lt;br /&gt;
** Challenges:&lt;br /&gt;
*** Incomplete definitions (e.g. higher-order invariants are rarely specified).&lt;br /&gt;
*** Some information is not available in later compilation stages (e.g. types get dropped after checking).&lt;br /&gt;
** Use high-level IR to find unsafe blocks and mid-level IR to find callgraph and other things.&lt;br /&gt;
** Unsafe-dataflow checker checks panic-unsafety and higher-order invariant bugs; send/sync variance bug requires its own checker.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
# See also&lt;br /&gt;
* [https://www.youtube.com/watch?v=7pI9GfYEu-s short video]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Hfl6EQquUU0 long video]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12190</id>
		<title>Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Rudra:_Finding_Memory_Safety_Bugs_in_Rust_at_the_Ecosystem_Scale&amp;diff=12190"/>
		<updated>2021-10-26T18:14:13Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale |authors=Yechan Bae, Youngsuk Kim, Ammar Askar, Jungwon Lim, Taesoo Kim |url=https://dl.acm.o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale&lt;br /&gt;
|authors=Yechan Bae, Youngsuk Kim, Ammar Askar, Jungwon Lim, Taesoo Kim&lt;br /&gt;
|url=https://dl.acm.org/doi/10.1145/3477132.3483570&lt;br /&gt;
|tags=programming languages&lt;br /&gt;
|journal=SOSP '21: Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles&lt;br /&gt;
|pub_date=10/26/2021&lt;br /&gt;
|doi=10.1145/3477132.3483570&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12187</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12187"/>
		<updated>2021-10-17T18:17:03Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Solution: IncPy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
IncPy is a modified Python interpreter that automatically memoizes functions. It invalidates a function's cache if its source code changes, and invalidates an entry if a file it depends on changes.&lt;br /&gt;
&lt;br /&gt;
* Benefits:&lt;br /&gt;
** Less code (no de/serialization or cache testing)&lt;br /&gt;
** Automated data management&lt;br /&gt;
** Faster iteration times&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Goals:&lt;br /&gt;
** No code changes (change interpreter instead)&lt;br /&gt;
** Low run-time overhead&lt;br /&gt;
** Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
* Each entry contains: function name, arguments, return, stdout, stderr, global vars dependencies, files read, files written, transitive code dependencies (name and bytecode).&lt;br /&gt;
* Modify interpreter's file IO calls to record file accesses to all functions on call stack.&lt;br /&gt;
* Each entry is a file named with a hash of the inputs. This has to be written atomically, so multiple threads/processes can share the same cache.&lt;br /&gt;
* Entries are written eagerly; if interpreter crashes, still have entries.&lt;br /&gt;
* Which calls to memoize: Only pure, time-consuming calls.&lt;br /&gt;
** When an impurity is detected (mutation of {closure, global, or argument}, source of non-determinism {PRNG, stdin, time}) all functions on call stack.&lt;br /&gt;
*** Functions that are pure on some paths but impure on others can still be memoized for those pure paths, on which we have IncPy has dynamically proven purity.&lt;br /&gt;
*** File IO does not count as impurity since these are captured in the entry.&lt;br /&gt;
** Heuristic: If the call is shorter than 1 second, overhead of memoization (disk read/write) is often not worthwhile. Otherwise, memoize.&lt;br /&gt;
*** Heuristic doesn't work if returned data is very large.&lt;br /&gt;
* Reachability analysis determines if global is mutated (impure) or if global is read (add dependency).&lt;br /&gt;
** Each object has two more fields: global name and func start.&lt;br /&gt;
*** Global name is the global this object is reachable from.&lt;br /&gt;
*** Func start is the time the variable was created.&lt;br /&gt;
*** If there is a read or write to a variable whose func start predates the current function, it must be marked as a dependency or impurity, respectively.&lt;br /&gt;
&lt;br /&gt;
== Generalizability ==&lt;br /&gt;
* For dynamic languages, interpose the interpreter's handlers for function calls, value accesses, and file I/O (as does IncPy)&lt;br /&gt;
* For static languages, source-to-source translator or binary rewriter that inserts callback.&lt;br /&gt;
** Could augment with static purity, escape, and callgraph analysis.&lt;br /&gt;
* For whole workflows, use ptrace to identify file read/writes.&lt;br /&gt;
* Perhaps could be used to accelerate regression tests.&lt;br /&gt;
&lt;br /&gt;
= Related Work =&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Make_(software) Make], but Make requires explicit dependency information and only works between processes.&lt;br /&gt;
* Self-adjusting computation, but IncPy is more general.&lt;br /&gt;
* JIT, although it is focused on program micro-optimizations, not memoization, and these don't outlive the process.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12186</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12186"/>
		<updated>2021-10-17T17:37:02Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
IncPy is a modified Python interpreter that automatically memoizes functions. It invalidates a function's cache if its source code changes, and invalidates an entry if a file it depends on changes.&lt;br /&gt;
&lt;br /&gt;
* Benefits:&lt;br /&gt;
** Less code (no de/serialization or cache testing)&lt;br /&gt;
** Automated data management&lt;br /&gt;
** Faster iteration times&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Goals:&lt;br /&gt;
** No code changes (change interpreter instead)&lt;br /&gt;
** Low run-time overhead&lt;br /&gt;
** Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
* Each entry contains: function name, arguments, return, stdout, stderr, global vars dependencies, files read, files written, transitive code dependencies (name and bytecode).&lt;br /&gt;
* Modify interpreter's file IO calls to record file accesses to all functions on call stack.&lt;br /&gt;
* Each entry is a file named with a hash of the inputs. This has to be written atomically, so multiple threads/processes can share the same cache.&lt;br /&gt;
* Entries are written eagerly; if interpreter crashes, still have entries.&lt;br /&gt;
* Which calls to memoize: Only pure, time-consuming calls.&lt;br /&gt;
** When an impurity is detected (mutation of {closure, global, or argument}, source of non-determinism {PRNG, stdin, time}) all functions on call stack.&lt;br /&gt;
*** Functions that are pure on some paths but impure on others can still be memoized for those pure paths, on which we have IncPy has dynamically proven purity.&lt;br /&gt;
*** File IO does not count as impurity since these are captured in the entry.&lt;br /&gt;
** Heuristic: If the call is shorter than 1 second, overhead of memoization (disk read/write) is often not worthwhile. Otherwise, memoize.&lt;br /&gt;
*** Heuristic doesn't work if returned data is very large.&lt;br /&gt;
* Reachability analysis determines if global is mutated (impure) or if global is read (add dependency).&lt;br /&gt;
** Each object has two more fields: global name and func start.&lt;br /&gt;
*** Global name is the global this object is reachable from.&lt;br /&gt;
*** Func start is the time the variable was created.&lt;br /&gt;
*** If there is a read or write to a variable whose func start predates the current function, it must be marked as a dependency or impurity, respectively.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12185</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12185"/>
		<updated>2021-10-17T07:00:59Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
IncPy is a modified Python interpreter that automatically memoizes functions. It invalidates a function's cache if its source code changes, and invalidates an entry if a file it depends on changes.&lt;br /&gt;
&lt;br /&gt;
* Benefits:&lt;br /&gt;
** Less code (no de/serialization or cache testing)&lt;br /&gt;
** Automated data management&lt;br /&gt;
** Faster iteration times&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Goals:&lt;br /&gt;
** No code changes (change interpreter instead)&lt;br /&gt;
** Low run-time overhead&lt;br /&gt;
** Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
* Each entry contains: function name, arguments, return, stdout, stderr, global vars dependencies, files read, files written, transitive code dependencies (name and bytecode).&lt;br /&gt;
* Modify interpreter's file IO calls to record file accesses to all functions on call stack.&lt;br /&gt;
* Each entry is a file named with a hash of the inputs. This has to be written atomically, so multiple threads/processes can share the same cache.&lt;br /&gt;
* Entries are written eagerly; if interpreter crashes, still have entries.&lt;br /&gt;
* Which calls to memoize: Only pure, time-consuming calls.&lt;br /&gt;
** When an impurity is detected (mutation of {closure, global, or argument}, source of non-determinism {PRNG, stdin, time}) all functions on call stack.&lt;br /&gt;
*** Functions that are pure on some paths but impure on others can still be memoized for those pure paths, on which we have IncPy has dynamically proven purity.&lt;br /&gt;
*** File IO does not count as impurity since these are captured in the entry.&lt;br /&gt;
** Heuristic: If the call is shorter than 1 second, overhead of memoization (disk read/write) is often not worthwhile. Otherwise, memoize.&lt;br /&gt;
*** Heuristic doesn't work if returned data is very large.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12184</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12184"/>
		<updated>2021-10-17T06:40:44Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Solution: IncPy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
IncPy is a modified Python interpreter that automatically memoizes functions. It invalidates a function's cache if its source code changes, and invalidates an entry if a file it depends on changes.&lt;br /&gt;
&lt;br /&gt;
* Benefits:&lt;br /&gt;
** Less code (no de/serialization or cache testing)&lt;br /&gt;
** Automated data management&lt;br /&gt;
** Faster iteration times&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Goals:&lt;br /&gt;
** No code changes (change interpreter instead)&lt;br /&gt;
** Low run-time overhead&lt;br /&gt;
** Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
* Each entry contains: function name, arguments, return, stdout, stderr, global vars dependencies, files read, files written, transitive code dependencies (name and bytecode).&lt;br /&gt;
* Modify interpreter's file IO calls to record file accesses in the entry.&lt;br /&gt;
* Each entry is a file named with a hash of the inputs. This has to be written atomically, so multiple threads/processes can share the same cache.&lt;br /&gt;
* Entries are written eagerly; if interpreter crashes, still have entries.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12183</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12183"/>
		<updated>2021-10-17T05:42:26Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Solution: IncPy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
IncPy is a modified Python interpreter that automatically memoizes functions. It invalidates a function's cache if its source code changes, and invalidates an entry if a file it depends on changes.&lt;br /&gt;
&lt;br /&gt;
* Benefits:&lt;br /&gt;
** Less code (no de/serialization or cache testing)&lt;br /&gt;
** Automated data management&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Goals:&lt;br /&gt;
** No code changes (change interpreter instead)&lt;br /&gt;
** Low run-time overhead&lt;br /&gt;
** Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
* Each entry contains: function name, arguments, return, stdout, stderr, global vars dependencies, files read, files written, transitive code dependencies (name and bytecode).&lt;br /&gt;
* Modify interpreter's file IO calls to record file accesses in the entry.&lt;br /&gt;
* Each entry is a file named with a hash of the inputs. This has to be written atomically, so multiple threads/processes can share the same cache.&lt;br /&gt;
* Entries are written eagerly; if interpreter crashes, still have entries.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12182</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12182"/>
		<updated>2021-10-17T05:26:41Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= Solution: IncPy =&lt;br /&gt;
* [https://github.com/pajju/IncPy Source code]&lt;br /&gt;
* Python as target language&lt;br /&gt;
* No code changes (change interpreter instead)&lt;br /&gt;
* Low run-time overhead&lt;br /&gt;
* Compatible with 3rd party libraries.&lt;br /&gt;
&lt;br /&gt;
= Future Work =&lt;br /&gt;
* Provenance browsing &lt;br /&gt;
* Network‐aware/database‐aware caching &lt;br /&gt;
* Lightweight programmer annotations &lt;br /&gt;
* Finer‐grained tracking within functions&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12181</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12181"/>
		<updated>2021-10-11T21:35:21Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Problem =&lt;br /&gt;
* Programmers across a wide range of disciplines write scripts to transform, process, or analyze data in Python, their scripts are divided into stages with intermediate results, and they develop iteratively.&lt;br /&gt;
* Data-analysis is often ad hoc and exploratory.&lt;br /&gt;
* Data-analysts have a wide range of backgrounds; not strictly CS/engineering.&lt;br /&gt;
* They primarily use Python, Perl, or Ruby.&lt;br /&gt;
* Saving intermediate outputs by-hand is time-consuming and error-prone. Users forget to invalidate datasets.&lt;br /&gt;
* How to speed up their programs by saving intermediate outputs without being stale or confusing?&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [https://www.usenix.org/legacy/event/tapp10/tech/slides/guo.pdf Usenix presentation]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12180</id>
		<title>Using automatic persistent memoization to facilitate data analysis scripting</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Using_automatic_persistent_memoization_to_facilitate_data_analysis_scripting&amp;diff=12180"/>
		<updated>2021-10-11T20:41:13Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Using automatic persistent memoization to facilitate data analysis scripting |authors=Philip J Guo, Dawson Engler |url=https://dl.acm.org/doi/abs/10.1145/2001...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Using automatic persistent memoization to facilitate data analysis scripting&lt;br /&gt;
|authors=Philip J Guo, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/2001420.2001455&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis&lt;br /&gt;
|pub_date=2011/07&lt;br /&gt;
|doi=10.1145/2001420.2001455&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12179</id>
		<title>A few billion lines of code later: using static analysis to find bugs in the real world</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12179"/>
		<updated>2021-10-11T20:13:21Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=A few billion lines of code later: using static analysis to find bugs in the real world&lt;br /&gt;
|authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/1646353.1646374&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=Authors built a static bug-finding tool, Coverity, and apply it in practice.&lt;br /&gt;
|journal=Communications of the ACM, Volume 53, Issue 2&lt;br /&gt;
|pub_date=2010/02&lt;br /&gt;
|doi=10.1145/1646353.1646374&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Coverity has false-positives (coverity flags code that is not erroneous) and false-negatives (some errors are not flagged).&lt;br /&gt;
* &amp;quot;Circa 2000, unsoundness [having false-negatives] was controversial in the research community, though it has since become almost a de facto tool bias for commercial products and many research projects.&amp;quot;&lt;br /&gt;
* Sales strategy: Send an engineer and salesperson to the client, run the tool on their codebase, the engineer helps with &amp;quot;unique&amp;quot; client configurations and helps educate the client. This is a tough hurdle for the system, because no time to cherry-pick results and massage configuration.&lt;br /&gt;
* Educating users is difficult:&lt;br /&gt;
** Initially the tool used the output of Make to learn how to compile source-code, and where the source-code was.&lt;br /&gt;
*** Clients have bespoke build systems and might not even know about Make.&lt;br /&gt;
**** Later on, the tool intercepted syscalls to learn the compiler invocation and context. But this needs the commandline.&lt;br /&gt;
***** Client developers don't necessarily build from the commandline.&lt;br /&gt;
* Clients are often risk-averse to change, so you have to work around broken software instead of fixing it.&lt;br /&gt;
* Compilers deviate from language standard intentionally and otherwise.&lt;br /&gt;
* Often clients want to buy their tool, but restrict their source code.&lt;br /&gt;
* Some clients don't believe that bugs the tool finds are real bugs. They often depend on non-standard behavior.&lt;br /&gt;
** Some clients try to argue with you, often emotionally. It's best not to argue; try to make a meeting with their peers.&lt;br /&gt;
* Upgrading tool to catch more bugs negatively effects metrics for managers.&lt;br /&gt;
* Determinism is more important to users than finding more bugs.&lt;br /&gt;
* Deep analysis can catch bugs, but those are hard to explain to users (e.g. races).&lt;br /&gt;
* Checking for trivial bugs is still useful. Given enough code, they will occur.&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12178</id>
		<title>A few billion lines of code later: using static analysis to find bugs in the real world</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12178"/>
		<updated>2021-10-11T18:12:31Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=A few billion lines of code later: using static analysis to find bugs in the real world&lt;br /&gt;
|authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/1646353.1646374&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=Authors built a static bug-finding tool, Coverity, and apply it in practice.&lt;br /&gt;
|journal=Communications of the ACM, Volume 53, Issue 2&lt;br /&gt;
|pub_date=2010/02&lt;br /&gt;
|doi=10.1145/1646353.1646374&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Coverity has false-positives (coverity flags code that is not erroneous) and false-negatives (some errors are not flagged).&lt;br /&gt;
* &amp;quot;Circa 2000, unsoundness [having false-negatives] was controversial in the research community, though it has since become almost a de facto tool bias for commercial products and many research projects.&amp;quot;&lt;br /&gt;
* Sales strategy: Send an engineer and salesperson to the client, run the tool on their codebase, the engineer helps with &amp;quot;unique&amp;quot; client configurations and helps educate the client. This is a tough hurdle for the system, because no time to cherry-pick results and massage configuration.&lt;br /&gt;
* Educating users is difficult:&lt;br /&gt;
** Initially the tool used the output of Make to learn how to compile source-code, and where the source-code was.&lt;br /&gt;
*** Clients have bespoke build systems and might not even know about Make.&lt;br /&gt;
**** Later on, the tool intercepted syscalls to learn the compiler invocation and context. But this needs the commandline.&lt;br /&gt;
***** Client developers don't necessarily build from the commandline.&lt;br /&gt;
* Clients are often risk-averse to change, so you have to work around broken software instead of fixing it.&lt;br /&gt;
* Compilers deviate from language standard intentionally and otherwise.&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12173</id>
		<title>A few billion lines of code later: using static analysis to find bugs in the real world</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12173"/>
		<updated>2021-10-09T06:05:52Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=A few billion lines of code later: using static analysis to find bugs in the real world&lt;br /&gt;
|authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/1646353.1646374&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=Authors built a static bug-finding tool, Coverity, and apply it in practice.&lt;br /&gt;
|journal=Communications of the ACM, Volume 53, Issue 2&lt;br /&gt;
|pub_date=2010/02&lt;br /&gt;
|doi=10.1145/1646353.1646374&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Coverity has false-positives (coverity flags code that is not erroneous) and false-negatives (some errors are not flagged).&lt;br /&gt;
* &amp;quot;Circa 2000, unsoundness [having false-negatives] was controversial in the research community, though it has since become almost a de facto tool bias for commercial products and many research projects.&amp;quot;&lt;br /&gt;
* Sales strategy: Send an engineer and salesperson to the client, run the tool on their codebase, the engineer helps with &amp;quot;unique&amp;quot; client configurations and helps educate the client. This is a tough hurdle for the system, because no time to cherry-pick results and massage configuration.&lt;br /&gt;
* Educating users is difficult:&lt;br /&gt;
** Initially the tool used the output of Make to learn how to compile source-code, and where the source-code was.&lt;br /&gt;
*** Clients have bespoke build systems and might not even know about Make.&lt;br /&gt;
**** Later on, the tool intercepted syscalls to learn the compiler invocation and context. But this needs the commandline.&lt;br /&gt;
***** Client developers don't necessarily build from the commandline.&lt;br /&gt;
* Clients are often risk-averse to change, so you have to work around broken software instead of fixing it.&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12168</id>
		<title>A few billion lines of code later: using static analysis to find bugs in the real world</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12168"/>
		<updated>2021-10-09T01:01:58Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=A few billion lines of code later: using static analysis to find bugs in the real world&lt;br /&gt;
|authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/1646353.1646374&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=Authors built a static bug-finding tool, Coverity, and apply it in practice.&lt;br /&gt;
|journal=Communications of the ACM, Volume 53, Issue 2&lt;br /&gt;
|pub_date=2010/02&lt;br /&gt;
|doi=10.1145/1646353.1646374&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Coverity has false-positives (coverity flags code that is not erroneous) and false-negatives (some errors are not flagged).&lt;br /&gt;
* &amp;quot;Circa 2000, unsoundness [having false-negatives] was controversial in the research community, though it has since become almost a de facto tool bias for commercial products and many research projects.&amp;quot;&lt;br /&gt;
* Sales strategy: Send an engineer and salesperson to the client, run the tool on their codebase, the engineer helps with &amp;quot;unique&amp;quot; client configurations and helps educate the client. This is a tough hurdle for the system, because no time to cherry-pick results and massage configuration.&lt;br /&gt;
* Educating users is difficult:&lt;br /&gt;
** Initially the tool used the output of Make to learn how to compile source-code, and where the source-code was.&lt;br /&gt;
*** Clients have bespoke build systems and might not even know about Make.&lt;br /&gt;
**** Later on, the tool intercepted syscalls to learn the compiler invocation and context. But this needs the commandline.&lt;br /&gt;
****** Client developers don't necessarily build from the commandline.&lt;br /&gt;
* Clients are often risk-averse to change, so you have to work around broken software instead of fixing it.&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12167</id>
		<title>A few billion lines of code later: using static analysis to find bugs in the real world</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=A_few_billion_lines_of_code_later:_using_static_analysis_to_find_bugs_in_the_real_world&amp;diff=12167"/>
		<updated>2021-10-08T20:37:55Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=A few billion lines of code later: using static analysis to find bugs in the real world |authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Set...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=A few billion lines of code later: using static analysis to find bugs in the real world&lt;br /&gt;
|authors=Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler&lt;br /&gt;
|url=https://dl.acm.org/doi/abs/10.1145/1646353.1646374&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|summary=Authors built a static bug-finding tool, Coverity, and apply it in practice.&lt;br /&gt;
|journal=Communications of the ACM, Volume 53, Issue 2&lt;br /&gt;
|pub_date=2010/02&lt;br /&gt;
|doi=10.1145/1646353.1646374&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Code_Sharing_Is_Associated_with_Research_Impact_in_Image_Processing&amp;diff=12165</id>
		<title>Code Sharing Is Associated with Research Impact in Image Processing</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Code_Sharing_Is_Associated_with_Research_Impact_in_Image_Processing&amp;diff=12165"/>
		<updated>2021-09-30T19:30:48Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Code Sharing Is Associated with Research Impact in Image Processing&lt;br /&gt;
|authors=Patrick Vandewalle&lt;br /&gt;
|url=10.1109/MCSE.2012.63&lt;br /&gt;
|tags=academic software&lt;br /&gt;
|summary=As the title reads, the author found that code sharing correlates with research impact in their field by sampling papers from mainstream journals in the mid-2000s.&lt;br /&gt;
|journal=Computing in Science &amp;amp; Engineering&lt;br /&gt;
|pub_date=2012/07&lt;br /&gt;
|doi=10.1109/MCSE.2012.63&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
* Most papers in signal processing do not release source code. This makes it hard to reproduce.&lt;br /&gt;
* It is widely agreed upon that this _shouldn't_ be the case (according to the author's), but it is.&lt;br /&gt;
* Academics have little explicit incentive to release their source code.&lt;br /&gt;
* There are implicit incentives: notoriety through downloads, feedback from users, ease of collaboration, usage by other researchers, and '''citations'''.&lt;br /&gt;
* '''Thesis:''' correlation between releasing code and citations.&lt;br /&gt;
** Causality can be determined by a &amp;quot;controlled experiment&amp;quot; which is left as future work.&lt;br /&gt;
* Releasing source code is neither necessary nor sufficient for reproducibility. Open source can be unreproducible if it depends on the system; reproducible work which does not require code or describes it very carefully does not to release code.&lt;br /&gt;
** But they are correlated.&lt;br /&gt;
* See also:&lt;br /&gt;
** Peace research: N.P. Gleditsch and H. Strand, “Posting Your  Data: Will You Be Scooped or Will You Be Famous?” Int’l Studies Perspectives, vol. 4, no. 1, 2003, pp. 89–97.&lt;br /&gt;
** Cancer research: H.A. Piwowar, R.S. Day, and D.B. Fridsma, “Sharing Detailed Research Data Is Associated with Increased Citation Rate,” PLoS ONE, vol. 2, no. 3, 2007, p. e308; [https://www.plosone.org/article/info:doi/10.1371/journal.pone.0000308]&lt;br /&gt;
** Astronomy: E.A. Henneken and A. Accomazzi, “Linking to Data—Effect on Citation Rates in Astronomy,” Proc. Astronomical Data Analysis Software and Systems, Astronomical Soc. of the Pacific, 2011; [https://arxiv.org/pdf/1111.3618v1.pdf]&lt;br /&gt;
** Open access: S. Lawrence, “Free Online Availability Substantially Increases a Paper’s Impact,” Nature, vol. 411, no. 6837, 2001, p. 521; [https://www.nature.com/nature/journal/v411/n6837/full/411521a0.html]&lt;br /&gt;
&lt;br /&gt;
= Methodology =&lt;br /&gt;
== First study ==&lt;br /&gt;
* IEEE Transactions on Image Processing 2004 -- 2006, 645 papers&lt;br /&gt;
* Searched for source by hand.&lt;br /&gt;
** Roughly 10% had source.&lt;br /&gt;
* Use Google Scholar for citation numbers. Web of Science tends to be more selective when counting citations.&lt;br /&gt;
** Long-tail of rarely cited papers, so median is better than mean.&lt;br /&gt;
* Look for difference in median (median citation count no source = 25, with source = 76 in 2004).&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Mann%E2%80%93Whitney_U_test Mann-Whitney U-test] says the difference is statistically significant.&lt;br /&gt;
** The null hypothesis is still rejected even if one removes half of the papers with source code from consideration; result is robust to ignoring some the &amp;quot;superstar&amp;quot; reproducible papers.&lt;br /&gt;
* '''Conclusion:''' Publications with source are more often cited.&lt;br /&gt;
&lt;br /&gt;
== Second study ==&lt;br /&gt;
* Only best-cited papers from 2004 -- 2008, IEEE Transactions on Image Processing 2004 (TIP), IEEE  Transactions  on  Pattern Analysis  and  Machine  Intelligence  (TPAMI),  and IEEE  Transactions  on  Signal  Processing  (TSP)&lt;br /&gt;
* Count those which have source code available.&lt;br /&gt;
** Roughly 90% had source with the exception of TSP, due to its theoretical nature.&lt;br /&gt;
* TIP and TPAMI have a much greater proportion of their best-cited papers with source code than TSP.&lt;br /&gt;
* '''Conclusion:''' Best-cited papers release their source code&lt;br /&gt;
&lt;br /&gt;
= Other considerations =&lt;br /&gt;
* The lifetime of source repo can be cut short if the website host is phased out.&lt;br /&gt;
* Industry research may have problems releasing source; they should still make studies reproducible internally.&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Developers_Perception_of_Peer_Code_Review_in_Research_Software_Development&amp;diff=12164</id>
		<title>Developers Perception of Peer Code Review in Research Software Development</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Developers_Perception_of_Peer_Code_Review_in_Research_Software_Development&amp;diff=12164"/>
		<updated>2021-09-30T19:16:57Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Developers Perception of Peer Code Review in Research Software Development&lt;br /&gt;
|authors=Nasir U. Eisty, Jeffrey C. Carver&lt;br /&gt;
|url=https://arxiv.org/abs/2109.10971&lt;br /&gt;
|tags=software engineering&lt;br /&gt;
|journal=arXiv&lt;br /&gt;
|pub_date=2021/09/22&lt;br /&gt;
|arxiv=2109.10971&lt;br /&gt;
|subject=Computer Science&lt;br /&gt;
}}&lt;br /&gt;
= Background =&lt;br /&gt;
* Software is important for research.&lt;br /&gt;
* Research software engineers should follow standard software practices.&lt;br /&gt;
* However, these practices differ from industry.&lt;br /&gt;
** Risks due to exploration.&lt;br /&gt;
** Constantly changing requirements.&lt;br /&gt;
** Complex communication or I/O patterns.&lt;br /&gt;
** Need highly-specialized knowledge&lt;br /&gt;
** Larger scale of single executions&lt;br /&gt;
** Complex software due to modeling complex phenomena&lt;br /&gt;
** Different goals, knowledge, skills than industry devs&lt;br /&gt;
* Tests are hard because no oracle, large number of parameters, and legacy code.&lt;br /&gt;
== Solution ==&lt;br /&gt;
* On the other hand, peer code review could work&lt;br /&gt;
** Numerous benefits&lt;br /&gt;
*** Reviewers suggest comments that improve code quality&lt;br /&gt;
*** Authors more likely to make code readable&lt;br /&gt;
*** Spreads out knowledge of the change&lt;br /&gt;
*** Community building&lt;br /&gt;
** Google developers expect four key themes from peer code review: education, maintaining norms, gatekeeping, and accident prevention.&lt;br /&gt;
** Microsoft dev spends 15--25% of time reviewing.&lt;br /&gt;
** 25% of comments on improve core functionality&lt;br /&gt;
= Study =&lt;br /&gt;
* RQ1: How do research software developers perform peer code review?&lt;br /&gt;
* RQ2: What effect does peer code review have on research software?&lt;br /&gt;
* RQ3: What difficulties do research software developers face with peer code review?&lt;br /&gt;
* RQ4: What improvements to the peer code review process do research software developers need?&lt;br /&gt;
= Methodology =&lt;br /&gt;
== Survey Design ==&lt;br /&gt;
* Questions from prior literature on peer code review.&lt;br /&gt;
== Pilot Interviews ==&lt;br /&gt;
* Pilot interviews suggested ways of revising the questions, and develop multiple-choice answers.&lt;br /&gt;
* Interview audience: 13 from NCSA, 9 from Einstein Toolkit Workshop.&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Convenience_sampling &amp;quot;Convenience sampling&amp;quot;]&lt;br /&gt;
== Survey ==&lt;br /&gt;
* Solicitation:&lt;br /&gt;
** Emailed mailing listsprojects associated with interviewers&lt;br /&gt;
** [https://se4science.github.io/SE-CODESE17/ 2017 International Workshop on Software Engineering for High Performance Computing in Computational and Data-Enabled Science and Engineering],&lt;br /&gt;
** Emailed mailing list for UK RSEs,&lt;br /&gt;
** Pinged RSE Slack channel,&lt;br /&gt;
** Advertised in [http://bssw.io Better Scientific Software] newsletter,&lt;br /&gt;
** All excluding the pilot interviewees.&lt;br /&gt;
== Data Analysis ==&lt;br /&gt;
* Valid response := answer all quantitative and at least one qualitative&lt;br /&gt;
** What motivates requiring one qualitative answer?&lt;br /&gt;
* Coded these to qualitative answers individually, and then merged codes, resolving differences case-by-case.&lt;br /&gt;
= Results =&lt;br /&gt;
* Most respondents are financially compensated for their participation, have been on both sides of code review, and more than five years of experience.&lt;br /&gt;
== RQ1: Code review details ==&lt;br /&gt;
* Most respondents spend less than 5 hours per review, half spend 1 to 5 hours.&lt;br /&gt;
* Most requests get a response within 3 days, 40% within 1 day.&lt;br /&gt;
* Most commits goes through review.&lt;br /&gt;
* Most of reviews are resolved within a month, half within a week.&lt;br /&gt;
* Number of LoC and number of reviewers varies widely.&lt;br /&gt;
* Common criteria when deciding reviews: coding standards, domain knowledge are roughly tied followed by functionality, correctness, time, tests, documentation, always-accept&lt;br /&gt;
* Common mistakes corrected during review: code mistakes, design, style, testing, documentation, performance, readability, maintainability.&lt;br /&gt;
== Positive experiences about code review ==&lt;br /&gt;
* Knowledge sharing, improved code quality, helpful feedback, positive feeling, problems identified&lt;br /&gt;
* &amp;quot;In a big project it is rare that anyone understands the whole picture... It [code review] can lead to more complete understanding of the task.&amp;quot;&lt;br /&gt;
* &amp;quot;It [code review] leads to design discussions happening that would not have happened otherwise.&amp;quot;&lt;br /&gt;
* &amp;quot;It makes the team more knowledgeable about what work is.&amp;quot;&lt;br /&gt;
* &amp;quot;People found mistakes in code that I wrote, that I would have missed and only found out about much further on the validation process.&amp;quot;&lt;br /&gt;
* Code review results in &amp;quot;much better code and a better understanding of different parts of the code.&amp;quot;&lt;br /&gt;
== Negative experiences about code review ==&lt;br /&gt;
* Takes too long, requestors misunderstand criticism, disagreements, bottleneck, hard to find reviewers, difficult task, unresponsive author&lt;br /&gt;
* &amp;quot;it [peer code review] can be long and time consuming for very small changes, as the process must be followed for even a single character change if it affects results.&amp;quot;&lt;br /&gt;
* There are also problems when the &amp;quot;review process gets stalled while nit-picking irrelevant details.&amp;quot;&lt;br /&gt;
* &amp;quot;Sometimes people get annoyed when they get feedback especially if they think they are experts&amp;quot;&lt;br /&gt;
== RQ2: Impact of code review on research software ==&lt;br /&gt;
* By a large margin, respondents strongly agreed code review is important for their project.&lt;br /&gt;
** This could be due to selection bias.&lt;br /&gt;
* Impacts: improves code quality followed by knowledge sharing&lt;br /&gt;
* Why does code review improve code quality: correctness followed by a tie between improves readability, more eyes, and better maintainability.&lt;br /&gt;
* On correctness: &amp;quot;If you’ve written code yourself, it’s hard to see the assumptions you’ve made. Others can spot these and ask you to clarify, also spot your mistakes&amp;quot;&lt;br /&gt;
* On readability: &amp;quot;make[ing] the codebase more uniform and improves the quality of the code&amp;quot;&lt;br /&gt;
== RQ3: Difficulties research software developers face with code review ==&lt;br /&gt;
* Difficulties: understanding code, understanding system, administrative issues&lt;br /&gt;
* Barriers: Finding time followed distantly by phrasing comments, finding the right people, participation, developer egos, takes too long&lt;br /&gt;
== RQ4: What improvements do research software developers need? ==&lt;br /&gt;
* Formalizing process, followed by tooling, more people, better incentives, more training, more time&lt;br /&gt;
* Formalizing process: &amp;quot;a more formal structure of at least one science review followed by one technical review. It’s currently a bit of a free-for-all&amp;quot;&lt;br /&gt;
* Tooling: branching VCS and automatic analysis&lt;br /&gt;
= Threats to validity =&lt;br /&gt;
* Participants might not know what certain terms mean, but authors think they do.&lt;br /&gt;
* Human-perception can be wrong, but there is no better source of truth.&lt;br /&gt;
* Perhaps the sample is not representative of the population.&lt;br /&gt;
** Those wliling to answer a survey on code review are more likely to be aware of it.&lt;br /&gt;
* Participants may have misunderstood questions, but authors tried to be clear.&lt;br /&gt;
= Conclusion =&lt;br /&gt;
* Similar results to commercial software engineering, despite differences in research context.&lt;br /&gt;
* Code review largely beneficial, but could benefit from explicit process.&lt;br /&gt;
* Authors plan to raise awareness of code review, its flaws, and its benefits, within community.&lt;br /&gt;
== References ==&lt;br /&gt;
* [https://figshare.com/articles/dataset/_/14736468/0 Raw data], possibly dead link?&lt;br /&gt;
* [https://figshare.com/articles/journal_contribution/Contemporary_Peer_Code_Review_in_Research_Software/7761989 Slides]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12163</id>
		<title>Research Software Engineering reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Research_Software_Engineering_reading_list&amp;diff=12163"/>
		<updated>2021-09-28T23:06:37Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Institutions and Incentives =&lt;br /&gt;
* [[Addressing Research Software Sustainability via Institutes]]&lt;br /&gt;
* [[Research Software Development &amp;amp; Management in Universities: Case Studies from Manchester's RSDS Group, Illinois' NCSA, and Notre Dame's CRC]]&lt;br /&gt;
&lt;br /&gt;
= Current Practices =&lt;br /&gt;
* Practices which can be improved&lt;br /&gt;
** [[Technical Debt in Computational Science]]&lt;br /&gt;
** [[Troubling Trends in Scientific Software Use]] (ecology)&lt;br /&gt;
* Pure observations&lt;br /&gt;
** [https://zenodo.org/record/14809#.YNdUKDpOkUE UK Research Software Survey (dataset)]&lt;br /&gt;
** [[Vertical Integration]]&lt;br /&gt;
** [[Developers Perception of Peer Code Review in Research Software Development]]&lt;br /&gt;
* Improved practices&lt;br /&gt;
** [[The Research Software Engineer]]&lt;br /&gt;
** [[Ten Simple Rules for the Open Development of Scientific Software]]&lt;br /&gt;
** [[Reducing Technical Debt with Reproducible Containers]]&lt;br /&gt;
** [[A Workflow for Increasing the Quality of Scientific Software (in Computational Science and Engineering)]]&lt;br /&gt;
** [[Mining Development Data to Understand and Improve Software Engineering Processes in HPC Projects]]&lt;br /&gt;
** [[Easing the burden of code review]]&lt;br /&gt;
** [[Software Engineering Challenges and Best Practices for Multi-Institutional Scientific Software Development]]&lt;br /&gt;
** [[Some Simple Guidelines for Effective Data Management]]&lt;br /&gt;
&lt;br /&gt;
= Famous Bugs =&lt;br /&gt;
* [[A Scientist's Nightmare: Software Problem Leads to Five Retractions]]&lt;br /&gt;
&lt;br /&gt;
= Related Lists =&lt;br /&gt;
* [[Open Academia reading list]]&lt;br /&gt;
* [[Reproducibility reading list]]&lt;br /&gt;
* [[Software Engineering reading list]]&lt;br /&gt;
* [[Computer Science reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Some_Simple_Guidelines_for_Effective_Data_Management&amp;diff=12162</id>
		<title>Some Simple Guidelines for Effective Data Management</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Some_Simple_Guidelines_for_Effective_Data_Management&amp;diff=12162"/>
		<updated>2021-09-28T23:05:22Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: Created page with &amp;quot;{{Summary |title=Some Simple Guidelines for Effective Data Management |authors=Elizabeth T. Borer, Eric W. Seabloom, Matthew B. Jones, Mark Schildhauer |url=https://esajournal...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Summary&lt;br /&gt;
|title=Some Simple Guidelines for Effective Data Management&lt;br /&gt;
|authors=Elizabeth T. Borer, Eric W. Seabloom, Matthew B. Jones, Mark Schildhauer&lt;br /&gt;
|url=https://esajournals.onlinelibrary.wiley.com/doi/full/10.1890/0012-9623-90.2.205&lt;br /&gt;
|tags=data management&lt;br /&gt;
|summary=# Use a scripted program for analysis.&lt;br /&gt;
#* NB: use a workflow management system to run your scripts. This balances speed of computation with reproducibility.&lt;br /&gt;
#* &amp;quot;GUI-driven&amp;quot; analysis is harder to scrutinize and reproduce.&lt;br /&gt;
# Store data in non-proprietary software formats (e.g., comma delimited text file, .csv).&lt;br /&gt;
#* NB: CSV is not space-efficient for large amounts of numeric data. HDF5, still non-proprietary, may be more appropriate in that case.&lt;br /&gt;
# Store data in non-proprietary hardware formats.&lt;br /&gt;
#* NB: Archival websites are even better than physical storage.&lt;br /&gt;
# Store an uncorrected data; make corrections within a scripted language.&lt;br /&gt;
#* Make it a read-only file.&lt;br /&gt;
#* This way, you can revert mistakes in the analysis.&lt;br /&gt;
# Use descriptive names for your data files&lt;br /&gt;
#* NB: Other authors recommend not parsing filenames to get metadata. Often there is too much metadata to fit in a filename, and that metadata is not necessarily unique.&lt;br /&gt;
#* No spaces in filenames.&lt;br /&gt;
# Include a “header” line that describes the variables as the first line in the table.&lt;br /&gt;
#* NB: The first row becomes the &amp;quot;name&amp;quot; of the column in Pandas, so if you use a descriptive short-name there, write a sentence describing each column in the second row.&lt;br /&gt;
# Use plain ASCII text for your file names, variable names, and data values.&lt;br /&gt;
#* NB: I consider this a little out-of-date: UTF-8 is the new de facto standard, and it is backwards compatible with ASCII, so UTF-8-unaware programs will render most of the text properly and emojibake over special characters.&lt;br /&gt;
# When you add data to a database, try not to add columns; rather, design your tables so that you add only rows.&lt;br /&gt;
#* NB: I believe this is more commonly known as [https://en.wikipedia.org/wiki/First_normal_form First Normal-Form].&lt;br /&gt;
# All cells within each column should contain only one type of information (i.e., either text, numerical, etc.).&lt;br /&gt;
#  Record a single piece of data (unique measurement) only once&lt;br /&gt;
#* NB: This is [https://en.wikipedia.org/wiki/Third_normal_form Third Normal-Form].&lt;br /&gt;
# Record full information about taxonomic names.&lt;br /&gt;
# Record full dates, using standardized formats.&lt;br /&gt;
#* [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601]&lt;br /&gt;
# Always maintain effective metadata.&lt;br /&gt;
#* NB: This metadata should be machine-readable, e.g. in YAML.&lt;br /&gt;
|journal=Ecological Society of America Bulletin&lt;br /&gt;
|pub_date=2009/05/01&lt;br /&gt;
|doi=10.1890/0012-9623-90.2.205&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
	<entry>
		<id>https://acawiki.org/index.php?title=Reproducibility_reading_list&amp;diff=12161</id>
		<title>Reproducibility reading list</title>
		<link rel="alternate" type="text/html" href="https://acawiki.org/index.php?title=Reproducibility_reading_list&amp;diff=12161"/>
		<updated>2021-09-27T21:53:46Z</updated>

		<summary type="html">&lt;p&gt;Charmonium: /* Reproducibility in software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reproducibility in general ==&lt;br /&gt;
* [[Why Most Published Research Findings Are False]] (medicine)&lt;br /&gt;
* [[Reproducible Research Practices and Transparency across the Biomedical Literature]] (biomed)&lt;br /&gt;
* [[Estimating the reproducibility of psychological science]] (psychology)&lt;br /&gt;
&lt;br /&gt;
== Reproducibility in software ==&lt;br /&gt;
* [[Repeatability in computer systems research]]&lt;br /&gt;
* [[ReScience C: A Journal for Reproducible Replications in Computational Science]]&lt;br /&gt;
* [[Reproducible and User-Controlled Software Environments in HPC with Guix]]&lt;br /&gt;
* [[Artifact Evaluation: Is it a Real Incentive?]]&lt;br /&gt;
* [[Sciunits: Reusable Research Objects]]&lt;br /&gt;
* [[Reproducibility vs. Replicability: A Brief History of a Confused Terminology]]&lt;br /&gt;
* [[Reproducibility PI Manifesto]]&lt;br /&gt;
&lt;br /&gt;
== Related fields ==&lt;br /&gt;
* [[Open Academia reading list]]&lt;br /&gt;
* [[Research Software Engineering reading list]]&lt;/div&gt;</summary>
		<author><name>Charmonium</name></author>
		
	</entry>
</feed>