Mieraidihaimu/TypingPall
Practice algorithms and code patterns one line at a time. Native, offline macOS app with 37 lessons in Python, C++, Rust, and Go. - Mieraidihaimu/TypingPall
8 stars · 1 forks
README
TypingPall Make code patterns familiar, one line at a time. A native macOS practice app for algorithms, low-level design, language idioms, and concurrency.
Get started · Explore the lessons · Contribute
Reading an algorithm is one step. Writing it again helps you notice the details. TypingPall keeps a complete code pattern in view while you reproduce it line by line, correct differences, and repeat the parts you want to remember.
A small, focused practice loop
Choose a pattern. Open a built-in lesson, paste your own snippet, or import a source file. Type the line shown above the input. Leading spaces and tabs are skipped automatically, and the first difference is underlined. Press Return to continue. Repeat a tricky line or restart the entire pattern whenever you want. When you finish, the next lesson is one Return away.
To check whether you can spot a pattern before writing it, press ⇧⌘D: the Which pattern? drill shows a short scenario, then the cues that identify the answer.
Built-in lessons in three tracks (LeetCode, Low-level design, Languages & syntax) across Python, C++, Rust, and Go, with search and topic filters. LeetCode and design patterns include recall notes (cues, invariant, pitfalls, anchors, mantra), and library search matches the cues. Practice from memory. Key lines (⌘2) and Recall (⌘3) hide code, check each line when you press Return, offer one-token hints on request (⌘'), and grade the attempt without timing it. Optional comment skipping lets you focus on code while the full reference stays visible. Your own practice library stores imported and pasted patterns locally. Calm progress shows your place (2 of 13), with no timer or speed target. Native and offline with SwiftUI, AppKit, and Core Data. No account, analytics, or third-party runtime dependencies. Comfortable input with adjustable monospaced text, tab width, and an optional on-screen keyboard.
Get started Install via Homebrew brew install --cask mieraidihaimu/tap/typingpall Or build from source On a Mac with full Xcode installed: git clone https://github.com/Mieraidihaimu/TypingPall.git cd TypingPall open TypingPall.xcodeproj Select the TypingPall scheme, choose My Mac, and press ⌘R. The app targets macOS 12 or later; use a current Xcode to build it. If Xcode requests signing configuration, choose your development team under Signing & Capabilities. Start with the C++ binary-search exercise, or press ⌘L to pick a lesson. To practice your own code, use Add Script or ⌘O to import a UTF-8 source file. Lessons ready to practice
Track Collection Examples
LeetCode Python interview patterns Sliding window, two pointers, binary search, BFS, DFS, tree and grid traversal, topological sort, backtracking, union-find, knapsack and other dynamic programming
Low-level design Creational, structural and behavioral patterns Factory, builder, singleton, adapter, decorator, composite, strategy, state, observer, command, chain of responsibility
Low-level design Design building blocks LRU cache, token-bucket rate limiter
Languages & syntax Python fundamentals Comprehensions, collections, generators, dataclasses
Languages & syntax C++ fundamentals Vectors, hash maps, ownership, lambda sorting
Languages & syntax Rust fundamentals Borrowing, Result, iterators, enums
Languages & syntax Go fundamentals Slices, errors, methods, interfaces
Languages & syntax Concurrency across four languages Thread pools, async tasks, mutexes, condition variables, channels
Browse the original examples in lessons.json. Imported snippets are used as practice text; the app does not execute them. Shortcuts
Action Shortcut
Confirm the current line Return
Copy, Key lines, Recall ⌘1, ⌘2, ⌘3
Hint ⌘'
Repeat the pattern ⌘R
Open the library ⌘L
Which pattern? drill ⇧⌘D
Import a file ⌘O
Add a script ⇧⌘N
A few useful details Indentation remains visible in the reference, but leading spaces and tabs are excluded from the typing target. Internal and trailing spaces still count. Blank lines advance with Return, and the final line completes the pattern only after confirmation. Imports accept UTF-8 files up to 1 MB and 20,000 normalized characters. Line endings are normalized, tabs expand to your configured width, and Unicode is preserved. The practice input accepts one line at a time; paste complete snippets into Add Script. Saved patterns survive relaunches; your current practice position does not. Comment filtering supports Python, C++, Rust, and Go. Select Plain text for other languages, or turn off Skip comments in Options to practice the complete text. Changing an option mid-pattern keeps your place. Python docstrings stay in the exercise. Build and contribute Bug reports, clearer lessons, accessibility improvements, and small fixes are welcome. Start with the contribution guide, report a bug, or suggest a lesson.

