Remote org-mode as jupyter notebooks

0.31. [2025-10-25 Sat] Uso de org-mode remoto alternativa a una jupyter notebook

Vamos a describir como se puede trabajar en forma remota usando emacs TRAMP y org-mode

En el .ssh/config se define el servidor que se quiere utilizar con la posibilidad de realizar un puente

Host grial3
     HostName 10.11.12.3
     User pulido
     Port 22
     ProxyJump 200.45.54.94

Luego editamos el archivo con emacs /ssh:<hostname>:<nombre del archivo>

Se puede setear en el file:

De esta manera cada vez que se genere una figura me la va a transferir a algun cache (recordar de limpiarlo de vez en cuando

M-x tramp-cleanup-all-connections which clears the connections cache.

Para que me aparezca a la salida de cualquier codigo python la figura correspondiente linkeada automaticamente he agregado un pequen~o script que me lo hace en forma automatica. Esto se puede guardar como mypyplot.py y luego se carga en lugar del pyplot

# Aplico un parche para que me aparezca informacion de la figura guardada y que la pueda
# mostrar con win  + p
from matplotlib.figure import Figure

_figure_savefig_original = Figure.savefig

def figure_savefig_nuevo(self, *args, **kwargs):
    resultado = _figure_savefig_original(self, *args, **kwargs)
    if is_tool('~/bin/checkifrunning'):
        os.system('~/bin/checkifrunning '+ fname)
    print(f"Figura guardada")
    print(f"[[file:{fname}]]")
    return resultado

Figure.savefig = figure_savefig_nuevo
import matplotlib.pyplot as plt
from matplotlib.pyplot import *

Ejemplo de uso en un archivo de reporte donde se ejecutan codigos python (lease un cuaderno como jupyter)

Quiero generar una figura en el servidor y luego que me la transfiera automaticametne y me la muestre:

#+BEGINSRC lisp :session :results output

1. project

2. experimentos

import my_pyplot as plt
import numpy as np

# Tu código de plot
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(figsize=(8, 4))
plt.plot(x, y, 'b-', linewidth=2)
plt.title('Senoidal')
plt.grid(True)

# Guardar con link automático
plt.savefig("seno")
plt.close()

#+ENDSRC

esto se debe ejecutar con C-c C-c

Como he puesto raw y ademas esta seteado el savefig para que me genere un link de org-mode una vez que se genere el link en forma automatica me lo intentara abrir.

En el dot emacs he puesto unas lineas para que me refresque las imagenes:

;; Funcion robusta para refrescar imagenes
(defun my/org-refresh-inline-images ()
  (when (display-graphic-p)
    (clear-image-cache)
    (org-display-inline-images t t)))
(add-hook 'org-babel-after-execute-hook 'my/org-refresh-inline-images)

Author: Pulido

Created: 2025-10-25 Sat 21:00

Validate