Skip to content

Instantly share code, notes, and snippets.

View look's full-sized avatar

Luke Francl look

View GitHub Profile
@look
look / how-does-outlook-s-group-messages-by-conversation-.md
Created March 9, 2026 16:16
Research: Outlook Conversation Grouping vs. GitHub Email Notifications — Thread-Index proposal

Outlook Conversation Grouping vs. GitHub Email Notifications

Executive Summary

GitHub email notifications frequently fail to group properly in Outlook's "conversation view" for PRs and Issues. This research identifies four root causes by comparing Outlook's proprietary threading algorithm with GitHub's email notification implementation in github/github:

  1. GitHub does not emit Thread-Index or Thread-Topic headers — the primary mechanism Outlook uses for conversation grouping. GitHub relies exclusively on RFC-standard Message-ID, In-Reply-To, and References headers, which Outlook largely ignores for non-Exchange mail.
  2. Simultaneous delivery causes race conditions — when multiple notifications for the same PR arrive at the same second (e.g., PR creation + review request event), they route through different Outlook frontend servers. The second message may be indexed before the first, preventing subject-based matching from finding a conversation
@look
look / README.md
Last active May 28, 2019 07:06 — forked from milroc/README.md
Sunrise, sunset

Sunrise and sunset time visualization for Minneapolis, Minnesota. Adapted from D3 for Mere Mortals.

@look
look / app.yaml
Created January 24, 2011 23:59 — forked from dound/app.yaml
application: yourappid
version: testgaesessions
runtime: python
api_version: 1
handlers:
- url: /stats.*
script: $PYTHON_LIB/google/appengine/ext/appstats/ui.py
- url: /.*
script: main.py
#
# Silently fail instead of raising an exception when an error occurs while writing to Solr.
# NOTE: does not fail for reads; you should catch those exceptions, for example in a rescue_from statement.
#
# To configure, add this to an initializer:
# Sunspot.session = SilentFailSessionProxy.new(session_or_proxy)
#
# You can get the existing session with Sunspot.send(:session) (it's a private method in Sunspot 0.18, but not 1.0)
#
# This is for Sunspot 0.18 and would need to be changed a little bit for Sunspot 1.0.
# Convert a Gemfile to Heroku's .gems file plus config.gem statements for Rails 2.3
herokuconfig = ""
railsconfig = ""
gemfile = File.new("Gemfile")
gemfile.readlines.each do |line|
if line =~ /gem ['"](\w+)['"](?:, ['"](.+?)['"]){0,1}(?:, :require => ['"](.+?)['"]){0,1}/
herokuconfig << "#{$1}" + ($2 ? %Q( --version "#{$2}") : '') + "\n"
railsconfig << "config.gem '#{$1}'" + ($2 ? ", :version => '#{$2}'" : '') + ($3 ? ", :lib => '#{$3}'" : '') + "\n"
desc "Deploy to Heroku. Pass APP=appname to deploy to a different app"
task :deploy do
require 'heroku'
require 'heroku/command'
user, pass = File.read(File.expand_path("~/.heroku/credentials")).split("\n")
heroku = Heroku::Client.new(user, pass)
cmd = Heroku::Command::BaseWithApp.new([])
remotes = cmd.git_remotes(File.dirname(__FILE__) + "/../..")
module Sunspot
class Setup
def more_like_this=(fields)
@more_like_this = fields
end
def more_like_this
@more_like_this || []
end
end
# an example Monit configuration file for collectiveidea's fork of delayed_job.
# See: http://stackoverflow.com/questions/1226302/how-to-monitor-delayedjob-with-monit/1285611
#
# To use:
# 1. replace {app_name} and {environment} as appropriate
# 2. copy to your repository under config/delayed_job.monitrc
# 3. add this to your /etc/monit/monitrc:
#
# include /var/www/apps/{app_name}/current/config/*.monitrc
# 4. reload monit when you deploy to pick up any changes to your monitrc files: sudo monit reload