Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ jobs:
uses: actions/cache@v4
with:
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastPlot/private/mex_src/**', 'libs/FastPlot/build_mex.m') }}
libs/FastSense/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastSense/private/mex_src/**', 'libs/FastSense/build_mex.m') }}

- name: Compile MEX files
if: steps.cache-mex.outputs.cache-hit != 'true'
Expand All @@ -37,9 +37,9 @@ jobs:
with:
name: mex-linux-bench
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
libs/FastSense/mksqlite.mex
retention-days: 1

benchmark:
Expand All @@ -48,7 +48,7 @@ jobs:
runs-on: ubuntu-latest
container: gnuoctave/octave:8.4.0
env:
FASTPLOT_SKIP_BUILD: "1"
FASTSENSE_SKIP_BUILD: "1"
steps:
- uses: actions/checkout@v4

Expand All @@ -61,7 +61,7 @@ jobs:
run: |
xvfb-run octave --eval "
addpath(pwd); setup();
addpath(fullfile(pwd, 'libs', 'FastPlot', 'private'));
addpath(fullfile(pwd, 'libs', 'FastSense', 'private'));

n = 1e6;
x = linspace(0, 100, n);
Expand All @@ -79,7 +79,8 @@ jobs:
end
t_bs = toc / 1000;

fp = FastPlot();
% Measure full render cycle
fp = FastSense();
fp.addLine(x, y, 'DisplayName', 'bench');
fp.addThreshold(1.5, 'Direction', 'upper', 'ShowViolations', true);
fp.render();
Expand Down Expand Up @@ -109,12 +110,12 @@ jobs:
"

- name: Fix git ownership
run: git config --global --add safe.directory /__w/FastPlot/FastPlot
run: git config --global --add safe.directory /__w/FastSense/FastSense

- name: Store benchmark results
uses: benchmark-action/github-action-benchmark@v1
with:
name: FastPlot Performance
name: FastSense Performance
tool: customSmallerIsBetter
output-file-path: benchmark-results.json
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ jobs:
uses: actions/cache@v4
with:
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastPlot/private/mex_src/**', 'libs/FastPlot/build_mex.m') }}
libs/FastSense/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastSense/private/mex_src/**', 'libs/FastSense/build_mex.m') }}

- name: Compile MEX files
if: steps.cache-mex.outputs.cache-hit != 'true'
Expand All @@ -33,9 +33,9 @@ jobs:
with:
name: mex-linux-examples
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
libs/FastSense/mksqlite.mex
retention-days: 1

smoke-test:
Expand All @@ -44,7 +44,7 @@ jobs:
runs-on: ubuntu-latest
container: gnuoctave/octave:8.4.0
env:
FASTPLOT_SKIP_BUILD: "1"
FASTSENSE_SKIP_BUILD: "1"
steps:
- uses: actions/checkout@v4

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone "https://x-access-token:${GITHUB_TOKEN}@github.com/HanSur94/FastPlot.wiki.git" wiki
git clone "https://x-access-token:${GITHUB_TOKEN}@github.com/HanSur94/FastSense.wiki.git" wiki

- name: Generate API docs
run: python3 scripts/generate_api_docs.py
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
- name: Package release
run: |
VERSION="${{ steps.version.outputs.VERSION }}"
DIRNAME="FastPlot-${VERSION}"
DIRNAME="FastSense-${VERSION}"
mkdir -p "${DIRNAME}"

# Copy release contents (allowlist — excludes tests/, benchmarks/, docs/, bridge/, private/, .git/)
Expand Down Expand Up @@ -82,5 +82,5 @@ jobs:

Download the archive, extract it, and run `setup` in MATLAB/Octave to add libraries to path and compile MEX accelerators.
files: |
FastPlot-${{ steps.version.outputs.VERSION }}.tar.gz
FastPlot-${{ steps.version.outputs.VERSION }}.zip
FastSense-${{ steps.version.outputs.VERSION }}.tar.gz
FastSense-${{ steps.version.outputs.VERSION }}.zip
14 changes: 7 additions & 7 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ jobs:
uses: actions/cache@v4
with:
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastPlot/private/mex_src/**', 'libs/FastPlot/build_mex.m') }}
libs/FastSense/mksqlite.mex
key: mex-linux-${{ hashFiles('libs/FastSense/private/mex_src/**', 'libs/FastSense/build_mex.m') }}

- name: Compile MEX files
if: steps.cache-mex.outputs.cache-hit != 'true'
Expand All @@ -52,9 +52,9 @@ jobs:
with:
name: mex-linux
path: |
libs/FastPlot/private/*.mex
libs/FastSense/private/*.mex
libs/SensorThreshold/private/*.mex
libs/FastPlot/mksqlite.mex
libs/FastSense/mksqlite.mex
retention-days: 1

octave:
Expand All @@ -64,8 +64,8 @@ jobs:
runs-on: ubuntu-latest
container: gnuoctave/octave:8.4.0
env:
FASTPLOT_SKIP_BUILD: "1"
FASTPLOT_RESULTS_FILE: /tmp/test-results.txt
FASTSENSE_SKIP_BUILD: "1"
FASTSENSE_RESULTS_FILE: /tmp/test-results.txt
steps:
- uses: actions/checkout@v4

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/wiki-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ jobs:

- name: Clone wiki
run: |
git clone https://github.com/HanSur94/FastPlot.wiki.git wiki-check
git clone https://github.com/HanSur94/FastSense.wiki.git wiki-check

- name: Check markdown links
uses: lycheeverse/lychee-action@v2
with:
args: >-
--no-progress
--exclude-loopback
--exclude 'github.com/HanSur94/FastPlot/wiki'
--exclude 'github.com/HanSur94/FastSense/wiki'
--suggest
wiki-check/*.md
fail: true
6 changes: 3 additions & 3 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
cff-version: 1.2.0
message: "If you use FastPlot in your research, please cite it as below."
title: "FastPlot: Ultra-Fast Time Series Plotting for MATLAB and GNU Octave"
message: "If you use FastSense in your research, please cite it as below."
title: "FastSense: Ultra-Fast Time Series Plotting for MATLAB and GNU Octave"
type: software
authors:
- family-names: Suhr
given-names: Hannes
repository-code: "https://github.com/HanSur94/FastPlot"
repository-code: "https://github.com/HanSur94/FastSense"
license: MIT
keywords:
- MATLAB
Expand Down
46 changes: 23 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# FastPlot
# FastSense

[![Tests](https://github.com/HanSur94/FastPlot/actions/workflows/tests.yml/badge.svg)](https://github.com/HanSur94/FastPlot/actions/workflows/tests.yml)
[![codecov](https://codecov.io/gh/HanSur94/FastPlot/graph/badge.svg)](https://codecov.io/gh/HanSur94/FastPlot)
[![Tests](https://github.com/HanSur94/FastSense/actions/workflows/tests.yml/badge.svg)](https://github.com/HanSur94/FastSense/actions/workflows/tests.yml)
[![codecov](https://codecov.io/gh/HanSur94/FastSense/graph/badge.svg)](https://codecov.io/gh/HanSur94/FastSense)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![MATLAB](https://img.shields.io/badge/MATLAB-R2020b%2B-orange.svg)](https://www.mathworks.com/products/matlab.html)
[![Octave](https://img.shields.io/badge/GNU%20Octave-7%2B-blue.svg)](https://octave.org)

Ultra-fast time series plotting for MATLAB and GNU Octave. Plot 100M+ data points with fluid zoom and pan — rendering only ~4,000 points at any zoom level.

<p align="center">
<img src="docs/images/dashboard.png" alt="FastPlot Dashboard" width="800">
<img src="docs/images/dashboard.png" alt="FastSense Dashboard" width="800">
</p>

## Performance
Expand Down Expand Up @@ -47,7 +47,7 @@ setup; % adds libraries to path + compiles MEX
x = linspace(0, 100, 1e7);
y = sin(x) + 0.1 * randn(size(x));

fp = FastPlot('Theme', 'dark');
fp = FastSense('Theme', 'dark');
fp.addLine(x, y, 'DisplayName', 'Sensor');
fp.addThreshold(0.8, 'Direction', 'upper', 'ShowViolations', true);
fp.render();
Expand All @@ -57,8 +57,8 @@ fp.render();
## Installation

```bash
git clone https://github.com/HanSur94/FastPlot.git
cd FastPlot
git clone https://github.com/HanSur94/FastSense.git
cd FastSense
```

Then in MATLAB or Octave:
Expand All @@ -73,44 +73,44 @@ No toolbox dependencies. MEX compilation is optional — pure MATLAB fallbacks a

## Documentation

Full documentation is available in the [Wiki](https://github.com/HanSur94/FastPlot/wiki):
Full documentation is available in the [Wiki](https://github.com/HanSur94/FastSense/wiki):

- [Getting Started](https://github.com/HanSur94/FastPlot/wiki/Getting-Started) — tutorial with examples
- [API Reference: FastPlot](https://github.com/HanSur94/FastPlot/wiki/API-Reference:-FastPlot) — core plotting class
- [API Reference: Dashboard](https://github.com/HanSur94/FastPlot/wiki/API-Reference:-Dashboard) — layouts, widgets, engine
- [API Reference: Sensors](https://github.com/HanSur94/FastPlot/wiki/API-Reference:-Sensors) — sensor system
- [API Reference: Event Detection](https://github.com/HanSur94/FastPlot/wiki/API-Reference:-Event-Detection) — event pipeline
- [Architecture](https://github.com/HanSur94/FastPlot/wiki/Architecture) — render pipeline, data flow
- [MEX Acceleration](https://github.com/HanSur94/FastPlot/wiki/MEX-Acceleration) — SIMD details
- [Performance](https://github.com/HanSur94/FastPlot/wiki/Performance) — benchmarks
- [Getting Started](https://github.com/HanSur94/FastSense/wiki/Getting-Started) — tutorial with examples
- [API Reference: FastSense](https://github.com/HanSur94/FastSense/wiki/API-Reference:-FastSense) — core plotting class
- [API Reference: Dashboard](https://github.com/HanSur94/FastSense/wiki/API-Reference:-Dashboard) — layouts, widgets, engine
- [API Reference: Sensors](https://github.com/HanSur94/FastSense/wiki/API-Reference:-Sensors) — sensor system
- [API Reference: Event Detection](https://github.com/HanSur94/FastSense/wiki/API-Reference:-Event-Detection) — event pipeline
- [Architecture](https://github.com/HanSur94/FastSense/wiki/Architecture) — render pipeline, data flow
- [MEX Acceleration](https://github.com/HanSur94/FastSense/wiki/MEX-Acceleration) — SIMD details
- [Performance](https://github.com/HanSur94/FastSense/wiki/Performance) — benchmarks

## Examples

See the [`examples/`](examples/) directory for 40+ runnable scripts covering basic plotting, dashboards, sensors, event detection, live mode, and disk-backed storage. A categorized guide is in the [wiki](https://github.com/HanSur94/FastPlot/wiki/Examples).
See the [`examples/`](examples/) directory for 40+ runnable scripts covering basic plotting, dashboards, sensors, event detection, live mode, and disk-backed storage. A categorized guide is in the [wiki](https://github.com/HanSur94/FastSense/wiki/Examples).

## Libraries

| Library | Path | Description |
|---------|------|-------------|
| FastPlot | `libs/FastPlot/` | Core plotting engine, layouts, toolbar, themes, disk storage |
| FastSense | `libs/FastSense/` | Core plotting engine, layouts, toolbar, themes, disk storage |
| SensorThreshold | `libs/SensorThreshold/` | Sensor containers, state channels, threshold rules |
| EventDetection | `libs/EventDetection/` | Event detection, viewer, live pipeline, notifications |
| Dashboard | `libs/Dashboard/` | Dashboard engine with widgets and JSON persistence |
| WebBridge | `libs/WebBridge/` | TCP server for web-based visualization |

## Contributing

Contributions are welcome! Please open an issue to discuss your idea before submitting a pull request. See the [wiki](https://github.com/HanSur94/FastPlot/wiki) for architecture details and API references.
Contributions are welcome! Please open an issue to discuss your idea before submitting a pull request. See the [wiki](https://github.com/HanSur94/FastSense/wiki) for architecture details and API references.

## Citation

If you use FastPlot in your research, please cite it:
If you use FastSense in your research, please cite it:

```bibtex
@software{fastplot,
@software{fastsense,
author = {Suhr, Hannes},
title = {FastPlot: Ultra-Fast Time Series Plotting for MATLAB and GNU Octave},
url = {https://github.com/HanSur94/FastPlot},
title = {FastSense: Ultra-Fast Time Series Plotting for MATLAB and GNU Octave},
url = {https://github.com/HanSur94/FastSense},
license = {MIT}
}
```
Expand Down
Loading
Loading