==============================================================================================
=        =========  ============================      ========================================
=  ===============  ============================  ===  =======================================
=  ===============  ============================  ====  ========================  ====  ======
=  =========   ===  =====  ===   ===  = ========  ===  ====   ===  = ====   ===    ==    ==  =
=      ====  =  ==    =======  =  ==     =======      ====     ==     ==  =  ===  ====  ======
=  ===========  ==  =  ==  =====  ==  =  =======  ===  ===  =  ==  =  ==     ===  ====  ===  =
=  =========    ==  =  ==  ===    ==  =  =======  ====  ==  =  ==  =  ==  ======  ====  ===  =
=  ========  =  ==  =  ==  ==  =  ==  =  =======  ===  ===  =  ==  =  ==  =  ===  ====  ===  =
=  =========    ==    ===  ===    ==  =  =======      =====   ===  =  ===   ====   ===   ==  =
==============================================================================================

Cápsula Gemini de Fabián Bonetti

Sobre GNU/Linux, Software Libre y demas

Revista ATDT Número 1 (Febrero 2021) 1-6-2021

  	_________________________________________________________________________________
  
	/* 
	   ATDT MAGAZINE :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	   :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	   :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[0x01-08]:
	   NUMERO 0x01::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	 		                 "programemos que hace bien" por littledeath
	*/

	Dificultad: mínima
	Requisitos: Saber algo de bash/linux/bsd/wsl2.

		             ,----------------,              ,---------,
		        ,-----------------------,          ,"        ,"|
		      ,"                      ,"|        ,"        ,"  |
		     +-----------------------+  |      ,"        ,"    |
		     |  .-----------------.  |  |     +---------+      |
		     |  |                 |  |  |     | -==----'|      |
		     |  |  PROGRAMEMOS,   |  |  |     |         |      |
		     |  |  MDFK!	  |  |  |/----|`---=    |      |
		     |  |  	          |  |  |   ,/|==== ooo |      ;
		     |  |                 |  |  |  // |(((( [33]|    ,"
		     |  `-----------------'  |," .;'| |((((     |  ,"
		     +-----------------------+  ;;  | |         |,"     
		        /_)______________(_/  //'   | +---------+
		   ___________________________/___  
		  /  oooooooooooooooo  .o.  oooo /, 
		 / ==ooooooooooooooo==.o.  ooo= // 
		/_==__==========__==_ooo__ooo=_/'   
	
	
	La verdad, si me pongo a pensar, escribir en una ezine en modo vieja
	escuela, usando un editor de texto ascii, de consola, lanzado desde un shell
	bash que a su vez está contenido en algo llamado Windows Terminal, que
	resulta que existe gracias a que finalmente Microsoft dijo "PARÁ, esta gente
	la tiene mega clara" (en directa referencia a la comunidad open source en
	general, licencias y peleitas taradas aparte) y zás, defecó Windows
	Subsystem for Linux, cuya versión 2 es pre-orgásmica .... [toma
	aire] y que en cualquier momento va a permitir codear para la UI de Windows
	sin tener un X 3rd party instalado... [toma mas aire]... LA VERDAD QUE TODO
	ES CULPA DE LOS BBS.
	
	Y saben por qué? Porque conectarme a esos mundos, porque cada BBS era y es
	un mundo, y en mi caso desde MS-DOS, luego Linux (historia aparte)... es sin
	lugar a dudas la fuente inagotable de excelentes recuerdos que hoy me empuja
	a escribir acá.
	
	Pero, óh, que carajo tiene eso que ver con el título del artículo?
	
	Me pa que es bastante obvio... si pasaste por ese camino.
	
	Programar, BBS, programar más, Linux, Programar hasta el infinito. 
	Programar hace bien, si te gusta HACER que pasen cosas (con los ataques que
	hay hoy...  eso de hacer explotar cosas por el aire te lo hace pensar dos
	veces, no?  y mirá, en los 80s y 90s se discutia si podiamos afectar el
	hardware desde código [quemar pixels!]).
	
	
	Creeme, programar te va a hacer bien.  No importa la edad que tengas ni tu
	background técnico (si estás leyendo esto y no sos un autodenominado
	nerd/geek/etc, seguro sos hij@ de uno).
	
	Pretendo escribir una serie de artículos que los introduzcan en el mundo de
	la programación en Python, con la mirada puesta en la nostalgia por los BBS.
	
	Vamos a hacer un BBS, desde cero. (Sin la parte de modems, but who knows?)
	
	Empezamos?
	
	
	[=-------------------------------------------------------------------------=]
	
	
	A la hora de sentarse a programar algo, yo paso por un proceso de
	abstracción muy particular.
	
	Básicamente, diseño todo el sistema en la cabeza. Y cuando finalmente me
	siento a programar, lo hago con una relativa claridad, sabiendo para que 
	lado quiero ir, y principalmente con orden.
	
	Y por esto es que todos los grandes proyectos de software comienzan con un
	deseo o necesidad, luego una etapa de analisis técnico-funcional que
	establece las tecnologías a utilizar, metodología, etapas, procesos
	adicionales requeridos (por ejemplo, en el caso de una migración de datos),
	etc.
	
	Tratemos de hacer algo así.
	
	
	Un BBS es un sistema que permite al usuario:
	
	* Conectarse
	* Registrarse/Identificarse
	* Interactuar con diversos modulos como foros, correo, chat, juegos,
	  oneliners, etc.
	* Subir/bajar archivos a diversas áreas (si, esto podria ser otro módulo
	  pero como implica una interacción específica del lado del usuario, lo
	  describo aparte)
	
	* Visualmente, soportar ANSI para colorcitos, posicionamiento del cursor,
	  limpiado de pantalla.
	
	Adicionalmente, el operador del sistema (Sysop), debe poder:
	
	* Configurar parámetros operativos del BBS [la registracion está abierta? 
	  que nivel se le da a los nuevos usuarios?  que permisos otorgan los
	  niveles?
	* Comunicarse directamente con el usuario en tiempo real
	* Utilizar privilegios [moderación de mensajes/usuarios]
	* Ejecutar tareas de mantenimiento [limpieza, optimización, promoción de
	  usuarios].
	
	... entre otras cosas.
	
	No todas estas funciones son deber del software principal del BBS, más
	adelante veremos si vale la pena programar el servidor telnet o no.
	
	Teniendo esos requerimientos en la cabeza, podemos elejir o plantear diversas
	tecnologías que nos pueden ayudar.
	
	El primer paso es seleccionar el o los lenguajes de programación a utilizar
	en base al contexto de ejecución.  Al ser un BBS, asumimos que se va a
	ejecutar en un sistema operativo moderno, multiusuario/multitarea [a fin de
	cuentas, no vamos a programar para MS-DOS, aunque definitivamente seria
	interesante no?], que nos permita implementar el BBS en un server hogareño o
	incluso en la nube.
	
	* SISTEMA OPERATIVO: Linux, *BSD
	
	* TECNOLOGIAS: - No esperamos crecimiento desmedido, por lo cual multiples
	bases de datos sqlite podrian servir para almacenar sysops, usuarios, foros
	[una base por foro].  - Para la comunicación entre instancias del BBS [o
	sea, cada usuario conectado] podriamos utilizar algun tipo de Queue de
	mensajeria que soporte asincronicidad y señales.  - Necesitamos soportar
	telnet en modo 'servidor', dado que hoy día casi todos los BBS en existencia
	son accesibles via telnet.
	
	* LENGUAJE DE PROGRAMACION: Python 3 (podriamos usar go, C, rust, nim
	también, entre decenas de otras opciones geniales.
	
			                  ##   ###                   
			                 ##    ##                    
			######  ##  ## ######  #####   #### ## ###   
			 ##  ## ##  ##   ##    #   ## ##  ## ##  ##  
			 ##  ## ##  ##   ##    ##  ## ##  ## ##  ##  
			 #####   #####   ##    ##  ## ##  ## ##  ##  
			 ##         ##    ### #### ### #### #### ###
			####    #####                            
		
	No te preocupes si algo de esto no lo conocés, vamos a ir explicando de a poco.
	
	En esta primera entrega, vamos a codear algo que, al ejecutarlo, nos muestre
	algun mensaje en pantalla, usando secuencias ANSI.
	
	
	[=-------------------------------------------------------------------------=]
	
	NOTA IMPORTANTE: Python es un lenguaje de alto nivel, hermoso, con una
	comunidad genial y muchisimos modulos, librerias, ejemplos y aplicativos. 
	Lógicamente, si buscamos vamos a encontrar incluso software de BBS, servers
	de telnet y todo lo que necesitemos.  Les dejo algunos links de ese estilo
	que, si ya saben python y tienen ganas de ponerse a hacer algo sin tener que
	ir 'de a poco', lo puedan hacer:
	
	* telserv:
	  https://pypi.org/project/telserv/0.1/
	
	* Guia CodeProject:
	  https://www.codeproject.com/Articles/173416/A-Simple-Telnet-Server-in-Python
	
	* telnetlib asyncio: https://pypi.org/project/telnetlib3/
	
	* Otra libreria de server telnet, piola:
	  https://github.com/ianepperson/telnetsrvlib
	
	Si quieren ver como se desarrolla un BBS moderno usando Node.js por ejemplo,
	no dejen de revisar enigma 1/2: https://enigma-bbs.github.io/
	
	[=-------------------------------------------------------------------------=]
	
	
	Comencemos por crear la base de nuestro BBS. Sugiero utilicen Linux, *BSD.
	En mi caso estoy usando WSL2 desde Windows 10, donde tengo un Ubuntu.
	
	--> SOURCE: bbs01.py <------------------------------------------------------
	
	00 #!/usr/bin/env python3
	01 
	02 def main():
	03     print('BBS01 - Tutorial Script Python de BBS - 0x01')
	04 
	05 
	06 # Ejecutar main() si este .py es ejecutado desde el shell
	07 if __name__ == '__main__':
	08     main()
	
	----------------------------------------------------------------------------
	
	Ahora desde el shell:
	
	src $ chmod +x bbs01.py
	src $ ./bbs01.py
	BBS01 - Tutorial Script Python de BBS - 0x01
	src $
	
	
	Como ven, súper útil. :P - Que vemos allí?
	
	a) Linea 00: El código a partir de linea 1 se interpreta por python3 en un
	entorno modificado (es mejor usar /usr/bin/env python3 que /usr/bin/python3
	directamente).  Este entorno modificado lo crea el aplicativo "env", y
	pueden revisar su breve página del manual con "man env".
	
	b) Linea 02: definicion de la función a la que le pusimos 'main' de nombre. 
	Esta funcion tiene una única instrucción, que es un simple print.  Nótese
	que hay 4 espacios (o un TAB si es que prefieren usar tabs, yo prefiero
	espacios).  Todo lo que a partir de ese def continue con 4 espacios, (u 8,
	etc, ya verán) pertenece a main().
	
	c) Linea 06: un comentario - Siempre con # al comienzo de la linea.  Se
	pueden poner comentarios al final de una sentencia, ya veremos.
	
	d) Linea 07: se ejecutará la linea 08 (llamada a la funcion main()) siempre
	que la variable especial __name__ tenga el valor (tambien especial)
	'__main__'.  - Nótese otra vez el uso de los 4 espacios en la línea 08.  Es
	igual que cuando definimos una función, solo que en este caso en vez "def"
	es un if.
	
	
	La verdad, nuestro primer script no hace nada útil, lo que nos lleva a
	investigar que cosas piolas nos da el ecosistema de Python.  Les dejo unos
	links:
	
	* Cosas que Python trae nativamente (apunto a la ultima version, pero
	  lógico, si el python que tienen disponible es mas viejo, pueden ajustar
	  directo desde la web).  Si UNICAMENTE usasemos funcionalidad de la
	  Libreria Estándar, no seria necesario instalar nada más. 
	  https://docs.python.org/es/3/library/
	
	* Libreria SQLITE3, parte de la Libreria Estándar de Python:
	  https://docs.python.org/es/3/library/sqlite3.html
	
	* Repositorio Pypi, permite buscar y con la tool pip instalar librerias
	adicionales, por ejemplo, alguna para servidor de telnet:
	
	  https://pypi.org/search/?q=telnet+server
	
	Ahora, si nos ponemos a pensar, necesitamos verdaderamente un servidor
	telnet?  No es un BBS simplemente un tipo de shell especial?  Quizá valga la
	pena aprovechar alguno de los tantos telnet servers disponibles en sistemas
	tipo unix...
	
	Nota curiosa: Aquellos que hayan sido usuarios MP OnLine!  recordarán que
	antes de ingresar el nombre de usuario y clave, se debia indicar el
	servicio, y uno ponia MP, o BBS o algo así.
	
	Esto es porque ese era un USUARIO sin clave, que ejecutaba el shell de BBS. 
	Cuando nos podia el usuario, efectivamente ya estabamos ingresados en el
	sistema Unix remoto con el usuario "MP" (el del prompt Servicio:), y listo.
	
	Por tanto, y para simplificar el desarrollo y depuración, continuaremos
	desarrollando este script de BBS en Python asumiendo que será el SHELL con el
	que el o los usuarios (dependiendo del esquema de autenticación que usemos)
	se encontrarán al ingresar al sistema.
	
	Adicionalmente, esto nos permitiria, por ejemplo, tener un script para
	registración que se encuentre separado de los archivos y procesos del BBS (=
	usuarios registrados y autorizados).
	
	Para finalizar, modificaremos nuestro bbs01.py para que incorpore algunas
	secuencias ANSI:
	
	
	--> SOURCE: bbs01b.py <------------------------------------------------------
	
	#!/usr/bin/env python3
	
	
	def main():
	    print('\033[2J\033[0;0H')  # limpiar pantalla
	    print('\033[0;0H')  # ir a esquina superior izquierda
	    print('\033[1;40;32m')  # Verde (32) brillante (1), negro de fondo (40)
	    print('Bienvenido al BBS Pythonico ATDT!')
	    print('\033[0;37m\n')  # Sacar brillo (0), gris (37)
	
	
	# Ejecutar main() si este .py es ejecutado desde el shell
	if __name__ == '__main__':
	    main()
	
	----------------------------------------------------------------------------
	
	Si ahora lo ejecutan, verán como se limpia la pantalla y aparece el mensaje
	en verde brillante.
	
	TAREA PARA EL HOGAR: Investigar como leer el contenido de un archivo y
	mostrarlo en pantalla. Usaremos esto para leer algún .ANS que actuará de
	"intro" para nuestro bbs. Invito al resto del equipo de ATDT y lectores
	a enviarnos intros .ans
	
	HINT: buscar ejemplos que utilicen el keyword "with" para el metodo open().
	
	
	PROXIMOS TEMAS:
	
	* Librerias de templating
	* Librerias para manejar cursores y poder armar menues
	* Criptografía
	
	A programar que hace bien!!!

	_________________________________________________________________________________
	!EOF -> atdt-zine-0x01-08.txt

atdt-zine-0x09

Volver

© 2021