撰写 研究论文简历学位论文基金申请书研究论文
像写代码一样。
研究论文
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 模糊搜索应用中的所有操作:项目、文件、设置等。
自备 AI
九家提供商或本地 Ollama,均经逐次变更批准。Claude Code、Cursor 等 MCP 客户端同样连接。也可关闭 AI,编辑器不依赖它。
随时调研
代理搜索 alphaXiv 与 OpenAlex,拉取论文内容,并在写入文献前用 Crossref 校验引用。
离线拼写与语法
Hunspell 与 Harper 在本机以 WASM 运行,屏蔽命令与数学,只检查正文。
会记忆的代理
按项目持久记忆笔记与可见计划清单跨对话保留,AI 可接着上次继续。
从一页到六百页
无论是一页简历还是书级学位论文,编辑器与虚拟化 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 版需额外付费 | 视产品而定,大多采用订阅制 |
| 无需账户 | 是 | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 是 | 否 | 否 | 视产品而定 | |
| 支持离线使用 | 可离线写作、校对、预览和编译 | 否,采用云端工作区 | 否,属于云服务 | 否,Web 应用需要联网 | 否,编辑器属于云服务 | 是 | 是 | 是 | 是 | 否 | 否 | 很少支持 | |
| 文件保留在本地磁盘 | 文件存放在您拥有的本地文件夹中,并支持自托管云同步 | 云存储 | 云存储 | 使用云存储;编译器可在本地运行 | 云存储 | 是 | 是 | 本地文件与文件服务商 | 是 | 云服务与编辑器集成 | 文件保留在 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、Web 和 Overleaf | Word 与 Overleaf LaTeX | 仅支持简历格式 |
| TeX 配置 | 内置 Tectonic 和 Typst,无需安装 TeX | 无需安装,在云端编译 | 无需安装,在云端编译 | 无需安装 TeX | 无需安装 TeX | 需要安装 TeX 发行版 | 需要安装 TeX 发行版 | 内置排版引擎与软件包管理器 | 需要安装扩展和 TeX | 使用 Overleaf 处理 LaTeX | 使用 Overleaf 处理 LaTeX | 无需配置 TeX | |
| 代码与可视化编辑 | 源代码与可视化编辑并用,双向转换不丢失内容 | 源代码与预览 | 源代码与富文本模式 | 源代码与实时预览 | 支持 LaTeX 数学公式的可视化编辑器 | 结构化可视化编辑器 | 仅源代码 | 源代码与 PDF 预览 | 仅源代码 | 可视化写作助手 | 行内写作建议 | 仅可视化编辑 | |
| 项目级代码智能 | 自动补全,并支持定义跳转、引用查找和项目级重命名 | 编辑器与 AI 辅助 | 自动补全与引用检索 | 错误提示、自动补全与 Assists | 结构化引用与公式 | 标签、引用、大纲与自动补全 | 结构与引用检查器 | 自动补全、大纲、引用与搜索 | LaTeX Workshop IntelliSense | 无 LaTeX 代码工具 | 用于 LaTeX 代码的 TeXGPT | 否 | |
| 源代码与 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,每日额度因方案而异 | 编译器 Assists | 官方资料未说明 | 无 | 无 | 无 | Copilot、自带密钥或扩展 | Paperpal AI | Writefull 模型与 GPT | 内置支持,可选模型因产品而异 |
| 本地 AI | 支持本地 Ollama,无需托管服务商 | 否 | 否 | 否 | 否 | 否 | 无内置 AI | 否 | 自带密钥或使用扩展 | 否 | 否 | 否 | |
| 应用前审阅 AI 修改 | 提供可审阅的差异,并可逐项批准修改 | 保留或撤销 | 审阅 AI 建议 | 逐项审阅 Assist | 官方资料未说明 | 无内置 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 审阅,但无完整投稿检查套件 | 编译检查 | 编译器错误提示与 Assists | 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 许可。阅读源码、提交 issue 或 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 运行,屏蔽命令与数学,只检查正文。