SignalShow is an educational signal processing application, originally built in Java Swing. This proposal explores modernizing it for web and desktop platforms.
Vision: "SignalShow is to DSP what Desmos is to algebra"
Status: Early prototype phase
- Web Version - Browser-based prototype in React/Plotly.js
- Desktop Version - Proposed Tauri app with optional Julia backend
- Java Version - Original Swing GUI with 80+ functions (legacy)
Repository: /nuthatch-desktop
- 4 signal types: Sine, Cosine, Chirp, Gaussian
- Interactive waveform visualization (Plotly.js)
- FFT analysis
- Window functions: Hanning, Hamming, Blackman
- 5 educational demos
- JSON export
- Responsive 3-column layout
- SignalDisplay - Interactive waveform plots
- FunctionGenerator - Signal parameter controls
- OperationsPanel - FFT and windowing operations
- DemoGallery - Educational examples
cd /Users/julietfiss/src/nuthatch-desktop
npm install
npm run dev
# Open http://localhost:5173- Rust/WebAssembly backend for performance
- Additional signal types and operations
- Advanced filtering
- 3D visualizations
The original implementation with 80+ functions and 40+ operations.
- Analytic function generators (Gaussian, Chirp, Delta, Bessel, windows, noise models, etc.)
- 1‑D / 2‑D interactive plotting (zoom, pan, overlays)
- Frequency-domain and convolution operations
- Educational demos (sampling, filtering, holography, more)
- Modular operation architecture
SignalShow/
  SignalShow.java          # Main entry point
  jai_core.jar             # JAI core classes (bundled)
  jai_codec.jar            # JAI codec classes (bundled)
  signals/                 # Application packages
  run-signalshow.sh        # Launcher script
- Java Development Kit (JDK) 11+
- Bundled JAI jars: jai_core.jar,jai_codec.jar
./run-signalshow.shThis script verifies JAI jars, sets the classpath, and launches the main class.
find SignalShow -name "*.java" > /tmp/sigshow-srcs.txt
javac -d . @/tmp/sigshow-srcs.txt
java -cp "SignalShow:SignalShow/jai_core.jar:SignalShow/jai_codec.jar" SignalShowOr one-liner:
find SignalShow -name "*.java" -print0 | xargs -0 javac -d . && \
java -cp "SignalShow:SignalShow/jai_core.jar:SignalShow/jai_codec.jar" SignalShow| Symptom | Likely Cause | Resolution | 
|---|---|---|
| NoClassDefFoundError: javax/media/jai/PlanarImage | JAI jars not on classpath | Ensure classpath includes JAI jars. Remove any extracted SignalShow/javaxdirectory. | 
| SecurityException: sealing violation | Duplicate package definition | Delete stray javax/directory. | 
| UnsatisfiedLinkErrorfor JAI native libs | Platform mismatch (x86 vs arm64) | Run under Rosetta with x86 JDK, or obtain arm64 native builds. | 
List native libraries:
find . -type f \( -name "*.so" -o -name "*.dylib" -o -name "*.jnilib" -o -name "*.dll" \) -printCheck jar contents:
jar tf SignalShow/jai_core.jar | grep javax/media/jai/PlanarImage.classRemove accidentally extracted classes:
rm -rf SignalShow/javaxNew analytic functions or operations can be added by creating classes under signals/... subpackages and wiring them into existing registries or menus.
- Fork the repository
- Create a feature branch (git checkout -b feature/your-feature)
- Commit changes with clear messages
- Open a pull request
Refer to LICENSE file or header comments in source. JAI libraries are bundled in binary form; their original licensing terms apply.