RSSAmplifier

Blog

Hackthology

hackthology.comRSS feed ↗48 posts

Latest posts

Taming the Variants: Multi-Architecture Continuous Testing at Google

Tim A. D. Henderson , 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. Taming the Variants: Multi-Architecture Continuous Testing at Google . ICST 2026 . DOI . PDF . WEB …

Speculative Testing at Google with Transition Prediction

Avi Kondareddy, Sushmita Azad, Abhayendra Singh, and Tim A. D. Henderson . Speculative Testing at Google with Transition Prediction . ICST Industry Track 2025 . DOI . PDF . WEB . Note This is a conversion from a latex paper I wrote. If you want all formatting correct you should read the pdf version . Abstract Google's …

SafeRevert: When Can Breaking Changes be Automatically Reverted?

Tim A. D. Henderson , Avi Kondareddy, Sushmita Azad, and Eric Nickell. SafeRevert: When Can Breaking Changes be Automatically Reverted? . ICST Industry Track 2024 . DOI . PDF . WEB . Note This is a conversion from a latex paper I wrote. If you want all formatting correct you should read the pdf version . Abstract …

Flake Aware Culprit Finding

Tim A. D. Henderson , Bobby Dorward, Eric Nickell, Collin Johnston, and Avi Kondareddy. Flake Aware Culprit Finding . ICST Industry Track 2023 . DOI . PDF . WEB . Google Research Preprint . Note This is a conversion from a latex paper I wrote. If you want all formatting correct you should read the pdf version …

Improving fault localization by integrating value and predicate based causal inference techniques

Yiğit Küçük, Tim A. D. Henderson , and Andy Podgurski Improving fault localization by integrating value and predicate based causal inference techniques . ICSE 2021 . DOI . PDF . SUPPLEMENT . ARTIFACT . WEB . Abstract Statistical fault localization (SFL) techniques use execution profiles and success/failure information from software executions, in conjunction …

The Impact of Rare Failures on Statistical Fault Localization: the Case of the Defects4J Suite

Yiğit Küçük, Tim A. D. Henderson , and Andy Podgurski The Impact of Rare Failures on Statistical Fault Localization: the Case of the Defects4J Suite . ICSME 2019 . DOI . PDF . WEB . Abstract Statistical Fault Localization (SFL) uses coverage profiles (or "spectra") collected from passing and failing tests, together …

Evaluating Automatic Fault Localization Using Markov Processes

Tim A. D. Henderson , Yiğit Küçük, and Andy Podgurski Evaluating Automatic Fault Localization Using Markov Processes . SCAM 2019 . DOI . PDF . SUPPLEMENT . WEB . Note This is a conversion from a latex paper I wrote. If you want all formatting correct you should read the pdf version . Abstract …

Gödel's Incompleteness Theorem Does Have Philosophical Implications

In 1931 Kurt Gödel published a paper in German that has continued to reverberate through the scientific community: 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. Translation: doi pdf This paper sets clear limits …

How to Evaluate Statistical Fault Localization

Cite as: Tim A. D. Henderson . How To Evaluate Statistical Fault Localization . Blog. 2018. https://hackthology.com/how-to-evaluate-statistical-fault-localization.html PDF . WEB . Note This is a conversion from a latex paper I wrote. If you want all formatting correct you should read the pdf version . Note I now have a pulished …

Behavioral Fault Localization by Sampling Suspicious Dynamic Control Flow Subgraphs

Tim A. D. Henderson and Andy Podgurski. Behavioral Fault Localization by Sampling Suspicious Dynamic Control Flow Subgraphs . ICST 2018 . DOI . PDF . WEB . Abstract 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 …

How to Tokenize Complex Strings with Lexmachine

This article is about using lexmachine 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 lexmachine to process both accurately and quickly. If you …

Faster Tokenization with a DFA Backend for Lexmachine

Lexmachine is a lexical …

Frequent Subgraph Analysis and its Software Engineering Applications

Tim A. D. Henderson . Frequent Subgraph Analysis and its Software Engineering Applications . Case Western Reserve University . Doctoral Dissertation. 2017. PDF . WEB . Abstract 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 …

Rethinking Dependence Clones

Tim A. D. Henderson and Andy Podgurski. Rethinking Dependence Clones . IWSC 2017 . DOI . PDF . WEB . Abstract Semantic code clones 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 …

A Job Queue in BASH

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 …

`xrandr` Script to Setup External Monitor

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: #!/usr/bin/env bash ## size and refresh rate of the screen X …

Frequent Subgraph Mining of Personalized Signaling Pathway Networks Groups Patients with Frequently Dysregulated Disease Pathways and Predicts Prognosis

A. Durmaz*, T. A. D. Henderson *, D. Brubaker, and G. Bebek. Frequent Subgraph Mining of Personalized Signaling Pathway Networks Groups Patients with Frequently Dysregulated Disease Pathways and Predicts Prognosis. PSB 2017 . * Co-First Author DOI . PUBMED . PDF . SUPPLEMENT . WEB . Abstract Motivation Large scale genomics studies have generated comprehensive molecular characterization of …

Sampling Code Clones from Program Dependence Graphs with GRAPLE

Tim A. D. Henderson and Andy Podgurski. Sampling Code Clones from Program Dependence Graphs with GRAPLE . SWAN 2016 . DOI . PDF . SUPPLEMENT . CODE . WEB . Abstract We present GRAPLE , a method to generate a representative sample of recurring (frequent) subgraphs of any directed labeled graph(s). GRAPLE is based on frequent subgraph …

Managing Infrastructure with Python, Fabric and Ansible

For PyOhio 2016 I gave a short talk on managing infrastructure. You can watch the talk on youtube or look at the slides . 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 …

Writing a Lexer in Go with LexMachine

This article is about lexmachine , 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. A lexer is a software component that analyzes a string and breaks it up …

Golang中的面向对象继承

Golang的面向对象机制与Smalltalk或者Java等传统面向对象的编程语言不同。传统面向对象编程语言的一个重要特性是继承机制。因为继承机制支持在关联对象间进行代码复用和数据共享。继承 …

Object Oriented Inheritance in Go

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 …

Exceptions for Go as a Library

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 …

First Rust Macro

I started learning Rust 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: ( writeln! [ io :: stderr (), "{}" , err ]). ok (). expect ( "write to stderr failed" ); That seems a bit verbose to me versus printing to the …

Scala Notes

My notes as I relearn Scala. I am reading through Programming in Scala (2nd ed.) Quibble with the Functional List > from page 43 Why not append to lists? Class List does offer an append operation -- it's written :+ and is explained in Chapter 24 -- but this operation is rarely used, because …

Always Go To Editable Command Mode in Vim

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 q: this places you in editable command mode. If you always want to go to that mode you can …

Private Methods and Functions Should be Tested

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. Testing Theory Why is software tested? It is tested …

How to Re-Use a Sub-Project's Buildfile in Apache Buildr

Apache Buildr 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 Buildfile from another project. The intreprepid hacker can fix that problem …

Vi Mode in Python Shell, IRB, and Elsewhere!

Enable vi mode in irb, python shell, and other readline based systems: cat << END >>~/ . inputrc > set - o vi > set editing - mode vi > END Now everything has vi key bindings! You are welcome.

Functional Iteration in Go

Go provides a built in way to iterate easily over built-in collection types: maps , slices and chans . Iterating with these types is much like iterating using for-each type loops in languages like Python, Ruby and Java. for key , value := range map { // key, value } for index , item := range slice { // index, item …

How to Compile MySQL's "ON DUPLICATE KEY UPDATE" in SQL Alchemy

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 …

Innovation isn't always the answer.

From, http://www.wired.com/wiredscience/2013/11/vaclav-smil-wired/ , at the bottom. So the answers are not technological but political: better economic policies, better education, better trade policies. Right. Today, as you know, everything is "innovation." We have problems, and people are looking for fairy-tale solutions—innovation like manna from …

The Ruby For Loop

I am taking some time to learn Ruby this fall from Eloquent Ruby . The second chapter on choosing the right control structures has this paragraph (emphasis mine): Since the two versions of the “print my fonts” code are essentially equivalent,[1] why prefer one over the other? Mainly it is …

An in Memory Go Implementation of Linear Hashing

In the last post 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. In the demonstration version …

Linear Hashing

Linear Hashing 2 , 3 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 …

Cryptography and Complexity

This is a conversion from a latex paper I wrote. If you want all formatting correct or the bibliography you should read the pdf version . Cite as: Henderson, Tim A. D. Cryptography and Complexity . Unpublished. Case Western Reserve University. MATH 408. Spring 2012. Modern cryptographic systems are built on problems …

Programming Never Gets Easier

Another comment on E.W.Dijkstra Archive: The Humble Programmer (EWD 340) 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 …

New Site

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 …

The Limits of Type Systems

E.W.Dijkstra Archive: The Humble Programmer (EWD 340) 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 …

We can't automate the programmer.

HN Comment 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 …

Always Pertinent - C a giant leap backwards.

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 …

Passmash - The Site Specific Password Munger

Passmash 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. What is a Munger? A munger takes a password and turns it into another password, "munging" it. In particular passmash takes A password (supplied …

Ternary Search Tries for Fast Flexible String Search : Part 1

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 …

How To: Write Self Updating Python Programs Using Pip and Git

If you are a pip 1 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 …

Announcing swork - Simplify your Shell Configuration

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 …

Grammars, Ambiguity, and Expressibility

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 …

Interpreting the Free Software Movement as Religion

A person should aspire to live an upright life openly with pride, and this means saying “No” to proprietary software. - RMS Introduction 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 …

Lessons Learned While Implementing a B+Tree

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 …