撰寫 研究論文履歷學位論文研究計畫書研究論文
像寫程式碼一樣。
研究論文
Oleafly 是 LaTeX、Typst 和 Markdown 的本地優先研究工作區。您的專案以純文件形式存在於您的電腦上,具有真實的 Git 歷史記錄,編譯器隨箱提供,可選的 AI 代理透過編譯和讀取 PDF 來驗證其自己的編輯。沒有帳戶,沒有遙測,沒有 TeX 安裝。
- Language analysisCurrent project revision analyzed
- CompilingProducing and verifying PDF output
- Rendering PDFWaiting for verified compile output
Collaborative Sensor Networks
Center for Resilient Computing, Cascadia Institute of Technology
Seattle, WA, USA {nflores,mjlee,cmorgan}@example.edu
Abstract—We present EdgeSense, a low-power wildfire early-warning system that fuses thermal, particulate, humidity, and wind observations across a mesh of battery-powered nodes. A gated temporal model runs locally and transmits only uncertain windows. In a 16-week controlled field deployment, EdgeSense detected 94.1% of burn events at 0.7 false alarms per node-week while reducing radio energy by 63% relative to periodic streaming. Results use a synthetic but realistic demo dataset.
Index Terms—edge computing, environmental sensing, wildfire, TinyML, sensor networks
Wildfire ignition can develop faster than sparse satellite revisit cycles and manual reports . Dense ground networks provide local measurements but create a difficult systems trade-off: radios consume most of a node's energy, yet delaying communication can hide the earliest evidence . EdgeSense moves triage to the node and treats transmission as a decision under uncertainty.
Each node samples temperature, relative humidity, particulate matter, and wind once per minute . A 12 kB quantized temporal convolutional network scores five-minute windows . Scores below 0.25 are stored locally; scores between 0.25 and 0.70 trigger peer confirmation; scores above 0.70 trigger an immediate gateway packet .
We deployed 48 nodes across three ecological zones . Controlled burns and heated aerosol challenges generated 186 positive windows; 11,420 background windows captured fog, dust, vehicle exhaust, and sensor maintenance . Splits were grouped by day to prevent temporal leakage.
Field evaluation results.
| Method | Recall | FA/wk | Latency | Energy |
| Periodic stream | .957 | 1.8 | 72 s | 100% |
| Fixed threshold | .876 | 3.4 | 61 s | 41% |
| Ungated TCN | .946 | 1.1 | 58 s | 52% |
| EdgeSense | .941 | 0.7 | 54 s | 37% |
We compare periodic streaming, fixed thresholds, an ungated neural baseline, and EdgeSense. The primary metrics are event recall, false alarms per node-week, median alert latency, and measured radio energy.
EdgeSense retains 98.3% of the streaming baseline's recall while using 37% of its radio energy . Peer voting removes 31% of fog-related false alarms . At the median observed solar input, the modeled service interval rises from 11 to 29 months. Performance degrades gracefully when one sensing channel is unavailable.
Removing peer voting increases false alarms by 44%; removing wind direction reduces recall by 3.8 points . EdgeSense is advisory: alerts require confirmation by the incident-management system, and nodes never autonomously dispatch a public warning . The deployment did not cover crown fires or winter conditions.
Selective communication can extend unattended sensing without hiding early signals . The next deployment will test transfer across biomes and signed over-the-air model updates.
[1]L. Giglio, J. Descloitres, C. O. Justice, and Y. J. Kaufman, “An enhanced contextual fire detection algorithm for MODIS,” Remote Sensing of Environment, vol. 87, no. 2–3, pp. 273–282, 2003.
[2]W. Schroeder, P. Oliva, L. Giglio, and I. A. Csiszar, “The new VIIRS 375 m active fire detection data product,” Remote Sensing of Environment, vol. 143, pp. 85–96, 2014.
[3]U. Dampage, L. Bandaranayake, R. Wanasinghe, K. Kottahachchi, and B. Jayasanka, “Forest fire detection system using wireless sensor networks and machine learning,” Scientific Reports, vol. 12, no. 1, p. 46, 2022.
[4]K. S. Adu-Manu, N. Adam, C. Tapparello, H. Ayatollahi, and W. Heinzelman, “Energy-harvesting wireless sensor networks: A review,” ACM Transactions on Sensor Networks, vol. 14, no. 2, pp. 1–50, 2018.
[5]F. Adelantado, X. Vilajosana, P. Tuset-Peiro, B. Martinez, J. Melia-Segui, and T. Watteyne, “Understanding the limits of LoRaWAN,” IEEE Communications Magazine, vol. 55, no. 9, pp. 34–40, 2017.
[6]S. Bai, J. Z. Kolter, and V. Koltun, “An empirical evaluation of generic convolutional and recurrent networks for sequence modeling,” arXiv:1803.01271, 2018.
[7]B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam, and D. Kalenichenko, “Quantization and training of neural networks for efficient integer-arithmetic-only inference,” in Proc. IEEE/CVF CVPR, 2018, pp. 2704–2713.
[8]P. P. Ray, “A review on TinyML: State-of-the-art and prospects,” Journal of King Saud University - Computer and Information Sciences, vol. 34, no. 4, pp. 1595–1623, 2022.
[9]Y. Geifman and R. El-Yaniv, “Selective classification for deep neural networks,” arXiv:1705.08500, 2017.
@article{wilkinson2016,
references.bib:11
- Steps
- 1
- Input
- 5,144
- Output
- 467
- Runs
- 1
- Steps
- 3
- Tokens
- 39,035
Costs are estimates based on public model pricing, not billing totals.
Bring your own API key (OpenAI, Anthropic, Groq, and more) or run a model locally with Ollama. The assistant can read and edit files, compile your project, and verify the PDF.
Connect a providerRun a local model with OllamaWorking on "EdgeSense: Energy Aware Wildfire Detection"
update_todosread_fileread_fileread_file- satellite fire detection
- low-power sensor networks
- TinyML and quantized inference
I'll keep only results with verifiable DOI metadata.
literature_searchliterature_searchalphaxiv_searchliterature_searchliterature_searchverify_citationverify_citationverify_citationupdate_todoswrite_fileApprovedreplace_in_fileAlways allowedcompileverify_pdf_pageswrite_filereferences.bibline 1
references.bibfirst change · L1@article{open_science2015, title = {Estimating the Reproducibility of Psychological Science},@article{giglio2003, author = {Giglio, Louis and Descloitres, Jacques and Justice, Christopher O.}, title = {An Enhanced Contextual Fire Detection Algorithm for {MODIS}}, journal = {Remote Sensing of Environment}, year = {2003}, doi = {10.1016/S0034-4257(03)00184-6}}replace_in_filemain.texline 21
main.texfirst change · L21Wildfire ignition can develop faster than sparse satellite revisit cycles andmanual reports~\cite{hastie2009}. Dense ground networks provide local measurementsmanual reports~\cite{giglio2003,schroeder2014}. Dense ground networks provide local measurementsbut create a difficult systems trade-off: radios consume most of a node's energy,yet delayed communication can hide the earliest evidence~\cite{wilkinson2016}.yet delayed communication can hide the earliest evidence~\cite{dampage2022,adumanu2018}.Collaborative Sensor Networks
Center for Resilient Computing, Cascadia Institute of Technology
Seattle, WA, USA {nflores,mjlee,cmorgan}@example.edu
Abstract—We present EdgeSense, a low-power wildfire early-warning system that fuses thermal, particulate, humidity, and wind observations across a mesh of battery-powered nodes. A gated temporal model runs locally and transmits only uncertain windows. In a 16-week controlled field deployment, EdgeSense detected 94.1% of burn events at 0.7 false alarms per node-week while reducing radio energy by 63% relative to periodic streaming. Results use a synthetic but realistic demo dataset.
Index Terms—edge computing, environmental sensing, wildfire, TinyML, sensor networks
Wildfire ignition can develop faster than sparse satellite revisit cycles and manual reports . Dense ground networks provide local measurements but create a difficult systems trade-off: radios consume most of a node's energy, yet delaying communication can hide the earliest evidence . EdgeSense moves triage to the node and treats transmission as a decision under uncertainty.
Each node samples temperature, relative humidity, particulate matter, and wind once per minute . A 12 kB quantized temporal convolutional network scores five-minute windows . Scores below 0.25 are stored locally; scores between 0.25 and 0.70 trigger peer confirmation; scores above 0.70 trigger an immediate gateway packet .
We deployed 48 nodes across three ecological zones . Controlled burns and heated aerosol challenges generated 186 positive windows; 11,420 background windows captured fog, dust, vehicle exhaust, and sensor maintenance . Splits were grouped by day to prevent temporal leakage.
Field evaluation results.
| Method | Recall | FA/wk | Latency | Energy |
| Periodic stream | .957 | 1.8 | 72 s | 100% |
| Fixed threshold | .876 | 3.4 | 61 s | 41% |
| Ungated TCN | .946 | 1.1 | 58 s | 52% |
| EdgeSense | .941 | 0.7 | 54 s | 37% |
We compare periodic streaming, fixed thresholds, an ungated neural baseline, and EdgeSense. The primary metrics are event recall, false alarms per node-week, median alert latency, and measured radio energy.
EdgeSense retains 98.3% of the streaming baseline's recall while using 37% of its radio energy . Peer voting removes 31% of fog-related false alarms . At the median observed solar input, the modeled service interval rises from 11 to 29 months. Performance degrades gracefully when one sensing channel is unavailable.
Removing peer voting increases false alarms by 44%; removing wind direction reduces recall by 3.8 points . EdgeSense is advisory: alerts require confirmation by the incident-management system, and nodes never autonomously dispatch a public warning . The deployment did not cover crown fires or winter conditions.
Selective communication can extend unattended sensing without hiding early signals . The next deployment will test transfer across biomes and signed over-the-air model updates.
[1]L. Giglio, J. Descloitres, C. O. Justice, and Y. J. Kaufman, “An enhanced contextual fire detection algorithm for MODIS,” Remote Sensing of Environment, vol. 87, no. 2–3, pp. 273–282, 2003.
[2]W. Schroeder, P. Oliva, L. Giglio, and I. A. Csiszar, “The new VIIRS 375 m active fire detection data product,” Remote Sensing of Environment, vol. 143, pp. 85–96, 2014.
[3]U. Dampage, L. Bandaranayake, R. Wanasinghe, K. Kottahachchi, and B. Jayasanka, “Forest fire detection system using wireless sensor networks and machine learning,” Scientific Reports, vol. 12, no. 1, p. 46, 2022.
[4]K. S. Adu-Manu, N. Adam, C. Tapparello, H. Ayatollahi, and W. Heinzelman, “Energy-harvesting wireless sensor networks: A review,” ACM Transactions on Sensor Networks, vol. 14, no. 2, pp. 1–50, 2018.
[5]F. Adelantado, X. Vilajosana, P. Tuset-Peiro, B. Martinez, J. Melia-Segui, and T. Watteyne, “Understanding the limits of LoRaWAN,” IEEE Communications Magazine, vol. 55, no. 9, pp. 34–40, 2017.
[6]S. Bai, J. Z. Kolter, and V. Koltun, “An empirical evaluation of generic convolutional and recurrent networks for sequence modeling,” arXiv:1803.01271, 2018.
[7]B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam, and D. Kalenichenko, “Quantization and training of neural networks for efficient integer-arithmetic-only inference,” in Proc. IEEE/CVF CVPR, 2018, pp. 2704–2713.
[8]P. P. Ray, “A review on TinyML: State-of-the-art and prospects,” Journal of King Saud University - Computer and Information Sciences, vol. 34, no. 4, pp. 1595–1623, 2022.
[9]Y. Geifman and R. El-Yaniv, “Selective classification for deep neural networks,” arXiv:1705.08500, 2017.
@article{giglio2003, title = {An Enhanced Contextual Fire Detection Algorithm for MODIS}, year = {2003},}@article{schroeder2014, title = {The New VIIRS 375 m Active Fire Detection Data Product}, year = {2014},}@article{dampage2022, title = {Forest Fire Detection System Using Wireless Sensor Networks}, year = {2022},}@article{adumanu2018, title = {Energy-Harvesting Wireless Sensor Networks: A Review}, year = {2018},}@article{adelantado2017, title = {Understanding the Limits of LoRaWAN}, year = {2017},}@article{bai2018, title = {An Empirical Evaluation of Generic Convolutional Networks}, year = {2018},}@article{jacob2018, title = {Quantization and Training of Neural Networks}, year = {2018},}@article{ray2022, title = {A Review on TinyML}, year = {2022},}@article{geifman2017, title = {Selective Classification for Deep Neural Networks}, year = {2017},}Connect any providers you use below. Keys are stored locally only. Saving one sets it as the default.
You can switch between configured providers and models from the dropdown in the chat panel.
Used whenever you start a new chat. You can still switch models for an individual conversation from the chat panel.
Added to every AI request as your personal style and preferences. The assistant follows these on top of its built-in behavior. They can't override its tools or safety rules.
Allow PDF page capture for AILets the agent rasterize compiled pages for vision layout checks. Disable if you prefer not to send page images to your provider.
Attention
\definecolor{c0F172A}{HTML}{0F172A}\definecolor{c1E293B}{HTML}{1E293B}\definecolor{cC7C7CC}{HTML}{C7C7CC}\definecolor{cCDEDD0}{HTML}{CDEDD0}\definecolor{cCFE8F8}{HTML}{CFE8F8}\definecolor{cDAD2F0}{HTML}{DAD2F0}\definecolor{cE9E9EC}{HTML}{E9E9EC}\definecolor{cEEF2C3}{HTML}{EEF2C3}\definecolor{cF9D7D9}{HTML}{F9D7D9}\definecolor{cFDE3C7}{HTML}{FDE3C7}\definecolor{cFFFFFF}{HTML}{FFFFFF}\begin{tikzpicture}[>={Triangle[length=0.313cm,width=0.313cm]}] \node (n1_mds37) at (6.25,-21.75) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1cm] {Inputs}; \node (n2_hnw3j) at (6.25,-20.075) [draw=c1E293B, line width=0.025cm, fill=cF9D7D9, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Input Embedding}; \node (n3_x9vjf) at (4.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {}; \node (n4_aa0b6) at (6.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {+}; \node (n5_lbeum) at (2.625,-19.375) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=3.5cm, minimum height=1cm] {Positional Encoding}; \node (n6_gr85r) at (6.25,-16.325) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Multi-Head Attention}; \node (n7_it3d0) at (6.25,-14.575) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n8_0ae9p) at (6.25,-12.575) [draw=c1E293B, line width=0.025cm, fill=cCFE8F8, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Feed Forward}; \node (n9_31jhg) at (6.25,-10.825) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n11_3mv5b) at (1.875,-13.575) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=1.25cm, minimum height=0.75cm] {N×}; \node (n12_y6hil) at (16.25,-21.75) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1cm] {Outputs (shifted right)}; \node (n13_oukbf) at (16.25,-20.075) [draw=c1E293B, line width=0.025cm, fill=cF9D7D9, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Output Embedding}; \node (n14_e6m10) at (16.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {+}; \node (n15_te7fn) at (18.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {}; \node (n16_otz7n) at (19.875,-19.375) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=3.5cm, minimum height=1cm] {Positional Encoding}; \node (n17_nw4kz) at (16.25,-16.325) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Masked Multi-Head Attention}; \node (n18_feep8) at (16.25,-14.575) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n19_9lw0g) at (16.25,-12.575) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Multi-Head Attention}; \node (n20_lz6h6) at (16.25,-10.825) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n21_iyi8d) at (16.25,-8.825) [draw=c1E293B, line width=0.025cm, fill=cCFE8F8, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Feed Forward}; \node (n22_hapki) at (16.25,-7.075) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n24_qwbl3) at (19.375,-11.825) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=1.25cm, minimum height=0.75cm] {N×}; \node (n25_isnp1) at (16.25,-4.8) [draw=c1E293B, line width=0.025cm, fill=cDAD2F0, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.1cm] {Linear}; \node (n26_ggail) at (16.25,-2.8) [draw=c1E293B, line width=0.025cm, fill=cCDEDD0, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.1cm] {Softmax}; \node (n27_76g5v) at (16.25,-0.875) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.5cm, minimum height=1.25cm] {Output Probabilities}; \begin{scope}[on background layer] \node (n10_ma9el) at (6.25,-13.575) [draw=cC7C7CC, line width=0.025cm, fill=cE9E9EC, rounded corners=0.4cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=5.5cm, minimum height=7.65cm] {}; \node (n23_egiii) at (16.25,-11.7) [draw=cC7C7CC, line width=0.025cm, fill=cE9E9EC, rounded corners=0.4cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=5.5cm, minimum height=11.4cm] {}; \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-21.25) -- (6.25,-20.75) -- (6.25,-21.15) -- (6.25,-20.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-19.5) -- (6.25,-19) -- (6.25,-19.1) -- (6.25,-18.6); \draw[->, line width=0.05cm] (n3_x9vjf.east) to[out=0, in=180] (n4_aa0b6.west); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-17.75) -- (6.25,-17.25) -- (6.25,-17.4) -- (6.25,-16.9); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-15.75) -- (6.25,-15.25) -- (6.25,-15.65) -- (6.25,-15.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-14) -- (6.25,-13.5) -- (6.25,-13.65) -- (6.25,-13.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-12) -- (6.25,-11.5) -- (6.25,-11.9) -- (6.25,-11.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-21.25) -- (16.25,-20.75) -- (16.25,-21.15) -- (16.25,-20.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-19.5) -- (16.25,-19) -- (16.25,-19.1) -- (16.25,-18.6); \draw[->, line width=0.05cm] (n15_te7fn.west) to[out=180, in=0] (n14_e6m10.east); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-17.75) -- (16.25,-17.25) -- (16.25,-17.4) -- (16.25,-16.9); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-15.75) -- (16.25,-15.25) -- (16.25,-15.65) -- (16.25,-15.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-14) -- (16.25,-13.5) -- (16.25,-13.65) -- (16.25,-13.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-12) -- (16.25,-11.5) -- (16.25,-11.9) -- (16.25,-11.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-10.25) -- (16.25,-9.75) -- (16.25,-9.9) -- (16.25,-9.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-8.25) -- (16.25,-7.75) -- (16.25,-8.15) -- (16.25,-7.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-6.5) -- (16.25,-6) -- (16.25,-5.925) -- (16.25,-5.85) -- (16.25,-5.35); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-4.25) -- (16.25,-3.75) -- (16.25,-3.85) -- (16.25,-3.35); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-2.25) -- (16.25,-1.75) -- (16.25,-2) -- (16.25,-1.5); \draw[->, line width=0.05cm, rounded corners=0.125cm] (8.375,-10.825) -- (8.875,-10.825) -- (11.25,-10.825) -- (11.25,-12.575) -- (13.625,-12.575) -- (14.125,-12.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (5.825,-18.175) -- (5.325,-18.175) -- (3.625,-18.175) -- (3.625,-14.575) -- (4.125,-14.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (4.125,-14.575) -- (4.1,-14.575) -- (3.625,-14.575) -- (3.625,-10.825) -- (4.125,-10.825); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.675,-18.175) -- (17.175,-18.175) -- (18.875,-18.175) -- (18.875,-14.575) -- (18.375,-14.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (18.375,-14.575) -- (18.875,-14.575) -- (18.875,-10.825) -- (18.4,-10.825) -- (18.375,-10.825); \draw[->, line width=0.05cm, rounded corners=0.125cm] (18.375,-10.825) -- (18.875,-10.825) -- (18.875,-7.075) -- (18.4,-7.075) -- (18.375,-7.075); \end{scope}\end{tikzpicture}Attention
\definecolor{c0F172A}{HTML}{0F172A}\definecolor{c1E293B}{HTML}{1E293B}\definecolor{cC7C7CC}{HTML}{C7C7CC}\definecolor{cCDEDD0}{HTML}{CDEDD0}\definecolor{cCFE8F8}{HTML}{CFE8F8}\definecolor{cDAD2F0}{HTML}{DAD2F0}\definecolor{cE9E9EC}{HTML}{E9E9EC}\definecolor{cEEF2C3}{HTML}{EEF2C3}\definecolor{cF9D7D9}{HTML}{F9D7D9}\definecolor{cFDE3C7}{HTML}{FDE3C7}\definecolor{cFFFFFF}{HTML}{FFFFFF}\begin{tikzpicture}[>={Triangle[length=0.313cm,width=0.313cm]}] \node (n1_mds37) at (6.25,-21.75) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1cm] {Inputs}; \node (n2_hnw3j) at (6.25,-20.075) [draw=c1E293B, line width=0.025cm, fill=cF9D7D9, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Input Embedding}; \node (n3_x9vjf) at (4.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {}; \node (n4_aa0b6) at (6.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {+}; \node (n5_lbeum) at (2.625,-19.375) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=3.5cm, minimum height=1cm] {Positional Encoding}; \node (n6_gr85r) at (6.25,-16.325) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Multi-Head Attention}; \node (n7_it3d0) at (6.25,-14.575) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n8_0ae9p) at (6.25,-12.575) [draw=c1E293B, line width=0.025cm, fill=cCFE8F8, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Feed Forward}; \node (n9_31jhg) at (6.25,-10.825) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n11_3mv5b) at (1.875,-13.575) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=1.25cm, minimum height=0.75cm] {N×}; \node (n12_y6hil) at (16.25,-21.75) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1cm] {Outputs (shifted right)}; \node (n13_oukbf) at (16.25,-20.075) [draw=c1E293B, line width=0.025cm, fill=cF9D7D9, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Output Embedding}; \node (n14_e6m10) at (16.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {+}; \node (n15_te7fn) at (18.25,-18.175) [circle, draw=c1E293B, line width=0.025cm, fill=cFFFFFF, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=0.85cm, minimum height=0.85cm] {}; \node (n16_otz7n) at (19.875,-19.375) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=3.5cm, minimum height=1cm] {Positional Encoding}; \node (n17_nw4kz) at (16.25,-16.325) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Masked Multi-Head Attention}; \node (n18_feep8) at (16.25,-14.575) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n19_9lw0g) at (16.25,-12.575) [draw=c1E293B, line width=0.025cm, fill=cFDE3C7, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Multi-Head Attention}; \node (n20_lz6h6) at (16.25,-10.825) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n21_iyi8d) at (16.25,-8.825) [draw=c1E293B, line width=0.025cm, fill=cCFE8F8, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Feed Forward}; \node (n22_hapki) at (16.25,-7.075) [draw=c1E293B, line width=0.025cm, fill=cEEF2C3, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.15cm] {Add \& Norm}; \node (n24_qwbl3) at (19.375,-11.825) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=1.25cm, minimum height=0.75cm] {N×}; \node (n25_isnp1) at (16.25,-4.8) [draw=c1E293B, line width=0.025cm, fill=cDAD2F0, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.1cm] {Linear}; \node (n26_ggail) at (16.25,-2.8) [draw=c1E293B, line width=0.025cm, fill=cCDEDD0, rounded corners=0.1cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.25cm, minimum height=1.1cm] {Softmax}; \node (n27_76g5v) at (16.25,-0.875) [text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=4.5cm, minimum height=1.25cm] {Output Probabilities}; \begin{scope}[on background layer] \node (n10_ma9el) at (6.25,-13.575) [draw=cC7C7CC, line width=0.025cm, fill=cE9E9EC, rounded corners=0.4cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=5.5cm, minimum height=7.65cm] {}; \node (n23_egiii) at (16.25,-11.7) [draw=cC7C7CC, line width=0.025cm, fill=cE9E9EC, rounded corners=0.4cm, text=c0F172A, font=\rmfamily\fontsize{10}{12}\selectfont, inner sep=0pt, outer sep=0pt, minimum width=5.5cm, minimum height=11.4cm] {}; \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-21.25) -- (6.25,-20.75) -- (6.25,-21.15) -- (6.25,-20.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-19.5) -- (6.25,-19) -- (6.25,-19.1) -- (6.25,-18.6); \draw[->, line width=0.05cm] (n3_x9vjf.east) to[out=0, in=180] (n4_aa0b6.west); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-17.75) -- (6.25,-17.25) -- (6.25,-17.4) -- (6.25,-16.9); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-15.75) -- (6.25,-15.25) -- (6.25,-15.65) -- (6.25,-15.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-14) -- (6.25,-13.5) -- (6.25,-13.65) -- (6.25,-13.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (6.25,-12) -- (6.25,-11.5) -- (6.25,-11.9) -- (6.25,-11.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-21.25) -- (16.25,-20.75) -- (16.25,-21.15) -- (16.25,-20.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-19.5) -- (16.25,-19) -- (16.25,-19.1) -- (16.25,-18.6); \draw[->, line width=0.05cm] (n15_te7fn.west) to[out=180, in=0] (n14_e6m10.east); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-17.75) -- (16.25,-17.25) -- (16.25,-17.4) -- (16.25,-16.9); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-15.75) -- (16.25,-15.25) -- (16.25,-15.65) -- (16.25,-15.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-14) -- (16.25,-13.5) -- (16.25,-13.65) -- (16.25,-13.15); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-12) -- (16.25,-11.5) -- (16.25,-11.9) -- (16.25,-11.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-10.25) -- (16.25,-9.75) -- (16.25,-9.9) -- (16.25,-9.4); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-8.25) -- (16.25,-7.75) -- (16.25,-8.15) -- (16.25,-7.65); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-6.5) -- (16.25,-6) -- (16.25,-5.925) -- (16.25,-5.85) -- (16.25,-5.35); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-4.25) -- (16.25,-3.75) -- (16.25,-3.85) -- (16.25,-3.35); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.25,-2.25) -- (16.25,-1.75) -- (16.25,-2) -- (16.25,-1.5); \draw[->, line width=0.05cm, rounded corners=0.125cm] (8.375,-10.825) -- (8.875,-10.825) -- (11.25,-10.825) -- (11.25,-12.575) -- (13.625,-12.575) -- (14.125,-12.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (5.825,-18.175) -- (5.325,-18.175) -- (3.625,-18.175) -- (3.625,-14.575) -- (4.125,-14.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (4.125,-14.575) -- (4.1,-14.575) -- (3.625,-14.575) -- (3.625,-10.825) -- (4.125,-10.825); \draw[->, line width=0.05cm, rounded corners=0.125cm] (16.675,-18.175) -- (17.175,-18.175) -- (18.875,-18.175) -- (18.875,-14.575) -- (18.375,-14.575); \draw[->, line width=0.05cm, rounded corners=0.125cm] (18.375,-14.575) -- (18.875,-14.575) -- (18.875,-10.825) -- (18.4,-10.825) -- (18.375,-10.825); \draw[->, line width=0.05cm, rounded corners=0.125cm] (18.375,-10.825) -- (18.875,-10.825) -- (18.875,-7.075) -- (18.4,-7.075) -- (18.375,-7.075); \end{scope}\end{tikzpicture}Attention
Attention
@article{lecun2015deep, author = {LeCun, Yann and Bengio, Yoshua and Hinton, Geoffrey}, title = {Deep learning}, journal = {Nature}, volume = 521, pages = {436--444}, year = 2015, doi = {10.1038/nature14539}, }
Senior Software Engineer (L5) with 9+ years designing and operating large-scale distributed systems. Deep experience in backend infrastructure, performance, and reliability.
- Tech lead for a Search serving component handling 2M+ queries/second; cut p99 latency 38%.
- Designed a globally replicated feature store on Spanner backing 40+ ML models.
- Led migration of a 300-service fleet to a new RPC framework; reduced on-call pages 45%.
- Mentored six engineers and ran the team’s design-review program.
- Built a real-time aggregation pipeline processing 8B events/day.
- Cut batch-job cost 30% with sharding and incremental computation.
- Shipped ledger and reconciliation services processing $60B+/year.
- Reduced a reconciliation run from six hours to 25 minutes.
Go, Raft, gRPC — distributed rate limiter doing 4M+ decisions/sec/node.
Rust — typed query builder for Postgres with compile-time-checked SQL.
Languages: C++, Go, Rust, Python, Java, SQL
Systems: Spanner, Bigtable, Kubernetes, Kafka, gRPC / Protobuf, Redis
Data scientist focused on trustworthy machine learning, experimentation, and decision systems used by product and research teams.
- Built evaluation systems for large language models across safety and product quality.
- Designed experiments used to guide high-impact model launches.
- Developed ranking models and reliable offline evaluation pipelines.
- Partnered with product teams to improve marketplace search quality.
- Created retention models and executive experimentation dashboards.
Open evaluation templates for production ML systems.
Python package for reproducible causal inference workflows.
Languages: Python, R, SQL, PyTorch, JAX
Systems: Spark, dbt, BigQuery, Airflow, MLflow, Kubernetes
Data scientist focused on trustworthy machine learning, experimentation, and decision systems used by product and research teams.
- Built evaluation systems for large language models across safety and product quality.
- Designed experiments used to guide high-impact model launches.
- Developed ranking models and reliable offline evaluation pipelines.
- Partnered with product teams to improve marketplace search quality.
- Created retention models and executive experimentation dashboards.
Open evaluation templates for production ML systems.
Python package for reproducible causal inference workflows.
Languages: Python, R, SQL, PyTorch, JAX
Systems: Spark, dbt, BigQuery, Airflow, MLflow, Kubernetes
Senior Software Engineer (L5) with 9+ years designing and operating large-scale distributed systems. Deep experience in backend infrastructure, performance, and reliability.
- Tech lead for a Search serving component handling 2M+ queries/second; cut p99 latency 38%.
- Designed a globally replicated feature store on Spanner backing 40+ ML models.
- Led migration of a 300-service fleet to a new RPC framework; reduced on-call pages 45%.
- Mentored six engineers and ran the team’s design-review program.
- Built a real-time aggregation pipeline processing 8B events/day.
- Cut batch-job cost 30% with sharding and incremental computation.
- Shipped ledger and reconciliation services processing $60B+/year.
- Reduced a reconciliation run from six hours to 25 minutes.
Go, Raft, gRPC — distributed rate limiter doing 4M+ decisions/sec/node.
Rust — typed query builder for Postgres with compile-time-checked SQL.
Languages: C++, Go, Rust, Python, Java, SQL
Systems: Spanner, Bigtable, Kubernetes, Kafka, gRPC / Protobuf, Redis
single-column and ATS-friendly, filled in as a
senior example you can edit.
Product engineer bridging design systems and frontend infrastructure to build accessible, high-craft tools for creative teams.
- Led architecture for collaborative prototyping workflows used by millions.
- Created an accessible component platform shared across six product teams.
- Shipped core editor interactions and improved canvas rendering performance 42%.
- Partnered with design to establish product-wide interaction standards.
- Prototyped service experiences for health and education clients.
Open-source accessible color and typography toolkit.
Patterns for resilient collaborative interfaces.
Languages: TypeScript, React, Rust, Swift, Figma
Systems: WebGL, Canvas, design systems, accessibility, prototyping
Research engineer building fast, expressive systems for scientific communication and reproducible technical publishing.
- Built incremental layout and diagnostics for a modern typesetting engine.
- Improved large-document render latency and editor feedback loops.
- Worked on text shaping, browser layout, and developer tooling.
- Published work on interactive document systems.
A small language server for technical documents.
Experiments in high-performance text layout.
Languages: Rust, C++, TypeScript, Python
Systems: Compilers, text layout, language servers, WebAssembly
\documentclass[11pt,letterpaper]{article}\usepackage[T1]{fontenc}\usepackage[margin=0.5in]{geometry}\usepackage{titlesec}\usepackage{enumitem}\usepackage{hyperref} % ATS-friendly: single column, real selectable text, no tables-for-layout,% embedded subset fonts. Linear reading order so parsers extract cleanly.\setlength{\parindent}{0pt}\pagenumbering{gobble}\hypersetup{colorlinks=true, urlcolor=black, linkcolor=black} \titleformat{\section}{\large\bfseries\uppercase}{}{0em}{}[\vspace{2pt}\titlerule]\titlespacing*{\section}{0pt}{8pt}{4pt}\setlist[itemize]{leftmargin=14pt, itemsep=1pt, topsep=2pt, parsep=0pt} % role{Title}{Company}{Location}{Dates}\newcommand{\role}[4]{% \textbf{#1} \hfill #2 \\ \textit{#3} \hfill \textit{#4}%} \begin{document} \begin{center} {\Huge \textbf{Alex Chen}}\\[3pt] \small Senior Software Engineer\\[2pt] \href{mailto:[email protected]}{[email protected]}\,$\cdot$\, (650) 555-0142\,$\cdot$\, Mountain View, CA\,$\cdot$\, \href{https://alexchen.dev}{alexchen.dev}\,$\cdot$\, \href{https://github.com/alexchen}{github.com/alexchen}\,$\cdot$\, \href{https://linkedin.com/in/alexchen}{linkedin.com/in/alexchen}\end{center}\vspace{2pt} \section*{Summary}Senior Software Engineer (L5) with 9+ years designing and operating large-scaledistributed systems. Deep experience in backend infrastructure, performance, andreliability, with a track record of shipping products used by hundreds ofmillions of users and mentoring engineers toward senior roles. \section*{Experience}\role{Senior Software Engineer (L5)}{Google}{Mountain View, CA}{Mar 2020 -- Present}\begin{itemize} \item Tech lead for a Search serving component handling 2M+ queries/second; drove a redesign that cut p99 latency 38\% and saved an estimated \$14M/year in compute. \item Designed and launched a globally-replicated feature store on Spanner backing 40+ ML models, adopted by 12 teams across Search and Ads. \item Led migration of a 300-service fleet to a new RPC framework, improving tail latency and reducing on-call pages by 45\%. \item Mentored 6 engineers (2 promoted to senior); ran the team's design-review and readability programs.\end{itemize}\vspace{3pt}\role{Software Engineer (L4)}{Google}{Mountain View, CA}{Jul 2017 -- Mar 2020}\begin{itemize} \item Built a real-time aggregation pipeline (C++, Flume) processing 8B events/day for a Search-quality dashboard used org-wide. \item Cut batch-job cost 30\% by reworking sharding and introducing incremental recomputation.\end{itemize}\vspace{3pt}\role{Software Engineer}{Stripe}{San Francisco, CA}{Aug 2015 -- Jun 2017}\begin{itemize} \item Shipped core ledger and reconciliation services for a payments platform processing \$60B+/year. \item Reduced a reconciliation run from 6 hours to 25 minutes via parallelization and a columnar store.\end{itemize} \section*{Selected Projects}\textbf{Ratel} \hfill \href{https://github.com/alexchen/ratel}{github.com/alexchen/ratel} \\\textit{Go, Raft, gRPC} --- open-source distributed rate limiter doing 4M+ decisions/sec/node; 1.5k GitHub stars.\par\vspace{4pt}\textbf{tql} \hfill \href{https://github.com/alexchen/tql}{github.com/alexchen/tql} \\\textit{Rust} --- a typed query builder for Postgres with compile-time-checked SQL. \section*{Education}\textbf{M.S. Computer Science} \hfill Stanford University \\\textit{2013 -- 2015} \hfill \textit{Focus: Distributed Systems}\par\vspace{4pt}\textbf{B.S. Computer Science} \hfill University of Illinois Urbana-Champaign \\\textit{2009 -- 2013} \hfill \textit{GPA: 3.9 / 4.0} \section*{Skills}\textbf{Languages:} C++, Go, Rust, Python, Java, SQL \\\textbf{Systems:} Spanner, Bigtable, Kubernetes, Kafka, gRPC / Protobuf, Redis \\\textbf{Focus:} Distributed systems, performance, reliability (SLOs), system design, mentoring \end{document}Senior Software Engineer (L5) with 9+ years designing and operating large-scale distributed systems. Deep experience in backend infrastructure, performance, and reliability.
- Tech lead for a Search serving component handling 2M+ queries/second; cut p99 latency 38%.
- Designed a globally replicated feature store on Spanner backing 40+ ML models.
- Led migration of a 300-service fleet to a new RPC framework; reduced on-call pages 45%.
- Mentored six engineers and ran the team’s design-review program.
- Built a real-time aggregation pipeline processing 8B events/day.
- Cut batch-job cost 30% with sharding and incremental computation.
- Shipped ledger and reconciliation services processing $60B+/year.
- Reduced a reconciliation run from six hours to 25 minutes.
Go, Raft, gRPC — distributed rate limiter doing 4M+ decisions/sec/node.
Rust — typed query builder for Postgres with compile-time-checked SQL.
Languages: C++, Go, Rust, Python, Java, SQL
Systems: Spanner, Bigtable, Kubernetes, Kafka, gRPC / Protobuf, Redis
Results
EdgeSense retains 98.3% of the streaming baseline’s recall while using 37% of its radio energy gelman2014. Peer voting removes 31% of fog-related false alarms hastie2009. At the median observed solar input, the modeled service interval rises from 11 to 29 months. Performance degrades gracefully when one sensing channel is unavailable.
Ablations, safety, and limitations
Removing peer voting increases false alarms by 44%; removing wind direction reduces recall by 3.8 points lundberg2017. EdgeSense is advisory: alerts require confirmation by the incident-management system.
- Language analysisCurrent project revision analyzed
- CompilingProducing and verifying PDF output
- Rendering PDFWaiting for verified compile output
Collaborative Sensor Networks
Center for Resilient Computing, Cascadia Institute of Technology
Seattle, WA, USA {nflores,mjlee,cmorgan}@example.edu
Abstract—We present EdgeSense, a low-power wildfire early-warning system that fuses thermal, particulate, humidity, and wind observations across a mesh of battery-powered nodes. A gated temporal model runs locally and transmits only uncertain windows. In a 16-week controlled field deployment, EdgeSense detected 94.1% of burn events at 0.7 false alarms per node-week while reducing radio energy by 63% relative to periodic streaming. Results use a synthetic but realistic demo dataset.
Index Terms—edge computing, environmental sensing, wildfire, TinyML, sensor networks
Wildfire ignition can develop faster than sparse satellite revisit cycles and manual reports . Dense ground networks provide local measurements but create a difficult systems trade-off: radios consume most of a node's energy, yet delaying communication can hide the earliest evidence . EdgeSense moves triage to the node and treats transmission as a decision under uncertainty.
Each node samples temperature, relative humidity, particulate matter, and wind once per minute . A 12 kB quantized temporal convolutional network scores five-minute windows . Scores below 0.25 are stored locally; scores between 0.25 and 0.70 trigger peer confirmation; scores above 0.70 trigger an immediate gateway packet .
We deployed 48 nodes across three ecological zones . Controlled burns and heated aerosol challenges generated 186 positive windows; 11,420 background windows captured fog, dust, vehicle exhaust, and sensor maintenance . Splits were grouped by day to prevent temporal leakage.
Field evaluation results.
| Method | Recall | FA/wk | Latency | Energy |
| Periodic stream | .957 | 1.8 | 72 s | 100% |
| Fixed threshold | .876 | 3.4 | 61 s | 41% |
| Ungated TCN | .946 | 1.1 | 58 s | 52% |
| EdgeSense | .941 | 0.7 | 54 s | 37% |
We compare periodic streaming, fixed thresholds, an ungated neural baseline, and EdgeSense. The primary metrics are event recall, false alarms per node-week, median alert latency, and measured radio energy.
EdgeSense retains 98.3% of the streaming baseline's recall while using 37% of its radio energy . Peer voting removes 31% of fog-related false alarms . At the median observed solar input, the modeled service interval rises from 11 to 29 months. Performance degrades gracefully when one sensing channel is unavailable.
Removing peer voting increases false alarms by 44%; removing wind direction reduces recall by 3.8 points . EdgeSense is advisory: alerts require confirmation by the incident-management system, and nodes never autonomously dispatch a public warning . The deployment did not cover crown fires or winter conditions.
Selective communication can extend unattended sensing without hiding early signals . The next deployment will test transfer across biomes and signed over-the-air model updates.
[1]L. Giglio, J. Descloitres, C. O. Justice, and Y. J. Kaufman, “An enhanced contextual fire detection algorithm for MODIS,” Remote Sensing of Environment, vol. 87, no. 2–3, pp. 273–282, 2003.
[2]W. Schroeder, P. Oliva, L. Giglio, and I. A. Csiszar, “The new VIIRS 375 m active fire detection data product,” Remote Sensing of Environment, vol. 143, pp. 85–96, 2014.
[3]U. Dampage, L. Bandaranayake, R. Wanasinghe, K. Kottahachchi, and B. Jayasanka, “Forest fire detection system using wireless sensor networks and machine learning,” Scientific Reports, vol. 12, no. 1, p. 46, 2022.
[4]K. S. Adu-Manu, N. Adam, C. Tapparello, H. Ayatollahi, and W. Heinzelman, “Energy-harvesting wireless sensor networks: A review,” ACM Transactions on Sensor Networks, vol. 14, no. 2, pp. 1–50, 2018.
[5]F. Adelantado, X. Vilajosana, P. Tuset-Peiro, B. Martinez, J. Melia-Segui, and T. Watteyne, “Understanding the limits of LoRaWAN,” IEEE Communications Magazine, vol. 55, no. 9, pp. 34–40, 2017.
[6]S. Bai, J. Z. Kolter, and V. Koltun, “An empirical evaluation of generic convolutional and recurrent networks for sequence modeling,” arXiv:1803.01271, 2018.
[7]B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam, and D. Kalenichenko, “Quantization and training of neural networks for efficient integer-arithmetic-only inference,” in Proc. IEEE/CVF CVPR, 2018, pp. 2704–2713.
[8]P. P. Ray, “A review on TinyML: State-of-the-art and prospects,” Journal of King Saud University - Computer and Information Sciences, vol. 34, no. 4, pp. 1595–1623, 2022.
[9]Y. Geifman and R. El-Yaniv, “Selective classification for deep neural networks,” arXiv:1705.08500, 2017.
像程式碼編輯器一樣構建
其他一切你所期望的。在你的機器上。
Draft, compile, proofread, search, cite, review, and publish without stitching together separate tools. Oleafly keeps your source, preview, references, AI, and Git history in one workspace you control.
導入你擁有的東西
將許多基於文字的 PDF 重新建構為本地可編輯的 LaTeX,透過託管 Pandoc 轉換 DOCX,或讓視覺模型轉錄頁面的照片。之後可選AI細化。
匯出您要去的地方
始終為 PDF; DOCX、HTML、Markdown 等,透過 Pandoc 支援的上下文匯出選單。或將整個專案作為來源 ZIP 取得。
讓它成為你的
Vim 模式、浅色和深色主题、强调色、七个布局预设和可编辑的键盘快捷键。編輯器應該適合您的雙手。
用程式碼或視覺方式編寫
將任何 LaTeX 或 Markdown 文件翻轉到視覺化編輯器中:標題、清單、粗體、連結、直接編輯,以及跨兩種模式的協調撤銷。不受支援的命令作為原始區塊保持可見,而不是默默地刪除,因此返回來源的往返過程是非破壞性的。
SyncTeX,字級
按住 ⌘ 點選 PDF 中的某個單字,然後定位到原始碼中的該單字。使用 ⌘⇧J 跳回。
程式碼智能
轉到定義,尋找引用,並在每個檔案中重新命名標籤、引用鍵或巨集。
斜槓命令
輸入 / 以獲得 Notion 風格的插入選單:/figure、/table、/section、/cite、/math。
title = {Raft-based KV stores}, …
DOI 引用
貼上 DOI、arXiv ID 或 URL。 Oleafly 取得 BibTeX,對其進行重複資料刪除,然後插入 \\cite。
帶上你的整個圖書館
批次導入 BibTeX、RIS、EndNote XML 和 Zotero RDF。在單一條目進入 .bib 之前,所有內容都會根據您的項目進行重複資料刪除。
命令面板
⌘K 模糊搜尋應用程式中的每個操作:專案、檔案、設定等等。
帶來你自己的人工智慧
九家提供者或當地的 Ollama,都支援相同的每次變更批准。 Claude Code 和 Cursor 等 MCP 用戶端以相同的方式連線。或關閉人工智慧。編輯器不需要它。
研究水龍頭
該代理程式會搜尋 alphaXiv 和 OpenAlex,提取論文內容,並在引用進入您的參考書目之前根據 Crossref 驗證引用。
離線拼字和語法
Hunspell 和 Harper 在您的機器上作為 WASM 運行,屏蔽命令和數學,因此只檢查散文。
一個有記憶的代理人
每個項目的持久記憶筆記和可見的計劃清單在聊天中保留下來,因此人工智慧可以從中斷的地方繼續。
從一頁到六百頁
無論是一頁簡歷還是一本書長的論文,編輯器和虛擬 PDF 檢視器都保持流暢。
用於真正閱讀的 PDF 檢視器
將預覽分離到第二台顯示器、閱讀兩頁跨頁、在深夜反轉顏色或全螢幕演示。
圖表編輯器
描述一個圖表,AI 編寫 TikZ,單獨編譯圖表,並透過查看渲染來修復重疊。或自己繪製:形狀、邊緣和在真實畫布上與生成的 TikZ 一起往返的檢查器。导出透明高分辨率 PNG,完全离线。
三個引擎,一個工作區
LaTeX、Typst 和 Markdown 專案在同一個庫中並排進行,具有相同的 Git 歷史記錄、預覽、搜尋和 AI 工作流程。
The LaTeX editor
Write in LaTeX, Typst, or Markdown with a live PDF preview and word-level SyncTeX. Compilers are included, so there is no TeX setup or build queue.
The AI assistant
Ask the agent to edit your source, compile the project, and read the resulting PDF. Oleafly is model-agnostic, so you can use a hosted provider, local Ollama, your own endpoint, or no AI at all.
The reference manager
Import BibTeX, RIS, EndNote, or Zotero with automatic deduplication. Paste a DOI or arXiv ID to create a reference verified against Crossref.
The resume builder
Start with an ATS-focused resume template, check the extracted text, and fork a tailored copy for each application without losing earlier versions.
The version control
Automatic Git checkpoints preserve every meaningful state. Compare changes, restore an earlier version, and push to GitHub from the same workspace.
The PDF toolkit
Read long PDFs, reconstruct many text-based PDFs into LaTeX, and export PDF, DOCX, HTML, or a source archive for submission.
研究循環
研究、寫作、驗證、發布。
一篇論文是一個工程製品:來源、參考文獻、圖表、編譯器輸出和歷史。 Oleafly 在一個工作區中運行整個循環,並且每一步都可以檢查。
- doi:10.1145/3576915@article{gatto24} ✓1
研究
將 DOI 和 arXiv id 解析為 BibTeX,搜尋 Crossref、OpenAlex 和 alphaXiv,在引用進入參考書目之前驗證引用,並追蹤寫作旁邊的會議截止日期。
- \section{Results}2
寫
普通資料夾中的純 LaTeX、Typst 或 Markdown 文件,帶有模板、整個專案程式碼智慧和可選的審批門控 AI 代理程式。
- compiled · 0 errors ✓3
核實
捆綁引擎在本機編譯時出現可讀錯誤。 PDF 預覽逐字同步到來源,預檢顯示解析器和螢幕閱讀器擷取的內容,Git 檢查點使每個狀態都能恢復。
- PDFarXivGitHub ↑4
發布
匯出 PDF、DOCX 或 HTML,壓縮提交系統和 arXiv 的原始程式碼,然後推送到 GitHub。該文件從寫入它的同一個資料夾中發出。
比較方式
唯一能取代其他所有工具的研究工作區。
在同一處完成撰寫、編譯、校對、文獻搜尋、引文管理、PDF 審閱、編輯自動化與論文交付。Oleafly 將整套研究工具整合至一款免費、開放原始碼的應用程式。看看下列替代方案還欠缺哪些功能。 文件.
| Oleafly | OpenAI Prism | Overleaf | Typst Web App | Curvenote | LyX | TeXstudio | Texifier | VS Code + LaTeX | Paperpal | Writefull | 履歷製作工具 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 擁有權與存取 | 價格 | 免費且開放原始碼。不需訂閱 Oleafly | 使用 ChatGPT 帳號即可免費使用 | 提供免費方案;付費方案可增加功能 | 提供免費方案;Pro 需額外付費 | 提供免費方案;付費方案可建立私人專案 | 免費且開放原始碼 | 免費,採 GPL 授權 | 付費;提供免費試用版 | 免費;AI 有用量限制或付費方案 | 提供免費方案;Prime 需額外付費 | 提供免費方案;Premium 需額外付費 | 視產品而定;多數採訂閱制 |
| 不需帳號 | 是 | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 是 | 否 | 否 | 視產品而定 | |
| 可離線使用 | 可離線撰寫、校對、預覽及編譯 | 否,採雲端工作區 | 否,採雲端服務 | 否;網頁應用程式需要網路連線 | 否;編輯器採雲端服務 | 是 | 是 | 是 | 是 | 否 | 否 | 鮮少支援 | |
| 檔案保留在本機磁碟 | 由你擁有的本機資料夾;可自行託管雲端同步 | 雲端儲存 | 雲端儲存 | 雲端儲存;編譯器可在本機執行 | 雲端儲存 | 是 | 是 | 本機檔案與檔案服務供應商 | 是 | 雲端服務與編輯器整合 | 檔案保留在 Word 或 Overleaf 中 | 通常採雲端儲存 | |
| 版本記錄 | 自動建立 Git 檢查點,支援差異比較與還原 | 雲端修訂版本 | 付費方案提供完整記錄 | Pro 方案提供 Git 同步 | 內建版本記錄 | Git 與其他版本控制工具 | 手動或 SVN | 使用檔案服務供應商或 Git 工具 | 內建 Git,需自行設定 | 未見文件說明 | 使用宿主應用程式的版本記錄 | 視產品而定 | |
| 即時協作 | 即將推出。不限人數協作,可自行託管 | 不限協作者人數 | 內建;人數限制依方案而定 | 內建 | 即時編輯與留言 | 不支援即時共同編輯 | 不支援即時共同編輯 | 不支援即時共同編輯 | 透過 Live Share | 使用 Word、Google Docs 或 Overleaf | 使用 Word 或 Overleaf | 視產品而定 | |
| 雲端同步 | 即將推出。檔案保留在你的電腦上,同時可透過瀏覽器存取 | 雲端工作區 | 雲端工作區,另提供付費 Git 與 Dropbox 同步 | 雲端工作區,Pro 方案另提供 Git 同步 | 雲端專案與串連式出版 | 使用 Git 或自選同步服務 | 使用 Git 或自選同步服務 | 透過 Texifier Connect 即時同步 | 使用 Git 或自選同步服務 | 雲端工作區 | 在 Word 或 Overleaf 中運作 | 通常採雲端儲存 | |
| 團隊空間 | 即將推出。共用範本、文獻庫與審閱流程 | 共用專案,協作者人數不限 | 群組與機構方案 | 共用專案,另為組織提供地端部署 | 團隊工作區與存取控制 | 未內建團隊空間 | 未內建團隊空間 | 透過 Texifier Connect 共用專案 | GitHub 組織與 Live Share | 機構儀表板與授權管理 | 機構存取 | 視產品而定 | |
| 寫作與出版 | 文件引擎 | 在同一工作區使用 LaTeX、Typst 與 Markdown | 僅支援 LaTeX | 僅支援 LaTeX | 僅支援 Typst | MyST Markdown 與 Jupyter | LaTeX 與 DocBook | 僅支援 LaTeX | LaTeX 與 Markdown | 透過擴充功能 | Word、Google Docs、網頁與 Overleaf | Word 與 Overleaf LaTeX | 僅支援履歷格式 |
| TeX 設定 | 隨附 Tectonic 與 Typst,不需安裝 TeX | 不需安裝;在雲端編譯 | 不需安裝;在雲端編譯 | 不需安裝 TeX | 不需安裝 TeX | 需安裝 TeX 發行版 | 需安裝 TeX 發行版 | 內建排版引擎與套件管理工具 | 需安裝擴充功能與 TeX | 透過 Overleaf 使用 LaTeX | 透過 Overleaf 使用 LaTeX | 不需設定 TeX | |
| 程式碼與視覺化編輯 | 原始碼與視覺化編輯,雙向轉換不失真 | 原始碼與預覽 | 原始碼與富文字模式 | 原始碼與即時預覽 | 支援 LaTeX 數學式的視覺化編輯器 | 結構化視覺編輯器 | 僅限原始碼 | 原始碼與 PDF 預覽 | 僅限原始碼 | 視覺化寫作助理 | 行內寫作建議 | 僅限視覺化編輯 | |
| 全專案程式碼智慧 | 自動完成、定義與參照查找,以及全專案重新命名 | 編輯器與 AI 輔助 | 自動完成與參照搜尋 | 錯誤提示、自動完成與輔助功能 | 結構化參照與方程式 | 標籤、參照、大綱與自動完成 | 結構與參照檢查工具 | 自動完成、大綱、參照與搜尋 | LaTeX Workshop IntelliSense | 沒有 LaTeX 程式碼工具 | 以 TeXGPT 輔助 LaTeX 程式碼 | 否 | |
| 原始碼與 PDF 同步 | 原始碼與 PDF 可在字詞層級雙向同步 | 即時 PDF 預覽 | 原始碼與 PDF 同步 | 即時預覽 | 不支援原始碼與 PDF 同步 | 原始碼與輸出預覽 | 接近字詞層級 | 原始碼與 PDF 同步 | 正向與反向 SyncTeX | 否 | 使用 Overleaf 預覽 | 否 | |
| PDF 閱讀模式 | 內建檢視器,另有獨立視窗、跨頁、深色與閱讀模式 | 內建預覽 | 內建預覽 | 內建預覽 | 文件預覽 | 使用 PDF 檢視器 | 整合式檢視器 | 整合式 PDF 檢視器 | 擴充功能檢視器,支援反相模式 | 與 PDF 對話 | 無 PDF 閱讀器 | 文件預覽 | |
| 文件範本 | 100 多個入門範本,另可建立可重複使用的自訂範本 | 未見文件說明 | 豐富的出版社範本庫 | Typst Universe 與 Pro 私人範本 | 付費方案提供專業範本 | 內建文件類別 | 內建範本與使用者範本 | 未見文件說明 | 程式碼片段與社群範本 | 未見文件說明 | 否 | 核心功能 | |
| 專案與文件匯入 | 支援檔案與 ZIP,以及 PDF、DOCX、Markdown、圖片和資料夾 | 資料夾、ZIP 或拖放 | 檔案、ZIP 與付費整合服務 | 可轉換 LaTeX、Word 與 Markdown | Jupyter 內容與參考文獻匯入 | LaTeX 與其他文字格式 | 開啟本機原始碼檔案 | 本機資料夾與雲端檔案 | 開啟本機原始碼檔案 | 上傳 PDF 與文件 | Word 與 Overleaf 文件 | 通常支援 PDF 或 DOCX | |
| 匯出格式 | PDF 與原始碼 ZIP,另支援 DOCX、HTML 和 Markdown | PDF 與專案檔案 | PDF 與原始碼 ZIP | PDF、PNG 與 SVG | PDF、Word、LaTeX、Typst 與 MyST | PDF、HTML、Word、RTF、ePub 等 | PDF 與原始碼檔案 | PDF 與原始碼檔案 | 取決於本機工具 | Word 工作流程 | 具追蹤修訂的 Word 文件 | 通常支援 PDF 與 DOCX | |
| 研究與 AI | AI 模型選擇 | 不受特定模型限制;可使用代管供應商、自訂端點或本機 Ollama | 內建 OpenAI 模型 | 內建研究 AI;每日額度依方案而異 | 編譯器輔助功能 | 未見文件說明 | 無 | 無 | 無 | Copilot、自備金鑰或擴充功能 | Paperpal AI | Writefull 模型與 GPT | 內建;模型選擇視產品而定 |
| 本機 AI | 本機 Ollama,不需代管供應商 | 否 | 否 | 否 | 否 | 否 | 未內建 AI | 否 | 自備金鑰或擴充功能 | 否 | 否 | 否 | |
| 套用前檢視 AI 編輯內容 | 可檢視差異,並逐項核准編輯 | 保留或復原 | 檢視 AI 建議 | 逐項檢視輔助建議 | 未見文件說明 | 未內建 AI | 未內建 AI | 未內建 AI | 檢視變更 | 檢視寫作建議 | 追蹤修訂 | 視產品而定 | |
| 由 AI 檢查算繪結果 | 編輯原始碼、編譯,再檢查算繪後的 PDF | 由你重新編譯確認 | 由你重新編譯確認 | 編譯預覽 | 否 | 未內建 AI | 未內建 AI | 未內建 AI | 檢查建置結果,但不審查 PDF | 不審查算繪後的 PDF | 不審查算繪後的 PDF | 否 | |
| 文獻與引文搜尋 | 跨 alphaXiv 與 OpenAlex 搜尋文獻,並以 Crossref 驗證 | 內建文獻搜尋 | 參考文獻搜尋與 AI 引文建議 | 未內建搜尋 | DOI 引文查詢 | 未內建搜尋 | 否 | 未內建搜尋 | 透過 AI 或擴充功能 | 搜尋超過 2.5 億篇文章 | Writefull Cite 可找出缺漏的引文 | 否 | |
| 自主研究代理程式 | 即將推出。代理程式會搜尋文獻、驗證引文、撰寫草稿,再將差異交由你審閱 | 未見文件說明 | 未見文件說明 | 否 | 未見文件說明 | 否 | 否 | 否 | 透過 AI 擴充功能 | 否 | 否 | 否 | |
| 參考文獻庫匯入 | 支援 BibTeX、RIS、EndNote 與 Zotero,並在匯入前去除重複項目 | Zotero 同步 | 付費方案提供參考文獻整合 | Pro 方案提供 Zotero 與 Mendeley 同步 | Zotero、Mendeley 與 EndNote | BibTeX 檔案 | 可搭配 BibTeX 檔案使用 | BibTeX 檔案 | 透過擴充功能 | 引文產生器 | 不支援文獻庫匯入 | 否 | |
| 供外部 AI 代理程式使用的 MCP | 內建 MCP 伺服器,供 Claude Code、Cursor 與其他代理程式使用 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | |
| 拼字與文法檢查 | 私密的離線拼字與文法檢查,並能理解 LaTeX 語境檢查內文 | AI 校對 | 內建拼字檢查,以及針對研究寫作設計的 AI 回饋 | 未見文件說明 | 未見文件說明 | Hunspell、Aspell 與同義詞庫 | 互動式拼字與文法檢查 | 拼字檢查 | 透過擴充功能或 AI | 學術文法與文體 | 學術語言回饋 | 基本檢查功能視產品而定 | |
| 視覺化與 AI 圖表工具 | 視覺化畫布與 AI 產生的 TikZ,並檢查算繪結果 | 將圖片與語音轉為程式碼 | 手動編寫 TikZ 與 AI 工具 | Typst 套件與原生繪圖 | 互動式圖表與圖形 | 視覺化表格與圖片工具 | 手動編寫 TikZ,搭配編輯器輔助 | 手動編寫 TikZ | 手動編寫或使用擴充功能 | 否 | AI 表格、方程式與圖形 | 否 | |
| 品質與投稿 | 投稿前檢查 | 編譯檢查,以及投稿場域、ATS、無障礙、參考文獻與隱私檢查 | 提供 AI 審閱,但無完整投稿檢查套件 | 編譯檢查 | 編譯器錯誤與輔助建議 | SCMS 合規工具 | 編譯器記錄與選用的 ChkTeX | 錯誤與警告 | 清楚的編譯器錯誤訊息 | 透過擴充功能進行程式碼檢查 | 30 多項投稿檢查 | 語言品質審查 | 僅限履歷檢查 |
| ATS 履歷檢查 | ATS 評分檢查與擷取文字預覽 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 未內建檢查 | 否 | 否 | 視產品而定;評分方式通常不透明 | |
| 無障礙預檢 | 無障礙檢查與標記式匯出準備 | 否 | 否 | 未見文件說明 | 結構化網頁出版 | 結構化文件;無預檢功能 | 否 | 未見文件說明 | 未內建檢查 | 否 | 否 | 視產品而定 |
準確地說,是隱私
預設為本地。網路由選擇。
沒有含糊的承諾:這正是您電腦上保留的內容以及 Oleafly 接觸網路的時間。在發送任何內容之前,沒有帳戶、沒有遙測和崩潰報告可供您查看。 隱私.
始終本地化
- 編寫、編輯和您的專案文件
- 使用快取的套件進行編譯(Tectonic 和 Typst 在應用程式中發布)
- Git 歷史記錄、差異和恢復
網絡,只有你行動
- 託管 AI 提供者接收您發送給他們的上下文
- GitHub 發布、推播和拉取
- 引文查找(DOI、arXiv、Crossref)和研究連接器(OpenAlex、alphaXiv)
哲學
文件應該比服務更長久。文件應該比服務更長久。

開源,認真打造
具有生產紀律的獨立項目。
Oleafly 是由獨立維護者公開建構的,乏味的部分也被視為產品功能:編譯取消、路徑安全、過時結果競賽、Git 復原、PDF 回退以及 macOS、Windows 和 Linux 上的跨平台測試。
AGPL-3.0 已獲得許可。閱讀原始碼、提出問題或發送 PR GitHub ↗.
FAQ
What to know before you switch.
01What is Oleafly?+
Oleafly is a local-first workspace for writing and shipping research. Draft in LaTeX, Typst, or Markdown, compile with bundled engines, proofread spelling and grammar locally, preview PDFs, manage citations, review AI edits, track versions in Git, and check resumes for ATS readability without moving between apps.
02Is it really free?+
Yes. Oleafly is free and open source. The desktop app does not add a subscription. If you connect a paid AI provider, that provider may charge for usage. Local models through Ollama do not require a paid API.
03Which AI models does it work with?+
Oleafly is model-agnostic. Use models from hosted providers, run local models through Ollama, or connect a custom OpenAI-compatible endpoint. You choose the model and supply credentials only when the provider requires them.
04Do I need an account?+
No. The desktop app has no Oleafly account or login. Your projects stay in ordinary local folders. Connected AI and Git hosting services may require their own credentials.
05Which tools can it replace?+
For many workflows, Oleafly can replace separate writing, proofreading, compilation, citation, PDF, resume, AI, and Git clients. It still works with ordinary files and GitHub, so you can adopt it without locking your work into a proprietary format.
06Can I import an existing paper or resume?+
Yes. Open an existing folder or import a ZIP, including exports from online LaTeX editors. Oleafly detects the main document. It can convert text-based PDFs to LaTeX locally, route DOCX through Pandoc, and use a vision model to transcribe scans or photos.
07Is the PDF output ATS-friendly?+
ATS readiness depends on the template and content, so Oleafly does not promise a score. Its resume templates use selectable Unicode text, embedded fonts, single-column layouts, and linear reading order. Preflight shows what a parser actually extracts before you send the PDF.
08What about collaboration and sync?+
Today, collaboration uses Git. Publish to GitHub, then push and pull from inside Oleafly. Real-time co-editing, comments, and managed sync are planned, but they are not in the app yet.
09離線拼字和語法+
Hunspell 和 Harper 在您的機器上作為 WASM 運行,屏蔽命令和數學,因此只檢查散文。