| name | explain-diff-html |
|---|---|
| description | Use when the user asks for a rich explanation of a code change, diff, branch, or PR. Produces HTML output. |
Please make me a rich, interactive explanation of the specified code change.
It should have these sections:
| # frozen_string_literal: true | |
| require "bundler/inline" | |
| gemfile(true) do | |
| source "https://rubygems.org" | |
| gem "rails", "~> 8.0" | |
| gem "sqlite3" | |
| end |
🆕 Update: See more extensive repo here: https://github.com/marckohlbrugge/unofficial-37signals-coding-style-guide
This style guide was generated by Claude Code through deep analysis of the Fizzy codebase - 37signals' open-source project management tool.
Why Fizzy matters: While 37signals has long advocated for "vanilla Rails" and opinionated software design, their production codebases (Basecamp, HEY, etc.) have historically been closed source. Fizzy changes that. For the first time, developers can study a real 37signals/DHH-style Rails application - not just blog posts and conference talks, but actual production code with all its patterns, trade-offs, and deliberate omissions.
| --- ext/bigdecimal/bigdecimal.c.orig 2024-09-25 16:24:50 | |
| +++ ext/bigdecimal/bigdecimal.c 2024-09-25 16:25:15 | |
| @@ -65,7 +65,7 @@ | |
| static ID id_half; | |
| /* MACRO's to guard objects from GC by keeping them in stack */ | |
| -#define ENTER(n) volatile VALUE RB_UNUSED_VAR(vStack[n]);int iStack=0 | |
| +#define ENTER(n) volatile VALUE vStack[n];int iStack=0 | |
| #define PUSH(x) (vStack[iStack++] = (VALUE)(x)) | |
| #define SAVE(p) PUSH((p)->obj) |
| class BaseClient | |
| class APINotFound < StandardError; end | |
| attr_reader :auth_strategy | |
| def initialize(auth_strategy: :headers, headers: {}) | |
| @auth_strategy = auth_strategy | |
| @headers = headers | |
| end |
| class TailwindClassBuilder | |
| include ActionView::Helpers::TagHelper | |
| def button_classes(options) | |
| button_type = options.delete(:button_type) { :button } | |
| class_names( | |
| # general classes | |
| "mt-4 px-1 sm:px-3 py-sm sm:py-1 font-semibold bg-transparent border rounded", | |
| case button_type |
| def search | |
| @pagy, @bookmarks = if params[:search].present? | |
| pagy(@bookmarks.search(params[:search]), params: ->(params) { params.merge!({search: params[:search]}) }) | |
| else | |
| pagy(@bookmarks) | |
| end | |
| end |
| # Clone llama.cpp | |
| git clone https://github.com/ggerganov/llama.cpp.git | |
| cd llama.cpp | |
| # Build it | |
| make clean | |
| LLAMA_METAL=1 make | |
| # Download model | |
| export MODEL=llama-2-13b-chat.ggmlv3.q4_0.bin |
| # Add color coding based on Rails environment for safety | |
| if defined? Rails | |
| banner = if Rails.env.production? | |
| "\e[41;97;1m #{Rails.env} \e[0m " | |
| else | |
| "\e[42;97;1m #{Rails.env} \e[0m " | |
| end | |
| # Build a custom prompt |
Memoization is a somewhat fraught topic in the React world, meaning that it's easy to go wrong with it, for example, by [making memo() do nothing][memo-pitfall] by passing in children to a component. The general advice is to avoid memoization until the profiler tells you to optimize, but not all use cases are general, and even in the general use case you can find tricky nuances.
Discussing this topic requires some groundwork about the technical terms, and I'm placing these in once place so that it's easy to skim and skip over: