
Hola, soy Lorenzo y esto es Atareao con Linux, episodio número 631. Supongo que este episodio ya te lo olías, sobre todo cuando en su momento te comenté que me había instalado Termux en la tableta Android y también dejé caer alguna cosa sobre Neovim. Pues sí, has acertado. Hoy te voy a hablar de dos formas de programar desde una tableta Android, dos enfoques que no se parecen en nada. En el primero programas a distancia, porque tiras de Visual Studio Code en remoto; en el segundo trabajas en local, porque tiras de Neovim instalado en la propia tableta. Y ahí está la diferencia de fondo: en un caso dependes por completo de tu conexión a internet, y en el otro dependes de ti mismo, bueno, y de lo que sepas de Neovim.
Te aviso de una cosa antes de entrar. Esto es el primer episodio de una serie sobre programación desde la tableta, y no te quepa duda de que va a ser solo el principio. Llevo semanas dándole vueltas a la idea de salir a la terraza con la tableta y, en lugar de quedarme encerrado en el despacho las doce horas de rigor, poder seguir programando al aire libre y con otra perspectiva. Como lo que a mí me gusta de verdad es programar, quería tener esa posibilidad a mano: que si estoy fuera y me apetece continuar con lo que tenía entre manos, pueda hacerlo sin volver a casa. Y estos dos caminos son los que estoy probando de forma bastante concienzuda en la tableta Android, en concreto en una OnePlus Pad 2.
Aclaro desde ya que no voy a sacar conclusiones definitivas, porque el experimento sigue en marcha y yo soy el único sujeto de observación. Prefiero contarte lo que he probado, lo que me ha funcionado, lo que me ha hecho dudar y dónde me he quedado atascado. Vamos al turrón.
Por qué empeñarme en programar desde una tableta
Empecemos por el motivo, que es lo que justifica todo lo demás. No se trata de una moda ni de un capricho tecnológico. Se trata de que llevo demasiado tiempo pasando la vida encerrado en el despacho, y una tableta me da la excusa perfecta para salir, para sentarme en la terraza, para cambiar de aires sin dejar de trabajar. Y ojo, esto no es un invento de la pandemia ni una costumbre rara que me haya quedado pegada; es una cosa que quiero hacer también en tiempos normales. Salir fuera, disfrutar del aire libre y, si me apetece, seguir tecleando.
La tableta, además, encaja bien en la historia que ya te he contado otras veces con Obsidian. Me decanté por Obsidian justamente porque me permite tenerlo todo sincronizado entre el móvil, la tableta y el ordenador. Como lo que de verdad me tira es programar, quería estirar esa misma idea y tener también un editor decente en la tableta, no solo mis notas. De ahí que me haya puesto a buscar alternativas en serio.
Ahora bien, conviene ser honesto con las limitaciones. Estamos hablando de un dispositivo Android, y aunque esa tableta sea probablemente mucho más potente que el ordenador con el que yo me inicié hace años, lo cierto es que hoy resulta bastante modesta si la comparas con la máquina con la que trabajo de forma habitual. Y eso condiciona toda la conversación: no es lo mismo compilar un proyecto grande que editar unos cuantos ficheros. Teniendo eso presente, las dos alternativas que barajo son las que te decía: programar en remoto con Visual Studio Code desde el navegador, o programar en local con Neovim dentro de Termux.
Dos caminos que no se parecen en nada
Antes de meterme en cada uno, quiero que veas el contraste, porque es lo que le da sentido al episodio. Por un lado tienes Visual Studio Code corriendo en un servidor y tú manejándolo con el navegador de la tableta. Por otro tienes Neovim instalado en la propia tableta, funcionando sin necesidad de red. Son dos filosofías opuestas.
La primera pone toda la potencia en la nube. El servidor es el que compila, el que indexa, el que mueve los ficheros, el que ejecuta las extensiones. Tú solo abres una pestaña del navegador y pintas la interfaz en pantalla. La segunda pone todo en tu mano. El editor vive en la tableta, el código vive en la tableta, y si se cae internet a ti te da exactamente igual porque el trabajo no depende de que haya red.
Ahí está el dilema en una frase. La comodidad de un entorno potente y siempre disponible frente a la libertad de un entorno ligero que no le debe nada a nadie. Y como verás al final, no consigo decidirme del todo. Tengo el corazón partido, y no exagero.
Visual Studio Code en remoto sobre un VPS
He empezado por esta opción, por seguir con la costumbre de Visual Studio Code, que es el editor con el que llevo años trabajando. La idea es sencilla de contar: tú levantas Visual Studio Code en un servidor y desde la tableta accedes a él con el navegador. Nada de instalar el editor en Android. Todo el peso, del lado del servidor.
¿Y por qué en un VPS? Pues por una razón que ya te he comentado en más de una ocasión: porque tengo uno. Pago unos seis euros al mes por un servidor en el que ya tengo montadas un montón de cosas. Un servicio de música para mi propio consumo, mi propio alojamiento de archivos, mi propio servicio de vídeo, mi servicio de notas, mi sincronización y hasta algunas fotografías. Todo por un precio constante, así que añadir un servicio más no me descuadra la factura.
Eso sí, hay que reconocer que Visual Studio Code no es precisamente ligero. Es un servicio bastante más pesado que los que ya tengo corriendo, y eso es algo que conviene pensar antes de lanzarse. Yo no lo dudé demasiado porque, en un episodio reciente del podcast, te hablé de un contenedor Docker que te permite tener ese servicio a mano y levantarlo o apagarlo cuando te conviene. Con ese truco, el peso del servicio deja de ser un problema, porque solo consume recursos cuando lo estás usando.
Cómo se monta un Visual Studio Code que vive en el servidor
Para que te sitúes, porque aquí hay mucho nombre suelto y conviene aclararlo. Cuando hablamos de Visual Studio Code en el navegador, lo más habitual en un VPS propio es tirar de code-server, un proyecto de código abierto que empaqueta VS Code para que lo sirvas desde un servidor y lo abras en cualquier navegador. Es la pieza que hay debajo de esta forma de trabajar, y Microsoft también ofrece sus propias vías, como las túneles remotos de VS Code, pero en un servidor propio lo normal es code-server.
La instalación, en un sistema Linux al uso, es de las que se despachan en un momento. Con el script oficial queda lista del tirón,
curl -fsSL https://code-server.dev/install.sh | sh
Y si prefieres no ensuciar el sistema y tenerlo todo encapsulado, el mismo proyecto se distribuye como imagen de contenedor, que es justo la vía que encaja con el truco del que te hablaba antes. El arranque típico con Docker viene a ser este, montando tus ficheros de configuración y una carpeta de trabajo,
docker run -d --name code-server
-p 127.0.0.1:8080:8080
-v "$HOME/.config/code-server:/home/coder/.config/code-server"
-v "$HOME/proyectos:/home/coder/proyectos"
codercom/code-server:latest
Con eso, el editor queda escuchando en el puerto 8080 del servidor, y tú lo alcanzas desde el navegador de la tableta. Ojo con un detalle que no es menor: el puerto lo he puesto en 127.0.0.1 a propósito, para que no quede expuesto a internet sin querer. Lo suyo es poner delante un reverse proxy con HTTPS, o bien acceder a través de un túnel SSH, y no dejar el editor abierto a la primera de cambio. Esto no lo digo para darte la brasa, sino porque un editor con acceso a tu código no es algo que quieras regalar por ahí.
Una vez dentro, la experiencia es exactamente la de Visual Studio Code de siempre. Instalas tus extensiones, eliges tu tema, ajustas tus atajos, y todo eso queda guardado en el servidor. Da igual si te conectas desde el ordenador de casa, desde la tableta o desde el móvil: verás el mismo entorno, con las mismas extensiones y la misma configuración. Ahí está la gracia de verdad.
Las ventajas de trabajar siempre contra el mismo editor
Las ventajas de esta vía son, para mí, brutales. La principal es que siempre tienes lo mismo configurado para cualquier cosa que necesites. Tú instalas tus complementos una vez y te vas donde te vas, estés donde estés, siempre vas a encontrar tu configuración intacta, porque estás trabajando contra el mismo Visual Studio Code. No hay copias, no hay diferencias, no hay sorpresas.
Piensa en cómo lo hace la gente normalmente. Tienes tu instalación de VS Code en el ordenador de sobremesa y otra en el portátil, y para que se parezcan utilizas herramientas que sincronizan las extensiones de uno a otro y la configuración de uno a otro. Aquí nada de eso. Aquí no tienes nada que sincronizar, porque todo está en tu nube. Todo está en tu servidor, y dependes únicamente de ti, con lo que eso conlleva.
La segunda ventaja es la comodidad del dispositivo. La tableta es lo bastante grande como para trabajar sin destrozarte la vista, algo que en el móvil veo bastante más complicado. Y la tercera tiene que ver con la escala del proyecto: como el trabajo pesado lo hace el servidor, cualquier proyecto que puedas desarrollar en Visual Studio Code lo vas a poder desarrollar también desde el navegador. No hay un techo de tamaño que te frene.
Programar desde el navegador tiene algo de liberación. Tu equipo deja de ser el que manda y pasa a ser apenas una ventana por la que miras el trabajo de verdad, que ocurre en otro sitio.
Los inconvenientes de depender de la nube
Y ahora la cara menos bonita. Cuando trabajas así, dependes del VPS, dependes de la conexión a internet y dependes de que todo, absolutamente todo, esté funcionando bien en ese momento. Si algo de la cadena falla, te quedas fuera. Es así de simple.
Lo de internet, dirás, es relativo, porque hoy dependemos de internet para casi cualquier cosa. Y tienes razón, pero conviene verlo con ejemplos concretos. Si estás programando en Rust y quieres añadir un nuevo crate, esa librería hay que descargarla de internet; sin conexión no la tienes. Si estás con JavaScript y te falta un módulo de Node.js, sin conexión no lo instalas. Si necesitas consultar la documentación de cualquier cosa, sin conexión te toca tirar de memoria. Por mucho que queramos hacernos los independientes, internet se ha vuelto un requisito de facto para programar.
Y luego está la latencia. Aquí te tengo que decir la verdad: hasta el momento no la he experimentado de forma que me moleste. Pero eso no quiere decir que no pueda aparecer. Cada pulsación de tecla tiene que ir al servidor y volver, y si la red va mal, ese ida y vuelta se nota. Que no lo haya sufrido todavía no significa que no exista el problema; probablemente en algún momento me lo encuentre y entonces te lo contaré con nombre y apellidos.
Hay un detalle concreto que sí me ha dado guerra y que quiero dejarte apuntado. En la tableta, cuando usas Visual Studio Code y necesitas la tecla Escape, puedes tener problemas, porque los teclados sobre pantalla no siempre la ofrecen de forma cómoda. Mi recomendación es que reemplaces la tecla Escape por otro atajo de teclado que sí puedas pulsar sin pelear. Es un apaño, pero se agradece.
Neovim dentro de Termux: el otro extremo
Y llegamos a la segunda vía. Aquí he de confesarte que no me lo había planteado hasta que alguien me dijo eso de «oye, ¿por qué no te instalas Termux en la tableta?». Y me lo instalé. Lo instalé, empecé a usarlo y empecé a disfrutarlo. Una vez tienes un entorno de terminal de verdad en Android, y una vez compruebas que la tableta es lo bastante grande para editar código sin dejarte los ojos, el siguiente paso cae solo: instalarte Neovim.
Para quien no lo conozca, Termux es un emulador de terminal para Android que trae consigo un pequeño entorno Linux, con su propio gestor de paquetes (pkg) y sin necesidad de root ni de flashear nada. No es una máquina virtual; es un entorno de usuario que vive dentro de Android. Y Neovim es el editor de la familia Vim, moderno, con soporte nativo de Lua para configurarlo y con todo un ecosistema de complementos y servidores de lenguaje (LSP) que le da superpoderes. Es ligero, rapidísimo, y ese es justo el motivo por el que encaja tan bien en un dispositivo con menos músculo que un ordenata.
Instalar Neovim en Termux y sincronizar la configuración
La instalación de Neovim es de las sencillas, tan sencilla como instalar el paquete. Desde Termux, con el gestor de paquetes, se resuelve en una línea,
pkg update && pkg upgrade
pkg install neovim
Y aquí está la parte buena. Lo que de verdad marca la diferencia no es la instalación, es la configuración. Como has contado en más de una ocasión, si utilizas un gestor de dotfiles como yadm, ese «Yet Another Dotfiles Manager» de toda la vida, lo que haces es sincronizar tus archivos de configuración entre máquinas. Así que no tienes que reconfigurar nada a mano: clonas tu repositorio y ya tienes Neovim exactamente igual que en el ordenador.
pkg install git yadm
yadm clone https://github.com/tu-usuario/dotfiles.git
Y ojo, merece la pena que sepas de dónde salen los ficheros, porque así te va a ser más fácil ordenarlos. La configuración de Neovim vive en ~/.config/nvim/, y el fichero de entrada es init.lua. Si has montado el escritorio con un paquete de configuración como LazyVim, la cosa se apoya en un gestor de complementos, normalmente lazy.nvim, que instala y actualiza todo por ti. Es el patrón más extendido hoy, y explica por qué «clonar y listo» funciona tan bien: la magia está en que el gestor de complementos reconstruye el entorno desde un fichero declarativo.
Con esto te ahorras el mayor dolor de Neovim, que es dejarlo fino. Yo he hecho dos instalaciones de Neovim en Termux. La primera la hice prácticamente a mano, peleándome con cada pieza, y la segunda sincronizando el repositorio, y esa segunda fue fantástica. Ahí entendí de verdad para qué sirve tener los dotfiles bien guardados.
Qué tal se porta Termux y de dónde lo instalo
Un detalle que quiero dejar sobre la mesa, porque sé que a más de uno le ronda la cabeza. Todavía no tengo claro si conviene instalar Termux desde Google Play o desde F-Droid. No lo tengo claro porque, hoy por hoy, las versiones de ambas tiendas van prácticamente parejas. Leí en su momento que se iba a dejar de actualizar Termux en Google Play, pero lo cierto es que la versión de la tienda de Google y la de F-Droid están fechadas por la misma época, así que la duda sigue viva. Los comentarios que vas encontrando tampoco ayudan a decantarse.
Es un tema menor, pero reconozco que me gusta tenerlo atado. Al final, lo importante es que Termux funciona y que te da ese entorno de terminal que en Android, de fábrica, brillaba por su ausencia. Y con Termux en marcha, puedes ir montando todo lo que necesitas para programar.
Porque una de las cosas bonitas de esta vía es que no tienes que renunciar a casi nada. Muchos de los linters que usas para revisar tu código corren sobre Node.js, y Node.js lo puedes instalar directamente. Python también lo puedes instalar en Termux sin drama. Y si te apetece, incluso puedes montar un entorno para programar en Rust, ¿por qué no? Todo eso, dentro de la misma tableta.
pkg install nodejs python rust
Ventajas e inconvenientes del entorno local
Las ventajas son, en buena medida, el espejo de lo que eran las desventajas del Visual Studio Code remoto. La primera y más evidente: no dependes de internet para trabajar. Lo tienes todo instalado en la propia tableta, así que puedes estar en la terraza sin cobertura y seguir editando tan tranquilo.
Pero, un detalle de transparencia, porque me gusta decir las cosas como son: eso de no depender de internet es bastante relativo. Hoy nos apoyamos continuamente en herramientas de terceros. Nos apoyamos en modelos de inteligencia artificial para el autocompletado, en internet para encontrar la documentación de lo que programamos y en internet para descargar las librerías. Con lo cual, sí, en un momento concreto puede que no necesites nada de eso y estés perfectamente aislado. Pero, ¿es que es tan cómodo estar sin ello? Pues la verdad es que, si te soy sincero, no demasiado.
La segunda ventaja es que Neovim es ligerísimo. No vas a tener el más mínimo problema para tenerlo configurado igual que en el ordenador, con los mismos linters y los mismos complementos. Ahí el rendimiento no es una preocupación. Y la tercera es esa sensación de trabajar en un entorno que sientes tuyo, porque lo has construido tú, pieza a pieza.
En el debe de este lado apunto dos cosas. La primera es la curva de aprendizaje. Utilizar Neovim es, relativamente, más exigente que Visual Studio Code. Digo relativamente porque tampoco quiero engañar a nadie: configurar bien VS Code también tiene lo suyo. Imagínate la tienda de complementos de Visual Studio Code. No hay dos o tres extensiones; hay una barbaridad, y tienes que dar con las adecuadas para que todo funcione como esperas. Uno diría «bueno, busco las más instaladas y listo», pero entonces te encuentras con cientos de vídeos y cientos de artículos diciéndote cuáles son las mejores, y muchos de ellos ya están obsoletos. No es tan fácil como parece.
La segunda pega son las limitaciones de Android para según qué herramientas. Piensa en compiladores o en linters que necesitan piezas nativas. Android no es Linux de escritorio, usa su propia biblioteca C y no todo compila igual de fácil. Hasta el momento, para lo que he estado haciendo, que ha sido más bien poco, no he tenido problemas. Pero claro, ha sido poco. No quiero venderte una experiencia que todavía no he tenido a fondo.
Y aquí quiero ser claro con una recomendación. Si te animas con Neovim en Termux, mi consejo es que mires mi repositorio de configuración y veas cómo lo tengo montado. Instalas lo que allí hay, ves cómo funciona, y si no te gusta, lo desinstalas y ya está. No tiene más misterio que ese.
Conclusiones
Hagamos balance, que ya toca. Y te aviso de que este balance es incómodo, porque tengo el corazón partido y no pretendo disimularlo.
La primera conclusión es que las dos vías son, de verdad, dos filosofías opuestas. Visual Studio Code en remoto te da potencia, coherencia y un entorno idéntico estés donde estés. Neovim en Termux te da ligereza, independencia de la red y esa sensación de control total. Las ventajas de una son, casi punto por punto, las desventajas de la otra.
La segunda conclusión es que la gran baza del Visual Studio Code remoto es la portabilidad. Si te acostumbras a programar en la web, lo puedes hacer desde cualquier ordenador y siempre con tu configuración intacta, sin sincronizar nada. Eso, para alguien que trabaja en varios sitios, vale su peso en oro.
La tercera conclusión es que la experiencia de Neovim me ha parecido brutal. Es cómodo, es rápido y, una vez que has sincronizado bien tus dotfiles con yadm, instalar un segundo entorno es cuestión de minutos. La instalación, contra todo pronóstico, ha sido relativamente sencilla. Lo complicado es el ecosistema de complementos, no el editor en sí.
La cuarta conclusión es que todavía no puedo elegir. Dije que iba a seguir con este ensayo sobre mí mismo, utilizando mi propia persona como sujeto de observación, y eso es lo que voy a hacer. Voy a continuar con los dos entornos, a ver cómo me encuentro con cada uno, a ver si consigo resolver los problemas que vayan saliendo, y dentro de unos meses volveré para contarte exactamente cuál ha sido el resultado de la investigación. Yo he sido el único objeto de ensayo, así que la conclusión también será mía.
De momento, si tú programas también desde una tableta Android, cuéntame tu experiencia. Si conoces alguna otra herramienta para desarrollar en Android, dímela, porque sé que hay más opciones además de estas dos. Y si te apetece venirte al podcast a hablar del tema, te lo digo en serio, me parecería muy interesante. Las puertas están abiertas.
Más información
- code-server — Visual Studio Code en el navegador — el proyecto que sirve VS Code desde un servidor
- Visual Studio Code — web oficial — el editor y sus túneles remotos
- Termux — web oficial — la terminal con entorno Linux para Android
- Termux en F-Droid — la otra vía de instalación además de Google Play
- Termux Wiki — documentación de paquetes y configuración
- Neovim — web oficial — el editor que instalas dentro de Termux
- lazy.nvim — el gestor de complementos de Neovim que hace posible clonar y listo
- LazyVim — configuración de Neovim lista para usar, apoyada en lazy.nvim
- yadm — Yet Another Dotfiles Manager — para sincronizar tu configuración entre dispositivos
- Obsidian — las notas sincronizadas que me llevaron a la tableta
- Node.js — necesario para muchos linters dentro de Termux
- Rust — por si te animas a programar en Rust desde la tableta
Y con esto terminamos. Espero que el episodio te haya resultado útil y que, si estabas dándole vueltas a lo de programar desde la tableta, te haya aclarado por dónde empezar. Ya sabes que me puedes dejar tus preguntas para los episodios PYR en atareao.es/contactar, y que una valoración en iVoox, en Apple Podcasts o en Spotify me viene fantástico. Recuerda que ahora también puedes dejar tus comentarios en Spotify, así que hay una vía más de feedback que ya veremos si se usa. Este es un podcast de la red de Sospechosos Habituales, y puedes participar en ella entrando en wintablet.info y en Telegram, donde también tienes el grupo de Atareao con Linux. La semana que viene seguimos con esta serie sobre programación desde la tableta, porque esto era solo el principio, y tengo todavía mucho que contarte sobre el ensayo en el que yo soy el único sujeto. Recuerda que la vida son dos días y uno ya ha pasado, así que disfruta como si no hubiera mañana, si puede ser con Linux y con la tableta Android mejor que mejor. Un saludo y nos escuchamos el próximo lunes. 🐧