Most of our work has resulted in scholarly publications. On this page you can review our publications to get an idea about our work.
gRPC wrapper for model with a Basic modeling interface
October, 2026 • Software
van den Oord, Gijs, Verhoeven, Stefan, Pelupessy, Inti
This software allows you to wrap your BMI implementation (https://github.com/csdms/bmi) in a server process and communicate with it via the included python client. The communication is serialized to p…
This software allows you to wrap your BMI implementation (https://github.com/csdms/bmi) in a server process and communicate with it via the included python client. The communication is serialized to protocol buffers by gRPC (https://grpc.io/) and occurs over network ports.
Added
Support for Python 3.12, 3.13 and 3.14 (#161).
Changed
Upgraded to protobuf 7 (protobuf>=7.35.1,<8) and grpcio 1.84 (grpcio, grpcio-reflection and grpcio-status >=1.84.0), and regenerated the Python gRPC stubs.
The C++ server now builds with C++17 and the newer gRPC
The Apptainer and Singularity clients now run containers with --cleanenv, so host environment variables are no longer passed into the container. This matches how the Docker client already behaves.
Modernized the Dockerfile: Ubuntu LTS base image, BMI C/C++ specs built from CSDMS source
Removed
Support for Python 3.10 and older.
Pathological neovascularization in the eye is a significant contributor to vision loss in diseases such as age-related macular degeneration and diabetic retinopathy. While anti-VEGF biologics ar…
Pathological neovascularization in the eye is a significant contributor to vision loss in diseases such as age-related macular degeneration and diabetic retinopathy. While anti-VEGF biologics are effective, they require repeated intravitreal injections. Here, we report a novel principle for designing photoactivatable VEGFR2 inhibitors, along with two examples, EYE1090 and EYE1118. Azido-functionalization in these molecules enables light-triggered receptor binding while preserving potent inhibition in the dark. Both compounds exhibit significantly enhanced activity upon exposure to green light that reaches the human retina, also in the elderly. In vitro, the compounds robustly inhibited angiogenesis and endothelial migration that was further potentiated by light. In vivo, orally administered EYE1090 and EYE1118 suppressed VEGF-induced retinal leakage in rats and reduced lesion size in a mouse model of choroidal neovascularization, but did not show acute hepatotoxicity. Our findings introduce a novel light-targeted pharmacological approach exploiting the natural light focusing anatomy of the eye. KEYWORDS: azidation, photoactivation, oxindoles, VEGFR2, age-related macular degeneration, diabetic retinopathy, targeting, optotargeting, tyrosine kinase inhibitor, kinases, angiogenesis, retinopathy, neovascularization, EYE1090, EYE1118
Supplementary Material S1. Bending strength and density of black poplar (Populus nigra L.) specimens faced with oak and ash: raw data per specimen
October, 2026 • Dataset • Materials
Wieruszewski, Marek, Sydor, Maciej
Supplementary Material S1Bending strength and density of black poplar (Populus nigra L.) specimens faced with oak and ash: raw data per specimen
ContentRaw data – individual measurements for all…
Supplementary Material S1Bending strength and density of black poplar (Populus nigra L.) specimens faced with oak and ash: raw data per specimen
ContentRaw data – individual measurements for all 45 specimens (15 per group). Blue cells = measured values; black cells = formulas.Summary – group means, standard deviations (sample SD, n−1), minima, maxima and coefficients of variation, calculated with formulas from the Raw data sheet.Statistics – results of normality, homogeneity-of-variance, ANOVA, Welch ANOVA and Games–Howell post hoc tests (computed in Python 3.11: SciPy 1.17.1 and pingouin 0.7.0).Model – laminated (transformed-section) beam model of the faced specimens; literature-based input moduli are editable (yellow cells).
Multimetallic site engineering is emerging as a powerful strategy to regulate electronic structure and reaction pathways in complex multielectron electrocatalytic systems, such as electrocatalytic nit…
Multimetallic site engineering is emerging as a powerful strategy to regulate electronic structure and reaction pathways in complex multielectron electrocatalytic systems, such as electrocatalytic nitrate reduction. Here, we report the rational design of transition metal-doped CoWO4 (M-CoWO4, M = Cu, Fe, Ni) integrated into 3D-printed octet lattice electrodes for the electrochemical conversion of nitrate to ammonia (NO3⁻-to-NH3) coupled glycerol oxidation (GOR). Systematic experiments, in situ Raman analysis and density functional theory calculations reveal that metal doping modulates the electronic environment around active sites through charge redistribution, thereby tuning intermediate adsorption and catalytic performance. Cu doping enhances NOₓ⁻ adsorption and lowers the energy barrier for sequential protonation steps, accounting for the superior ammonia production rate (∼2 mmol cm−2 h−1) and high Faradaic efficiency (95 %). By contrast, Fe doping preferentially enhances oxidative catalysis, including OER and GOR. In a full-cell configuration, GOR-coupled nitrate reduction decreases power consumption by ∼22 % and boosts NH3 yield rate by 2.5-fold relative to the conventional NITRR||OER system. This study reveals that strategic metal doping in CoWO4 tunes its electronic structure to promote energy-efficient NO3⁻-to-NH3 conversion coupled with glycerol oxidation, offering a sustainable pathway toward green ammonia production.
This dataset contains raw sensor data and analysis results for the research article Kinetic Fingerprinting and Temperature-Humidity Compensation for Machine Learning Classification of Plastic Combusti…
This dataset contains raw sensor data and analysis results for the research article Kinetic Fingerprinting and Temperature-Humidity Compensation for Machine Learning Classification of Plastic Combustion Emissions Using a MOS Sensor Array. It includes 1200 raw CSV records from 6 polymer classes (A1-A6) across 5 commercial brands, analysis notebooks, and processed results.
Paper-polymer composites (PPCs) are increasingly applied as sustainable ion-conducting membranes in modern energy storage systems. Their recycling, circularity, and optimization, however, require a mo…
Paper-polymer composites (PPCs) are increasingly applied as sustainable ion-conducting membranes in modern energy storage systems. Their recycling, circularity, and optimization, however, require a more detailed understanding of local structures and dynamics at a molecular level influencing macroscopic properties such as stability and ion conduction. Solid-state nuclear magnetic resonance (ssNMR) spectroscopy has evolved into a powerful tool for studying paper and cellulosic materials, but its application to PPCs, particularly in membrane technology, is still limited. This study demonstrates the power of ssNMR spectroscopy combined with dynamic nuclear polarization (DNP) to investigate dynamics and interactions via selective signal enhancement in PPCs featuring ionic conductivity. The results reveal changes in molecular mobility after polymerization, allowing for distinguishing overlapping components with different mobilities.
Huzzah! v0.14.0 is finally here! :tada:
Almost two years since v0.13.2, and eight betas later. This is a big one: faster, steadier, a new desktop app, and an Android app that has caught up. And syncin…
Huzzah! v0.14.0 is finally here! :tada:
Almost two years since v0.13.2, and eight betas later. This is a big one: faster, steadier, a new desktop app, and an Android app that has caught up. And syncing between your devices works, local-first, with whatever sync tool you already use: it's still early and opt-in, with a few rough edges (see Sync below, or the announcement). More than 30 people contributed.
Since the last stable release, ActivityWatch also passed 1 million downloads, and it's now downloaded over 10,000 times a week. Thank you!
Read more: the announcement · the full changelog (about 1,000 changes, too long for this page)
Summary
⚡ Much faster, especially once you have years of data: dashboards load day by day and cache finished days, so long ranges no longer time out and repeat visits are near instant
🐛 Steadier all round: crashed watchers restart on their own, a macOS memory leak and crash are fixed, and a long tail of annoyances is gone
🔄 Sync between your devices works. It is local-first: no ActivityWatch server, no account. Point it at a folder you already sync with Syncthing, Dropbox or anything else, and each device's data shows up on the others. It is still rough in places (it takes more disk space than it should, and setup is manual), so it is opt-in (how to set it up)
👀 See all your devices together: the Activity view can now merge any set of devices into one view
📱 Android caught up: ActivityWatch for Android 0.14 shipped last month, its first stable release since 2023, with far fewer crashes and the same sync built in
🖥️ A new desktop app built on Tauri: same features as the classic one and lighter, but less battle-tested so far, so the classic app ships too and stays the default
🌐 A refreshed web UI: a better timeline, custom date ranges, a work-time report, billable hours export, and category sets for switching between rule profiles
🌍 ActivityWatch now speaks Swedish, German, Ukrainian, Russian and Chinese
🔒 More control over what gets stored: filter sensitive window titles before they ever reach the database
🛡️ For those who want it: put an API key on the server
🍎 macOS: signed and notarized builds for Apple Silicon and Intel, and browser URLs are tracked properly again
🐧 Linux: Wayland support out of the box in the new app, and arm64 builds
🤖 For the AI crowd: one canonical query that returns clean, categorized events, so an assistant can answer questions about your time without a custom integration (agents and AI)
And a lot more...
Honorable mentions
Many of this release's features came from the community. Thank you:
@0xbrayo for aw-tauri, from prototype to a release-ready app, and for aw-notify-rs and the Rust side of Android sync
@BohdanRykush for the Ukrainian, German and Russian translations, and the original i18n setup and language picker (ActivityWatch/aw-webui#855)
@JhihJian for the Simplified Chinese translation (ActivityWatch/aw-webui#865)
@NickWick13 for the Swedish translation (ActivityWatch/aw-webui#947)
@BelKed for rewriting the browser extension for Manifest V3 (ActivityWatch/aw-watcher-web#152), plus theme detection and top browser titles in the web UI
@2e3s for awatcher, which gives the new app native Wayland support
@nerumo for timeline swimlanes and the duration filter (ActivityWatch/aw-webui#679)
@rrogerc for capturing URLs from Firefox-based browsers on macOS (ActivityWatch/aw-watcher-window#134)
@hawai-i for the macOS Apple Events entitlement, which brought native browser URL capture back (#1411)
@FractalMachinist for browser tracking on Android (ActivityWatch/aw-android#151)
@Lorite for fixes to Android's folder-picker sync (ActivityWatch/aw-android#221, ActivityWatch/aw-android#222)
@wind-mask for the Tauri app's headless --daemon and --mini modes
@Q-Ze for fixing the multi-device view with synced data (ActivityWatch/aw-webui#969)
@RTnhN for the universal columns visualization (ActivityWatch/aw-webui#733)
@behdadmansouri for clearer import feedback (ActivityWatch/aw-webui#874)
@fanxing11 for a string of fixes across the watchers, client and notifications
Installation
See the getting started guide in the documentation.
Downloads
Classic distribution
Windows (.exe installer)
macOS: Intel | Apple Silicon (.dmg)
Linux: .zip | .AppImage | .deb
Tauri distribution (experimental — native Wayland support on Linux)
Windows (.exe installer)
macOS: Intel | Apple Silicon (.dmg)
Linux: .AppImage | .zip
Contributors
Thanks to everyone who contributed to this release:
@0xbrayo, @2e3s, @almirb, @amsam0, @BelKed, @deancureton, @erikbjare, @fanxing11, @Game4Move78, @hawai-i, @HomeArchbishop, @istudyatuni, @kenoma-hld, @luisgerhorst, @matt-seb-ho, @MBK-fr, @moodyhunter, @musicinmybrain, @nerumo, @NickWick13, @Noorts, @petrroll, @powellnorma, @Q-Ze, @reddaisyy, @rrogerc, @RTnhN, @Senophyx, @TiberiusNemesis, @TimeToBuildBob, @vdonich, @yuhldr
More detail
Faster
Measured on a real 9-year database (9.2 million events, 1.8 GB) on an M2 Mac, with each version's own dashboard queries. The new dashboard asks for long ranges one day at a time, so the servers are compared on that same workload:
| Year view, 365 daily queries | v0.13.2 | v0.14 first load | v0.14 repeat load |
|---|---:|---:|---:|
| Classic app (Python server) | 120 s | 41 s | 0.6 s |
| Tauri app (Rust server) | 139 s | 32 s | 0.2 s |
The v0.13.2 dashboard fetched a Year as a single request instead. That took 120 s on the Python server (past the default 30 s timeout, so it failed) and 19 s on the Rust server. Asking day by day is what makes caching, progress and per-day charts possible. All time across nine years reopens in 5 s on the classic app; the Tauri app doesn't cache All time yet (aw-server-rust#784). Under the hood: new database indexes, SQLite WAL mode, cached category rules (categorizing a year of window titles went from 53 s to 10 s) and streaming exports.
Sync
aw-sync copies each device's data into a sync folder (~/ActivityWatchSync by default). You choose how that folder moves between devices: Syncthing, Dropbox, a network drive, anything that syncs files. Your data never touches a server of ours. Each device only writes its own files and opens everyone else's read-only, so devices can't corrupt each other, and synced data shows up as -synced-from- buckets that you can query, merge in the Activity view, or ignore.
This cycle we ran it on our own desktops and phones and fixed what we hit: duplicate events after a resume, one broken device aborting a whole sync, phone data not being picked up, and a new aw-sync status that tells you what each device has synced. Known rough edges: every device keeps a full copy of every other device's data, so it uses more disk than it should (a much more compact format is in the works), settings and deletions don't sync, and setup is manual. It isn't started by default: turn it on in the app's modules menu, or run aw-sync.
Android
ActivityWatch for Android 0.14 (v0.14.0 to v0.14.2, September) is the first stable Android release since 2023. User-perceived crashes went from about 7.8% to under 1%. It adds alerts, a home-screen widget, Firefox and Chrome tracking, CSV and JSON export, and the same sync: pick a folder, and your phone's data shows up on your desktop.
More reliable
Crashed watchers restart automatically, with crash logs, in both apps; only one instance runs at a time
macOS window watcher: fixed a crash on unusual window titles and a leak of up to ~359 MB of memory per day on busy machines
AFK: locking the screen counts as AFK on macOS, held keys count once, gamepads count on Linux, recovery after an X server restart, and a Windows idle-time overflow after 49.7 days is fixed
Data safety: heartbeats are rejected cleanly under load instead of risking corruption, a damaged database recovers on startup, and imports merge into existing buckets instead of failing
The Python and Rust servers now return the same query results, checked by a new parity test suite (server comparison)
The new app (Tauri)
aw-tauri ships alongside the classic aw-qt app for Windows, macOS (Apple Silicon and Intel) and Linux (x86_64 and arm64). It has its own window, runs the Rust server inside the app, is smaller to download, supports Wayland on Linux, and updates itself on macOS and Linux (on Windows, install new versions manually for now). The story: A lighter, faster ActivityWatch with Tauri.
Also new
Web UI: timeline swimlanes and AFK/category/duration filters, "merge by app", keyboard and scroll panning, rule priority and field-scoped regex rules, top browser titles, top stopwatch events, CSV export that streams large buckets, and bulk delete of a device's buckets
Browsers: Arc, Dia, Zen, Helium, Floorp, Firefox ESR and more Chromium variants; URLs from Firefox-based browsers on macOS
Notifications rewritten in Rust (aw-notify-rs), with a settings panel. They are now off until you enable them
Start at login is a toggle in the app
iOS: Screen Time data imported with aw-import-screentime shows up correctly
Upgrade notes
The first start after upgrading updates the database indexes once. Your data isn't changed. On large databases this takes a while (about 30 s for the classic app and a minute for the Tauri app on a 1.8 GB database), and the dashboard may not connect until it's done. Leave ActivityWatch running and reload.
Notifications (aw-notify) are now opt-in. Enable them in Settings if you used them before.
macOS 12 or newer is required.
Supporting ActivityWatch
ActivityWatch has no ads, no venture funding and no data business. It is maintained by a tiny team, and ActivityWatch Pro, our patronage subscription, keeps releases like this coming. From $5/month, and it doesn't unlock anything: nothing is locked. Prefer a one-time contribution? See Donate, or sponsor us on GitHub.
Full changelog
About 1,000 changes across 13 repositories, too long for this page: see the v0.14.0 changelog in the documentation, or compare v0.13.2...v0.14.0.
Announcement: ActivityWatch v0.14.0: faster, steadier, synced, and a new app
There is an increasing interest in upgrading the EModel, a parametric tool for speech quality estimation, to the wideband and super-wideband contexts. The
Contemporary models of Unmanned Aerial Vehicles (UAVs) are largely developed using simulators. In a typical scheme, a flight simulator is dovetailed with a
Undertaking engineering research can be compounding for beginning graduate students and thwarting even for seasoned researchers. With a wealth of academic
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.