Entorno de Desarrollo
Para la programación competitiva en C++
En Android 12 y posteriores, suele haber el error “Process completed (signal 9)” dentro de termux. Para solucionarlo, favor de ir a este blog por Andronix
Tabla de Contenidos:
- Conectar Git con GitHub
- Compiladores en línea (Online)
- IDEs en la nube (Cloud)
- VScode IDE
- Instalar el compilador en Windows
- Instalar el compilador en MacOS
- Entorno de desarrollo en Android
- Entorno de desarrollo en iOS/iPadOS
- Referencias
Conectar Git con GitHub
- Primero crearemos una cuenta de GitHub https://github.com/signup
- Después creamos un repositorio (proyecto) en https://github.com/new
- Luego descargamos git desde la pagina oficial https://git-scm.com/downloads o con el gestor de paquetes de cada sistema operativo
- En Windows en
Powershell con el comando:
1
winget update ; winget install -e --id Git.Git
- En MacOs con el gestor de paquetes
homebrew:
1
brew update && brew install git
- En Android con la terminal termux y el comando:
1
pkg update && pkg install git
- En iOS/iPadOS con la terminal
ish y los comandos:
1 2 3
apk update apk add git openssh ssh-keygen -A
- En Windows en
- Si se esta en Windows, revisa qué este actualizado, si no esta en la ultima versión, comprobamos que esta instalado el cliente de OpenSSH.
- En una terminal creamos nuestro usuario local de git (es opcional que los datos sean iguales a los de GitHub) con los comandos:
1 2
git config --global user.name "Usuario" git config --global user.email "correo@ejemplo.com"
- comprobamos nuestros datos con el comando:
1
git config --list
- En la misma terminal creamos una llave pública de ssh:
1
ssh-keygen -t ed25519 -C "correo@ejemplo.com"
- Copiamos los datos del archivo generado en Windows en la ruta:
C:\Users\%USERNAME%\.ssh\id_ed25519.pub
(para windows tiene el icono de Microsoft publishery se puede abrir con el bloc de notas ) , para los demás sistemas operativos suele estar en
~/.ssh/id_ed25519.pub
y lo conectamos con nuestra cuenta de GitHub a través de https://github.com/settings/ssh/new, dándole un nombre (puede ser el modelo de tu dispositivo) y pegando la los datos copiados (llave). - Por último descargamos nuestro repositorio, en una terminal navega hacia tu carpeta de destino, yo recomiendo la carpeta de Documentos (Documents) o Escritorio (Desktop).
Mucho ojo 👁️ en Windows, estas carpetas suelen estar bajo
C:\Users\%USERNAME%\One Drive\
1
git clone git@github.com:"Usuario de GitHub"/"Proyecto".git
Una vez ya tengamos conectado nuestra cuenta y hallamos descargado el proyecto, los tres comandos principales de git que usaremos en la terminal son:
1
2
3
git commit -m "mensaje del commit" # cambios locales a "pushear"
git push # pusheas los cambios junto con el commit hacia GitHub
git pull # descargas los cambios actuales desde GitHub
Compiladores en línea (Online)
La ventaja de usar un IDE en línea es la disponibilidad en cualquier dispositivo, la desventaja evidentemente es que al no tener conexión a internet no puedes utilizarlo aparte de que en algunos deberás guardar tus códigos manualmente en algún otro medio o plataforma.
- onlinegdb este es el compilador en línea recomendado por el club, debido a que permite guardar los códigos al iniciar sesión junto con la compatibilidad completa con nuestra plantilla de C++
- Programiz es un compilador en línea para acompañar sus cursos de programación
- cpp.sh la ventaja de este editor es poder comparar las diferencias entre distintos estándares de C++ y distintos niveles de optimización del compilador, lo único malo es que no permite directivas
#pragma
ni la librería<bits/stdc++.h>
- pythontutor este es un muy buen debuger en línea ya que contiene representaciones gráficas para visualizar nuestros códigos y también permite el uso de la librería
<bits/stdc++.h>
, lo malo es que no tiene entrada de usuario (no permitestd::cin
), junto con otras cosas incompatibles
IDEs en la nube (Cloud)
- Replit es una plataforma para colaborar en tiempo real con código, la desventaja es que el plan gratuito solo te permite tener 3 proyectos públicos
- Google Colab es un servició totalmente gratuito por parte de Google para usar Jupyer Noteeboks, para ejecutar C++ tendremos que usar el comando
%%writefile
para escribir hacia archivos, como lo seria el archivoin.txt
donde pondremos todas las entradas del programa (necesario para la funciónfreopen
) y el archivo.cpp
el cual compilaremos con el comando!g++
y ejecutaremos de esta manera!./a.out
- Github codespaces es VScode dentro de un servidor de Linux en la nube, compatible con todas las extensiones que desees.
- GitHub Free 15 GB de espacio al mes con 120 horas
- GitHub Pro 20 GB de espacio al mes con 180 horas
Recuerda que tienes acceso de forma gratuita a GitHub Pro por ser estudiante
- cs50.dev es GitHub codespaces gratuito y sin limite de tiempo, hosteado por la universidad de Harvard para el acompañamiento de sus cursos, este es el editor en la nube recomendado por el club.
cs50.dev también es de mucha utilidad para correr otros IDEs en la nube como lo es el caso de Rstudio para R
VScode IDE
No confundir con Visual Studio. VScode es el editor recomendado por el Club, esto debido principalmente por su amplio catalogo de extensiones. Para instalarlo podemos hacerlo desde su pagina web o usando el gestor de paquetes
- En Windows en
Powershell con el comando:
1
winget install -e --id Microsoft.VisualStudioCode --override '/SILENT /mergetasks="!runcode,addcontextmenufiles,addcontextmenufolders"'
- En MacOs con el gestor de paquetes
homebrew:
1
brew install --cask visual-studio-code
- En Android con la terminal termux hay dos opciones:
- Usar vscode-server (aplicación en línea similar a https://vscode.dev/, la cual tiene extensiones limitadas) que será accesible en cualquier navegador del dispositivo en las urls localhost:8080 o 127.0.0.1:8080, se instala con los comandos:
1 2
pkg update && pkg install tur-repo code-server code-server # este es el comando para ejecutar el servidor de vscode
- con el escritorio nativo con los comandos:
1
pkg update && pkg install tur-repo code-oss
- Usar vscode-server (aplicación en línea similar a https://vscode.dev/, la cual tiene extensiones limitadas) que será accesible en cualquier navegador del dispositivo en las urls localhost:8080 o 127.0.0.1:8080, se instala con los comandos:
- En iOS/iPadOS no se puede amenos que se use un escritorio emulado
Extensiones para VScode
C/C++ esta es la extensión necesaria para poder correr código de C++ dentro de VScode
code runner esta es una extensión opcional que acelera el proceso de compilación en VScode
Error lens esta extensión nos muestra los errores que va dando el IDE o el compilador.
Prettier esta extensión le da formato a nuestro código al presionar la combinación de teclas
shift + alt + F
Competitive Programming Helper esta es la extensión para poder, probar los códigos antes de publicar y también podremos subir directamente los códigos a codeforces de una manera muy rápida
Temas recomendados para VScode:
Integrar Codeforces con VScode
- Primero en VScode tenemos que tener la extensión Competitive Programming Helper (CPH)
- Después cambiaremos el lenguaje por defecto a C++ y agregaremos la ruta (ubicación) de la plantilla del club a la configuración de la extensión Competitive Programming Helper (CPH) en VScode
Para firefox: Agrega las extensiones: competitive companion y CPH Submit
Para navegadores basados en chromium ( Google Chrome, Microsft Edge, Opera, Brave, etc.): Agrega las extensiones: competitive companion y CPH Submit
Para usarlas, ten tu sesión de codeforces activa y también ten abierto VScode, cuando abras un problema en codeforces haz click en la extensión de competitive companion (el circulo verde con una cruz), después cámbiate a VScode donde veras unas opciones donde eligieras cpp, y listo podrás pobrar y publicar tu código desde vscode.
Instalar el compilador en Windows
- Primero tenemos que descargar el gestor de paquetes
msys2
desde su página oficial www.msys2.org/ o desde el gestor de paquetes integrado en Windowswinget
a través de una terminal (Powershell), con el comando:
1
winget update ; winget install -e --id MSYS2.MSYS2
- Ya instalado, abrimos la terminal de MSYS2 UCRT64
y ejecutamos el siguiente comando (acepta presionando
Enter
2 veces):
1
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
La descarga puede fallar en la red institucional. Si ocurre un fallo, intenta de nuevo o prueba en otra red Wi-Fi.
- Ya terminada la instalación del compilador, procederemos a agregar el compilador al
path
. Para ello, buscamos alguna de estas palabras clave: “variables”, “path”, “variables del sistema” en el buscador de Windows y abriremos la aplicación con icono de una computadora con una palomita, allí abriremos las variables y editaremos el path agregando la dirección:
C:\msys64\ucrt64\bin
.
- ya instalada la extensión C/C++ en VScode iremos hacia las configuraciones de la extensión.
- Ahi buscamos la opción que diga “compiler path”, la cual nos mandara nos manda al archivo
settings.json
:
- Agregaremos estas líneas a los corchetes internos, teniendo cuidado de no borrar otras configuraciones.
1 2 3 4 5 6 7
"C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin", "C_Cpp.clang_format_path": "C:/msys64/ucrt64/bin", "code-runner.executorMap": { "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -g && $dir$fileNameWithoutExt" }
- Con esto ya podremos compilar y ejecutar el código dentro de VScode dándole click al símbolo de reproducir en la parte superior derecha del editor o con la extensión code runner presionando las teclas
ctrl + alt + N
.
Instalar el compilador en MacOS
con gcc/g++
- Primero, si no lo tenemos instalado ya, procedemos a instalar el gestor de paquetes de la comunidad para MacOs
homebrew abriendo una terminal y ejecutando el comando, para después dar varios enters:
1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- después en instalamos el compilador gcc (el cual incluye g++ y la libreria
<bits/stdc++.h>
)1 2 3 4
brew analytics off brew update && brew install gcc sudo rm /usr/local/bin/g++ sudo ln -s $(ls /usr/local/bin/g++-*) /usr/local/bin/g++
- Al final tenemos que recargar la terminal y/o Vscode, para ver reflejados los cambios
con Clang (Xcode)
- Este es el compilador por defecto en
Xcode y para instalar Clang (LLVM) ejecutaremos este comando en la
terminal:
1
xcode-select install
- Clang no incluye la librería
<bits/stdc++>
, necesaria para usar la plantilla del club, por lo que tendremos que instalarla manualmente con los siguientes comandos:1 2 3
mkdir /usr/local/include/bits echo '#define _GLIBCXX_HOSTED 1' > /usr/local/include/bits/stdc++.h curl -sS https://raw.githubusercontent.com/gcc-mirror/gcc/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h >> /usr/local/include/bits/stdc++.h
Recuerda comentar o eliminar las líneas
#pragma GCC optimize("Ofast,unroll-loops")
y#pragma GCC target("avx2")
de la plantilla de C++, debido a qué estas no son compatibles con Clang y darán un error de compilación!
Entorno de desarrollo en Android
Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador OTG o con un adaptador a USB C.
terminal nativa + editor de código
Termux es la terminal nativa de Android, esta disponible en la PlayStore, pero suele estar desactualizada por lo que recomiendo descargarlo directamente en GitHub o a través de la tienda open-source fdroid
Dentro de la terminal para poder instalar el compilador ejecutamos los siguientes comandos:
1
2
pkg update && pkg upgrade
pkg install build-essential
Para compilar un archivo de C++, primero navegamos a la carpeta donde este el archivo, recomiendo guardarlos en la carpeta de descargas del dispositivo (downloads), después compilamos el archivo con la extensión .cpp
y para ejecutar el archivo resultante lo hacemos con ./a.out
:
1
2
3
cd ~/storage/downloads/
g++ archivo.cpp
./a.out
Para los editores de código el club recomienda cualquiera de estas dos opciones:
También recomiendo usar el explorador de archivos por defecto en Android “files” ya que este te permite acceder fácilmente a los archivos dentro de termux, si no se tiene esta aplicación instalada se puede instalar esta versión similar: files por marcapps
escritorio nativo
Esto es recomendado para dispositivos de gama alta o dispositivos de más reciente y para usuarios un poco más avanzados, se necesitara instalar termux-x11 y seguir la guía de instalación de su GitHub y para el escritorio se ocupa seguir esta guía por DroidMaster aparte que tendrás que instalar extensiones manualmente para code-oss (VScode de termux).
Entorno de desarrollo en iOS/iPadOS
Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador/dongle lighting o con un adaptador/dongle a USB C.
terminal emulada + editor de código
iOS no tiene una terminal nativa sin jailbreak, por lo qué la mejor opción es usar la terminal emulada:
ish con la que podremos compilar nuestros códigos de forma local.
Para descargar el compilador, dentro de ish ejecutaremos los siguientes comandos:
1
2
apk update && apk upgrade
apk add build-base
para compilar código es tan fácil como agregar los archivos .cpp
a la carpeta root
desde el explorar de archivos de iOS (files) dentro de la carpeta de iSH y ejecutarlos con ./a.out
1
2
g++ archivo.cpp
./a.out
Para el editor de código el club recomienda:
escritorio emulado
- Esto se hace a través de
UTM SE y es recomendado especialmente para iPads, ya que la aplicación corre algo lento debido a que es emulado, pero para un mejor rendimiento recomiendo usar Debian 11 (LXDE) y para instalar VScode recomiendo seguir esta guía oficial
se puede llegar a un mejor rendimiento usando un tipo de para-virtualización con SPICE y JIT con TGC, pero ocupa un conociemiento más avanzado y en especial ocupa más pasos
Referencias
- Coder. (s.f). Termux. Recuperado de https://coder.com/docs/code-server/termux
- GitHub. (s.f.). About billing for GitHub Codespaces. Recuperado de https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces
- Moin, S. (2019). How to include bits/stdc++.h header file on macOS. Recuperado de https://codeforces.com/blog/entry/70957
- Replit. (s.f). Build, deploy, and scale at any stage of growth. Recuperado de https://replit.com/pricing