> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Poor man's REPL
- URL: https://www.rozhkov.me/poor-mans-repls/
- Published: 2022-12-20T08:00:00.000Z
- Updated: 2022-12-20T19:40:37.000Z
- Author: Vova Rozhkov
- Tags: інструменти

Коли я пишу щось на Python або Ruby то активно використовую їх репли: для Python це або стандартний інтерпретатор або Jupyter, для Ruby це Rails Console.

Днями треба було потестувати деякі штуки зі спарком всередині кубернетіс кластера. Програмно створювати сесії й усе таке. `spark-shell` не підійшов через деякі причини, запускати спарк драйвер на локалхості теж не підходило через те що воркери не могли б достукатися до мене назад. Сетапити [Telepresence](https://www.telepresence.io/) не хотілося, робити докер зі скала-реплом я обламався, бо треба було б йому підсунути весь classpath спарку, а як то швидко зробити я не знав, JShell не підходив, бо Java 8, врешті я вирішив піти старим, способом яким користуюсь вже [десяток](https://www.rozhkov.me/debug/) [років](https://www.rozhkov.me/debug-interactivity/) — JVM Remote Debug + [HotSwap](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/enhancements1.4.html#hotswap).

Тому я:

1. Зібрав Spring Boot веб апку з одним едпоїнтом,
2. Зібрав докер імедж через `./gradlew distTar && docker build .` з `JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005`
3. Задеплоїв імедж в кластер: `kubectl run spark-poc --image=spark-poc-app:latest`
4. Прокинув собі порт для дебагу через K9S
5. Під'єднався туди з IntelliJ, трігерунв ендпоїнт `/hello` і вуаля — в мене є ~~повноцінний~~ джава-репл.

Я зазвичай працюю двома способами:

1. Пишу код який мені потрібно, підкладаю його HotSwap-ом через Ctrl+Shift+F9, трігерю ендпоїнт і дивлюся що вийшло.
2. Виконую потрібні мені команди в Evaluate Expression через Alt+F9 і відразу бачу результат.

Все це економить купу часу на налаштування енвів, ребути, релоади й так далі. Так, HotSwap має свої обмеження, але я вже тертий калач, тому вони мені не заважають.

Читач може зауважити: а міг би писати на Clojure, де все для людей і є можливість запустити Remote REPL сесію! Насправді я на секунду про це подумав, але потім вирішив що маю обмежений час та недостатній досвід Clojure, щоб завести все швидко.

Тому довелось городити отакий REPL бідняка.