<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on Tim Mastny</title>
    <link>https://timmastny.com/</link>
    <description>Recent content in Home on Tim Mastny</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language><atom:link href="https://timmastny.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Homemade Quetelet Rings</title>
      <link>https://timmastny.com/blog/quetelet-rings/</link>
      <pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/quetelet-rings/</guid>
      <description>Homemade Quetelet Rings Centers of other optical phenomena Why are there bands of color? Why are the bands circular? Positions of Light and Eye c = h c &amp;lt; h c &amp;gt;&amp;gt; h c = h and c &amp;lt; h Capturing the full circle Beamsplitter Setup Homemade Quetelet Rings I made Quetelet rings at home!
Quetelet rings are colored rings that appear when light reflects off a dusty mirror. There are many fun questions to explore:</description>
    </item>
    
    <item>
      <title>Sendoff for Cookin&#39; Beets: My Abandoned Playdate Game</title>
      <link>https://timmastny.com/blog/sendoff-cookin-beets-playdate/</link>
      <pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/sendoff-cookin-beets-playdate/</guid>
      <description>Why Abandoned? Art Complexity Level Design Game Overview Cookin’ Beets is a kitchen simulation inspired by Cook, Serve, Delicious! and Overcooked for the Playdate. The player receives orders and must gather, prepare, cook, and assemble dishes to satisfy customers.
I also wanted Cookin’ Beets to be a rhythm game, or at least have reactive music elements based on the demand surges and cooking timers. Those elements were never implemented or designed, but were the main inspiration for the name: beats &amp;lt;-&amp;gt; beets.</description>
    </item>
    
    <item>
      <title>False Sharing</title>
      <link>https://timmastny.com/blog/false-sharing/</link>
      <pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/false-sharing/</guid>
      <description>Sharing, True and False Cache Coherency and Cache Design a, b Example Performance M-series Processor Performance Atomic Operations False Sharing Mutexes Conditions for Performance Loss Conclusion Which program is faster?
uint16_t a = 0; uint16_t b = 0; char c[126]; #pragma omp parallel num_threads(2) { int id = omp_get_thread_num(); do_work(id == 0 ? &amp;amp;a : &amp;amp;b); } uint16_t a = 0; char c[126]; uint16_t b = 0; #pragma omp parallel num_threads(2) { int id = omp_get_thread_num(); do_work(id == 0 ?</description>
    </item>
    
    <item>
      <title>Tuning B&#43; Trees for Memory Performance</title>
      <link>https://timmastny.com/blog/tuning-b-plus-trees/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/tuning-b-plus-trees/</guid>
      <description>B+ trees are a fun test-bed to study memory performance because they combine sequential and random access patterns. If you aren’t familiar with B+ trees, check out this resource.
Let’s explore search: say we want to find the key 55. Within a node, keys are already sorted and the algorithm scans sequentially until the first key greater than 55 is found (blue arrow). At that point, we follow the child pointer, which likely requires a random memory access (green arrow), and it starts scanning again.</description>
    </item>
    
    <item>
      <title>Why Branch Prediction Needs Real Data</title>
      <link>https://timmastny.com/blog/branch-prediction-real-data/</link>
      <pubDate>Sun, 22 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/branch-prediction-real-data/</guid>
      <description>Reasons to think gshare is better gshare is better gshare is worse Mathematical proof that gshare is worse Intuitive explanation why gshare is worse XOR Concatenation Conclusion This is part of my branch prediction series.
Visualizing CPU Pipelining Why Branch Prediction Needs Real Data Hacking LLDB to Evaluate Branch Predictions (coming soon) One way to extend the basic branch prediction algorithm I cover in Visualizing CPU Pipelining is to save the history of whether the last n branches were taken or not.</description>
    </item>
    
    <item>
      <title>Visualizing CPU Pipelining</title>
      <link>https://timmastny.com/blog/visualizing-cpu-pipelining/</link>
      <pubDate>Sat, 30 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/visualizing-cpu-pipelining/</guid>
      <description>Visualizing pipelines Instruction Decoding Hazard detection Forwarding HDU and FU Branching Predict branch not taken Dynamic branch prediction Conclusion This is part of my branch prediction series.
Visualizing CPU Pipelining Why Branch Prediction Needs Real Data Hacking LLDB to Evaluate Branch Predictions (coming soon) I want to share what I’ve learned about CPU pipelining. Thanks to Dan Luu’s branch prediction write-up, I was vaguely aware how this worked conceptually, but I was motivated to dive into the details after reading Rodrigo Copetti’s Playstation MIPS write-up where he talked about branch delay slots and how they evolved into branch prediction.</description>
    </item>
    
    <item>
      <title>A* Tricks for Videogame Path Finding</title>
      <link>https://timmastny.com/blog/a-star-tricks-for-videogame-path-finding/</link>
      <pubDate>Sat, 16 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/a-star-tricks-for-videogame-path-finding/</guid>
      <description>Linear Pathing Dijkstra’s Algorithm A* Search Algorithm A* Tricks Implicit Graph Data Structure Geometry Informed Heuristics See the discussion of this post on Hacker News.
My wife and I decided to make an 8-bit, top-down, Zelda-like game written for the PPU466 (from CMU 15-466 Computer Game Programming course). The PPU466 is a graphics API kind of like the PICO-8 fantasy console, in the sense that it’s restricted to 8-bit graphics, 4 colors per tile, fixed backgrounds, and a low number of sprites.</description>
    </item>
    
    <item>
      <title>Debugging MIT 6.824: Distributed Systems</title>
      <link>https://timmastny.com/blog/debugging-mit-6.824-distributed-systems/</link>
      <pubDate>Wed, 29 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/debugging-mit-6.824-distributed-systems/</guid>
      <description>Separate Logical and Timing Requirements State Changes Debuggers MapReduce Raft This November I worked on MIT 6.824: Distributed Systems (the spring 2023 semester is called 6.5840). I chose to work on this class because:
the tasks are complicated enough that I’m stretching my abilities the projects have clear guidelines and success criteria (automated testing is awesome) I get to learn some fundamentals of systems I use in my real job (like Raft in Kubernetes) I spent a lot of time debugging my distributed systems, and I got a lot of help from these amazing guides.</description>
    </item>
    
    <item>
      <title>How Garbage Collection works in Crafting Interpreters</title>
      <link>https://timmastny.com/blog/garbage-collection-crafting-interpreters/</link>
      <pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/garbage-collection-crafting-interpreters/</guid>
      <description>Crafting Interpreters is an awesome book by Robert Nystrom about interpreters, compilers, and programming languages. I love this book, because it teaches you how to build 2 interpreters line-by-line: a tree-walking interpreter in Java and then a bytecode virtual machine in C.
In Chapter 26, he builds a mark-and-sweep garbage collector and does a fantastic job explaining the algorithm with detailed diagrams and illustrations.
But I also wanted to understand how our implementation of mark-and-sweep worked, not just the algorithm.</description>
    </item>
    
    <item>
      <title>Remotely connecting to Windows 10 with an iPad</title>
      <link>https://timmastny.com/blog/remote-connect-windows10-ipad/</link>
      <pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/remote-connect-windows10-ipad/</guid>
      <description>Windows Setup WSL iPad I recently got an iPad and I’d like to use it to write some code. I found the app a-Shell was the best way to get code running locally on my iPad. The terminal app provides custom builds of Python, C, Vim, git, ssh: most of the things you need to get started. But I was still frustrated by the limitations. What I really wanted was VSCode and the ability to install and build any software.</description>
    </item>
    
    <item>
      <title>Writing R tutorials with GPT-3</title>
      <link>https://timmastny.com/blog/gpt-3-tutorials/</link>
      <pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/gpt-3-tutorials/</guid>
      <description>dplyr Prompt Response dplyr - hadley Prompt Response Inspired by Gwern’s GPT-3 generated fiction and Github Copilot, I wanted to see if GPT-3 could write R tutorials. I created an accout on the Open AI GPT-3 Playground and started experimenting.
The quality of the response depends heavily on the prompt. Asking for a tutorial on dplyr with expected keywords produced something recognizable as R but incoherent. Adding “hadley” (as in tidyverse creator Hadley Wickham) to the prompt completely transformed the answer.</description>
    </item>
    
    <item>
      <title>Why I Use Gumshoe, not D&amp;D, for Role-playing Investigations</title>
      <link>https://timmastny.com/blog/why-i-use-gumshoe-for-role-playing-investigations/</link>
      <pubDate>Sun, 07 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/why-i-use-gumshoe-for-role-playing-investigations/</guid>
      <description>Introduction Why Gumshoe? Conclusion Introduction In a classic mystery story, the heroes follow a trail of clues to solve the case. But deduction is only part of the tale: car chases, shootouts, and fist fights all add to the excitement.
Investigative role-play games capture all elements of the mystery story. The DM creates a world with logical, consistent clues for the players to follow. The players role-play an investigator with unusual skills and abilities.</description>
    </item>
    
    <item>
      <title>How Game Mechanics Create Tension</title>
      <link>https://timmastny.com/blog/how-game-mechanics-create-tension/</link>
      <pubDate>Fri, 05 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/how-game-mechanics-create-tension/</guid>
      <description>Introduction Encounter Model Decision Tension Risk Costs Conclusion Introduction Most advice about how to create tension in role-playing games is about the narrative: make things personal, raise the stakes, or create a sense of paranoia.1 But the rules of a system also create tension. The risky dice roll to kill the boss or the bold tactic to turn the tide increases the tension set by the narrative.
In this post, I’ll show that role-playing systems use risk and cost to increase the tension felt by players.</description>
    </item>
    
    <item>
      <title>Adding Integers in Logarithmic Time</title>
      <link>https://timmastny.com/blog/adding-integers-logarithmic-time/</link>
      <pubDate>Fri, 02 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/adding-integers-logarithmic-time/</guid>
      <description>Elementary School Addition Algorithm Hardware Complexity Elementary School Adder Carry-lookahead Adder Space Complexity Real-world Implementation Elementary School Addition Algorithm The elementary school addition algorithm works for binary numbers 1:
1 1 1 1 1 (carried digits) 0 1 1 0 1 + 1 0 1 1 1 ------------- = 1 0 0 1 0 0 = 36 It works in binary (or any base) because the sum of any 3 single-digit numbers is at most two digits.</description>
    </item>
    
    <item>
      <title>Discrete Cosine Transform and Time Series Classification</title>
      <link>https://timmastny.com/blog/discrete-cosine-transform-time-series-classification/</link>
      <pubDate>Fri, 14 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/discrete-cosine-transform-time-series-classification/</guid>
      <description>Introduction Components of time series Cosine components Time series dimensionality reduction How much reduction is possible? Dimensionality reduction for time series classification Data compression Note: This is a part of a series of articles for my package tsrecipes (Github, website). The full article, including the code, can be found here.
Introduction The discrete cosine transform (DCT) can provide significant dimensionality reduction for time series, improving accuracy in time series classification and clustering.</description>
    </item>
    
    <item>
      <title>Dynamic Time Warping and Time Series Clustering</title>
      <link>https://timmastny.com/blog/dynamic-time-warping-time-series-clustering/</link>
      <pubDate>Thu, 13 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/dynamic-time-warping-time-series-clustering/</guid>
      <description>Introduction Distance Metrics Time Series Distance Dynamic Time Warping Note: This is a part of a series of articles for my package tsrecipes (Github, website). The full article, including the code, can be found here.
Introduction Working with a set of time series measuring related observations requires a different set of tools compared to analyzing or forecasting a single time series.
If you want to cluster time series into groups with similar behaviors, one option is feature extraction: statistical summaries that characterize some feature of the time series, such as min, max, or spectral density.</description>
    </item>
    
    <item>
      <title>Why you should use siuba, the dplyr of Python</title>
      <link>https://timmastny.com/blog/why-you-should-use-siuba-dplyr-for-python/</link>
      <pubDate>Thu, 06 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/why-you-should-use-siuba-dplyr-for-python/</guid>
      <description>Introduction Concise lambdas with tab-complete Consistent output for common operations Unified group API Introduction If you find yourself doing data analysis in Python, you should check out siuba. siuba is a port of the R package dplyr, but you don’t need to know any R to get started.
siuba implements a domain specific language for querying data. You can use siuba to query both local Python data frames and remote SQL databases.</description>
    </item>
    
    <item>
      <title>Siuba and IPython tab-complete</title>
      <link>https://timmastny.com/blog/siuba-and-ipython-tab-complete/</link>
      <pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/siuba-and-ipython-tab-complete/</guid>
      <description>Introduction Completion IPython and Completions Environment Commands Completion Appendix Siuba Why not hp? Basic Python Completion Introduction Siuba is an amazing port of dplyr to the python ecosystem. Like dplyr, siuba defines an domain specific querying language: you can use it query pandas data frames, as well as SQL and Spark data sources.
One killer feature of dplyr is the tab-completion of columns provided in RStudio.
It would be really cool if this worked in siuba, and now it does!</description>
    </item>
    
    <item>
      <title>Tuning and Cross-validation with tidymodels and scikit learn</title>
      <link>https://timmastny.com/blog/tuning-and-cross-validation-with-tidymodels-and-scikit-learn/</link>
      <pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/tuning-and-cross-validation-with-tidymodels-and-scikit-learn/</guid>
      <description>Introduction tidymodels and sklearn Introduction tidymodels is the new framework from Max Kuhn, David Vaughan, and Julia Silge at RStudio. It’s the successor to the caret package, which was heavily featured in Max Kuhn’s book Applied Predictive Modeling.
tidymodels promises a modular, extensible design for machine learning in R. It also has a wonderful website design to help you get started as soon as possible, with a focus on examples and case studies walking you through the components of the platform.</description>
    </item>
    
    <item>
      <title>Syntax Highlighting</title>
      <link>https://timmastny.com/blog/syntax-highlighting/</link>
      <pubDate>Sat, 27 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/syntax-highlighting/</guid>
      <description>Themes and Parsing Parsing Themes Themes and Parsing There are two dimensions to syntax highlighting: parsing and themes.
Parsing are the tokens identified by the highligher. The theme defines how those individual tokens are styled.
Parsing Parsing is the foundation of syntax highlighting, because it defines the space of possible highlighting.
For examples, here are the tokens identified by some of the popular syntax highlighters:
highlighter type tokens highlight.js client string, keyword rainbow.</description>
    </item>
    
    <item>
      <title>Intro to Hugo: The Masterchef of Layouts</title>
      <link>https://timmastny.com/blog/intro-hugo-blogdown-chef/</link>
      <pubDate>Wed, 24 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/intro-hugo-blogdown-chef/</guid>
      <description>Introduction Pages (and sandwiches) Lists (and menus) Dinner is served Introduction Hugo Themes and blogdown make blogging as easy as writing markdown or RMarkdown, but in the back of my mind I’ve never been totally satisfied by the defaults. Scrolling through the themes, I could never find one that was just right. And it wasn’t just the appearance. I wanted to organize and layout my website in a way none of the existing themes offered:</description>
    </item>
    
    <item>
      <title>Reading for Pleasure</title>
      <link>https://timmastny.com/blog/reading-for-pleasure/</link>
      <pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/reading-for-pleasure/</guid>
      <description>Reading books serves many functions. Reading transmits (but doesn’t impart) knowledge. Memes like 52 Books a Year or bookcase zoom backgrounds generate status or signal in-group membership. But books can also be read for pleasure. My motivation in writing this article is to give myself permission to read for pleasure and to provide some tips that make reading more enjoyable.
Make reading fun If you google “how to make reading fun” nearly every article is about making reading fun for children.</description>
    </item>
    
    <item>
      <title>Tests for Pairwise Mean Differences in R</title>
      <link>https://timmastny.com/blog/tests-pairwise-categorical-mean-emmeans-contrast/</link>
      <pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/tests-pairwise-categorical-mean-emmeans-contrast/</guid>
      <description>Introduction How to use contrasts in R Cheatsheet Pairwise differences Comparison to overall mean Pairwise comparisons within groups Consecutive comparisons Before and after Introduction Inspired by Jonas K. Lindeløv’s excellent website
common statistical tests are linear models
this post will walk through common statistical tests used when analyzing categorical variables in R.
I’ll cover 5 situations:
pairwise differences between members of a category comparison to the overall category mean pairwise differences within a category consecutive comparisons of time-based or sequential factors before-and-after comparisons How to use contrasts in R In short: don’t bother.</description>
    </item>
    
    <item>
      <title>dplyr 1.0.0</title>
      <link>https://timmastny.com/blog/dplyr-1-rowwise-across/</link>
      <pubDate>Tue, 07 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/dplyr-1-rowwise-across/</guid>
      <description>Introduction Stop Repeating Names Summary Rows Introduction dplyr 1.0.0 is coming soon! I’m really excited about this release. I think rowwise and across are excellent new functions that make common operations feel more intuitive. You can try them out for yourself by installing the development version from Github until there is a CRAN release.
This post is just me playing around with some of the new features.
Stop Repeating Names I’ve probably typed something like this a thousand times:</description>
    </item>
    
    <item>
      <title>AWS Sagemaker and R</title>
      <link>https://timmastny.com/blog/aws-sagemaker-r/</link>
      <pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/aws-sagemaker-r/</guid>
      <description>Introduction AWS Sagemaker AWS cost Productionizing machine learning predictions Sagemaker Features Training and Evaluation Deployment What Sagemaker isn’t sagemaker R package What to watch out for What’s next Introduction I’m excited to announce my sagemaker R package!
AWS Sagemaker is a powerful tool, and I hope my package makes it easier for people to try it out!
Since the Github page and website already introduce the sagemaker R package, I want to use this blog post to introduce AWS Sagemaker, productionizing machine learning, and how the my sagemaker R package tries to make it all easier.</description>
    </item>
    
    <item>
      <title>Funnel Charts in R with funneljoin - Gaps and Deadlines</title>
      <link>https://timmastny.com/blog/funnel-charts-funneljoin-gaps-deadlines/</link>
      <pubDate>Sat, 09 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/funnel-charts-funneljoin-gaps-deadlines/</guid>
      <description>funneljoin Gaps vs. deadlines How to model deadlines What I’d like to see Conclusion funneljoin In my previous blog post, I explored the awesome funneljoin package. Check that post out for an overview of the package and some examples.
In this post, I’m going to investigate business problems that can’t be modeled with gaps, and how we can work around that.
Gaps vs. deadlines Gap
if the next event must happen within a window of time, use gaps.</description>
    </item>
    
    <item>
      <title>Funnel Charts in R with funneljoin</title>
      <link>https://timmastny.com/blog/funnel-charts-funneljoin/</link>
      <pubDate>Fri, 08 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/funnel-charts-funneljoin/</guid>
      <description>funneljoin Customer usage funnels Usage example Funnel types Gaps Conversions Conclusion funneljoin Emily Robinson has an awesome new package funneljoin. funneljoin has an intuitive interface to create and analyze funnels. Be sure to check out her vignette and her slides:
Slides from my #rstatsdc talk on funneljoin are up! If you ever ask &amp;quot;first this then that&amp;quot; questions (e.g. &amp;quot;What % of people who visit this page buy something within 3 days&amp;quot; or &amp;quot;What was the last ad clicked before registering?</description>
    </item>
    
    <item>
      <title>Search Files in RStudio</title>
      <link>https://timmastny.com/blog/search-files-rstudio-ack/</link>
      <pubDate>Sat, 21 Apr 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/search-files-rstudio-ack/</guid>
      <description>Introduction RStudio Command-line ack Searching File Names Github Introduction It’s been a while since I’ve posted, but I’ve been staying busy with some other projects that I’ll talk about soon. One thing I’ve been dealing with is R packages and Kaggle contests. Both have a lot of code that I need to search through.
For example, I’ll often google how to solve a problem and implement the solution. Days, weeks, or months later I’ll encounter the problem again and realize I solved it before.</description>
    </item>
    
    <item>
      <title>Standard Non-Standard Evaluation: Tidy Eval</title>
      <link>https://timmastny.com/blog/nse-tidy-eval-dplyr-leadr/</link>
      <pubDate>Tue, 13 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/nse-tidy-eval-dplyr-leadr/</guid>
      <description>Introduction Typed Words and Variables Strings Expressions Functions Quosures Nested Functions Parsing Expressions Unknown Number of Columns Conclusions Introduction Hadley Wickham is creating awesome new resources for learning tidy eval: new Advanced R chapters, a youtube video, and talks.
I’ve been slowly working my way through this material, but you never really learn anything until you teach it. So I thought I’d share my understanding of tidy eval and how I’ve used in in my new package leadr.</description>
    </item>
    
    <item>
      <title>My First Kaggle Contest and R Package</title>
      <link>https://timmastny.com/blog/kaggle-contest-r-package/</link>
      <pubDate>Sun, 11 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/kaggle-contest-r-package/</guid>
      <description>Introduction What I learned about R Packages S3, Tibble, and Pillar Non-Standard Evaluation What I learned about Machine Learning Ensembles Keras Conclusions Introduction I competed in my first Kaggle contest and I learned a lot. My github repo was such a disorganized mess that I sometimes doubted I could even recreate these models. So I did the programmer thing:
I felt that most of my time was spent recording results, saving models, and trying to organize folders in a structured way.</description>
    </item>
    
    <item>
      <title>Embed Slides in Your Blog</title>
      <link>https://timmastny.com/blog/embed-slides-knitr-blogdown/</link>
      <pubDate>Fri, 02 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/embed-slides-knitr-blogdown/</guid>
      <description>Introduction Embed in one line of code Specific slides Upload your slideshow to your website Future work Acknowledgements Introduction It’s rstudio::conf time and I’ve seen a lot of great presentations shared on twitter. Unfortunately I couldn’t come to the conference, but I thought I would do my part and write a short blog post on how to embed slideshows into a blog post. Yihui Xie’s knitr makes this very simple.</description>
    </item>
    
    <item>
      <title>Use git to Blog(down) About Your Projects</title>
      <link>https://timmastny.com/blog/git-blogdown-projects-workflow/</link>
      <pubDate>Tue, 23 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/git-blogdown-projects-workflow/</guid>
      <description>Introduction git Setup Creating Updating and Version Control Code Externalization by Chunks Example 1: The Basics Example 2: External Data Conclusion Acknowledgements Introduction Here’s the scenario: I’m working on my project, using a git repo to track changes. I’m excited about the project or a certain result, and I’d like to tell everyone about it by making a blog post with blogdown.
But how do I utilize all the work I’ve already done in the project?</description>
    </item>
    
    <item>
      <title>Tidying Messy Spreadsheets</title>
      <link>https://timmastny.com/blog/tidying-messy-spreadsheets-dplyr/</link>
      <pubDate>Wed, 17 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/tidying-messy-spreadsheets-dplyr/</guid>
      <description>Introduction Why Tidy? The Data Follow Along Cleaning Final Product Conclusion Introduction I want this post to be an introduction to cleaning and preparing a messy spreadsheet as part of a data science pipeline. Instead of presenting a final product, I’d like to emphasize exploration as a natural part of tidying. My approach will follow Hadley Wickham’s tidy data principles outlined in his tidy data paper. At the end, our data should satisfy these three characteristics:</description>
    </item>
    
    <item>
      <title>MRP Using brms and tidybayes</title>
      <link>https://timmastny.com/blog/multilevel-mrp-tidybayes-brms-stan/</link>
      <pubDate>Mon, 20 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/multilevel-mrp-tidybayes-brms-stan/</guid>
      <description>Introduction The Data Tidying Variables Tidying Poststratification Model 1: Disaggragation Model 2: Maximum Likelihood Multilevel Model Model 3: Full Bayesian Model Model Comparisons Introduction In the last post I wrote the “MRP Primer” Primer studying the p part of MRP: poststratification. This post explores the actual MRP Primer by Jonathan Kastellec. Jonathan and his coauthors wrote this excellent tutorial on Multilevel Regression and Poststratification (MRP) using r-base and arm/lme4.</description>
    </item>
    
    <item>
      <title>Poststratification Primer with dplyr</title>
      <link>https://timmastny.com/blog/poststratification-with-dplyr/</link>
      <pubDate>Sun, 19 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/blog/poststratification-with-dplyr/</guid>
      <description>Introduction Another example The Total Statistic The Total and Weighted Averaging Conclusion Introduction This post will introduce poststartification: the process of correcting non-representative samples to better reflect the actual population proportions. There are some excellent resources to learn about multilevel regression and poststratification (MRP or Mister P), but most are heavy on multilevel regression and light on poststratification.
My next blog post will dive into the MRP Primer by Jonathan Kastellec using tools such as Stan, brms, and tidybayes.</description>
    </item>
    
    <item>
      <title>Highlight R Package Sherlock</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight-r-package-sherlock/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight-r-package-sherlock/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&#34;https://tidymodels.org/start/models/urchins.csv&#34;) %&amp;gt;% setNames(c(&#34;food_regime&#34;, &#34;initial_volume&#34;, &#34;width&#34;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&#34;Init&#34;, &#34;Low&#34;, &#34;High&#34;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Highlight.js Github</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight.js-github/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight.js-github/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Highlight.js Monokai</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight.js-monokai/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/highlight.js-monokai/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Hudl&#39;s Greatest Comebacks</title>
      <link>https://timmastny.com/projects/hudl-greatest-comebacks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/hudl-greatest-comebacks/</guid>
      <description>At Hudl Corley Bagley and I analyzed Hudl’s huge database of high school American Football games. We used sports statistics to find games and moments that would be exciting to watch in a highlight reel.
Using this dataset, Hudl’s media team created the Greatest Comebacks series.</description>
    </item>
    
    <item>
      <title>Hugo Monokai</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/hugo-monokai/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/hugo-monokai/</guid>
      <description>library(tidyverse) urchins &amp;lt;- read_csv(&amp;#34;https://tidymodels.org/start/models/urchins.csv&amp;#34;) %&amp;gt;% setNames(c(&amp;#34;food_regime&amp;#34;, &amp;#34;initial_volume&amp;#34;, &amp;#34;width&amp;#34;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;#34;Init&amp;#34;, &amp;#34;Low&amp;#34;, &amp;#34;High&amp;#34;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>leadr R package</title>
      <link>https://timmastny.com/projects/leadr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/leadr/</guid>
      <description> leadr: leaderboard and ensemble tools for machine learning and Kaggle
Github, Documentation </description>
    </item>
    
    <item>
      <title>Pandoc Tango</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/pandoc-tango/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/pandoc-tango/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Prism Coy</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-coy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-coy/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Prism Default</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-default/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-default/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Prism Okaidia</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-okaidia/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/prism-okaidia/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Rainbow Github</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/rainbow-github/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/rainbow-github/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>Rainbow Monokai</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/rainbow-monokai/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/rainbow-monokai/</guid>
      <description> library(tidyverse) urchins &amp;lt;- read_csv(&amp;quot;https://tidymodels.org/start/models/urchins.csv&amp;quot;) %&amp;gt;% setNames(c(&amp;quot;food_regime&amp;quot;, &amp;quot;initial_volume&amp;quot;, &amp;quot;width&amp;quot;)) %&amp;gt;% mutate(food_regime = factor(food_regime, levels = c(&amp;quot;Init&amp;quot;, &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;))) urchins %&amp;gt;% group_by(food_regime) %&amp;gt;% summarise( across(everything(), mean), n = n() ) mean(urchins$width) ggplot2::cut_interval(urchins$initial_volume) lm(width ~ initial_volume * food_regime, data = urchins) </description>
    </item>
    
    <item>
      <title>RStudio Modern</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/rstudio-modern/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/rstudio-modern/</guid>
      <description></description>
    </item>
    
    <item>
      <title>sagemaker</title>
      <link>https://timmastny.com/projects/sagemaker/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/sagemaker/</guid>
      <description>The sagemaker R package provides a simplified interface to the AWS Sagemaker API. See the documentation to get started.
sagemaker-tidymodels is a Python package and Docker container that creates an AWS Sagemaker framework for training and deploying machine learning models created by tidymodels in the cloud.</description>
    </item>
    
    <item>
      <title>sass R package</title>
      <link>https://timmastny.com/projects/sass/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/sass/</guid>
      <description> sass: CSS preprocessor for dynamic style sheets
Github, Documentation </description>
    </item>
    
    <item>
      <title>Sublime Monokai</title>
      <link>https://timmastny.com/projects/r-syntax-highlighting-gallery/sublime-monokai/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://timmastny.com/projects/r-syntax-highlighting-gallery/sublime-monokai/</guid>
      <description></description>
    </item>
    
  </channel>
</rss>
