<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hackthology</title><link>https://hackthology.com/</link><description/><atom:link href="https://hackthology.com/feeds/rss.xml" rel="self"/><lastBuildDate>Thu, 19 Mar 2026 00:00:00 -0400</lastBuildDate><item><title>Taming the Variants: Multi-Architecture Continuous Testing at Google</title><link>https://hackthology.com/taming-the-variants-multi-architecture-continuous-testing-at-google.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, Sushmita Azad, Chandrakanth Chittappa, Ali Esmaeeli, Laura Macaddino, Sam Manfreda, David Margolin, Dharma Naidu, Sabuj Pattanayek, Sachin Sable, Ruslan Sakevych, Dushyant Acharya, Adrian Berding, Kevin Crossan, Wolff Dobson, Avi Kondareddy, and Abhayendra Singh.
&lt;em&gt;Taming the Variants: Multi-Architecture Continuous Testing at Google&lt;/em&gt;. &lt;a href="https://conf.researchr.org/home/icst-2026"&gt;ICST 2026&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="http://tba"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icst-2026.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/taming-the-variants-multi-architecture-continuous-testing-at-google.html"&gt;WEB …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, Sushmita Azad, et al.</dc:creator><pubDate>Thu, 19 Mar 2026 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2026-03-19:/taming-the-variants-multi-architecture-continuous-testing-at-google.html</guid><category>Paper</category></item><item><title>Speculative Testing at Google with Transition Prediction</title><link>https://hackthology.com/speculative-testing-at-google-with-transition-prediction.html</link><description>&lt;p&gt;Avi Kondareddy, Sushmita Azad, Abhayendra Singh, and &lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;.
&lt;em&gt;Speculative Testing at Google with Transition Prediction&lt;/em&gt;.  &lt;a href="https://conf.researchr.org/details/icst-2025/icst-2025-industry/17/Speculative-Testing-at-Google-with-Transition-Prediction"&gt;ICST Industry Track 2025&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.org/10.1109/ICST62969.2025.10988976"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icst-2025.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/speculative-testing-at-google-with-transition-prediction.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct you should read the
&lt;a href="https://hackthology.com/pdfs/icst-2025.pdf"&gt;pdf version&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"&gt;&lt;/script&gt;

&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;Google's …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Avi Kondareddy, Sushmita Azad, Abhayendra Singh, and &lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;</dc:creator><pubDate>Wed, 02 Apr 2025 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2025-04-02:/speculative-testing-at-google-with-transition-prediction.html</guid><category>Paper</category></item><item><title>SafeRevert: When Can Breaking Changes be Automatically Reverted?</title><link>https://hackthology.com/saferevert-when-can-breaking-changes-be-automatically-reverted.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, Avi Kondareddy, Sushmita Azad, and Eric Nickell.
&lt;em&gt;SafeRevert: When Can Breaking Changes be Automatically Reverted?&lt;/em&gt;.  &lt;a href="https://conf.researchr.org/details/icst-2024/icst-2024-industry/7/SafeRevert-When-Can-Breaking-Changes-be-Automatically-Reverted-"&gt;ICST Industry Track 2024&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.org/10.1109/ICST60714.2024.00043"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icst-2024.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/saferevert-when-can-breaking-changes-be-automatically-reverted.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct you should read the
&lt;a href="https://hackthology.com/pdfs/icst-2024.pdf"&gt;pdf version&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Abstract …&lt;/h4&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;,  Avi Kondareddy, Sushmita Azad, Eric Nickell</dc:creator><pubDate>Mon, 27 May 2024 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2024-05-27:/saferevert-when-can-breaking-changes-be-automatically-reverted.html</guid><category>Paper</category></item><item><title>Flake Aware Culprit Finding</title><link>https://hackthology.com/flake-aware-culprit-finding.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, Bobby Dorward, Eric Nickell, Collin Johnston, and Avi Kondareddy.
&lt;em&gt;Flake Aware Culprit Finding&lt;/em&gt;.  &lt;a href="https://conf.researchr.org/details/icst-2023/icst-2023-industry/46/Flake-Aware-Culprit-Finding"&gt;ICST Industry Track 2023&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.dx.org/10.1109/ICST57152.2023.00041"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icst-2023.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/flake-aware-culprit-finding.html"&gt;WEB&lt;/a&gt;.
&lt;a href="https://research.google/pubs/pub52048/"&gt;Google Research Preprint&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct you should read the
&lt;a href="https://hackthology.com/pdfs/icst-2023.pdf"&gt;pdf version …&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, Bobby Dorward, Eric Nickell, Collin Johnston, Avi Kondareddy</dc:creator><pubDate>Mon, 17 Apr 2023 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2023-04-17:/flake-aware-culprit-finding.html</guid><category>Paper</category></item><item><title>Improving fault localization by integrating value and predicate based causal inference techniques</title><link>https://hackthology.com/improving-fault-localization-by-integrating-value-and-predicate-based-causal-inference-techniques.html</link><description>&lt;p&gt;Yiğit Küçük, &lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, and Andy Podgurski
&lt;em&gt;Improving fault localization by integrating value and predicate based causal inference techniques&lt;/em&gt;.  &lt;a href="https://conf.researchr.org/details/icse-2021/icse-2021-papers/72/Improving-Fault-Localization-by-Integrating-Value-and-Predicate-Based-Causal-Inferenc"&gt;ICSE 2021&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.org/10.1109/ICSE43902.2021.00066"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icse-2021.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icse-2021-supplement.pdf"&gt;SUPPLEMENT&lt;/a&gt;.
&lt;a href="https://doi.org/10.5281/zenodo.4441439"&gt;ARTIFACT&lt;/a&gt;.
&lt;a href="https://hackthology.com/improving-fault-localization-by-integrating-value-and-predicate-based-causal-inference-techniques.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;Statistical fault localization (SFL) techniques use execution profiles and
success/failure information from software executions, in conjunction …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Yiğit Küçük, &lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Wed, 26 May 2021 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2021-05-26:/improving-fault-localization-by-integrating-value-and-predicate-based-causal-inference-techniques.html</guid><category>Paper</category></item><item><title>The Impact of Rare Failures on Statistical Fault Localization: the Case of the Defects4J Suite</title><link>https://hackthology.com/the-impact-of-rare-failures-on-statistical-fault-localization-the-case-of-the-defects4j-suite.html</link><description>&lt;p&gt;Yiğit Küçük, &lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, and Andy Podgurski
&lt;em&gt;The Impact of Rare Failures on Statistical Fault Localization: the Case of the Defects4J Suite&lt;/em&gt;.  &lt;a href="https://icsme2019.github.io/"&gt;ICSME 2019&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="http://tba"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icsme-2019.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/the-impact-of-rare-failures-on-statistical-fault-localization-the-case-of-the-defects4j-suite.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;Statistical Fault Localization (SFL) uses coverage profiles (or "spectra")
collected from passing and failing tests, together …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Yiğit Küçük, &lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Thu, 03 Oct 2019 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2019-10-03:/the-impact-of-rare-failures-on-statistical-fault-localization-the-case-of-the-defects4j-suite.html</guid><category>Paper</category></item><item><title>Evaluating Automatic Fault Localization Using Markov Processes</title><link>https://hackthology.com/evaluating-automatic-fault-localization-using-markov-processes.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;, Yiğit Küçük, and Andy Podgurski
&lt;em&gt;Evaluating Automatic Fault Localization Using Markov Processes&lt;/em&gt;.  &lt;a href="http://www.ieee-scam.org/2019/"&gt;SCAM 2019&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.org/10.1109/SCAM.2019.00021"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/scam-2019.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/scam-2019-supplement.pdf"&gt;SUPPLEMENT&lt;/a&gt;.
&lt;a href="https://hackthology.com/evaluating-automatic-fault-localization-using-markov-processes.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct you should read the
&lt;a href="https://hackthology.com/pdfs/scam-2019.pdf"&gt;pdf version&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Abstract …&lt;/h4&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, Yiğit Küçük, and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Mon, 30 Sep 2019 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2019-09-30:/evaluating-automatic-fault-localization-using-markov-processes.html</guid><category>Paper</category></item><item><title>Gödel's Incompleteness Theorem Does Have Philosophical Implications</title><link>https://hackthology.com/godels-incompleteness-theorem-does-have-philosophical-implications.html</link><description>&lt;p&gt;In 1931 Kurt Gödel published a paper in German that has continued to
reverberate through the scientific community:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;K. Gödel, "On Formally Undecidable Propositions of Principia Mathematica and
Related Systems," Monatshefte für Math. und Phys., vol. 38, pp. 173–198, Jan.
1931.&lt;/p&gt;
&lt;p&gt;Translation: &lt;a href="https://doi.org/10.1111/j.1468-0149.1963.tb00774.x"&gt;doi&lt;/a&gt;
&lt;a href="http://hope.simons-rock.edu/~pshields/cs/cmpt300/easiergoedel.pdf"&gt;pdf&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This paper sets clear limits …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 05 Nov 2018 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2018-11-05:/godels-incompleteness-theorem-does-have-philosophical-implications.html</guid><category>Blog</category></item><item><title>How to Evaluate Statistical Fault Localization</title><link>https://hackthology.com/how-to-evaluate-statistical-fault-localization.html</link><description>&lt;h4&gt;Cite as:&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;. &lt;em&gt;How To Evaluate Statistical Fault Localization&lt;/em&gt;.
Blog. 2018.  &lt;a href="https://hackthology.com/how-to-evaluate-statistical-fault-localization.html"&gt;https://hackthology.com/how-to-evaluate-statistical-fault-localization.html&lt;/a&gt;
&lt;br/&gt;
&lt;a href="https://hackthology.com/pdfs/how-to-eval-fault-localization.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/how-to-evaluate-statistical-fault-localization.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct you should read the
&lt;a href="https://hackthology.com/pdfs/how-to-eval-fault-localization.pdf"&gt;pdf version&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;I now have a pulished …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 27 Jul 2018 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2018-07-27:/how-to-evaluate-statistical-fault-localization.html</guid><category>Blog</category></item><item><title>Behavioral Fault Localization by Sampling Suspicious Dynamic Control Flow Subgraphs</title><link>https://hackthology.com/behavioral-fault-localization-by-sampling-suspicious-dynamic-control-flow-subgraphs.html</link><description>&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"&gt;&lt;/script&gt;

&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt; and Andy Podgurski.
&lt;em&gt;Behavioral Fault Localization by Sampling Suspicious Dynamic Control Flow
Subgraphs&lt;/em&gt;.  &lt;a href="http://www.es.mdh.se/icst2018/"&gt;ICST 2018&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://dx.doi.org/10.1109/ICST.2018.00019"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/icst-2018.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/behavioral-fault-localization-by-sampling-suspicious-dynamic-control-flow-subgraphs.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;We present a new algorithm, Score Weighted Random Walks (SWRW), for behavioral
fault localization. Behavioral fault localization localizes faults (bugs) in
programs to a group of interacting …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt; and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Tue, 03 Apr 2018 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2018-04-03:/behavioral-fault-localization-by-sampling-suspicious-dynamic-control-flow-subgraphs.html</guid><category>Paper</category></item><item><title>How to Tokenize Complex Strings with Lexmachine</title><link>https://hackthology.com/how-to-tokenize-complex-strings-with-lexmachine.html</link><description>&lt;p&gt;This article is about using &lt;a href="https://github.com/timtadh/lexmachine"&gt;lexmachine&lt;/a&gt;
to tokenize strings (split up into component parts) in the Go (golang)
programming language. If you find yourself processing a complex file format or
network protocol this article will walk you through how to use &lt;code&gt;lexmachine&lt;/code&gt; to
process both accurately and quickly. If you …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 08 Dec 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-12-08:/how-to-tokenize-complex-strings-with-lexmachine.html</guid><category>Blog</category></item><item><title>Faster Tokenization with a DFA Backend for Lexmachine</title><link>https://hackthology.com/faster-tokenization-with-a-dfa-backend-for-lexmachine.html</link><description>&lt;style&gt;
div.dfa-scroller {
    overflow-x: unset;
}
div.dfa-scroller img {
    margin-left: -25%;
}
@media screen and (max-width: 1100px) {
    div.dfa-scroller {
        overflow-x: scroll;
    }
    div.dfa-scroller img {
        margin-left: unset;
    }
}
div.dfa-scroller {
    overflow-x: unset;
}
div.dfa-scroller img {
    margin-left: -25%;
}
@media screen and (max-width: 1100px) {
    div.dfa-scroller {
        overflow-x: scroll;
    }
    div.dfa-scroller img {
        margin-left: unset;
    }
}
&lt;/style&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a href="https://github.com/timtadh/lexmachine"&gt;Lexmachine&lt;/a&gt; is a lexical …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 27 Nov 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-11-27:/faster-tokenization-with-a-dfa-backend-for-lexmachine.html</guid><category>Blog</category></item><item><title>Frequent Subgraph Analysis and its Software Engineering Applications</title><link>https://hackthology.com/frequent-subgraph-analysis-and-its-software-engineering-applications.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt;. &lt;em&gt;Frequent Subgraph Analysis and its Software Engineering Applications&lt;/em&gt;.
&lt;a href="http://case.edu/"&gt;Case Western Reserve University&lt;/a&gt;. Doctoral Dissertation. 2017.
&lt;br/&gt;
&lt;a href="https://hackthology.com/pdfs/dissertation.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/frequent-subgraph-analysis-and-its-software-engineering-applications.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;Frequent subgraph analysis is a class of techniques and algorithms to find
repeated sub-structures in graphs known as frequent subgraphs or graph
patterns. In the field of Software …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;</dc:creator><pubDate>Fri, 18 Aug 2017 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2017-08-18:/frequent-subgraph-analysis-and-its-software-engineering-applications.html</guid><category>Paper</category></item><item><title>Rethinking Dependence Clones</title><link>https://hackthology.com/rethinking-dependence-clones.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt; and Andy Podgurski.
&lt;em&gt;Rethinking Dependence Clones&lt;/em&gt;.
&lt;a href="https://iwsc2017.github.io/"&gt;IWSC 2017&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://doi.org/10.1109/IWSC.2017.7880512"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/iwsc-2017.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/rethinking-dependence-clones.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Semantic code clones&lt;/em&gt; are regions of duplicated code that may appear dissimilar
but compute similar functions. Since in general it is algorithmically
undecidable whether two or more programs compute the same function, locating all …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt; and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Tue, 21 Feb 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-02-21:/rethinking-dependence-clones.html</guid><category>Paper</category></item><item><title>A Job Queue in BASH</title><link>https://hackthology.com/a-job-queue-in-bash.html</link><description>&lt;p&gt;A Job Queue is typically a first in first out queue of "work items" or "jobs" to
be processed. Ideally, a good job queue should support multiple workers (also
called readers) so multiple jobs can be processed at one time. For production
systems and clusters there are many robust options …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Sat, 11 Feb 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-02-11:/a-job-queue-in-bash.html</guid><category>Blog</category></item><item><title>`xrandr` Script to Setup External Monitor</title><link>https://hackthology.com/xrandr-script-to-setup-external-monitor.html</link><description>&lt;p&gt;I have a quirky adapter for my external monitor. The adapter doesn't correctly
report the display's size or refresh rate to the laptop. To solve this problem,
I wrote the following script to automatically setup the external monitor:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/env bash&lt;/span&gt;

&lt;span class="c1"&gt;## size and refresh rate of the screen&lt;/span&gt;
&lt;span class="nv"&gt;X …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 08 Feb 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-02-08:/xrandr-script-to-setup-external-monitor.html</guid><category>Blog</category></item><item><title>Frequent Subgraph Mining of Personalized Signaling Pathway Networks Groups Patients with Frequently Dysregulated Disease Pathways and Predicts Prognosis</title><link>https://hackthology.com/frequent-subgraph-mining-of-personalized-signaling-pathway-networks-groups-patients-with-frequently-dysregulated-disease-pathways-and-predicts-prognosis.html</link><description>&lt;p&gt;A. Durmaz*, &lt;strong&gt;T. A. D. Henderson&lt;/strong&gt;*, D.  Brubaker, and G. Bebek. &lt;em&gt;Frequent
Subgraph Mining of Personalized Signaling Pathway Networks Groups Patients with
Frequently Dysregulated Disease Pathways and Predicts Prognosis.&lt;/em&gt;
&lt;a href="http://psb.stanford.edu/"&gt;PSB 2017&lt;/a&gt;.  * &lt;strong&gt;Co-First Author&lt;/strong&gt;
&lt;br/&gt;
&lt;a href="http://dx.doi.org/10.1142/9789813207813_0038"&gt;DOI&lt;/a&gt;.
&lt;a href="https://www.ncbi.nlm.nih.gov/pubmed/27896993"&gt;PUBMED&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/psb-2017.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/psb-2017-supplemental.pdf"&gt;SUPPLEMENT&lt;/a&gt;.
&lt;a href="https://hackthology.com/frequent-subgraph-mining-of-personalized-signaling-pathway-networks-groups-patients-with-frequently-dysregulated-disease-pathways-and-predicts-prognosis.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;h4&gt;Motivation&lt;/h4&gt;
&lt;p&gt;Large scale genomics studies have generated comprehensive molecular
characterization of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Arda Durmaz, &lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt;, Doug Brubaker, and &lt;a href="http://gurkan.case.edu"&gt;Gurkan Bebek&lt;/a&gt;</dc:creator><pubDate>Tue, 03 Jan 2017 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2017-01-03:/frequent-subgraph-mining-of-personalized-signaling-pathway-networks-groups-patients-with-frequently-dysregulated-disease-pathways-and-predicts-prognosis.html</guid><category>Paper</category></item><item><title>Sampling Code Clones from Program Dependence Graphs with GRAPLE</title><link>https://hackthology.com/sampling-code-clones-from-program-dependence-graphs-with-graple.html</link><description>&lt;p&gt;&lt;strong&gt;Tim A. D. Henderson&lt;/strong&gt; and Andy Podgurski. &lt;em&gt;Sampling Code Clones from Program
Dependence Graphs with GRAPLE&lt;/em&gt;.
&lt;a href="http://softwareanalytics.ca/swan16/Home.html"&gt;SWAN 2016&lt;/a&gt;.
&lt;br/&gt;
&lt;a href="https://dx.doi.org/10.1145/2989238.2989241"&gt;DOI&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/swan-2016.pdf"&gt;PDF&lt;/a&gt;.
&lt;a href="https://hackthology.com/pdfs/swan-2016-supplemental.pdf"&gt;SUPPLEMENT&lt;/a&gt;.
&lt;a href="https://github.com/timtadh/graple"&gt;CODE&lt;/a&gt;.
&lt;a href="https://hackthology.com/sampling-code-clones-from-program-dependence-graphs-with-graple.html"&gt;WEB&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Abstract&lt;/h4&gt;
&lt;p&gt;We present &lt;a href="https://github.com/timtadh/graple"&gt;GRAPLE&lt;/a&gt;, a method to generate a
representative sample of recurring (frequent) subgraphs of any directed labeled
graph(s).  &lt;code&gt;GRAPLE&lt;/code&gt; is based on frequent subgraph …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">&lt;a href="http://hackthology.com"&gt;Tim Henderson&lt;/a&gt; and &lt;a href="http://engineering.case.edu/profiles/hap"&gt;Andy Podgurski&lt;/a&gt;</dc:creator><pubDate>Sun, 13 Nov 2016 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2016-11-13:/sampling-code-clones-from-program-dependence-graphs-with-graple.html</guid><category>Paper</category></item><item><title>Managing Infrastructure with Python, Fabric and Ansible</title><link>https://hackthology.com/managing-infrastructure-with-python-fabric-and-ansible.html</link><description>&lt;p&gt;For &lt;a href="http://pyohio.org/"&gt;PyOhio&lt;/a&gt; 2016 I gave a short talk on managing
infrastructure. You can watch the talk on &lt;a href="http://youtu.be/4qav2EuXsGU"&gt;youtube&lt;/a&gt;
or look at the
&lt;a href="https://hackthology.com/pdfs/managing-infrastructure-with-python.pdf"&gt;slides&lt;/a&gt;. The talk
starts with a short poem printed below for posterity. I also created a super
simple demo which I did not have time to show. You …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 01 Aug 2016 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2016-08-01:/managing-infrastructure-with-python-fabric-and-ansible.html</guid><category>Blog</category></item><item><title>Writing a Lexer in Go with LexMachine</title><link>https://hackthology.com/writing-a-lexer-in-go-with-lexmachine.html</link><description>&lt;p&gt;This article is about &lt;a href="https://github.com/timtadh/lexmachine"&gt;lexmachine&lt;/a&gt;, a
library I wrote to help you write great lexers in Go. If you are looking to
write a golang lexer or a lexer in golang this article is for you.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;lexer&lt;/strong&gt; is a software component that analyzes a string and breaks it up …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 25 May 2016 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2016-05-25:/writing-a-lexer-in-go-with-lexmachine.html</guid><category>Blog</category></item><item><title>Golang中的面向对象继承</title><link>https://hackthology.com/golangzhong-de-mian-xiang-dui-xiang-ji-cheng.html</link><description>&lt;p&gt;Golang的面向对象机制与Smalltalk或者Java等传统面向对象的编程语言不同。传统面向对象编程语言的一个重要特性是继承机制。因为继承机制支持在关联对象间进行代码复用和数据共享。继承 …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 20 May 2016 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2016-05-20:/golangzhong-de-mian-xiang-dui-xiang-ji-cheng.html</guid><category>Mandarin</category></item><item><title>Object Oriented Inheritance in Go</title><link>https://hackthology.com/object-oriented-inheritance-in-go.html</link><description>&lt;p&gt;The Go (golang) programming language is not a traditional object oriented
language like Smalltalk or Java. A key feature supporting traditional object
oriented design is inheritance.  Inheritance supports sharing of code and data
between related objects. It used to be that inheritance was the dominant design
for sharing code and …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 20 May 2016 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2016-05-20:/object-oriented-inheritance-in-go.html</guid><category>Blog</category></item><item><title>Exceptions for Go as a Library</title><link>https://hackthology.com/exceptions-for-go-as-a-library.html</link><description>&lt;p&gt;Go (golang) lacks support for exceptions found in many other languages. There
are good reasons for Go to not include exceptions. For instance, by making
error handling explicit the programmer is forced to think concretely about
the correct action to take. Fined grained control over the handling of errors
using …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 19 May 2016 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2016-05-19:/exceptions-for-go-as-a-library.html</guid><category>Blog</category></item><item><title>First Rust Macro</title><link>https://hackthology.com/first-rust-macro.html</link><description>&lt;p&gt;I started learning &lt;a href="http://www.rust-lang.org/"&gt;Rust&lt;/a&gt; yesterday. Today as I was
writing input handling code I wanted to print to the standard err. The way to do
that seems to be:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="fm"&gt;writeln!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;write to stderr failed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That seems a bit verbose to me versus printing to the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Sat, 20 Sep 2014 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2014-09-20:/first-rust-macro.html</guid><category>Blog</category></item><item><title>Scala Notes</title><link>https://hackthology.com/scala-notes.html</link><description>&lt;p&gt;My notes as I relearn Scala. I am reading through &lt;a href="http://www.worldcat.org/title/programming-in-scala/oclc/731510960"&gt;Programming in Scala (2nd
ed.)&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Quibble with the Functional List&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt; &lt;em&gt;from page 43&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Why not append to lists?&lt;/h3&gt;
&lt;p&gt;Class &lt;code&gt;List&lt;/code&gt; does offer an append operation -- it's written &lt;code&gt;:+&lt;/code&gt; and is
explained in Chapter 24 -- but this operation is rarely used, because …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 18 Aug 2014 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2014-08-18:/scala-notes.html</guid><category>Blog</category></item><item><title>Always Go To Editable Command Mode in Vim</title><link>https://hackthology.com/always-go-to-editable-command-mode-in-vim.html</link><description>&lt;p&gt;A useful trick in vim is an editable command mode with previous commands in the
buffer. To get to this mode go to normal mode (ie. hit ESC) and then type &lt;code&gt;q:&lt;/code&gt;
this places you in editable command mode. If you always want to go to that mode
you can …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 06 Jun 2014 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2014-06-06:/always-go-to-editable-command-mode-in-vim.html</guid><category>Blog</category></item><item><title>Private Methods and Functions Should be Tested</title><link>https://hackthology.com/private-methods-and-functions-should-be-tested.html</link><description>&lt;p&gt;Recently I became engaged in a debate around whether or not private methods
should usually have unit tests. Rather than writing up a quick off hand reply to
the question I decided to write up a detailed stance on the matter.&lt;/p&gt;
&lt;h1&gt;Testing Theory&lt;/h1&gt;
&lt;p&gt;Why is software tested? It is tested …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 20 Mar 2014 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2014-03-20:/private-methods-and-functions-should-be-tested.html</guid><category>Blog</category></item><item><title>How to Re-Use a Sub-Project's Buildfile in Apache Buildr</title><link>https://hackthology.com/how-to-re-use-a-sub-projects-buildfile-in-apache-buildr.html</link><description>&lt;p&gt;&lt;a href="http://buildr.apache.org"&gt;Apache Buildr&lt;/a&gt; is a nice build system for Java and
other JVM langauges. It is based on Ruby's Rake system and makes it easy to
setup a multi-project build. However, by default, there is no support for
re-using a &lt;code&gt;Buildfile&lt;/code&gt; from another project.  The intreprepid hacker can fix that
problem …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 14 Mar 2014 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2014-03-14:/how-to-re-use-a-sub-projects-buildfile-in-apache-buildr.html</guid><category>Blog</category></item><item><title>Vi Mode in Python Shell, IRB, and Elsewhere!</title><link>https://hackthology.com/vi-mode-in-python-shell-irb-and-elsewhere.html</link><description>&lt;p&gt;Enable vi mode in irb, python shell, and other readline based systems:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;END&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;~/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inputrc&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;editing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kr"&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now everything has vi key bindings! You are welcome.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Tue, 04 Feb 2014 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2014-02-04:/vi-mode-in-python-shell-irb-and-elsewhere.html</guid><category>Blog</category></item><item><title>Functional Iteration in Go</title><link>https://hackthology.com/functional-iteration-in-go.html</link><description>&lt;p&gt;Go provides a built in way to iterate easily over built-in collection types:
&lt;code&gt;maps&lt;/code&gt;, &lt;code&gt;slices&lt;/code&gt; and &lt;code&gt;chans&lt;/code&gt;. Iterating with these types is much like iterating
using for-each type loops in languages like Python, Ruby and Java.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// key, value&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// index, item …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 13 Dec 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-12-13:/functional-iteration-in-go.html</guid><category>Blog</category></item><item><title>How to Compile MySQL's "ON DUPLICATE KEY UPDATE" in SQL Alchemy</title><link>https://hackthology.com/how-to-compile-mysqls-on-duplicate-key-update-in-sql-alchemy.html</link><description>&lt;p&gt;This snippet contains a well tested way to compile an "Upsert" statement for
MySQL in SQL Alchemy. I have found it useful for several project and I am making
it available via this gist for others to enjoy and improve. Unlike some other
examples out there this one supports doing …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 05 Dec 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-12-05:/how-to-compile-mysqls-on-duplicate-key-update-in-sql-alchemy.html</guid><category>Blog</category></item><item><title>Innovation isn't always the answer.</title><link>https://hackthology.com/innovation-isnt-always-the-answer.html</link><description>&lt;p&gt;From, &lt;a href="http://www.wired.com/wiredscience/2013/11/vaclav-smil-wired/"&gt;http://www.wired.com/wiredscience/2013/11/vaclav-smil-wired/&lt;/a&gt;, at the
bottom.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;So the answers are not technological but political: better economic
policies, better education, better trade policies.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Right. Today, as you know, everything is "innovation." We have problems, and
people are looking for fairy-tale solutions—innovation like manna from …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 25 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-25:/innovation-isnt-always-the-answer.html</guid><category>Blog</category></item><item><title>The Ruby For Loop</title><link>https://hackthology.com/the-ruby-for-loop.html</link><description>&lt;p&gt;I am taking some time to learn Ruby this fall from &lt;a href="http://www.worldcat.org/title/eloquent-ruby/oclc/676726142"&gt;Eloquent
Ruby&lt;/a&gt;. The second chapter
on choosing the right control structures has this paragraph (emphasis mine):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Since the two versions of the “print my fonts” code are essentially
equivalent,[1] why prefer one over the other? Mainly it is …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 21 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-21:/the-ruby-for-loop.html</guid><category>Blog</category></item><item><title>An in Memory Go Implementation of Linear Hashing</title><link>https://hackthology.com/an-in-memory-go-implementation-of-linear-hashing.html</link><description>&lt;p&gt;In the &lt;a href="https://hackthology.com/linear-hashing.html"&gt;last post&lt;/a&gt; I described how linear hashing
works. If you haven't read it yet, you should go read it first. I can wait, this
post presents a new implementation which is a lot simpler than the disk based
version referenced in the last post.&lt;/p&gt;
&lt;p&gt;In the demonstration version …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Fri, 15 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-15:/an-in-memory-go-implementation-of-linear-hashing.html</guid><category>Blog</category></item><item><title>Linear Hashing</title><link>https://hackthology.com/linear-hashing.html</link><description>&lt;p&gt;Linear Hashing&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;,&lt;/sup&gt;&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt; is a hash table algorithm suitable for
secondary storage. It is often used to implement hash indices in databases and
file systems. Linear Hashing was invented by Witold Litwin in 1980 and has been
in widespread use since that time. I implemented this file-structure earlier
this …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 13 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-13:/linear-hashing.html</guid><category>Blog</category></item><item><title>Cryptography and Complexity</title><link>https://hackthology.com/cryptography-and-complexity.html</link><description>&lt;p&gt;This is a conversion from a latex paper I wrote. If you want all formatting
correct or the bibliography you should read the
&lt;a href="https://hackthology.com/pdfs/crypto-complexity.pdf"&gt;pdf version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cite as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Henderson, Tim A. D. &lt;strong&gt;Cryptography and Complexity&lt;/strong&gt;. Unpublished. Case Western Reserve University. MATH 408.  Spring 2012.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"&gt;&lt;/script&gt;

&lt;p&gt;Modern cryptographic systems are built on problems …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 11 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-11:/cryptography-and-complexity.html</guid><category>Blog</category></item><item><title>Programming Never Gets Easier</title><link>https://hackthology.com/programming-never-gets-easier.html</link><description>&lt;p&gt;Another comment on
&lt;a href="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD340.html"&gt;E.W.Dijkstra Archive: The Humble Programmer (EWD 340)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dijkstra, in the essay, felt that at the current moment in time (1972) the
programmer was limited by the tools. That their thought processes were limited
by poor languages and poor environment. However, he expressed great hope that …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Sun, 10 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-10:/programming-never-gets-easier.html</guid><category>Blog</category></item><item><title>New Site</title><link>https://hackthology.com/new-site.html</link><description>&lt;p&gt;It has been 6 months maybe more since Posterous shut down and I have just now
gotten around to recreating my site. I chose to do this on github pages with
pelican. Hosting on github is easy and simple. If github ever stops doing these
pages I can easily self …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 06 Nov 2013 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2013-11-06:/new-site.html</guid><category>Blog</category></item><item><title>The Limits of Type Systems</title><link>https://hackthology.com/the-limits-of-type-systems.html</link><description>&lt;p&gt;&lt;a href="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD340.html"&gt;E.W.Dijkstra Archive: The Humble Programmer (EWD 340)&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Argument three is based on the constructive approach to the problem of program
correctness. Today a usual technique is to make a program and then to test it.
But: program testing can be a very effective way to show the presence …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Tue, 03 Sep 2013 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2013-09-03:/the-limits-of-type-systems.html</guid><category>Blog</category></item><item><title>We can't automate the programmer.</title><link>https://hackthology.com/we-cant-automate-the-programmer.html</link><description>&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=6317778"&gt;HN Comment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I find this comment thread on how programmers will "automate" our way out of
jobs to be especially pertinent as I work on my proposal. A contention I have,
as do many others, is the primary practical challenge standing between us and
robust systems is complexity. There are …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Tue, 03 Sep 2013 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2013-09-03:/we-cant-automate-the-programmer.html</guid><category>Blog</category></item><item><title>Always Pertinent - C a giant leap backwards.</title><link>https://hackthology.com/always-pertinent-c-a-giant-leap-backwards.html</link><description>&lt;blockquote&gt;
&lt;p&gt;From the point of view of software engineering, the rapid spread of C
represented a great leap backward. It revealed that the community at large had
hardly grasped the true meaning of the term 'high-level language' which became
an ill-understood buzzword. What, if anything, was to be 'high-level'? As this …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Sun, 25 Aug 2013 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2013-08-25:/always-pertinent-c-a-giant-leap-backwards.html</guid><category>Blog</category></item><item><title>Passmash - The Site Specific Password Munger</title><link>https://hackthology.com/passmash-the-site-specific-password-munger.html</link><description>&lt;p&gt;&lt;a href="https://github.com/timtadh/passmash"&gt;Passmash&lt;/a&gt; is a new commandline
password munger. It has been tested to work on Linux with X and on
MacOS. It should also work on Windows.&lt;/p&gt;
&lt;h2&gt;What is a Munger?&lt;/h2&gt;
&lt;p&gt;A munger takes a password and turns it into another password, "munging"
it. In particular &lt;code&gt;passmash&lt;/code&gt; takes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A password (supplied …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 30 Jan 2012 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2012-01-30:/passmash-the-site-specific-password-munger.html</guid><category>Blog</category></item><item><title>Ternary Search Tries for Fast Flexible String Search : Part 1</title><link>https://hackthology.com/ternary-search-tries-for-fast-flexible-string-search-part-1.html</link><description>&lt;p&gt;Searching a large corpus of strings is a problem many applications have
to solve, whether the application features autocomplete boxes or
full-text search. Efficient methods for conducting such searches are not
always readily apparent to the algorithm designer. In this series of
articles I will present a data structure known …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 02 Jun 2011 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2011-06-02:/ternary-search-tries-for-fast-flexible-string-search-part-1.html</guid><category>Blog</category></item><item><title>How To: Write Self Updating Python Programs Using Pip and Git</title><link>https://hackthology.com/how-to-write-self-updating-python-programs-using-pip-and-git.html</link><description>&lt;p&gt;If you are a pip&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; and virtualenv user you already know how easy it is
to install python packages. Unlike the bad old days when I started
programming in Python, 9 years ago, it is now easy to add, remove and
manage python modules. In fact we can leverage …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Mon, 23 May 2011 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2011-05-23:/how-to-write-self-updating-python-programs-using-pip-and-git.html</guid><category>Blog</category></item><item><title>Announcing swork - Simplify your Shell Configuration</title><link>https://hackthology.com/announcing-swork-simplify-your-shell-configuration.html</link><description>&lt;p&gt;If you are like me, and if you are reading this you may very well be,
you spend an inordinate amount of time juggling inane details, like
shell environment variables, while programming. Now there is nothing
wrong with setting, exporting, and then unsetting variables, mounting
and unmounting FUSE partitions, starting …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 18 May 2011 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2011-05-18:/announcing-swork-simplify-your-shell-configuration.html</guid><category>Blog</category></item><item><title>Grammars, Ambiguity, and Expressibility</title><link>https://hackthology.com/grammars-ambiguity-and-expressibility.html</link><description>&lt;p&gt;Last night I gave a talk at CWRU Hacker Society about formal languages.
This is the first talk in a series of lectures I will be giving on
compilers. Unfortunately, unlike my regular expression talk I did not
get a recording of the audio. I may do a write up …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Thu, 17 Feb 2011 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2011-02-17:/grammars-ambiguity-and-expressibility.html</guid><category>Blog</category></item><item><title>Interpreting the Free Software Movement as Religion</title><link>https://hackthology.com/interpreting-the-free-software-movement-as-religion.html</link><description>&lt;p&gt;&lt;em&gt;A person should aspire to live an upright life openly with pride, and
this means saying “No” to proprietary software.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;- RMS&lt;/p&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;The Free Software movement which began in earnest twenty-five years ago
has become one of the most quietly influential movements of the Internet
age. Today, many social phenomenas …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Wed, 08 Dec 2010 00:00:00 -0500</pubDate><guid>tag:hackthology.com,2010-12-08:/interpreting-the-free-software-movement-as-religion.html</guid><category>Blog</category></item><item><title>Lessons Learned While Implementing a B+Tree</title><link>https://hackthology.com/lessons-learned-while-implementing-a-btree.html</link><description>&lt;p&gt;B+Trees are complex disk based trees used to index large amounts of
data. They are used in everything from file systems, to relation
databases, to new style databases gaining popularity today. Sometimes a
domain specific application needs to index a large amount of data, but
cannot use a traditional …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tim Henderson</dc:creator><pubDate>Sat, 10 Apr 2010 00:00:00 -0400</pubDate><guid>tag:hackthology.com,2010-04-10:/lessons-learned-while-implementing-a-btree.html</guid><category>Blog</category></item></channel></rss>