書く 研究論文履歴書学位論文研究費申請書研究論文
コードを書くように。
研究論文
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 モード、ライト/ダーク、アクセント色、7 つのレイアウト、編集可能なショートカット。エディタは手に合うべきです。
コードでもビジュアルでも
LaTeX や Markdown をビジュアル編集へ:見出し、リスト、太字、リンクを直接編集。両モードで連動 undo。未対応コマンドは黙って消さず raw ブロックとして残し、ソース往復は非破壊。
単語単位の SyncTeX
PDF の単語を ⌘-クリックするとソースの同じ語へ。⌘⇧J で戻る。
コードインテリジェンス
定義へ移動、参照検索、ラベル・引用キー・マクロを全ファイルでリネーム。
スラッシュコマンド
/ で Notion 風メニュー:/figure、/table、/section、/cite、/math。
title = {Raft-based KV stores}, …
DOI で引用
DOI・arXiv id・URL を貼る。BibTeX を取得・重複排除し \cite を挿入。
ライブラリごと取り込む
BibTeX・RIS・EndNote XML・Zotero RDF を一括。.bib に載る前にプロジェクトと重複排除。
コマンドパレット
⌘K であらゆる操作をあいまい検索:プロジェクト、ファイル、設定など。
自分の AI を持ち込む
9 プロバイダまたはローカル Ollama。変更ごとに承認。Claude Code や Cursor も同じ MCP で接続。AI をオフにしても編集は続く。
調査をすぐ手元に
エージェントが alphaXiv と OpenAlex を検索し、本文を取り、文献に入る前に Crossref で引用を検証。
オフラインのスペルと文法
Hunspell と Harper が本機 WASM で動作。コマンドと数式をマスクし、散文だけ検査。
覚えているエージェント
プロジェクト単位の永続メモと見える計画リストがチャットをまたぎ、続きから再開。
1 ページから 600 ページまで
1 枚の履歴書でも書籍級の学位論文でも、エディタと仮想化 PDF は滑らか。
本当に読むための PDF ビューア
プレビューを副画面へ、見開き、夜間の色反転、全画面プレゼン。
ダイアグラムコンポーザー
図を説明すると AI が TikZ を書き、単独コンパイルし、描画を見て重なりを直す。自分で形と辺を描いても生成 TikZ と往復。透明高解像 PNG をオフライン出力。
3 エンジン、1 ワークスペース
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 用にソースを zip、GitHub へ push。論文は書いた同じフォルダから出荷されます。
他製品との比較
ほかのすべてを置き換える、唯一の研究ワークスペース。
執筆、コンパイル、校正、文献検索、引用管理、PDFレビュー、編集の自動化、論文の提出まで、すべてを1か所で。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 OrganizationsとLive Share | 機関向けダッシュボードとライセンス管理 | 機関向けアクセス | 製品により異なる | |
| 執筆と出版 | 文書エンジン | 1つのワークスペースで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のインストールが必要 | LaTeXにはOverleafを使用 | LaTeXにはOverleafを使用 | 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を組み込み。1日あたりの利用枠はプランにより異なる | コンパイラーAssists | 文書化されていない | なし | なし | なし | Copilot、BYOK、または拡張機能 | Paperpal AI | WritefullモデルとGPT | 組み込み。モデルの選択肢は製品により異なる |
| ローカルAI | ローカルOllama。ホスト型プロバイダーは不要 | なし | なし | なし | なし | なし | 組み込みAIなし | なし | BYOKまたは拡張機能 | なし | なし | なし | |
| 適用前にAIの編集内容を確認 | 確認可能な差分と編集単位の承認コントロール | 保持または取り消し | AIの提案を確認 | 各Assistを確認 | 文書化されていない | 組み込みAIなし | 組み込みAIなし | 組み込みAIなし | 変更内容を確認 | 文章の改善提案を確認 | 変更履歴 | 製品により異なる | |
| AIによるレンダリング結果の検証 | ソースを編集・コンパイルし、レンダリング済みPDFを検証 | 再コンパイルして自分で確認 | 再コンパイルして自分で確認 | コンパイルプレビュー | なし | 組み込みAIなし | 組み込みAIなし | 組み込みAIなし | PDFレビューを伴わないビルドチェック | レンダリング済みPDFのレビューなし | レンダリング済みPDFのレビューなし | なし | |
| 文献・引用検索 | alphaXivとOpenAlexを横断する文献検索とCrossrefによる検証 | 組み込みの文献検索 | 参考文献検索とAIによる引用候補の提案 | 組み込み検索なし | DOIによる引用情報検索 | 組み込み検索なし | なし | 組み込み検索なし | AIまたは拡張機能経由 | 2億5,000万件以上の論文を横断検索 | Writefull Citeが不足している引用を検出 | なし | |
| 自律型リサーチエージェント | 近日提供予定。エージェントが文献を検索し、引用を検証して草稿を作成し、差分を提示 | 文書化されていない | 文書化されていない | なし | 文書化されていない | なし | なし | なし | AI拡張機能経由 | なし | なし | なし | |
| 参考文献ライブラリのインポート | BibTeX、RIS、EndNote、Zoteroに対応し、インポート前に重複を排除 | Zotero同期 | 有料プランで参考文献連携に対応 | ProでZoteroおよびMendeley同期に対応 | Zotero、Mendeley、EndNote | BibTeXファイル | BibTeXファイルに対応 | BibTeXファイル | 拡張機能経由 | 引用情報ジェネレーター | ライブラリのインポートなし | なし | |
| 外部AIエージェント向けMCP | Claude Code、Cursorなどのエージェント向けMCPサーバーを組み込み | なし | なし | なし | なし | なし | なし | なし | あり | なし | なし | なし | |
| スペル・文法チェック | LaTeXを認識する文章チェックにより、スペルと文法を非公開かつオフラインで校正 | AI校正 | 組み込みスペルチェックと研究文書に特化したAIフィードバック | 文書化されていない | 文書化されていない | Hunspell、Aspell、類語辞典 | 対話型のスペル・文法チェック | スペルチェック | 拡張機能またはAI経由 | 学術文書向けの文法・スタイルチェック | 学術文書向けの言語フィードバック | 基本チェックの内容は製品により異なる | |
| ビジュアル・AI作図ツール | ビジュアルキャンバスと、レンダリング検証付きのAI生成TikZ | 画像や音声からコードを生成 | 手動のTikZとAIツール | Typstパッケージとネイティブ描画 | インタラクティブなチャートと図 | ビジュアル表作成・画像ツール | エディター支援付きの手動TikZ | 手動のTikZ | 手動または拡張機能 | なし | AIによる表、数式、図の生成 | なし | |
| 品質と投稿 | 投稿前チェック | コンパイル、投稿先要件、ATS、アクセシビリティ、参考文献、プライバシーをチェック | 投稿支援スイートを伴わないAIレビュー | コンパイルチェック | コンパイラーエラーとAssists | SCMS準拠ツール | コンパイラーログと任意のChkTeX | エラーと警告 | わかりやすいコンパイラーエラー表示 | 拡張機能によるLint | 30項目以上の投稿前チェック | 文章品質レビュー | 履歴書チェックのみ |
| 履歴書のATSチェック | 採点式ATSチェックと抽出テキストのプレビュー | なし | なし | なし | なし | なし | なし | なし | 組み込みチェックなし | なし | なし | 製品により異なる。採点基準は不明瞭な場合が多い | |
| アクセシビリティ事前チェック | アクセシビリティチェックとタグ付きエクスポートの準備 | なし | なし | 文書化されていない | 構造化Web出版 | 構造化文書。事前チェックなし | なし | 文書化されていない | 組み込みチェックなし | なし | なし | 製品により異なる |
プライバシーを正確に
既定はローカル。ネットは選択時だけ。
曖昧な約束はしません。何が常に本機に残り、いつ Oleafly がネットワークに触れるかを明記します。アカウントなし、テレメトリなし、クラッシュ報告は送信前に確認できます。 プライバシー.
常にローカル
- 執筆・編集とプロジェクトファイル
- キャッシュ済みパッケージでのコンパイル(Tectonic と Typst はアプリ同梱)
- Git 履歴・差分・復元
操作したときだけネットワーク
- ホスト型 AI 提供者はあなたが送った文脈を受け取る
- GitHub の公開・push・pull
- 引用検索(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 で動作。コマンドと数式をマスクし、散文だけ検査。