this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #12 from rsanheim/roast-site

ROAST

authored by

Stephen Yeargin and committed by
GitHub
91f3000e 8b0d7873

+665
+665
docs/index.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + 4 + <head> 5 + <meta charset="UTF-8"> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 + <title>Tumble Roast</title> 8 + <style> 9 + * { 10 + margin: 0; 11 + padding: 0; 12 + box-sizing: border-box; 13 + } 14 + 15 + body { 16 + font-family: 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', Arial, sans-serif; 17 + background: #1a1a1a; 18 + background-image: 19 + radial-gradient(circle at 20% 50%, rgba(255, 107, 53, 0.03) 0%, transparent 50%), 20 + radial-gradient(circle at 80% 50%, rgba(247, 147, 30, 0.03) 0%, transparent 50%); 21 + color: #e0e0e0; 22 + line-height: 1.8; 23 + min-height: 100vh; 24 + } 25 + 26 + .container { 27 + max-width: 780px; 28 + margin: 0 auto; 29 + padding: 50px 25px; 30 + background: rgba(0, 0, 0, 0.3); 31 + border-left: 1px solid #333; 32 + border-right: 1px solid #333; 33 + box-shadow: 0 0 60px rgba(0, 0, 0, 0.5); 34 + } 35 + 36 + h1 { 37 + font-family: 'Georgia', 'Times New Roman', serif; 38 + font-size: 2.8em; 39 + text-align: center; 40 + margin-bottom: 15px; 41 + color: #ff6b35; 42 + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5), 0 0 30px rgba(255, 107, 53, 0.3); 43 + letter-spacing: -1px; 44 + } 45 + 46 + .subtitle { 47 + text-align: center; 48 + color: #999; 49 + font-style: italic; 50 + margin-bottom: 50px; 51 + font-size: 1.05em; 52 + border-bottom: 1px dashed #444; 53 + padding-bottom: 30px; 54 + } 55 + 56 + .era-header { 57 + background: linear-gradient(180deg, #ff6b35 0%, #cc4a1a 100%); 58 + color: #fff; 59 + padding: 14px 24px; 60 + border-radius: 6px; 61 + font-weight: bold; 62 + font-size: 1.2em; 63 + margin: 60px 0 30px 0; 64 + text-align: center; 65 + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4); 66 + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.2); 67 + border: 1px solid #aa3a10; 68 + } 69 + 70 + .roast-item { 71 + background: linear-gradient(180deg, rgba(40, 40, 40, 0.8) 0%, rgba(30, 30, 30, 0.9) 100%); 72 + border: 1px solid #444; 73 + border-left: 5px solid #ff6b35; 74 + padding: 25px 30px; 75 + margin: 25px 0; 76 + border-radius: 8px; 77 + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3); 78 + } 79 + 80 + .roast-item h2 { 81 + font-family: 'Georgia', serif; 82 + color: #f7931e; 83 + font-size: 1.35em; 84 + margin-bottom: 12px; 85 + } 86 + 87 + .roast-item h2 a { 88 + color: #f7931e; 89 + text-decoration: underline; 90 + } 91 + 92 + .roast-item h2 a:hover { 93 + color: #ffb347; 94 + } 95 + 96 + .roast-item p { 97 + margin-bottom: 14px; 98 + } 99 + 100 + .commit-ref { 101 + font-family: monospace; 102 + font-size: 0.85em; 103 + color: #79c0ff; 104 + background: #0d1117; 105 + padding: 2px 6px; 106 + border-radius: 3px; 107 + } 108 + 109 + .commit-ref a { 110 + color: #79c0ff; 111 + text-decoration: none; 112 + } 113 + 114 + .commit-ref a:hover { 115 + text-decoration: underline; 116 + } 117 + 118 + .file-ref { 119 + font-family: monospace; 120 + font-size: 0.85em; 121 + color: #7ee787; 122 + } 123 + 124 + .file-ref a { 125 + color: #7ee787; 126 + text-decoration: none; 127 + } 128 + 129 + .file-ref a:hover { 130 + text-decoration: underline; 131 + } 132 + 133 + pre { 134 + background: linear-gradient(180deg, #0a0a0a 0%, #151515 100%); 135 + border: 1px solid #333; 136 + border-radius: 5px; 137 + padding: 15px 18px; 138 + overflow-x: auto; 139 + font-family: 'Consolas', 'Monaco', 'Courier New', monospace; 140 + font-size: 0.88em; 141 + margin: 15px 0; 142 + box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.4); 143 + } 144 + 145 + code { 146 + color: #8cb4ff; 147 + } 148 + 149 + .burn { 150 + color: #ff6b35; 151 + font-weight: bold; 152 + text-shadow: 0 0 8px rgba(255, 107, 53, 0.4); 153 + } 154 + 155 + .epic-quote { 156 + font-family: 'Georgia', serif; 157 + font-style: italic; 158 + text-align: center; 159 + padding: 40px 30px; 160 + color: #888; 161 + background: linear-gradient(180deg, rgba(30, 30, 30, 0.5) 0%, rgba(20, 20, 20, 0.6) 100%); 162 + border: 1px solid #333; 163 + border-radius: 8px; 164 + margin-top: 60px; 165 + font-size: 1.05em; 166 + line-height: 2; 167 + box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.3); 168 + } 169 + 170 + .hall-of-fame { 171 + margin-top: 60px; 172 + padding-top: 40px; 173 + border-top: 2px dashed #444; 174 + } 175 + 176 + .hall-of-fame h2 { 177 + font-family: 'Georgia', serif; 178 + color: #f7931e; 179 + text-align: center; 180 + margin-bottom: 25px; 181 + font-size: 1.5em; 182 + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); 183 + } 184 + 185 + .commit { 186 + background: linear-gradient(180deg, rgba(50, 40, 30, 0.6) 0%, rgba(40, 30, 20, 0.7) 100%); 187 + border: 1px solid #554433; 188 + padding: 15px 20px; 189 + margin: 15px 0; 190 + border-radius: 5px; 191 + font-family: monospace; 192 + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); 193 + } 194 + 195 + .commit-hash { 196 + color: #79c0ff; 197 + } 198 + 199 + .commit-hash a { 200 + color: #79c0ff; 201 + text-decoration: none; 202 + } 203 + 204 + .commit-hash a:hover { 205 + text-decoration: underline; 206 + } 207 + 208 + .commit-msg { 209 + color: #e8e8e8; 210 + } 211 + 212 + .commit-note { 213 + margin-top: 8px; 214 + color: #888; 215 + font-size: 0.9em; 216 + font-family: Georgia, serif; 217 + } 218 + 219 + footer { 220 + text-align: center; 221 + margin-top: 60px; 222 + padding: 30px 20px; 223 + color: #666; 224 + font-size: 0.9em; 225 + border-top: 1px dashed #333; 226 + } 227 + 228 + footer a { 229 + color: #ff6b35; 230 + text-decoration: underline; 231 + } 232 + 233 + footer a:hover { 234 + color: #ffb347; 235 + } 236 + 237 + .timeline { 238 + color: #888; 239 + font-size: 0.9em; 240 + margin-bottom: 10px; 241 + } 242 + </style> 243 + </head> 244 + 245 + <body> 246 + <div class="container"> 247 + <h1>Tumble Roast</h1> 248 + <p class="subtitle">A 2004-era tumbleblog that somehow predates Tumblr and outlived it too.<br>15 years of 249 + commits. 15 years of mass casualties.<br><strong style="color: #ff6b35;">Every link is real. We couldn't 250 + make this up.</strong></p> 251 + 252 + <!-- 2021 ERA --> 253 + <div class="era-header">💀 The 2021 Era: Security Is Optional 💀</div> 254 + 255 + <p style="text-align: center; color: #888; margin-bottom: 30px;">After <span class="burn">4 years of mass 256 + silence</span> (2016-2020), someone finally shows up... to actively make things worse.</p> 257 + 258 + <div class="roast-item"> 259 + <h2><a href="https://github.com/websages/tumble/commit/83e9bfc">"TLS is a nice-to-have"</a></h2> 260 + <p class="timeline">December 7, 2021</p> 261 + <pre><code>commit 83e9bfc 262 + 263 + Disable SSL verification for tumble links 264 + 265 + TLS is a nice-to-have.</code></pre> 266 + <pre><code>ssl_opts => { verify_hostname => 0 }</code></pre> 267 + <p>The commit message that launched a thousand security audits. <span class="burn">TLS is a 268 + nice-to-have.</span> Just like seatbelts. Or parachutes. Or not shitting where you eat.</p> 269 + <p>Bonus: The branch was named <code>disable-verify-hostanme</code>. They typo'd "hostname" in the branch 270 + name, and it's <a href="https://github.com/websages/tumble/commit/8b0d787">immortalized in the merge 271 + commit</a>.</p> 272 + </div> 273 + 274 + <div class="roast-item"> 275 + <h2><a href="https://github.com/websages/tumble/commit/52dc190">The User Agent Time Capsule</a></h2> 276 + <p class="timeline">January 24, 2021</p> 277 + <pre><code>- $agent->agent( 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) 278 + Gecko/20110422 Ubuntu/8.04 (hardy) Firefox/3.6.17' ); 279 + + $agent->agent( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) 280 + Gecko/20100101 Firefox/84.0' );</code></pre> 281 + <p>For <span class="burn">10 years</span> (2011-2021), production traffic pretended to be Firefox 3.6 on 282 + <span class="burn">Ubuntu 8.04 Hardy Heron</span> &mdash; an OS released in 2008 and EOL'd in 2013. 283 + </p> 284 + <p>The original was added to bypass "bots forbidden" errors. Nothing says "I'm a real human" like a user 285 + agent from an OS that predates the Obama administration.</p> 286 + </div> 287 + 288 + <!-- 2013 ERA --> 289 + <div class="era-header">🍺 The 2013 Era: Drunk Bot Rewrites 🤮</div> 290 + 291 + <div class="roast-item"> 292 + <h2><a href="https://github.com/websages/jarvis/commit/9198b74">The Stone 13 Incident</a></h2> 293 + <p class="timeline">September 10, 2013 &mdash; 1:38 AM</p> 294 + <pre><code>commit 9198b74 295 + 296 + standings rewrite</code></pre> 297 + <p>The commit message doesn't tell the whole story. James White has stated in a chat session:</p> 298 + <div 299 + style="background: #1a1a2e; border-left: 3px solid #7289da; padding: 15px 20px; margin: 20px 0; border-radius: 0 6px 6px 0;"> 300 + <p style="color: #7289da; font-size: 0.85em; margin-bottom: 8px;"><strong>jameswhite</strong> &nbsp; 301 + 1:59 AM</p> 302 + <p style="color: #dcddde; margin: 0;">"I rewrote our perl irc bot so it would support google chat, xmpp, 303 + irc and then I drank <span class="burn">8 pints of stone 13 anniversary ale</span> and a shot 304 + jaegermeister"</p> 305 + </div> 306 + <p>Stone 13th Anniversary Ale is <span class="burn">9.5% ABV</span>. Eight pints is roughly 10 standard 307 + drinks. Plus Jäger. At 2 AM. After shipping a multi-protocol bot rewrite.</p> 308 + <p><strong>The Aftermath:</strong></p> 309 + <ul style="color: #aaa; margin-left: 20px;"> 310 + <li>Made it away from the table</li> 311 + <li>Got carried to Lara's <span class="burn">brand new car</span></li> 312 + <li>Puked in the brand new car</li> 313 + <li>Got taken home</li> 314 + <li>Puked more</li> 315 + <li>Eventually felt very bad about his actions <em>much later</em></li> 316 + </ul> 317 + <p style="margin-top: 15px;">The commit is clean. The man was not. Lara's car was not.</p> 318 + </div> 319 + 320 + <!-- 2014 ERA --> 321 + <div class="era-header">⚰️ The 2014 Era: Failed Rewrites & Language Wars ⚰️</div> 322 + 323 + <div class="roast-item"> 324 + <h2><a href="https://github.com/websages/tumble/commit/c187c59">The 39-Minute Go Experiment</a></h2> 325 + <p class="timeline">April 13, 2014</p> 326 + <pre><code>06:30 42ffced "Render twitter links as actual twitter links" 327 + (introduces Go utility, 45 lines) 328 + 329 + 06:49 671f63c "Minor fixup to fall back to old behavior if the 330 + twit-link utility fails in any way" 331 + 332 + 07:09 c187c59 "Remove golang dep - back to perl" 333 + (rewrites it in 6 lines of Perl)</code></pre> 334 + <p>The commit message reads: <em>"Since freyr is on squeeze, golang isn't readily available. <span 335 + class="burn">Oh well.</span>"</em></p> 336 + <p>39 minutes. That's how long the Go rewrite lasted before the team said "Oh well" and went back to Perl. 337 + The Go binary is still in <span class="file-ref"><a 338 + href="https://github.com/websages/tumble/blob/production/scripts/twit-link.go">scripts/twit-link.go</a></span>, 339 + forever unused.</p> 340 + </div> 341 + 342 + <div class="roast-item"> 343 + <h2><a href="https://github.com/websages/tumble/commit/f31411f">Remove Ruby Thing That Never Worked</a></h2> 344 + <p class="timeline">February 5, 2014</p> 345 + <pre><code>commit f31411f 346 + 347 + Remove ruby thing that never worked 348 + 349 + 32 files changed, 1485 deletions(-)</code></pre> 350 + <p>Three years of work (2011-2014). 32 files. CouchDB integration. A full test suite. All summarized with: 351 + <span class="burn">"that never worked."</span> 352 + </p> 353 + <p>The Ruby app included models, specs, views, and a Rakefile. It had more infrastructure than some Y 354 + Combinator startups. Three years of someone's life. Gone. Reduced to atoms. <span class="burn">Press F 355 + to pay respects.</span></p> 356 + </div> 357 + 358 + <div class="roast-item"> 359 + <h2><a href="https://github.com/websages/tumble/commit/a80d24d">Fix Scott's Typo</a></h2> 360 + <p class="timeline">February 5, 2014</p> 361 + <pre><code>-sub selectrow_array { return( shift->['dbi'}->selectrow_array( @_ ) ); } 362 + +sub selectrow_array { return( shift->{'dbi'}->selectrow_array( @_ ) ); }</code></pre> 363 + <p>Scott used <code>['dbi'}</code> instead of <code>{'dbi'}</code>. Mismatched brackets in Perl &mdash; a 364 + square bracket opening with a curly brace closing.</p> 365 + <p>The commit message: "Fix Scott's typo". <span class="burn">Scott knows what he did.</span></p> 366 + </div> 367 + 368 + <div class="roast-item"> 369 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/lib/tumble.pm#L123">The Twitter API 370 + v1 Fossil</a></h2> 371 + <p class="timeline">Still in production code</p> 372 + <pre><code>my $tw_uri = "https://api.twitter.com/1/statuses/oembed.json?id=" . $id;</code></pre> 373 + <p>Twitter API v1 was deprecated in 2012 and fully killed in 2013. This code has been dead for <span 374 + class="burn">over a decade</span> but still runs on every page load, silently failing.</p> 375 + <p>The <code>next unless $tw_j;</code> line catches the failure. No logging. No alerting. Just vibes.</p> 376 + </div> 377 + 378 + <div class="roast-item"> 379 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/lib/tumble/search.pm#L47">The Unicorn 380 + Placeholder</a></h2> 381 + <p class="timeline">Still in production code</p> 382 + <pre><code>my $string = 'unicorn'; 383 + return unless $string;</code></pre> 384 + <p>Someone set a variable to <code>'unicorn'</code> and then immediately checks if it exists. It's never 385 + used for anything else. This is placeholder code that was <span class="burn">never finished</span> and 386 + has been running in production for over a decade.</p> 387 + <p>The unicorn is eternal. The unicorn does nothing.</p> 388 + </div> 389 + 390 + <!-- PRODUCTION CODE GEMS --> 391 + <div class="era-header">🤬 Production Code: Say What You Mean 🤬</div> 392 + 393 + <p style="text-align: center; color: #888; margin-bottom: 30px;">These are in the actual codebase. Serving 394 + actual users. Right now. Today.</p> 395 + 396 + <div class="roast-item"> 397 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/buttons/button.cgi#L69">The Greg 398 + Buchanan Clause</a></h2> 399 + <p class="timeline">In production since 2010</p> 400 + <pre><code>&lt;span&gt;PPS - If your name is Greg Buchanan and you just 401 + read the above postscript, you can suck my ass.&lt;/span&gt;</code></pre> 402 + <p>This is in <span class="file-ref"><a 403 + href="https://github.com/websages/tumble/blob/production/htdocs/buttons/button.cgi">htdocs/buttons/button.cgi</a></span>. 404 + A <span class="burn">customer-facing page</span>. For 15 years.</p> 405 + <p>Greg, if you're out there: they haven't forgotten.</p> 406 + </div> 407 + 408 + <div class="roast-item"> 409 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/lib/tumble/search.pm#L90">The Helpful 410 + Search Error</a></h2> 411 + <p class="timeline">Still in production</p> 412 + <pre><code>Your search for '$search' did not return any results. 413 + Perhaps the following tips can help aid you on your quest: 414 + &lt;ul&gt; 415 + &lt;li&gt;Searches must be done using four or more characters. 416 + &lt;li&gt;MySQL fulltext-searching is the magic behind this. 417 + Stop blaming scott. 418 + &lt;li&gt;Try not to be such a fucking idiot. 419 + &lt;/ul&gt;</code></pre> 420 + <p>When your search returns no results, the app helpfully suggests you <span class="burn">"Try not to be 421 + such a fucking idiot."</span></p> 422 + <p>Customer service excellence. Somebody shipped this. Somebody reviewed this. Somebody said "yes, this is 423 + fine." <span class="burn">Incredible.</span></p> 424 + </div> 425 + 426 + <div class="roast-item"> 427 + <h2><a href="https://github.com/websages/tumble/blob/production/scripts/kittencheck">The Daily Kitten 428 + Infrastructure</a></h2> 429 + <p class="timeline">Critical production system</p> 430 + <pre><code>my $content = get( 'http://dailykitten.com/feed/' ); 431 + 432 + XML::Twig->new( 433 + twig_handlers => { 434 + item => sub { 435 + $map->{$_->field( 'link' )}->{$a} = $_->field( $a ); 436 + } 437 + } 438 + )->parse( $content );</code></pre> 439 + <p>Production infrastructure that depends on <code>dailykitten.com</code> staying online. This man scraped 440 + cat RSS feeds and called it a feature. <span class="burn">Absolute legend.</span></p> 441 + </div> 442 + 443 + <div class="roast-item"> 444 + <h2><a href="https://github.com/websages/tumble/blob/production/scripts/flickrcheck#L13">The Disabled 445 + Script</a></h2> 446 + <pre><code>#!/usr/bin/perl 447 + 448 + # until you have your own flickr feed, let's just exit 1 449 + exit 1; 450 + 451 + 452 + my $content = get( 453 + 'http://www.flickr.com/services/feeds/...' 454 + );</code></pre> 455 + <p>Line 13: <code>exit 1;</code>. The entire script is disabled. But the 60+ lines of Flickr integration 456 + code below it remain, waiting patiently for a day that will never come.</p> 457 + </div> 458 + 459 + <div class="roast-item"> 460 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/irclink/index.cgi#L127">The SQL 461 + Injection Special</a></h2> 462 + <p class="timeline">Still in production</p> 463 + <pre><code>my $url = $dbh->selectrow_array( qq{ 464 + SELECT url FROM ircLink 465 + WHERE ircLinkID = '$id' 466 + } );</code></pre> 467 + <p>Raw string interpolation in a SQL query. The <code>$id</code> comes directly from 468 + <code>$ENV{'QUERY_STRING'}</code>. This is a <span class="burn">textbook SQL injection 469 + vulnerability</span> that's been live for 15 years. 470 + </p> 471 + <p>Bobby Tables would be proud.</p> 472 + </div> 473 + 474 + <div class="roast-item"> 475 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/buttons/button.cgi#L51">"How do I 476 + install this crap??"</a></h2> 477 + <p class="timeline">Customer-facing since 2010</p> 478 + <pre><code>&lt;span class="tumble_item_quote_quote"&gt;So how do I install this crap??&lt;/span&gt;</code></pre> 479 + <p>The sample text on a user-facing help page. Nothing says "professional software" like calling your own 480 + product <span class="burn">"crap"</span> in the UI.</p> 481 + </div> 482 + 483 + <div class="roast-item"> 484 + <h2><a href="https://github.com/websages/tumble/blob/production/htdocs/buttons/button.cgi#L63">"MSIE sucks. 485 + Stop using it."</a></h2> 486 + <p class="timeline">Customer-facing since 2010</p> 487 + <pre><code>&lt;span&gt;PS - Unfortunately, tumblebuttons don't work with 488 + Microsoft Internet Explorer. MSIE sucks. Stop using it.&lt;/span&gt;</code></pre> 489 + <p>Public browser shaming on a customer-facing page. To be fair, it was IE. But still &mdash; <span 490 + class="burn">in production</span>.</p> 491 + </div> 492 + 493 + <!-- ORIGIN STORY --> 494 + <div class="era-header">🦕 2010: The Origin Story 🦕</div> 495 + 496 + <p style="text-align: center; color: #888; margin-bottom: 30px;">Where it all began. Where it all went wrong. 497 + </p> 498 + 499 + <div class="roast-item"> 500 + <h2><a href="https://github.com/websages/tumble/commit/b53cd47">Initial Git Insert</a></h2> 501 + <p class="timeline">March 2, 2010 &mdash; The beginning</p> 502 + <pre><code>commit b53cd478f0fc373f466bd35ccc8df48c6a00c9cf 503 + Author: James White &lt;whitejs@websages.com&gt; 504 + Date: Tue Mar 2 12:07:59 2010 -0600 505 + 506 + initial git insert for tumble.wcyd.org</code></pre> 507 + <p>"git insert." <span class="burn">INSERT.</span> This isn't SQL, James. Did you learn git that morning 508 + from a man at a bus stop?</p> 509 + </div> 510 + 511 + <div class="roast-item"> 512 + <h2>The Swap File</h2> 513 + <p class="timeline">Committed in 2010, removed in 2014</p> 514 + <pre><code>b0VIM 7.0 515 + schnesa 516 + fapestniegd 517 + /var/www/sites/tumble.loserfish.org/htdocs/thtml/tumble_item_top5.thtml</code></pre> 518 + <p>James committed a vim swap file containing his server's hostname. He doxxed his dev box AND immortalized 519 + his vim session. This <code>.swp</code> haunted the repo for 4 years until <a 520 + href="https://github.com/websages/tumble/commit/5299713">someone finally noticed</a>.</p> 521 + </div> 522 + 523 + <div class="roast-item"> 524 + <h2><a href="https://github.com/websages/tumble/commit/f04b1b2">"...ugh"</a></h2> 525 + <p class="timeline">May 20, 2010</p> 526 + <pre><code>commit f04b1b2 527 + 528 + hard-coding the new db server in the 5 places it's buried, ugh</code></pre> 529 + <p>The database connection string was hardcoded in 5 different files. The commit message's trailing "ugh" 530 + conveys the exact energy of maintaining this codebase.</p> 531 + </div> 532 + 533 + <div class="roast-item"> 534 + <h2>The Binary Situation</h2> 535 + <p class="timeline">March 2, 2010</p> 536 + <pre><code>+ htdocs/2202/2202.swf | Bin 0 -> 1113251 bytes</code></pre> 537 + <p>A 1.1MB Flash file. Raw-dogged straight into git. Steve Jobs had already killed Flash by this point, but 538 + James said <span class="burn">"not on my watch."</span></p> 539 + </div> 540 + 541 + <!-- HALL OF FAME --> 542 + <div class="hall-of-fame"> 543 + <h2>🏆 Commit Message Hall of Fame 🏆</h2> 544 + <p style="text-align: center; color: #888; margin-bottom: 20px;">Messages that will echo through eternity. 545 + Click any hash to witness the horror yourself.</p> 546 + 547 + <div class="commit"> 548 + <span class="commit-hash"><a href="https://github.com/websages/tumble/commit/816923c">816923c</a></span> 549 + - <span class="commit-msg">"in the middele of breaking shit"</span> 550 + <p class="commit-note">Note the typo in "middele" for extra authenticity. Committed on a Sunday.</p> 551 + </div> 552 + 553 + <div class="commit"> 554 + <span class="commit-hash"><a href="https://github.com/websages/tumble/commit/deaece6">deaece6</a></span> 555 + - <span class="commit-msg">"nonworking commit to work around"</span> 556 + <p class="commit-note">The commit that admits its own defeat in the message.</p> 557 + </div> 558 + 559 + <div class="commit"> 560 + <span class="commit-hash"><a href="https://github.com/websages/tumble/commit/951b050">951b050</a></span> 561 + - <span class="commit-msg">"fixed the libraries again..."</span> 562 + <p class="commit-note">That trailing ellipsis conveys volumes of resignation.</p> 563 + </div> 564 + 565 + <div class="commit"> 566 + <span class="commit-hash"><a href="https://github.com/websages/tumble/commit/078ea9a">078ea9a</a></span> 567 + - <span class="commit-msg">"pictures work!"</span> 568 + <p class="commit-note">The exclamation point of someone who wasn't sure it would.</p> 569 + </div> 570 + 571 + <div class="commit"> 572 + <span class="commit-hash"><a href="https://github.com/websages/tumble/commit/4ab33c9">4ab33c9</a></span> 573 + - <span class="commit-msg">"changing the useragent because of 'bots forbidden' errors"</span> 574 + <p class="commit-note">The beginning of the decade-long Ubuntu Hardy masquerade.</p> 575 + </div> 576 + </div> 577 + 578 + <!-- CONTRIBUTORS --> 579 + <div class="hall-of-fame"> 580 + <h2>🎭 The Cast of Characters 🎭</h2> 581 + <p style="text-align: center; color: #888; margin-bottom: 20px;">The architects of this disaster. The 582 + legends. The warnings.</p> 583 + 584 + <div class="commit"> 585 + <span class="commit-msg" style="color: #f7931e;">Michael Stahnke</span> - <span 586 + style="color: #7ee787;">57 commits</span> 587 + <p class="commit-note">The hero who tried to clean up everyone else's mess. Deleted the Ruby thing, 588 + tried Go for 39 minutes, fixed Scott's typo. Carried the team in 2014.</p> 589 + </div> 590 + 591 + <div class="commit"> 592 + <span class="commit-msg" style="color: #f7931e;">James White</span> - <span style="color: #7ee787;">13 593 + commits</span> 594 + <p class="commit-note">The origin. The "git insert." The man who committed a vim swap file and a 1.1MB 595 + Flash binary. Patient zero.</p> 596 + </div> 597 + 598 + <div class="commit"> 599 + <span class="commit-msg" style="color: #f7931e;">Aziz Shamim</span> - <span style="color: #7ee787;">12 600 + commits</span> 601 + <p class="commit-note">Architect of the Ruby rewrite that never worked. Author of "in the middele of 602 + breaking shit" and "nonworking commit to work around."</p> 603 + </div> 604 + 605 + <div class="commit"> 606 + <span class="commit-msg" style="color: #f7931e;">Stephen Yeargin</span> - <span 607 + style="color: #7ee787;">6 commits</span> 608 + <p class="commit-note">Emerged from 4 years of silence to declare "TLS is a nice-to-have." Typo'd 609 + "hostname" as "hostanme" in a branch name.</p> 610 + </div> 611 + 612 + <div class="commit"> 613 + <span class="commit-msg" style="color: #f7931e;">Scott Schneider</span> - <span 614 + style="color: #7ee787;">4 commits</span> 615 + <p class="commit-note">Made the typo. You know the one. <code>['dbi'}</code>. Never forget.</p> 616 + </div> 617 + </div> 618 + 619 + <!-- TIMELINE --> 620 + <div class="hall-of-fame"> 621 + <h2>📅 The Timeline of Neglect 📅</h2> 622 + <p style="text-align: center; color: #888; margin-bottom: 20px;">A visual representation of giving up.</p> 623 + 624 + <div style="text-align: center; padding: 20px; color: #888;"> 625 + <p style="font-family: monospace; font-size: 0.9em; line-height: 2;"> 626 + <span style="color: #7ee787;">2010</span> ████░░░░░░ Origin story, Flash files, swap files<br> 627 + <span style="color: #7ee787;">2011</span> ████████░░ Ruby rewrite attempt begins<br> 628 + <span style="color: #888;">2012</span> ░░░░░░░░░░ <span style="color: #666;">(2 commits)</span><br> 629 + <span style="color: #f7931e;">2013</span> ██░░░░░░░░ James rewrites bot after 8 Stone 13s + 630 + Jäger<br> 631 + <span style="color: #7ee787;">2014</span> ██████████ Michael's heroic cleanup, Go experiment, Ruby 632 + deletion<br> 633 + <span style="color: #7ee787;">2015</span> ░░░░░░░░░░ <span style="color: #666;">(2 634 + commits)</span><br> 635 + <span style="color: #ff6b35;">2016</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 636 + <span style="color: #ff6b35;">2017</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 637 + <span style="color: #ff6b35;">2018</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 638 + <span style="color: #ff6b35;">2019</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 639 + <span style="color: #ff6b35;">2020</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 640 + <span style="color: #f7931e;">2021</span> ░░░░░░░░░░ Stephen disables SSL verification<br> 641 + <span style="color: #ff6b35;">2022</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 642 + <span style="color: #ff6b35;">2023</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 643 + <span style="color: #ff6b35;">2024</span> ░░░░░░░░░░ <span style="color: #666;">nothing</span><br> 644 + <span style="color: #79c0ff;">2025</span> █░░░░░░░░░ This roast 645 + </p> 646 + <p style="margin-top: 20px; font-style: italic;">Pattern: years of silence, then someone shows up to 647 + make security worse.</p> 648 + </div> 649 + </div> 650 + 651 + <p class="epic-quote"> 652 + "I've seen things you people wouldn't believe. Swap files committed on repos off the shoulder of Orion. I 653 + watched kitten feeds glitter in the dark near the Tannh&auml;user Gate. All those moments will be lost in 654 + time, like tears in rain... Time to <code>git push</code>." 655 + </p> 656 + 657 + <footer> 658 + <p>Source code: <a href="https://github.com/websages/tumble">websages/tumble</a></p> 659 + <p>Still running at <a href="http://tumble.wcyd.org">tumble.wcyd.org</a> since 2004</p> 660 + <p style="margin-top: 20px; color: #444;">Made with love and <code>git log --all --oneline</code></p> 661 + </footer> 662 + </div> 663 + </body> 664 + 665 + </html>