Skip to content

Commit 8d811b9

Browse files
authored
Merge branch 'main' into main
2 parents 4203272 + e4fa971 commit 8d811b9

File tree

7 files changed

+254
-0
lines changed

7 files changed

+254
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: 'UC Open Source Summit 2025'
3+
4+
event: 'UC Open Source Summit 2025'
5+
#event_url: [https://example.org](https://news.ucsc.edu/2025/10/united-nations-baskin-engineering-reboot-the-earth-hackathon/)
6+
7+
location: 'UCSC Silicon Valley Campus'
8+
#location_url: 'https://siliconvalley.ucsc.edu/'
9+
10+
11+
summary: 'Bringing together developers to create technological solutions to address the climate crisis.'
12+
13+
# Talk start and end times.
14+
# End time can optionally be hidden by prefixing the line with `#`.
15+
date: '2025-11-07'
16+
date_end: '2025-11-08'
17+
all_day: true
18+
19+
# Schedule page publish date (NOT talk date).
20+
publishDate: '2025-10-20'
21+
22+
authors: [slieggi]
23+
tags: [event]
24+
25+
# Is this a featured talk? (true/false)
26+
featured: true
27+
28+
image:
29+
caption: ''
30+
focal_point: ""
31+
32+
url_code: ''
33+
url_pdf: ''
34+
url_slides: ''
35+
url_video: ''
36+
37+
# Markdown Slides (optional).
38+
# Associate this talk with Markdown slides.
39+
# Simply enter your slide deck's filename without extension.
40+
# E.g. `slides = "example-slides"` references `content/slides/example-slides.md`.
41+
# Otherwise, set `slides = ""`.
42+
slides:
43+
44+
# Projects (optional).
45+
# Associate this post with one or more of your projects.
46+
# Simply enter your project's folder or file name without extension.
47+
# E.g. `projects = ["internal-project"]` references `content/project/deep-learning/index.md`.
48+
# Otherwise, set `projects = []`.
49+
projects:
50+
---
51+
52+
[Registration](https://forms.office.com/pages/responsepage.aspx?id=2zWeD09UYE-9zF6kFubccHmtLSqBYbBDoSCkHgfKhHpUQkJWWTk4R0tXQkxFWEQ0MDBOUTMyWk9JSy4u&route=shorturl)
53+
54+
The United Nations and UC Santa Cruz's Baskin School of Engineering are partnering to host the West Coast's first "Reboot the Earth" hackathon on November 7-8, 2025, at the UC Santa Cruz Silicon Valley Center. The event will bring together developers to create technological solutions addressing the climate crisis, specifically focusing on wildfire detection, response, and impact—challenges particularly relevant to California. Participants will work with open source tools, artificial intelligence, and open data sets to build solutions that can serve as digital public goods for local communities, with winning teams receiving six months of coaching from UN and Salesforce partners to scale their innovations.
55+
56+
See full story [here](https://news.ucsc.edu/2025/10/united-nations-baskin-engineering-reboot-the-earth-hackathon/)! If you are interested in participating as a judge or mentor please contact [Stephanie Lieggi](mailto:[email protected])
57+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
title: "Final Report — RAG-ST: Retrieval-Augmented Generation for Spatial Transcriptomics"
3+
summary: "Final report for the RAG-ST project under OSRE 2025, focusing on predicting spatial gene expression from histology images using retrieval-augmented generation."
4+
authors:
5+
- zeyu
6+
tags: ["osre25"]
7+
categories: []
8+
date: 2025-09-28
9+
lastmod: 2025-09-28
10+
featured: true
11+
draft: false
12+
---
13+
14+
Hello! I’m Zeyu Zou! I have been contributing to the **RAG-ST: Retrieval-Augmented Generation for Spatial Transcriptomics** project under the mentorship of Ziheng Duan. My project focuses on developing a framework that predicts spatial gene expression from histology images by combining vision encoders with single-cell RNA-seq references. The goal is to make spatial transcriptomics more affordable, interpretable, and scalable for the research community.
15+
16+
## Introduction
17+
RAG-ST is designed to reduce the cost and complexity of spatial transcriptomics by leveraging existing histology images and scRNA-seq priors. This work integrates computer vision with retrieval-augmented generation to improve prediction accuracy and interpretability.
18+
19+
## Methods
20+
The project used a two-stage pipeline:
21+
1. **Vision encoder** (ResNet50/ViT) to map histology patches to cell type distributions.
22+
2. **Retrieval-augmented generation** guided by scRNA-seq profiles to predict gene expression.
23+
24+
Datasets included **HEST-1K** (paired histology and expression) and **CellxGene Census** as the reference database. Training and evaluation pipelines were implemented in PyTorch.
25+
26+
## Results
27+
- Implemented a complete pipeline from histology preprocessing to expression prediction.
28+
- Achieved higher correlation scores (Pearson/Spearman) and lower errors (MSE/MAE) compared to baseline models.
29+
- Produced spatial gene expression maps with interpretable retrieval traces and attention weights.
30+
- Released open-source code, preprocessing scripts, and analysis notebooks for reproducibility.
31+
32+
## Future Work
33+
- Extend experiments to additional tissues (lung, liver, tumor samples).
34+
- Test cross-dataset generalization and robustness.
35+
- Explore integration into clinical pathology workflows for affordable spatial inference.
36+
37+
## Acknowledgments
38+
Thanks to my mentor Ziheng Duan, the UC OSPO team, the HEST-1K dataset contributors, and the CellxGene Census project. This work was conducted under OSRE 2025.
39+
40+
## Links
41+
- Repository: [https://github.com/ZeyuZou/rag-st](https://github.com/ZeyuZou/rag-st)
42+
- Preprint: *RAG-ST: Retrieval-Augmented Generation for Spatial Transcriptomics* (bioRxiv, 2025)
43+
4.51 MB
Loading
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
title: "[Final] Building PeerSky’s Extensions System"
3+
subtitle: "Secure IPC, preinstalled MV3s, and toolbar integration for a decentralized browser"
4+
summary: "A final update on my GSoC 2025 project building the extensions architecture for the PeerSky browser with UC OSPO."
5+
authors:
6+
- 6cobi
7+
tags: ["osre25", "Electron", "Peersky", "Dweb", "Extensions"]
8+
categories: ["web-development"]
9+
date: 2025-09-23
10+
lastmod: 2025-09-23
11+
featured: true
12+
draft: false
13+
14+
image:
15+
caption: "Hanzhong Liu, GSoC 2025"
16+
focal_point: "Center"
17+
preview_only: false
18+
---
19+
20+
Hi everyone, I’m Hanzhong Liu. Over the summer I worked on building the `peersky://extensions` system for [PeerSky browser](https://github.com/p2plabsxyz/peersky-browser), a decentralized and privacy-first browser built on Electron.
21+
22+
This post is my final GSoC 2025 update — covering how the extensions manager was designed, the security model behind IPC, the UI for managing extensions, and what’s next for PeerSky.
23+
24+
## Project Overview
25+
26+
The new extensions system makes PeerSky behave like a modern browser: you can install extensions from the Chrome Web Store or from local files, enable/disable them, update or uninstall, and interact with their toolbar actions through a puzzle-menu UI.
27+
28+
### Key Design Goals
29+
- Secure preload-based API exposure via `contextBridge`
30+
- Support for preinstalled, Web Store, and local packages
31+
- Toolbar integration with pin/unpin support (up to six)
32+
- Robust validation: MV3-only, size caps, zip-slip prevention
33+
34+
![Extensions Management](./peersky-extensions-management.png)
35+
36+
## Highlights
37+
38+
### Preinstalled MV3s
39+
PeerSky now ships with three trusted extensions out of the box:
40+
- Dark Reader
41+
- Linguist (web page translator)
42+
- uBlock Origin Lite
43+
44+
They remain installed by default but can be disabled at any time. This ensures users always have a working baseline without needing to browse an extension store.
45+
46+
### Electron Integration
47+
Instead of injecting scripts, the system uses **preload + IPC**. Each operation is routed through validated IPC channels:
48+
- `listExtensions`, `installFromWebStore`, `toggleExtension`, etc.
49+
- All methods are scoped to `peersky://extensions` only.
50+
- Rate limiting and size caps are enforced per renderer.
51+
52+
This design makes the surface auditable and prevents privilege leaks.
53+
54+
### Toolbar & Puzzle Menu
55+
Browser actions appear in a puzzle menu and can be pinned for quick access:
56+
- Up to six pins are allowed
57+
- Pinned state persists across sessions.
58+
- Popups (e.g., for translators or wallets) open in isolated windows, with OAuth flows preserved via popup guards.
59+
60+
61+
62+
### Security Highlights
63+
- Installs capped at **60 MB**, with early rejection on oversized payloads
64+
- **5 installs/minute** per renderer to prevent abuse
65+
- ZIP/CRX extraction hardened against path traversal
66+
- MV3 required; permissions validated at install with warnings for risky hosts
67+
- Web Store installs use Google-signed CRX verification via `electron-chrome-web-store`
68+
69+
## Example: Installing from the Web Store
70+
71+
Adding a new extension is simple:
72+
1. Paste a Chrome Web Store URL or ID into the install bar.
73+
2. PeerSky downloads and validates the CRX.
74+
3. On success, the extension appears in the grid with toggle, update, and remove options.
75+
76+
## Reflection
77+
78+
This project was both challenging and rewarding. Designing an extension system meant grappling with security, IPC design, and user experience at the same time. I learned to think carefully about security management, UI/UX positioning, and design APIs that are auditable.
79+
80+
I’m grateful to my mentor Akhilesh Thite and the UC OSPO team for their guidance and feedback. Their support pushed me to make deliberate technical decisions and communicate them clearly.
81+
82+
You can explore the project here:
83+
https://github.com/p2plabsxyz/peersky-browser
616 KB
Loading
1.53 MB
Loading
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
title: "Final Report: CarbonCast — An end-to-end consumption-based Carbon Intensity Forecasting service"
3+
summary: "This summer I containerized CarbonCast end-to-end, added a simple API and an interactive map UI, and made it reliable enough to run for weeks—so people can actually use carbon intensity data to act."
4+
authors:
5+
- tanushsavadi
6+
tags: ["osre25", "uc", "carboncast"]
7+
categories: ["web-development", "machine-learning", "api"]
8+
date: 2025-09-15
9+
lastmod: 2025-10-08
10+
featured: false
11+
draft: false
12+
13+
image:
14+
caption: "CarbonCast map with real-time data"
15+
focal_point: "Center"
16+
preview_only: false
17+
---
18+
19+
Hi everyone—this is my final report for **CarbonCast**, mentored by **Professor Abel Souza**. Back in June, my goal was simple to say and harder to pull off: help people **see** when the grid is cleaner and make it easy to act on that information. Over the summer I turned CarbonCast from a research prototype into something you can open, click, and rely on: a containerized backend, a clean API, and a fast, friendly map UI.
20+
21+
## Background
22+
23+
CarbonCast forecasts the **carbon intensity** of electricity (gCO₂e/kWh) using grid data and weather. Earlier versions were accurate but difficult to run and even harder to use outside a research context. My OSRE focus was to make CarbonCast usable for real people: provide a standard API, build a web UI that feels responsive, and package everything so it starts quickly and keeps itself healthy.
24+
25+
## Goals
26+
27+
I centered the work around four goals. First, I wanted to **ship an end-to-end containerized stack**—data collection, validation, storage, API, and UI—that someone else could run without digging through my notes. Second, I aimed to **expand coverage** beyond a handful of regions so the map would be genuinely useful. Third, I needed to **make it reliable**, with retries, monitoring, and graceful fallbacks so the system could run for weeks without babysitting. Finally, I wanted to **lay the groundwork for a consumption-based signal**, because imports from neighboring regions also shape a region’s true emissions picture.
28+
29+
## What I built
30+
31+
By the end of the program, CarbonCast runs as a **containerized backend + API + web app** that you can bring up with Docker. The pipelines now reach **85+ regions**, and the UI currently exposes **58+** while we finish integrating the rest. The API offers straightforward endpoints for current conditions and multi-day views, plus region metadata so clients can discover what’s available. The UI presents an **interactive choropleth map** with a side panel for the **energy mix** and a simple **timeline** to move between past, now, and the next few days. To keep things feeling snappy, I tuned caching so “now” data updates quickly while historical and forecast views load instantly from cache. I also added a small **“mission control” dashboard** that shows what updated, what failed, and how the system recovered, which makes maintenance far less mysterious.
32+
33+
## How it works
34+
35+
Fresh weather and grid data arrive on a regular schedule. The system checks each file for sanity, stores it, and serves it through a clean API. The React app calls that API and paints the map. Hovering reveals regional details; clicking opens a richer panel with the energy mix and trends; the timeline lets you scrub through hours naturally. In short, the path is **fresh data → API → map**, and each step is designed to be obvious and quick.
36+
37+
Behind the scenes, I extended the existing Django backend with a **SQLite path** so the UI works out of the box on a laptop. For production, you can point the same code at Postgres or MySQL without changing the UI. This choice made local testing easy while leaving room for scale later.
38+
39+
## Highlights
40+
41+
A few moments stand out. The first time the dashboard flipped from red to green on its own—after the system retried through a wave of timeouts—was a turning point. Clicking across the map and getting instant responses because the right data was cached felt great too. And packaging everything so another person can run it without asking me for help might be the biggest quality-of-life win for future contributors.
42+
43+
## Challenges
44+
45+
The first big hurdle was **refactoring the old vanilla-JS interface**. The original UI worked, but it was dated and hard to extend. I rebuilt it as a modern React + TypeScript app with a cleaner component structure and a fresh look—think **glassmorphic panels**, readable color scales, and a layout that feels consistent on both laptops and smaller screens. Moving to this design system made the codebase far easier to maintain, theme, and iterate on.
46+
47+
The next challenge was **performance under real-time load**. With dozens of regions updating, it was easy to hit API limits and make the UI feel jittery. I solved this by adding a smart **caching layer** with short, volatility-aware timeouts, request de-duplication, and background prefetching. That combination dramatically reduced round-trips, essentially **eliminated rate-limit hits**, and made the map feel responsive even as you scrub through time. The result is a UI that can handle many simultaneous updates **without hiccups**.
48+
49+
Finally, there were plenty of **stubborn UI bugs**. Some regions wouldn’t color even when data was available, certain charts refused to render, and a few elements flickered or never showed up. Most of this came down to learning **React state management** in a real project: taming race conditions, canceling in-flight requests when users navigate, and making sure state only updates when fresh data actually arrives. Fixing those issues taught me a lot about how maps re-paint, how charts expect their data, and how to keep components simple enough that they behave the way users expect.
50+
51+
52+
## What didn’t make the cut (yet)
53+
54+
I designed—but did not finish—**per-region plug-in models** so each grid can use the approach that fits it best. We decided to ship a stable, deployable service first and reserve that flexibility work for the next phase. The design is written down and ready to build.
55+
56+
## Links and resources:
57+
58+
- **Project page:** [CarbonCast](project/osre25/ucsc/carboncast/)
59+
- **Proposal:** https://ucsc-ospo.github.io/report/osre25/ucsc/carboncast/20250710-tanushsavadi/
60+
- **Midterm blog:** https://ucsc-ospo.github.io/report/osre25/ucsc/carboncast/20250803-tanushsavadi/
61+
- **Backend/API (branch):** https://github.com/carbonfirst/CarbonCast/tree/django_apis_sqlite
62+
- **Frontend/UI:** https://github.com/carbonfirst/CarbonCastUI/tree/main
63+
64+
65+
## What’s next
66+
67+
My next steps are clear. I want to finish the **per-region model plug-ins** so grids can bring their own best forecasting logic. I also plan to carry the **consumption-based** signal end-to-end, including imports and interconnects surfaced directly in the UI. Finally, I’ll harden the system for production by enabling auth and throttling and by moving to a production-grade database where appropriate.
68+
69+
## Thank you
70+
71+
Huge thanks to **Professor Abel Souza** for steady mentorship and to the **OSRE** community for thoughtful feedback. The most rewarding part of this summer was watching a research idea become something people can **click on—and use** to make cleaner choices.

0 commit comments

Comments
 (0)