Copy Link
Add to Bookmark
Report

ATDT magaZINE 0x01-08

eZine's profile picture
Published in 
ATDT Magazine
 · 3 years ago

  

____________________________________________________________________________

/*
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

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT