TL;DR
- TypingPall은 macOS용 네이티브 코드 연습 앱으로, 알고리즘·저수준 설계·언어 관용구·동시성 패턴을 한 줄씩 입력하며 익히는 도구임.
- 내장 레슨, 직접 붙여 넣은 코드, 가져온 소스 파일로 연습할 수 있으며, 입력 중 들여쓰기 처리와 차이 표시, 반복 기능을 제공함.
- ⌘2 키 라인과 ⌘3 리콜은 코드를 숨긴 채 줄별로 답을 확인하고 선택적 힌트와 평가를 제공하며, 타이머나 속도 목표는 없음.
- Python, C++, Rust, Go를 아우르는 세 트랙의 레슨과 기억 단서·불변 조건·주의점 등을 담은 회상 노트를 제공함.
SwiftUI,AppKit,Core Data기반으로 오프라인에서 동작하며 계정·분석 기능·서드파티 런타임 의존성이 없음.
TypingPall 소개
- TypingPall은 알고리즘, 저수준 설계, 언어 관용구, 동시성을 연습하는 네이티브 macOS 앱임.
- 알고리즘을 읽는 데서 그치지 않고, 전체 코드 패턴을 화면에 둔 채 한 줄씩 다시 입력하고 차이를 고쳐 반복하는 방식으로 세부 사항을 익히도록 구성됨.
간결한 연습 과정
- 패턴을 선택해 내장 레슨을 열거나, 코드를 붙여 넣거나, 소스 파일을 가져옴.
- 입력창 위에 표시되는 줄을 입력하면 앞쪽 공백과 탭은 자동으로 건너뛰며, 첫 번째 차이는 밑줄로 표시됨.
- Return 키로 다음 줄로 진행하고, 까다로운 줄을 반복하거나 전체 패턴을 다시 시작할 수 있으며, 완료 후에도 Return 키 한 번으로 다음 레슨으로 이동함.
- 작성 전에 패턴을 알아볼 수 있는지 확인하려면 ⇧⌘D를 눌러 ‘어떤 패턴일까요?’ 훈련을 시작함. 짧은 상황 설명과 정답을 식별하는 단서가 표시됨.
주요 기능
- LeetCode, 저수준 설계, 언어·문법의 세 트랙에서 Python, C++, Rust, Go 레슨을 제공하며 검색과 주제 필터를 지원함.
- LeetCode와 설계 패턴에는 단서, 불변 조건, 주의점, 기준점, 기억 문구로 구성된 회상 노트가 포함되며, 라이브러리 검색은 단서와 일치하는 항목도 찾음.
- 기억에 의존해 연습할 수 있음. 키 라인(⌘2)과 리콜(⌘3)은 코드를 숨기고 Return 키를 누를 때마다 각 줄을 확인하며, 요청 시 한 토큰짜리 힌트(⌘')를 제공하고 시간 측정 없이 시도를 평가함.
- 선택적 주석 건너뛰기 기능으로 전체 참조 코드는 보면서 코드에 집중할 수 있음.
- 가져오거나 붙여 넣은 패턴을 로컬에 저장하는 개인 연습 라이브러리를 제공함.
- 타이머나 속도 목표 없이 현재 위치(예: 13개 중 2개)를 보여주는 진행 표시 기능을 제공함.
SwiftUI,AppKit,Core Data기반의 네이티브 오프라인 앱이며 계정, 분석 기능, 서드파티 런타임 의존성이 없음.- 조절 가능한 고정폭 글꼴, 탭 너비, 선택형 화면 키보드로 입력 환경을 설정할 수 있음.
시작하기
- Homebrew로 설치할 수 있음:
brew install --cask mieraidihaimu/tap/typingpall. - 소스에서 빌드하려면 전체 Xcode가 설치된 Mac에서 저장소를 복제하고
TypingPall.xcodeproj를 열어 TypingPall 스킴과 My Mac을 선택한 뒤 ⌘R을 누름. 저장소 주소는 GitHub임. - 앱의 대상 운영체제는 macOS 12 이상이며, 현재 버전의 Xcode 사용이 권장됨. Xcode에서 서명 설정을 요청하면 Signing & Capabilities에서 개발 팀을 선택함.
- C++ 이진 검색 연습부터 시작하거나 ⌘L로 레슨을 선택할 수 있음. 직접 작성한 코드는 Add Script를 사용하거나 ⌘O로 UTF-8 소스 파일을 가져와 연습함.
연습 가능한 레슨
- LeetCode — Python 인터뷰 패턴: 슬라이딩 윈도, 투 포인터, 이진 검색, BFS, DFS, 트리·격자 순회, 위상 정렬, 백트래킹, 유니온 파인드, 배낭 문제 및 기타 동적 계획법.
- 저수준 설계 — 생성·구조·행동 패턴: 팩토리, 빌더, 싱글턴, 어댑터, 데코레이터, 컴포지트, 전략, 상태, 옵저버, 커맨드, 책임 연쇄.
- 저수준 설계 — 설계 구성 요소: LRU 캐시, 토큰 버킷 속도 제한기.
- 언어·문법 — Python 기초: 컴프리헨션, 컬렉션, 제너레이터, 데이터클래스.
- 언어·문법 — C++ 기초: 벡터, 해시 맵, 소유권, 람다 정렬.
- 언어·문법 — Rust 기초: 빌림,
Result, 반복자, 열거형. - 언어·문법 — Go 기초: 슬라이스, 오류, 메서드, 인터페이스.
- 언어·문법 — 네 언어의 동시성: 스레드 풀, 비동기 작업, 뮤텍스, 조건 변수, 채널.
- 원본 예제는
lessons.json에서 확인할 수 있으며, 가져온 스니펫은 연습 텍스트로만 사용되고 앱이 실행하지 않음.
단축키
- 현재 줄 확인: Return.
- 복사, 키 라인, 리콜: ⌘1, ⌘2, ⌘3.
- 힌트: ⌘'.
- 패턴 반복: ⌘R.
- 라이브러리 열기: ⌘L.
- ‘어떤 패턴일까요?’ 훈련: ⇧⌘D.
- 파일 가져오기: ⌘O.
- 스크립트 추가: ⇧⌘N.
세부 동작
- 참조 코드의 들여쓰기는 그대로 보이지만, 입력 대상에서는 앞쪽 공백과 탭을 제외함. 줄 안쪽과 끝의 공백은 입력 대상에 포함됨.
- 빈 줄은 Return 키로 진행하며, 마지막 줄도 확인을 마쳐야 패턴이 완료됨.
- UTF-8 파일은 최대 1MB, 정규화 후 최대 20,000자까지 가져올 수 있음. 줄 끝을 정규화하고 탭은 설정된 너비로 확장하며 유니코드는 보존함.
- 입력창에서는 한 번에 한 줄씩 입력하며, 전체 스니펫은 Add Script에 붙여 넣음. 저장한 패턴은 앱을 다시 실행한 뒤에도 유지되지만 현재 연습 위치는 저장되지 않음.
- 주석 필터링은 Python, C++, Rust, Go를 지원함. 다른 언어는 Plain text를 선택하거나 Options에서 Skip comments를 끄면 전체 텍스트를 연습할 수 있음.
- 패턴을 연습하는 중 옵션을 바꾸어도 현재 위치가 유지되며, Python 독스트링은 연습에 포함됨.
빌드 및 기여
- 버그 보고, 더 명확한 레슨, 접근성 개선, 소규모 수정 기여를 환영함. 기여 안내를 확인하거나 버그를 보고하고 레슨을 제안할 수 있음.
./scripts/check.sh는 단위 테스트, UI 테스트, Apple silicon 및 Intel용 Release 빌드를 실행함../scripts/check.sh -only-testing:TypingPallTests는 데스크톱 UI 자동화 없이 단위 테스트와 Release 빌드를 실행함.python3 scripts/check_lessons.py는 사용 가능한 언어 툴체인으로 내장 레슨 예제를 검증함.- UI 테스트에는 로그인된 데스크톱이 필요하며, Xcode 테스트 실행기가 데스크톱을 제어하도록 허용해야 함. 배포 점검은 릴리스 안내를, 과거 설계 노트는 문서 아카이브를 참조함.
- TypingPall은 Mier가 만들었으며 기여자들에게 감사의 뜻을 전함. 라이선스는 GPL-3.0임.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요