RaceLogger is a robust Java-based desktop application designed specifically for university students and cycling enthusiasts who need a professional-grade race data recording and analysis tool without the high cost of specialized hardware.
Recording race data accurately is crucial for performance analysis. RaceLogger provides an intuitive interface for real-time race logging, lap tracking, and detailed performance analysis. Whether you're managing a solo time trial or a complex team event, RaceLogger streamlines the data collection process and provides meaningful insights.
- ⏱️ Real-time Race Logging: Record racer IDs, names, lap times, and total elapsed time with millisecond precision.
- 🔄 Session Recovery: Never lose your data. If the application closes unexpectedly, RaceLogger automatically prompts to recover the last session.
- 📊 Advanced Data Analysis:
- Automatically calculate average lap times.
- Set time and lap limits to filter results.
- Identify DNF (Did Not Finish) participants based on custom criteria.
- Dedicated Team Mode for analyzing performance across groups.
- 👤 Racer Management: Maintain a persistent database of racers, including names, IDs, and genders.
- 📥 CSV Integration: All data is stored in standard CSV format, making it easy to export to Excel, Google Sheets, or other analysis tools.
- 🔐 Secure Access: Optional login system to protect sensitive race data and settings.
RaceLogger follows a structured navigation flow managed by a central controller. Each frame serves a specific purpose in the race management lifecycle.
graph TD
Start((Start)) --> Main[Main Controller]
Main -->|Config: login=true| Login[LoginFrame]
Main -->|Config: login=false| Dash[DashFrame]
Login -->|Authenticated| Dash
Dash --> Record[RecordFrame]
Dash --> List[ListFrame]
Dash --> Setting[SettingFrame]
Dash --> RacerEdit[RacerEditFrame]
List --> Analyze[AnalyzeFrame]
Analyze --> TeamAnalyze[TeamAnalyzeFrame]
TeamAnalyze --> TeamAdjust[TeamAdjustFrame]
Record -.->|SaveResults| Dash
Setting -.->|Back| Dash
RacerEdit -.->|Back| Dash
List -.->|Back| Dash
Analyze -.->|Back| Dash
- Template Method Pattern: The application uses a
TemplateFrameas a base class for all UI windows, ensuring consistent looks (fonts, icons) and behaviors across the app. - High-Precision Threading: The chronometer in
RecordFrameruns on a dedicated background thread, decoupled from the Swing Event Dispatch Thread (EDT). This ensures the UI remains responsive while maintaining millisecond-accurate timing. - Resilient Persistence: The app implements an "Append-on-Record" logic. Every time a racer crosses the line, the data is immediately appended to
record.csv, protecting against data loss in case of hardware failure or power outage. - Dynamic Sort & Filter: Uses
TableRowSorterand custom comparators to allow real-time ranking and DNF marking during analysis.
RaceLogger uses simple, human-readable CSV files for data storage:
| File Type | Path | Format |
|---|---|---|
| Racers | data/racerinfo/racers.csv |
ID, Name, Gender |
| Live Record | data/record.csv |
ID, Name, Time(ms), LapCount |
| Settings | data/config/settings.csv |
Key, Value(Boolean) |
| Auth | data/logininfo/authorization.csv |
Username, Password |
src/controller: ContainsMain.java(entry point) and navigation logic.src/frames/: All UI components (Dashboard, Record, Analyze, Settings, etc.).data/: (Generated at runtime) Stores race records, racer information, and configuration settings.images/: Stores UI assets and icons.run.sh: Convenient shell script for compiling and running the application on Linux.
- Java Development Kit (JDK) 8 or higher.
- Clone and navigate:
git clone https://github.com/AliFuatAkyemis/RaceLogger.git cd RaceLogger - Run using the provided script:
chmod +x run.sh ./run.sh
- Racer Setup: Go to
Racer Editto add your athletes. This maps IDs to names. - Recording: Open
Record, hitStart. When an athlete finishes a lap, type their ID and press Enter (or clickAdd). - Completion: Click
Save&Exit. Choose a name for the record file. - Analysis: Navigate via
Records List-> Select File ->Analyze. ToggleTeam Modeif you're evaluating team rankings.
This project is licensed under the MIT License - see the LICENSE file for details.
Developed by Ali Fuat Akyemis