Way back in 2013, I wrote a music theory explorer using the Java-based processing.org framework. I’ve always wanted to port it to the wonderful web-native p5.js , but couldn’t find the time to complete it. With a little LLM help I was able to do so in a couple of hours and even add a few features; check it out at https://oneilsh.github.io/Interval/ .
The monarchr package makes it easy to work with Knowledge Graph (KG) data in R. Designed with
the Monarch Initiative in mind, the package supports any KG
in the standard KGX format , including those at https://kghub.org/ , via either files for Neo4j-hosted graph databases. With
 monarchr I wanted to design a tidy-inspired API around pipes, allowing users to query nodes and flexibly…
Opaiui (oh-pie-you-eye) provides a rapid prototyping framework for LLM-backed chat applications based on Pydantic.AI and Streamlit .
While Streamlit provides relatively high-level components for chat input/output and display, wiring up a framework like Pydantic.AI is still a fair amount of work, particularly if one wants to support streaming responses and tool-calling provenance, or other…
In this study, published in npj Digital Medicine , I apply an unsupervised learning technique known as Latent Dirichlet Allocation (LDA) to identify condition clusters across millions of patients in the N3C database. Such clusters are not guaranteed to be related to COVID-19, however. To identify those that are, we look at how patients are assigned to clusters before and after COVID-19 infection,…
What if an AI could perform a literature review for you? Here I illustrate using Large Language Models (LLMs) and related technologies for 
 search and summarization. We use OpenAI's gpt-3.5-turbo (ChatGPT) and gpt-4 models, SentenceTransformers sentence embeddings, and the PubMed API to 
 build a first-pass literature summarizer, that 1) designs an effective search query given a user…
Since starting a new position with the TISLab in early 2020, my primary effort has been as Training Coordinator with the National COVID Cohort Collaborative, or N3C . This truly amazing group of scientists, clinicians, and engineers has accomplished something unique in US healthcare history: sourcing electronic health records from hospital systems and medical centers nationwide (56 and counting)…
DS@OSU was a project I had the priveledge of co-leading (along with Dr. Robin Pappas) in collaboration with Oregon State UIT. Driven by a broadly recognized need to enable accessible and scalable infrastructure for data science (and related) instruction, we embarked on campus-wide needs assessments, a steering committee, technical and faculty advisory committees, fact-finding sessions with peer…
TidyTensor is an R package for inspecting and manipulating tensors (multidimensional arrays). i
It provides an improved print() function for summarizing structure, named tensors,
conversion to data frames, and high-level manipulation functions. Designed to complement the
excellent keras package, functionality is layered on top of base R types. 
 TidyTensor was inspired by a…
My CV . 
 I am an Assistant Professor with the TISLab in the Department of Genetics at the UNC Chapel Hill School of Medicine . Previously I was an Assistant Professor at the CU Anschutz Department of Biomedical Informatics and Senior Faculty Research Assistant with the Center for Genome Research and Biocomputing at Oregon State University. I earned my Ph.D./M.S. in 2012/2009 from the…
Sometimes you just get tired of paying AWS & Digital Ocean. A quick sketch of my homelab, inspired by the good folks at r/homelab . 
 The main goal of the project was to enable the quick creation of Virtual Machines (or containers), accessible by subdomain such as project1.mydomain.net, project2.mydomain.net, etc., all under a single dynamic IP address. I managed to make it work pretty well,…

 
 
 


 In an earlier post we considered machine learning “models” as functions producting predictions from data, and training models to be the production of these functions with higher-order functions. From there we built regression trees –models created recursively by determining 1) a splitting column (column 1 or 2 in this case), and 2) a good value in that column to…
I recently ran across this excellent article explaining gradient boosting in the context of regression trees. The article concludes by describing how the technique implements a gradient-descent process, but what I find most fascinating is the concept of “functional modeling”–building machine learning models from other models as building blocks. 
 This post explores that idea by implementing…
I’ve been studying up on deep learning recently (I know, trendy), and I learned something along the way that I think is just incredible. 1 
 First, a little background: deep learning models are artificial neural networks, represented as potentially thousands of nodes with millions of weighted connections between them. Input numbers are fed in to some nodes on one side, and out pops output…
This book is based on a workshop I taught a few times at OSU, meant to introduce computer science theory to biologists. 
 Digital version available online at Leanpub . 
 Also available in print at Amazon . 
 It introduces topics in programming, computer science, and bioinformatics via examples in the R programming language. While often associated with statistics, Bio/Recursion employs…
Read Online at Open Oregon State 
(Open-Access & Free!) 
 Or order a copy from Amazon or OSU Press .
(Scribble in the margins!) 
 This Open-Access textbook was a collaboration with Open Oregon State and OSU Press. It aims to provide life scientists and students the skills necessary for research in a data-rich world. The text covers accessing and using remote servers via the…
I’ve been teaching an evening class at the Oregon State University Craft Center in “3D modeling and printing.” I don’t know a ton about this topic, to be honest. But I know a little more than I did a year ago, and it was hard-earned knowledge. Why not share it? 
 At OSU it seems like I can’t walk out the door without bumping into a 3d printer (and students and faculty get access to them), but…
I’m (usually) a fan of the R programming language, though in a few ways it lacks features computer scientists expect. For example, R lacks many data structures provided by high-level languages, such as trees, queues, and stacks. This is somewhat complicated by R’s functional nature–R programmers expect data structures to be “persistent,” such that previous versions of…
These were made between 2012 and 2015, some at a studio in Marquette, MI, and some at the Notre Dame Glass Club. 


 

 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 

…
There’s a pretty cool app called Codea, which is a programming IDE similar processing.org , but in Lua, on the iPad. 
 Lua supports first-class functions, so I played around with designing a parameterized
L-System which builds sentences as lists of closures. 

 
 
 

I don’t know what made me think it would be a good idea to lug my heavy camera up to the top
of South Sister to see the sunrise, but the photos at least turned out ok. Many thanks to Nathan
Brown for organizing the trip. 


 

 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 

 
…
Climate change is likely to have profound impacts on ecological systems, but in some important cases we’re still a long way from understanding exactly what those impacts might be. For instance, it has been posited that under warming, species in the northern hemisphere will be enhanced at their northern range edge (where presumably species are fitness-limited, and hence range-limited, by the…
So, I was on TV once. My wife had contacted the Steve Harvey show suggesting I could use a wardrobe makeover. It was quite a surprise to me–we flew to Chicago for filming just a few days after I learned
anything about it! 
 It was a ton of fun, and the Steve Harvey crew and show was a great experience. (And I got some nice clothes out of it.) 

 
 
 

A timelapse video of me making a marble at the Oregon State University Craft Center. Fun fact: the title logo in the video is
the result of a custom processing.org program. 

 
 
 

Distributing large data files to all the nodes on a computing network is an important problem in large-scale scientific computing. We developed a more accurate mathematical model for this problem, and although we’ve shown minimum-time distribution to be NP-Hard (construction above), we’ve also developed a logarithmic approximation solution. 
 This paper was initially presented at…
Back in my day, the word “theory” meant something. So, in all my attempts to learn music theory, I was stymied by suggestions of memorizing seemingly unrelated collections of patterns, facts, and rediculous nomenclature. With dedication, books, wiki pages, and a good instructor (Ed Dee of Corvallis), though, I was able to make some progress. To help, I wrote a little program for…
TimelapseThing is a Python script that includes a number of tools for working with timelapse image series (in JPG format). It can be used to deflicker images (if some images in the series are mildy under- or over-exposed), merge a series of JPGs into a video, batch crop and resize, expand a series into a longer series, and lighten/darken/median merge using a sliding window approach (see below) for…
Assessing the quality and completeness of transcriptome assemblies is a challenge. For this problem, we developed a measure of gene assembly known as the “ortholog hit ratio.” First we associate each assembled gene with its closest match in a related organism. Then we compare the length of the matching region to the total length of the related gene. (Comparing the length of only the…
When working with sequencing datasets of ecological interest, an interesting problem is how to tease out the genetic diversity present in the population being sequenced. Usually, assembly software simply aligns the short read sequences, and determines the consensus sequence based on the majority vote of each position. However, we may wish to seperately assemble each haplotype (version) of each…
I did this project with Mike Olson, a Notre Dame graduate student. (He’s narrating the video.) 
 We studied the proper design of user interfaces in this class. Although we mostly focused on graphical interfaces, we also learned how to interface with motion-based systems such as the Nintendo Wii remote and Balance Board. 
 For our final project, we wanted to design an interactive…
This class was very interesting; we studied some of the basics of online algorithms as well as some applications to computational finance. Perhaps the most intriguing parts (for someone already familiar with online algorithms) were what we learned about classic computational finance, such as Black-Scholes-Merton. 
 This “project” is a review of the main result of an interesting…
Much of the research I performed during my Master’s was on the newsvendor problem, which deals with attempting to guess the demand for short-lived products so as to maximize profits. Unfortunately, data about newspaper sales is tough to come by. So, why not use an online equivalent? This project aims at predicting the number of comments a Slashdot story will generate given text which appears…
Machine learning methods and inventory management were a focus in my Master’s work. In the newsvendor problem, an amount of product to order must be decided upon periodically for reselling. Ordering too much results in losses due to overstock which must be discarded; too little results in losses due to lost sales. 
 Traditional approaches experience a tradeoff in that some methods…
This was a project I did for Cryptography, which implemented a digital cash scheme as a web service. The idea behind digital cash is that, well, it’s digital cash. Which means, it’s a digital object which has value and can be traded/spent, but is also anonymous. This is accomplished via digital signatures. Alice, who has money in the bank, sends the bank an string of random letters and…
I did this project with Allison Regier. It’s not too difficult to write a program which uses an exhaustive search to play a game. What this requires, though, is some way to evaluate one board against another to tell which moves to make. Usually such a comparison function is hand written. 
 We asked whether it was possible to write a generic board evaluation function which would learn a…
I also studied formal logic, under the direction of the amazing Don Faust . I still recommend the book What Is Mathematical Logic for a good (but dense) overview of the topic. These are just some proofs I worked out. 
 
 Proof of deduction theorem 
 Proof of a lemma used in proof of Completeness: Soundness implies Completeness 

I took a Theory of Knowledge class as an undergraduate, and thoroughly enjoyed it. To this day I’m surprised how much epistemology is to be found at the intersection of science and engineering. 
 
 Three Principles of Cartesian Epistemology 
 Gettier’s Second Counterexample 
 The Nature of Sense Data 
 Unger’s Defense of Scepticism 
 Goldman’s Causal…
This one was a long time in the making. The case is cherry, the face plate and knobs are copper. The left knob is input select, center volume, and the right knob is a rotary dimmer switch for the (incandescent) backlight on the volume knob. Sounds absolutely beautiful, looks just as good, with more coats of polyurethane than I kept track of! Thanks to all of the people at diyaudio.com, especially…
In my earlier programming career, I was very interested in cellular automata and Braitenberg vehicles. I wrote a couple of object-oriented Java packages to explore their behavior. These are Java applets, one should be able to run them with appletviewer PanelApplet.html .
The second iteration of the headphone amp was the same internal design, packed into a slightly smaller, sleeker container. This one has a much more solid feel to it.
It’s based on Chu Moy’s design ; I checked the first iteration using a scope and it checks out nice, no clipping and the input/output resistances are good (100k in, theoretical 0 out.) 


 

 
…
A few old code files from my undergraduate CS122 class; these are all written as Java applets (as was the fashion at the time), so I’m just making the code available. They do still run though (thanks Java!)