쓰세요 연구 논문이력서학위논문연구비 제안서연구 논문
코드를 짜듯이.
연구 논문
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을 비주얼 편집으로: 제목, 목록, 굵게, 링크를 직접. 두 모드 연동 실행 취소. 미지원 명령은 조용히 지우지 않고 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으로 동작. 명령·수식은 가리고 본문만 검사.
기억하는 에이전트
프로젝트별 지속 메모와 보이는 계획 목록이 채팅을 넘어 이어짐.
한 장에서 육백 장까지
한 장 이력서든 책 분량 학위논문이든 에디터와 가상화 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용 소스 zip, GitHub push. 논문은 작성한 그 폴더에서 나갑니다.
제품 비교
다른 모든 도구를 대체하도록 설계된 하나의 연구 작업 공간.
한곳에서 작성하고, 컴파일하고, 교정하고, 문헌을 검색하고, 인용을 관리하고, PDF를 검토하고, 편집을 자동화해 논문 제출까지 마치세요. Oleafly는 전체 연구 도구를 하나의 무료 오픈 소스 앱에 담았습니다. 아래에서 다른 대안에 부족한 점을 확인해 보세요. 문서.
| Oleafly | OpenAI Prism | Overleaf | Typst Web App | Curvenote | LyX | TeXstudio | Texifier | VS Code + LaTeX | Paperpal | Writefull | 이력서 빌더 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 소유권 및 접근 | 가격 | 무료 오픈 소스. Oleafly 구독 불필요 | ChatGPT 계정으로 무료 이용 | 무료 요금제. 유료 요금제에서 기능 추가 | 무료 요금제. Pro는 추가 비용 | 무료 요금제. 유료 요금제에서 비공개 프로젝트 추가 | 무료 오픈 소스 | 무료, GPL | 유료. 무료 데모 제공 | 무료. AI에는 사용량 제한 또는 유료 요금제 적용 | 무료 요금제. Prime은 추가 비용 | 무료 요금제. Premium은 추가 비용 | 서비스별로 다름. 대부분 구독제 |
| 계정 불필요 | 예 | 아니요 | 아니요 | 아니요 | 아니요 | 예 | 예 | 예 | 예 | 아니요 | 아니요 | 서비스별로 다름 | |
| 오프라인 작동 | 오프라인에서 작성, 교정, 미리보기 및 컴파일 가능 | 아니요. 클라우드 작업 공간 | 아니요. 클라우드 서비스 | 아니요. 웹 앱은 인터넷 연결 필요 | 아니요. 편집기는 클라우드 서비스 | 예 | 예 | 예 | 예 | 아니요 | 아니요 | 거의 지원하지 않음 | |
| 파일을 내 디스크에 보관 | 직접 소유하는 로컬 폴더. 자체 호스팅 클라우드 동기화 | 클라우드 저장소 | 클라우드 저장소 | 클라우드 저장소. 컴파일러는 로컬에서 실행 가능 | 클라우드 저장소 | 예 | 예 | 로컬 파일 및 파일 제공업체 | 예 | 클라우드 서비스 및 편집기 연동 | 파일을 Word 또는 Overleaf에 유지 | 대부분 클라우드 저장소 | |
| 버전 기록 | diff 및 복원을 지원하는 자동 Git 체크포인트 | 클라우드 수정 기록 | 유료 요금제에서 전체 기록 제공 | Pro에서 Git 동기화 | 버전 기록 내장 | Git 및 기타 버전 관리 | 수동 또는 SVN | 파일 제공업체 또는 Git 도구 이용 | 직접 설정하는 내장 Git | 공식 문서에 명시되지 않음 | 호스트 앱의 기록 이용 | 서비스별로 다름 | |
| 실시간 공동 작업 | Coming soon. 무제한 공동 작업. 자체 호스팅 | 공동 작업자 무제한 | 기본 제공. 요금제에 따라 제한 | 기본 제공 | 실시간 편집 및 댓글 | 실시간 공동 편집 없음 | 실시간 공동 편집 없음 | 실시간 공동 편집 없음 | Live Share 이용 | Word, Google Docs 또는 Overleaf 이용 | Word 또는 Overleaf 이용 | 서비스별로 다름 | |
| 클라우드 동기화 | Coming soon. 파일은 내 컴퓨터에 유지하면서 브라우저로 접근 | 클라우드 작업 공간 | 클라우드 작업 공간과 유료 Git 및 Dropbox 동기화 | 클라우드 작업 공간과 Pro Git 동기화 | 클라우드 프로젝트 및 연계 출판 | Git 또는 자체 동기화 서비스 이용 | Git 또는 자체 동기화 서비스 이용 | Texifier Connect 실시간 동기화 | Git 또는 자체 동기화 서비스 이용 | 클라우드 작업 공간 | Word 또는 Overleaf 내에서 작동 | 대부분 클라우드 저장소 | |
| 팀 공간 | Coming soon. 공유 템플릿, 라이브러리 및 검토 워크플로 | 공동 작업자 수 제한 없는 공유 프로젝트 | 그룹 및 기관 요금제 | 공유 프로젝트 및 조직용 온프레미스 배포 | 팀 작업 공간 및 접근 제어 | 내장 팀 공간 없음 | 내장 팀 공간 없음 | Texifier Connect를 통한 공유 프로젝트 | GitHub 조직 및 Live Share | 기관용 대시보드 및 라이선스 관리 | 기관용 접근 | 서비스별로 다름 | |
| 작성 및 출판 | 문서 엔진 | 하나의 작업 공간에서 LaTeX, Typst 및 Markdown 지원 | LaTeX만 지원 | LaTeX만 지원 | Typst만 지원 | MyST Markdown 및 Jupyter | LaTeX 및 DocBook | LaTeX만 지원 | LaTeX 및 Markdown | 확장 프로그램으로 지원 | Word, Google Docs, 웹 및 Overleaf | Word 및 Overleaf LaTeX | 이력서 형식만 지원 |
| TeX 설정 | Tectonic 및 Typst 포함. TeX 설치 불필요 | 설치 불필요. 클라우드에서 컴파일 | 설치 불필요. 클라우드에서 컴파일 | TeX 설치 불필요 | TeX 설치 불필요 | TeX 배포판 설치 필요 | TeX 배포판 설치 필요 | 조판 엔진 및 패키지 관리자 내장 | 확장 프로그램 및 TeX 설치 필요 | 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 내장. 일일 사용량은 요금제에 따라 다름 | 컴파일러 Assists | 공식 문서에 명시되지 않음 | 없음 | 없음 | 없음 | Copilot, BYOK 또는 확장 프로그램 | Paperpal AI | Writefull 모델 및 GPT | 내장. 모델 선택지는 서비스별로 다름 |
| 로컬 AI | 로컬 Ollama. 호스팅 제공업체 불필요 | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 내장 AI 없음 | 아니요 | BYOK 또는 확장 프로그램 | 아니요 | 아니요 | 아니요 | |
| AI 편집 내용 검토 후 적용 | 검토 가능한 diff와 편집 항목별 승인 제어 | 유지 또는 실행 취소 | AI 제안 검토 | 각 Assist 개별 검토 | 공식 문서에 명시되지 않음 | 내장 AI 없음 | 내장 AI 없음 | 내장 AI 없음 | 변경 사항 검토 | 글쓰기 제안 검토 | 변경 내용 추적 | 서비스별로 다름 | |
| AI의 렌더링 결과 확인 | 소스를 편집하고 컴파일한 다음 렌더링된 PDF 확인 | 사용자가 다시 컴파일해 확인 | 사용자가 다시 컴파일해 확인 | 컴파일 미리보기 | 아니요 | 내장 AI 없음 | 내장 AI 없음 | 내장 AI 없음 | PDF 검토 없는 빌드 검사 | 렌더링된 PDF 검토 없음 | 렌더링된 PDF 검토 없음 | 아니요 | |
| 문헌 및 인용 검색 | alphaXiv 및 OpenAlex의 문헌 검색과 Crossref 검증 | 문헌 검색 내장 | 참고문헌 검색 및 AI 인용 제안 | 내장 검색 없음 | DOI 인용 조회 | 내장 검색 없음 | 아니요 | 내장 검색 없음 | AI 또는 확장 프로그램으로 지원 | 2억 5천만 편 이상의 논문 검색 | Writefull Cite로 누락된 인용 검색 | 아니요 | |
| 자율 연구 에이전트 | Coming soon. 에이전트가 문헌을 검색하고 인용을 검증하며 초안을 작성한 뒤 diff 제공 | 공식 문서에 명시되지 않음 | 공식 문서에 명시되지 않음 | 아니요 | 공식 문서에 명시되지 않음 | 아니요 | 아니요 | 아니요 | 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 | 오류 및 경고 | 명확한 컴파일러 오류 | 확장 프로그램을 통한 린팅 | 30개 이상의 제출 검사 | 언어 품질 검토 | 이력서 검사만 지원 |
| 이력서 ATS 검사 | 점수 기반 ATS 검사 및 추출된 텍스트 미리보기 | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 내장 검사 없음 | 아니요 | 아니요 | 서비스별로 다름. 채점 기준은 불명확한 경우가 많음 | |
| 접근성 사전 점검 | 접근성 검사 및 태그 지정 내보내기 준비 | 아니요 | 아니요 | 공식 문서에 명시되지 않음 | 구조화된 웹 출판 | 구조화된 문서. 사전 점검 없음 | 아니요 | 공식 문서에 명시되지 않음 | 내장 검사 없음 | 아니요 | 아니요 | 서비스별로 다름 |
프라이버시를 정확히
기본은 로컬. 네트워크는 선택일 때.
모호한 약속 없이, 무엇이 항상 기기에 남고 Oleafly가 언제 네트워크에 닿는지 적습니다. 계정 없음, 원격 측정 없음, 충돌 보고는 보내기 전 검토합니다. 은둔.
항상 로컬
- 작성·편집과 프로젝트 파일
- 캐시된 패키지로 컴파일(Tectonic·Typst 앱 포함)
- Git 기록, diff, 복원
행동할 때만 네트워크
- 호스팅 AI 제공자는 보낸 컨텍스트를 받음
- GitHub 게시, push, pull
- 인용 조회(DOI, arXiv, Crossref)와 연구 커넥터(OpenAlex, alphaXiv)
철학
문서는 서비스보다 오래 살아야 합니다.문서는 서비스보다 오래 살아야 합니다.

진지한 오픈 소스
독립 프로젝트, 프로덕션 규율.
Oleafly는 독립 유지보수자가 공개로 만들며, 화려한 부분만이 아니라 컴파일 취소·경로 안전·오래된 결과 경합·Git 복구·PDF 폴백, macOS·Windows·Linux 교차 테스트도 제품 기능으로 다룹니다.
AGPL-3.0 라이선스. 소스를 읽고 이슈나 PR을 보내려면 GitHub ↗.
FAQ
What to know before you switch.
01What is Oleafly?+
Oleafly is a local-first workspace for writing and shipping research. Draft in LaTeX, Typst, or Markdown, compile with bundled engines, proofread spelling and grammar locally, preview PDFs, manage citations, review AI edits, track versions in Git, and check resumes for ATS readability without moving between apps.
02Is it really free?+
Yes. Oleafly is free and open source. The desktop app does not add a subscription. If you connect a paid AI provider, that provider may charge for usage. Local models through Ollama do not require a paid API.
03Which AI models does it work with?+
Oleafly is model-agnostic. Use models from hosted providers, run local models through Ollama, or connect a custom OpenAI-compatible endpoint. You choose the model and supply credentials only when the provider requires them.
04Do I need an account?+
No. The desktop app has no Oleafly account or login. Your projects stay in ordinary local folders. Connected AI and Git hosting services may require their own credentials.
05Which tools can it replace?+
For many workflows, Oleafly can replace separate writing, proofreading, compilation, citation, PDF, resume, AI, and Git clients. It still works with ordinary files and GitHub, so you can adopt it without locking your work into a proprietary format.
06Can I import an existing paper or resume?+
Yes. Open an existing folder or import a ZIP, including exports from online LaTeX editors. Oleafly detects the main document. It can convert text-based PDFs to LaTeX locally, route DOCX through Pandoc, and use a vision model to transcribe scans or photos.
07Is the PDF output ATS-friendly?+
ATS readiness depends on the template and content, so Oleafly does not promise a score. Its resume templates use selectable Unicode text, embedded fonts, single-column layouts, and linear reading order. Preflight shows what a parser actually extracts before you send the PDF.
08What about collaboration and sync?+
Today, collaboration uses Git. Publish to GitHub, then push and pull from inside Oleafly. Real-time co-editing, comments, and managed sync are planned, but they are not in the app yet.
09오프라인 맞춤법·문법+
Hunspell과 Harper가 기기 WASM으로 동작. 명령·수식은 가리고 본문만 검사.