themblem/doc/alg-cleanup.md
2025-10-29 21:27:29 +00:00

5.3 KiB

ALG Directory Cleanup Plan

This document tracks the cleanup work for the alg/ directory to remove unused code and simplify the build system.

🎯 Cleanup Goals

  • Remove unused command functions and infrastructure code
  • Simplify the Makefile by removing unused conditional builds
  • Reduce codebase size and complexity
  • Maintain core QR code functionality

🗑️ Files/Code to Remove

1. Unused Command Functions in qrtool.cpp

These functions are defined but never called:

// Remove these unused functions:
static int detect_cmd(char **argv, int argc)      // Lines ~26-40
static int dot_cmd(char **argv, int argc)         // Lines ~65-80  
static int roi_verify_cmd(char **argv, int argc)  // Lines ~100-120

Impact: Reduces executable size, removes unused QR detection and ROI verification code.

2. Unused Infrastructure Code

HTTP Server (http.h, http.cc)

  • Status: Never called, only includes httplib.h
  • Dependencies: httplib.h (304KB header file)
  • Action: Remove both files

gRPC Server (fileprocess.h, fileprocess.cpp)

  • Status: Only used when ENABLE_GRPC is defined, but it's never set
  • Dependencies: gRPC libraries, protobuf
  • Action: Remove both files

Message Queue Worker (mq_worker.h, mq_worker.cpp)

  • Status: Only used when USE_PULSAR is defined, but it's never set
  • Dependencies: Pulsar client library, JSON library
  • Action: Remove both files

3. Unused Python Files

worker.py

  • Status: Pulsar-based worker that's never used
  • Dependencies: Pulsar client, subprocess calls to ./qrtool
  • Action: Remove file

server.py

  • Status: Flask server with hardcoded credentials, never called
  • Dependencies: Flask, subprocess calls to ./qrtool
  • Action: Remove file

4. Unused Functions in libqr.cpp

// Remove these unused functions:
double emblem_roi_similarity(SimilarityAlg alg, InputArray std_in, InputArray frame_roi_in, string &err)  // Lines ~444-488
static inline void showimg_(const char *title, Mat &img)  // Lines ~48-50
#define show(img) showimg_(#img, img)  // Line ~51

Impact: Removes unused ROI similarity comparison and image display utilities.

5. Unused Header Files

string_format.h

  • Status: Only used once in libqr.cpp for one error message
  • Usage: err = string_format("image too blurry: %lf < %lf", sharpness, thres);
  • Action: Consider inlining the single usage or removing if not critical

🔧 Build System Cleanup

Makefile Simplification

Remove unused conditional builds:

# Remove these unused variables and their usage:
USE_PULSAR :=                    # Line 19
ENABLE_GRPC :=                  # Line 21

# Remove conditional compilation:
$(if $(USE_PULSAR), mq_worker.cpp) \           # Line 37
$(if $(ENABLE_GRPC), fileprocess.o fileprocess.pb.o fileprocess.grpc.pb.o) \  # Line 38
$(if $(USE_PULSAR), -lpulsar) \                # Line 46

# Remove unused targets:
fileprocess.o: fileprocess.grpc.pb.h           # Line 58

📊 Current Usage Analysis

Actually Used (Keep)

  • qrtool.cpp - Main executable (only angle_cmd is used)
  • qrtool_wasm.cpp - WebAssembly version for web/scanner
  • libqr.cpp - Core QR processing logic
  • base64.cpp - Used by mq_worker (but mq_worker itself is unused)
  • string_format.h - Used once in libqr.cpp

Build Targets (Keep)

  • qrtool - Main binary
  • qrtool.web.js - Web version
  • qrtool.wx.js - WeChat mini-program version
  • qrtool.wx.wasm.br - Compressed WASM for WeChat

🚀 Implementation Steps

  1. Phase 1: Remove Unused Functions

    • Remove detect_cmd, dot_cmd, roi_verify_cmd from qrtool.cpp
    • Remove emblem_roi_similarity, showimg_, show from libqr.cpp
  2. Phase 2: Remove Unused Infrastructure

    • Remove http.h, http.cc
    • Remove fileprocess.h, fileprocess.cpp
    • Remove mq_worker.h, mq_worker.cpp
  3. Phase 3: Remove Unused Python Files

    • Remove worker.py
    • Remove server.py
  4. Phase 4: Clean Build System

    • Simplify Makefile by removing unused conditionals
    • Remove unused dependencies and linking
  5. Phase 5: Test and Verify

    • Ensure qrtool still builds and works
    • Verify WASM builds still function
    • Test core QR angle detection functionality

📈 Expected Benefits

  • Reduced binary size: Remove unused command functions
  • Simplified build: Remove unused conditional compilation
  • Cleaner codebase: Remove dead infrastructure code
  • Faster builds: Fewer dependencies and compilation steps
  • Easier maintenance: Less code to maintain and debug

⚠️ Risks and Considerations

  • Dependencies: Some files may have hidden dependencies
  • Build testing: Need to verify all build targets still work
  • Functionality: Ensure core QR processing isn't affected
  • Documentation: Update any documentation that references removed code

📝 Progress Tracking

  • Phase 1: Remove unused functions
  • Phase 2: Remove unused infrastructure
  • Phase 3: Remove unused Python files
  • Phase 4: Clean build system
  • Phase 5: Test and verify
  • Update documentation

Last Updated: $(date) Status: Planning Phase Assignee: TBD