mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de...

536

Transcript of mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de...

Page 1: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez
Page 2: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad deCiencias, UNAM

Antonio Carrillo Ledesma y Karla Ivonne González RosasFacultad de Ciencias, UNAM

http://academicos.fciencias.unam.mx/antoniocarrillo

Una copia de este trabajo se puede descargar de la página:https://sites.google.com/ciencias.unam.mx/acl/en-desarrollo

Con�namiento 2020-2021, Versión 1.0�1

1El presente trabajo está licenciado bajo un esquema Creative CommonsAtribución CompartirIgual (CC-BY-SA) 4.0 Internacional. Los textos que compo-nen el presente trabajo se publican bajo formas de licenciamiento que permiten lacopia, la redistribución y la realización de obras derivadas siempre y cuando éstasse distribuyan bajo las mismas licencias libres y se cite la fuente. ¡Copia este libro!... Compartir no es delito.

Page 3: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Índice

1 Introducción 61.1 Software Propietario y Libre . . . . . . . . . . . . . . . . . . . 6

1.1.1 Software Propietario . . . . . . . . . . . . . . . . . . . 71.1.2 Software Libre . . . . . . . . . . . . . . . . . . . . . . . 8

1.2 El Cómputo en las Carreras de Ciencias . . . . . . . . . . . . 101.2.1 Algunos Cursos que Usan Cómputo . . . . . . . . . . . 13

1.3 Paquetes de Cómputo de Uso Común . . . . . . . . . . . . . . 161.3.1 Sistemas Operativos . . . . . . . . . . . . . . . . . . . 201.3.2 Paquetes de Cálculo Numérico . . . . . . . . . . . . . . 201.3.3 Paquetes de Cálculo Simbólico . . . . . . . . . . . . . . 211.3.4 Paquetes Estadísticos . . . . . . . . . . . . . . . . . . . 221.3.5 Paquetes O�máticos . . . . . . . . . . . . . . . . . . . 231.3.6 Lenguajes de Programación y Entornos de Desarrollo . 231.3.7 Otros Programas de Cómputo . . . . . . . . . . . . . . 23

2 Sistemas Operativos 252.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.2 UNIX y BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.3 Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.4 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.5 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.6 Chromebook y Chrome OS . . . . . . . . . . . . . . . . . . . . 532.7 Otros Sistemas Operativos . . . . . . . . . . . . . . . . . . . . 56

3 Paquetes de Cálculo Numérico 603.1 MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.2 Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.3 FreeMat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.4 Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.5 Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.6 Scipy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.7 Ventajas, Desventajas y Carencias . . . . . . . . . . . . . . . . 703.8 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

[email protected] 1 Antonio Carrillo Ledesma, Et alii

Page 4: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

4 Paquetes de Cálculo Simbólico 754.1 Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . 784.2 Maple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.3 Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.4 Ventajas, Desventajas y Carencias . . . . . . . . . . . . . . . . 864.5 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5 Paquetes Estadísticos 885.1 SPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2 R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.3 SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.4 Ventajas, Desventajas y Carencias . . . . . . . . . . . . . . . . 935.5 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6 Paquetes O�máticos 956.1 Hojas de Cálculo . . . . . . . . . . . . . . . . . . . . . . . . . 966.2 Bases de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . 986.3 Herramientas de Presentación y Multimedia . . . . . . . . . . 1006.4 Procesamiento de Imágenes . . . . . . . . . . . . . . . . . . . 1016.5 Procesamiento de Textos . . . . . . . . . . . . . . . . . . . . . 1026.6 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7 Lenguajes de Programación 1057.1 Conceptos Transversales . . . . . . . . . . . . . . . . . . . . . 1147.2 Algo de Programación . . . . . . . . . . . . . . . . . . . . . . 1217.3 Introducción a los Paradigmas de Programación . . . . . . . . 1337.4 Errores de Redondeo y de Aritmética en la Programación . . 1427.5 Trabajando con Punto Flotante . . . . . . . . . . . . . . . . . 1537.6 Documentación del Código Fuente . . . . . . . . . . . . . . . . 162

7.6.1 Documentar en C, C++ y Java . . . . . . . . . . . . . 1637.6.2 Documentar en Python . . . . . . . . . . . . . . . . . . 172

8 Entornos de Desarrollo y Herramientas de Programación 1768.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788.2 C y C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1868.3 Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1938.4 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1988.5 Herramientas de Programación . . . . . . . . . . . . . . . . . 214

[email protected] 2 Antonio Carrillo Ledesma, Et alii

Page 5: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.1 ¿Qué es eso de ASCII, ISO-8859-1 y UTF-8? . . . . . 2208.5.2 Uso de Espacios o Tabuladores en Fuentes . . . . . . . 2248.5.3 Comparar Contenido de Fuentes . . . . . . . . . . . . . 2268.5.4 Astyle . . . . . . . . . . . . . . . . . . . . . . . . . . . 2268.5.5 Compilación y la Optimización del Ejecutable . . . . . 2288.5.6 Análisis de Rendimiento y Depuración . . . . . . . . . 2338.5.7 Mejora del Rendimiento en Python . . . . . . . . . . . 2378.5.8 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2438.5.9 Otras opciones . . . . . . . . . . . . . . . . . . . . . . 255

8.6 Programando Desde la Nube . . . . . . . . . . . . . . . . . . . 256

9 Bases de Datos 2609.1 Clasi�cación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2609.2 ¿Qué son las bases de datos SQL? . . . . . . . . . . . . . . . . 262

9.2.1 Lenguaje de de�nición de datos (DDL) . . . . . . . . . 2649.2.2 Lenguaje de manipulación de datos DML . . . . . . . . 265

9.3 ¿Qué son las bases de datos NoSQL? . . . . . . . . . . . . . . 2749.3.1 SQL en comparación con NoSQL . . . . . . . . . . . . 2789.3.2 SQL en comparación con Terminología NoSQL . . . . . 280

9.4 Programando en Diferentes Manejadores de Bases de Datos . . 2859.4.1 MySQL y MariaDB . . . . . . . . . . . . . . . . . . . . 2869.4.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . 2899.4.3 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . 2929.4.4 MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . 294

9.5 Programando desde la Web . . . . . . . . . . . . . . . . . . . 2979.5.1 MySQL y MariaDB . . . . . . . . . . . . . . . . . . . . 2979.5.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . 2989.5.3 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . 2999.5.4 MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . 300

10 Otros Programas de Cómputo 30310.1 Otros Programas Matemáticos . . . . . . . . . . . . . . . . . . 30310.2 Programas de Visualización y Gra�cación . . . . . . . . . . . . 30410.3 Navegadores Web . . . . . . . . . . . . . . . . . . . . . . . . . 30610.4 Compresores y Descompresores de Archivos . . . . . . . . . . 30710.5 Virtualización . . . . . . . . . . . . . . . . . . . . . . . . . . . 30910.6 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

[email protected] 3 Antonio Carrillo Ledesma, Et alii

Page 6: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

11 Seguridad, Privacidad y Vigilancia 31111.1 Amenazas a la Ciberseguridad . . . . . . . . . . . . . . . . . . 32511.2 Recomendaciones de Ciberseguridad . . . . . . . . . . . . . . . 330

11.2.1 Contraseñas Robustas . . . . . . . . . . . . . . . . . . 33111.2.2 Encriptar Discos o Archivos . . . . . . . . . . . . . . . 33311.2.3 Sistema Operativo . . . . . . . . . . . . . . . . . . . . 33711.2.4 Máquinas Virtuales . . . . . . . . . . . . . . . . . . . . 34011.2.5 Navegación Segura . . . . . . . . . . . . . . . . . . . . 34211.2.6 Banca en Línea Segura . . . . . . . . . . . . . . . . . . 34511.2.7 Uso Seguro de las Herramientas de la Nube . . . . . . 34611.2.8 Teléfonos Inteligentes y Tabletas . . . . . . . . . . . . . 34711.2.9 Redes Sociales . . . . . . . . . . . . . . . . . . . . . . . 35011.2.10Videoconferencias . . . . . . . . . . . . . . . . . . . . . 35511.2.11Seguridad de la Red . . . . . . . . . . . . . . . . . . . 35711.2.12Ataques con Técnicas de Inteligencia Social . . . . . . 362

11.3 Meltdown, Spectre y lo que se Acumule . . . . . . . . . . . . . 36311.4 Distribuciones de Linux «Seguras y para Penetración» . . . . 370

12 Consideraciones y Comentarios Finales 37812.1 Integración del Cómputo en las Carreras de Ciencias . . . . . 37912.2 Ventajas, Desventajas y Carencias del Software Libre . . . . . 38012.3 Comentarios Finales . . . . . . . . . . . . . . . . . . . . . . . 381

13 Apéndice A: Cómputo en Instituciones Educativas 384

14 Apéndice B: Software Libre y Propietario 38814.1 Software Libre . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

14.1.1 Tipos de Licencias . . . . . . . . . . . . . . . . . . . . 39114.2 Software Propietario . . . . . . . . . . . . . . . . . . . . . . . 39514.3 Implicaciones Económico-Políticas . . . . . . . . . . . . . . . . 396

15 Apéndice C: El Sistema GNU/Linux 40115.1 Sistema de Archivos y Estructura de Directorios . . . . . . . . 40615.2 Interfaz de Usuario . . . . . . . . . . . . . . . . . . . . . . . . 417

15.2.1 Interfaz Grá�ca de Usuario . . . . . . . . . . . . . . . . 41815.2.2 Línea de Comandos y Órdenes . . . . . . . . . . . . . . 422

15.3 Trabajando en Línea de Comandos . . . . . . . . . . . . . . . 42915.4 Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 464

[email protected] 4 Antonio Carrillo Ledesma, Et alii

Page 7: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

16 Apéndice D: Máquinas Virtuales 46816.1 Tipos de Máquinas Virtuales . . . . . . . . . . . . . . . . . . . 46916.2 Técnicas de Virtualización . . . . . . . . . . . . . . . . . . . . 46916.3 ¿Qué Necesito para Crear y Usar una Máquina Virtual? . . . . 47016.4 ¿Cómo Funciona una Máquina Virtual? . . . . . . . . . . . . . 47116.5 Aplicaciones de las Máquinas Virtuales de Sistema . . . . . . . 47516.6 Ventajas y Desventajas . . . . . . . . . . . . . . . . . . . . . . 477

16.6.1 Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . 47716.6.2 Desventajas . . . . . . . . . . . . . . . . . . . . . . . . 47916.6.3 Consideraciones Técnicas y Legales de la Virtualización 480

16.7 Máquinas Virtuales en la Educación, Ciencias e Ingeniería . . 48116.8 Acceso a Datos Desde una Máquina Virtual . . . . . . . . . . 48316.9 Aplicaciones y Paquetes Disponibles . . . . . . . . . . . . . . . 48516.10Desde la Nube . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

17 Apéndice E: Creación, Uso y Optimización de Máquinas Vir-tuales Usando QEMU/KVM 49217.1 Tipo de Virtualización Soportado por la Máquina Huésped . . 49517.2 Salida Grá�ca de la Virtualización Usando VNC . . . . . . . . 49917.3 Usando un Sistema Operativo Live como una Máquina Virtual 50117.4 Usando un Archivo ISO como una Máquina Virtual . . . . . . 50217.5 Creación de Máquinas Virtuales . . . . . . . . . . . . . . . . . 50317.6 Uso de Virtualización Dentro de Otra Virtualización . . . . . . 50617.7 Manipulación del Estado de la Máquina Virtual . . . . . . . . 50717.8 Optimización de Imágenes . . . . . . . . . . . . . . . . . . . . 507

17.8.1 Trabajar con una Imagen Virtual sin que se Altere . . 50817.8.2 Aumento de Desempeño . . . . . . . . . . . . . . . . . 508

17.9 Uso de Máquinas Virtuales de VirtualBox en KVM/QEMU . . 51217.10Conversión de Máquinas Virtuales a KVM/QEMU . . . . . . 51317.11Comunicación de las Máquinas Virtuales con el Sistema An-

�trión e internet . . . . . . . . . . . . . . . . . . . . . . . . . . 51717.12Signi�cado de las Banderas de /proc/cpuinfo . . . . . . . . . . 521

18 Bibliografía 527

[email protected] 5 Antonio Carrillo Ledesma, Et alii

Page 8: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

1 Introducción

La Facultad de Ciencias de la Universidad Nacional Autónoma de México esuna institución de educación superior que tiene comomisión formar cientí�cosen las áreas de biología, física y matemáticas; realizar investigación y sudifusión; hacer la divulgación que permita elevar sustancialmente la culturacientí�ca del país; y propiciar la vinculación con los sectores de la sociedad.El Departamento de Matemáticas de la Facultad de Ciencias atiende a las

carreras de Actuaría, Ciencias de la Computación, Matemáticas, Matemáti-cas Aplicadas y los cursos de Matemáticas de las demás carreras de la Fa-cultad (véase [1]), preparando alumnos que estudian, plantean, formulan yaplican modelos de contenido matemático, con el �n de proveer informaciónpara la planeación, previsión y la toma de decisiones, para resolver problemasEconómicos, Sociales y de Ciencias e Ingenierías.Por lo anterior, un eje fundamental de desarrollo, es el que se re�ere a la

formación en cómputo. Ante los retos que el vertiginoso y dinámico cambioenfrenta el mundo global en que vivimos, ante las exigencias de la sociedadde la información se requiere el manejo de las Tecnologías de la Informacióny de la Comunicación (TIC) por ello, el modelo educativo de cualquier ca-rrera universitaria y en particular las carreras en la Facultad de Ciencias dela UNAM, tiene la necesidad imperiosa de atender una formación computa-cional como parte integral de una formación omnilateral de los educandos;por ello, la Facultad de Ciencias cuenta, para lograr este objetivo, con asig-naturas que hacen uso de Laboratorios y Talleres de cómputo para ponerseal día en el manejo de esta importante herramienta. Los Laboratorios yTalleres de cómputo de los Edi�cios Tlahuizcalpan, Yelizcalli, Amoxcalli yen el Nuevo Edi�cio cuentan con el equipo y programas de cómputo quepermiten estar a la vanguardia y que facilitan el trabajo académico en lasmaterias que cursan los estudiantes.

1.1 Software Propietario y Libre

Con el constante aumento de la comercialización de las computadoras y surelativo bajo costo, las computadoras se han convertido en un objeto om-nipresente, ya que estas se encuentran en las actividades cotidianas de mi-llones de usuarios, en formas tan diversas como teléfonos celulares, tabletas,computadoras portátiles y de escritorio, etc.Las computadoras por si solas no resuelven los problemas para los que

[email protected] 6 Antonio Carrillo Ledesma, Et alii

Page 9: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

los usuarios las compran. El Software � Sistema operativo y los programasde aplicaciones� son los que realmente generan las soluciones al interactuaruno o más paquetes informáticos con los datos del usuario. También, escomún que al comprar una computadora, en el costo total, se integre el delsistema operativo, aplicaciones o�máticas y de antivirus, sean estos usadospor el usuario o no; y en la mayoría de los casos no es posible solicitar queno sean incluidos en el costo de la computadora.Por otro lado, el Software comercial suele quedar obsoleto muy rápido, ya

que constantemente se le agregan nuevas funcionalidades al mismo y estas engeneral son vendidas como versiones independientes de la adquirida original-mente. Esto obliga al usuario � si quiere hacer uso de ellas� a comprar lasnuevas versiones del Software para satisfacer sus crecientes necesidades infor-máticas. Por lo anterior y dada la creciente complejidad de los paquetes decómputo y el alto costo de desarrollo de aplicaciones innovadoras, en muchoscasos, el costo total del Software que comúnmente los usuarios instalan � yque no necesariamente usan las capacidades avanzadas del programa, por lascuales el Software tiene un alto costo comercial� en su computadora, sueleser más caro que el propio equipo en el que se ejecutan.

1.1.1 Software Propietario

En entornos comerciales, es posible por parte de la empresa, adquirir y man-tener actualizado el Software necesario para sus actividades comerciales, puesel costo del mismo se traslada al consumidor �nal del bien o servicio que laempresa proporcione. En entornos educativos, de instituciones sin �nes lu-crativos e incluso, el sector gubernamental, no se cuenta con los recursosnecesarios para adquirir y mantener actualizado el Software necesario paratodas y cada una de las aplicaciones usadas en las computadoras, ya queen general, las licencias de uso del Software propietario son asignadas enforma individual a cada computadora y no es fácilmente transferible a otracomputadora.Dado que existe una gran demanda de programas de cómputo tanto de

uso común como especializado por nuestras crecientes necesidades informáti-cas, y por la gran cantidad de recursos económicos involucrados, existe unagran cantidad de empresas que tratan de satisfacer dichas necesidades, paragenerar y comercializar, además de proveer la adecuada documentación yopciones de capacitación que permita a las empresas contratar recursos hu-manos capacitados.

[email protected] 7 Antonio Carrillo Ledesma, Et alii

Page 10: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Por otro lado, generalmente se deja la investigación y desarrollo de pro-ductos computacionales nuevos o innovadores a grandes empresas o Universi-dades � que cuenten con la infraestructura y el capital humano, que muchasveces es de alto riesgo� con la capacidad de analizar, diseñar y programarlas herramientas que requieran para sus procesos de investigación, enseñanzao desarrollo.Existe hoy en día, una gran cantidad de paquetes y sistemas operativos

comerciales de Software propietario (véase apéndice 14.2) que mediante unpago oneroso, permiten a los usuarios de los mismos ser productivos en todasy cada una de las ramas comerciales que involucra nuestra vida globalizada,pero el licenciamiento del uso de los programas comerciales es en extremorestrictivo en su uso y más en su distribución.

1.1.2 Software Libre

El Software libre (véase apéndice 14.1) son programas de cómputo � el sis-tema operativo, paquetes de uso común y especializados� , desarrollados porusua-rios y para usuarios que, entre otras cosas, comparten el código fuente,el programa ejecutable y dan libertades para estudiar, adaptar y redistribuira quien así lo requiera el programa y todos sus derivados.El Software libre es desarrollado por una creciente y pujante comunidad

de programadores y usuarios que tratan de poner la mayor cantidad de pro-gramas a disposición de todos los interesados, tal que, le permitan al usuariopromedio sacar el mayor provecho de la computadora que use.

¿Qué es el Software Libre? La de�nición exacta y sus diversas variantesse plasman en el apéndice 14, pero podemos entender el espíritu a través delos documentos de la fundación para el Software libre (véase [19], [20], [12],[13], [11] y [15]). El Software libre concierne a la libertad de los usuarios paraejecutar, copiar, distribuir, cambiar y mejorar el Software:

0. La libertad de usar el programa, con cualquier propósito.

1. La libertad de estudiar cómo funciona el programa y modi�carlo, adap-tándolo a tus necesidades.

2. La libertad de distribuir copias del programa, con lo cual puedes ayudara tu prójimo.

[email protected] 8 Antonio Carrillo Ledesma, Et alii

Page 11: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

3. La libertad de mejorar el programa y hacer públicas esas mejoras a losdemás, de modo que toda la comunidad se bene�cie.

La lista de proyectos de este tipo es realmente impresionante (véase [19],[18] y [16]). Algunos han conseguido un uso y alta calidad, por ejemplo elcompilador GCC (véase [21]), el Kernel de Linux (véase [22]) y el sistemaoperativo Debian GNU/Linux (véase [23]) y Android (véase [6]). Mientrasque otros proyectos han caído en el olvido, pero en la gran mayoría, se tienecopia del código fuente que permitiría a quienes esten interesados en dichoproyecto, el poder revivirlo y en su caso ampliarlo.La característica más importante que aparece típicamente en un proyecto

de este tipo, es que un conjunto de personas separadas a gran distancia,sean capaces, a través de la Web, de los e-mail y de foros, de aunar susesfuerzos para crear, mejorar, distribuir un producto, de forma que todosellos se bene�cian unos de otros. Evidentemente, la mayor parte del pesorecae en los desarrolladores, pero también es necesaria una difusión para quelos usuarios documenten, encuentren errores, hagan foros de discusión, etc.

¿Por qué se Interesan los Autores, Alumnos y Profesores Univer-sitarios, en el Software Libre? Porque bajo el Software libre subyacela idea de compartir conocimiento y favorecer la existencia de nuevas ideas;y ¿qué es investigar y enseñar sino crear conocimiento y procurar que losalumnos aprendan e incluso vayan más allá de lo aprendido? Se comparte laidea, que el espíritu del Software libre es similar al que debería reinar en lasinstituciones educativas.Concretando estas ideas, profesores e investigadores necesitan herramien-

tas para la investigación y docencia, y estas deben de tener una calidadmínima y ser fácilmente distribuibles entre los alumnos. En muchos casoslas compañías desarrolladoras y distribuidoras de programas de cómputo nohan sabido ofrecer sus productos con la �exibilidad adecuada para las laboresdocentes o, en otros casos, los productos desarrollados no tienen la calidadesperada.El Software libre es aún joven, pese a las decenas de miles de proyectos

actuales (véase [16] y [17]) � en los que se trabaja constantemente en mejo-rar la parte computacional de los algoritmos involucrados en el proyecto,haciendo y puliendo interfaces grá�cas, generando ayuda en línea así comola documentación necesaria para que usuarios noveles y avanzados usen la

[email protected] 9 Antonio Carrillo Ledesma, Et alii

Page 12: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

mayor cantidad de opciones programadas � existen muchas otras necesi-dades profesionales y de investigación que requieren el desarrollo innovadorde programas de cómputo para automatizarlas y hacerlas e�cientes. Estoqueda plasmado en las decenas de proyectos que a diario son registrados enlas páginas especializadas en busca de difusión y apoyo para su proyecto(véase [16] y [17]).En los últimos años, muchos proyectos han pasado de ser simples pro-

gramas en línea de comandos a complejas aplicaciones multiplataforma � seejecutan en distintos sistemas operativos como son Windows, Linux, Unix,Mac OS, Android� con ambientes grá�cos multimedia que en muchos casoshan superado a sus contrapartes comerciales � por ejemplo los navegadoresWeb� . Para muestra de este maravilloso avance, tomemos el proyecto delsistema operativo Android, que actualmente ejecuta en millones de equipos� como celulares, tabletas, electrodomésticos, etc.� y en los cuales se puedendescargar miles de aplicaciones y esta soportado por una gran cantidad deusuarios y empresas comerciales como Google e IBM. Este ha logrado des-plazar a muchos de sus competidores por sus múltiples bondades y bajo costode desarrollo, al reusar miles de aplicaciones ya existentes que usan Softwarelibre y permitir desarrollar otro tanto de aplicaciones bajo una plataformaque se ejecutará en los más diversos procesadores.Además, el uso de Software libre y su posibilidad de ampliarlo y/o es-

pecializarlo según sea necesario, ha permitido crear de forma cada vez másrápida y con�able; y poner a disposición de un gran público programas deuso común, así como especializado que satisfagan las nuevas necesidades delos usuarios.

1.2 El Cómputo en las Carreras de Ciencias

Existe una gran variedad de programas de cómputo que permite automatizar,la cada vez más creciente cantidad de tareas inherentes al desarrollo de lasactividades profesionales y de investigación; y en particular en la Carrera deActuaría, Ciencias de la Computación, Matemáticas, Matemáticas Aplicadasy los cursos de Matemáticas de las demás carreras de la Facultad.Es común que las grandes y pequeñas empresas compren programas de

cómputo especializados � algunos con un alto costo comercial� para inver-tir lo menos posible en el desarrollo de herramientas computacionales quesatisfagan sus necesidades. Donde es común que una empresa desarrolle másde una versión del programa, donde al menos una versión es libre y ge-

[email protected] 10 Antonio Carrillo Ledesma, Et alii

Page 13: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

neralmente usada como versión de desarrollo y prueba; y las demás versionessean propietarias y sean comercializadas, dando como servicios adicionalesel soporte y capacitación del mismo. La capacitación en el uso de dichosprogramas es cada vez más, delegada a las formadoras de recursos humanos,entre las que destacan las universidades.La capacitación de capital humano especializado en uno o más paquetes

de cómputo, requiere por un lado el conocimiento teórico que sustente elfuncionamiento del paquete y por otro lado contar con la plataforma com-putacional adecuada � Hardware y Software� para ejecutar dicho paquete.El creciente costo monetario de la licencia de uso de un paquete de cómputo� y no necesariamente incluye las versiones siguientes del mismo� implicaun gasto no justi�cable para la gran mayoría de las universidades a nivelmundial.En las universidades, no se busca enseñar el uso de uno o más paquetes

de cómputo per se, la enseñanza de herramientas de cómputo, es un procesoinherente a la adquisición de conocimiento de las diferentes materias que esnecesario cursar para egresar de una carrera universitaria. Así, mediante eluso de uno o más paquetes similares de bajo o nulo costo se puede enseñarlos conocimientos necesarios que le permitirán al educando conocer en pocotiempo las peculiaridades de los paquetes especializados y de alto costo usadosen las empresas.

El Software libre tiene miles de proyectos actualmente activos (véase [16]y [17]), estos tratan de satisfacer la gran mayoría de las necesidades de losusuarios noveles y avanzados; y por el uso de dicho Software no es necesariopagar grandes cantidades de dinero. Además, todas las actualizaciones ynuevas versiones de los paquetes por lo general son puestas en la red paraque se puedan descargar y ser usadas por cualquier usuario, sin recurrir agastos onerosos.Esto queda de mani�esto en uno de los proyectos insignia del Software

libre, como lo es el Kernel Linux (véase [22]), que en su versión 3.10 cuentacon más de quince millones de líneas de código y en la versión 4.12 cuentacon 24,170,860 líneas de código; que ha sido creado desde 1990 hasta la fechapor miles de programadores distribuidos por todo el mundo e intercomuni-cados casi exclusivamente por Internet. Este proyecto es la base de diversasdistribuciones de sistemas operativos � entre ellos de Android, Ubuntu yDebian GNU/Linux entre otras cientos de distribuciones� que se ejecutanen aparatos tan heterogéneos como electrodomésticos, teléfonos celulares,

[email protected] 11 Antonio Carrillo Ledesma, Et alii

Page 14: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

tabletas, computadoras portátiles y de escritorio, así como en la mayoría delas supercomputadoras. Además, estos sistemas operativos se ejecuten enuna gran gama de procesadores, tanto de última generación como en los yaclásicos 80386.Basándose en los proyectos de Software libre, existen diversas distribu-

ciones de sistemas operativos como Debian GNU/Linux (véase [23]) que inte-gra más de cuarenta mil aplicaciones todas ellas de Software libre que permiteejecutar todos los programas de cómputo de uso común � dado que tambiénsoporta la virtualización (véase [48], [54], [47] y [46]), es posible ejecutar otrossistemas operativos como Windows dentro del propio sistema operativo deSoftware libre� .En el caso de Software comercial o propietario como MATLAB (véase

[35]), SAS (véase [42]), SPSS (véase [43]), Microsoft O¢ ce (véase [24]) entreotros, se ha invertido una gran cantidad de trabajo y recursos económicospara generar interfaces de usuario pulidas y perfectamente integradas, asícomo, una gran cantidad de ayuda y en algunos casos con un asistente vir-tual en el mismo paquete para que guíen al usuario en su uso. La docu-mentación integrada del paquete, se complementa con una gran cantidad deayuda en línea, libros, artículos y páginas blancas � en algunos casos en másde 80 idiomas� que detallan como usar el Software para solucionar una grangama de problemas de diversos grupos de usuarios, tanto usuarios ocasionalescomo especializados. En el caso de que el Software sea usado en ambientesuniversitarios, estos cuentan con guías, tutoriales o centros de entrenamientoque capacitan en cada uno de los tópicos necesarios para dominar el paquetehasta llegar a dominar las opciones avanzadas del mismo.En contraste, en el Software libre, es común que en muchos proyectos

incipientes, la documentación, ayuda en línea e interfaz grá�ca es un aspectopoco logrado. En muchos casos, los entornos de trabajo (IDEs) son dejadosa otros proyectos. De tal forma que los creadores � programadores� delpaquete, se centren en el desarrollo computacional de la infraestructura basedel paquete, delegando a otros, las partes que tienen que ver con el usuario�nal y la documentación del mismo. Por ejemplo el paquete de GNUPlot quese encarga de la visualización de grá�cas en dos y tres dimensiones es usadopor decenas de paquetes en línea de comandos � por ejemplo Python, Perl, Cy C++� que cuando requieren hacer grá�cas se las solicitan a dicho paquete,de esta forma se reutiliza lo ya creado y se simpli�ca por mucho el desarrollodel paquete, permitiendo a los desarrolladores centrarse en las característicasque necesitan programar para innovar y satisfacer las crecientes necesidades

[email protected] 12 Antonio Carrillo Ledesma, Et alii

Page 15: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de los usuarios.Por el incipiente desarrollo de las aplicaciones de Software libre que com-

piten con el Software privativo o comercial al que estamos tan acostumbra-dos a usar � programas para cálculo numérico y simbólico, estadístico y deo�mática, entre otros, comúnmente usados para la enseñanza y resoluciónde problemas cientí�cos y técnicos� , al menos en un corto plazo, el Soft-ware libre parece no ser una opción viable de reemplazo. Pero ya son losu�cientemente maduras para ser tomadas en cuenta, en un ambiente de tra-bajo multiplataforma cada vez más competitivo, en donde es necesario que elusuario � estudiante y eventual profesionista� tenga acceso a todos y cadauno de los paquetes de cómputo que se le muestran en clase, así como en lasprácticas profesionales, que le permitan adquirir soltura y pericia en el usode los mismos.

1.2.1 Algunos Cursos que Usan Cómputo

En la Facultad de Ciencias, cada semestre, se imparten centenas de cursos� algunos compartidos por las distintas carreras y otros especí�cos de la ca-rreras de Actuaría, Ciencias de la Computación, Matemáticas, MatemáticasAplicadas y los cursos de Mátemáticas de las demás carreras de la Facultad�y desde hace varios años, crece semestre a semestre el número de cursos1 quesolicitan hacer uso de equipos de cómputo y tener acceso a múltiples versionesde paquetería especializada (véase apéndice 13), algunos de estos cursos son(véase [2]):

� Cálculo Diferencial e Integral I

� Geometría Analítica I

� Problemas Socio-Económicos de México

� Taller de Herramientas Computacionales

� Cálculo Diferencial e Integral II

� Geometría Analítica II1Los cursos solicitan, desde el uso de un equipo de cómputo y un proyector, hasta

la asignación de una máquina por estudiante que tenga instalado múltiples programasespecializados corriendo en más de un sistema operativo.

[email protected] 13 Antonio Carrillo Ledesma, Et alii

Page 16: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Matemáticas Financieras

� Programación

� Cálculo Diferencial e Integral III

� Probabilidad I

� Programación II

� Manejo de Datos

� Taller de Modelación I

� Cálculo Diferencial e Integral IV

� Finanzas I

� Matemáticas Actuariales del Seguro de Personas I

� Probabilidad II

� Estadística I

� Finanzas II

� Investigación de Operaciones

� Matemáticas Actuariales del Seguro de Personas II

� Taller de Modelación II

� Economía I

� Estadística II

� Matemáticas Actuariales del Seguro de Daños

� Procesos Estocásticos

� Sistemas Dinámicos no Lineales

� Análisis Numérico

� Demografía I

[email protected] 14 Antonio Carrillo Ledesma, Et alii

Page 17: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Demografía Avanzada

� Estadística III

� Seguridad Social

� Pensiones Privadas

� Teoría del Riesgo

� Administración de Riesgos

� Almacenes y Minería de Datos

� Administración de Riesgos Financieros

� Análisis de Regresión

� Análisis Multivariado

� Bases de Datos

� Ecuaciones Diferenciales Ordinarias

� Ecuaciones Diferenciales Parciales

� Carteras de Inversión

� Demografía II

� Econometría I

� Econometría II

� Estadística Bayesiana

� Diseño de Experimentos

� Fianzas

� Inteligencia Arti�cial

� Muestreo

� Planeación Estratégica

[email protected] 15 Antonio Carrillo Ledesma, Et alii

Page 18: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Modelos no Paramétricos y de Regresión

� Productos Financieros Derivados I

� Productos Financieros Derivados II

� Optimización Numérica

� Álgebra Matricial Numérica

� Reaseguro

� Redes de Computadoras

� Seminario de Aplicaciones Actuariales

� Seminario de Matemáticas Aplicadas

� Seminario de Matemáticas Actuariales Aplicadas

� Solución Numérica de Ecuaciones Diferenciales Ordinarias

� Solución Numérica de Ecuaciones Diferenciales Parciales

� Simulación Estocástica

� Sistemas Dinámicos Discretos

� Teoría de Grá�cas

� Teoría de Juegos en Economía

� Temas Selectos de Análisis Numérico

� Valuación de Opciones

1.3 Paquetes de Cómputo de Uso Común

Dada la diversidad de cursos y la gran cantidad de profesores y ayudantes delos mismos, el abanico de paquetes de cómputo solicitados es grande (véaseapéndice 13), entre los que destacan (véase [2]):

� Java JRE y JDK

[email protected] 16 Antonio Carrillo Ledesma, Et alii

Page 19: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Code Blocks IDE

� NetBeans IDE

� DrJava IDE

� IntelliJ IDEA

� BlueJ IDE

� SciTE

� JetBrains IDE

� SharpDevelop IDE

� Alice

� DFD

� Turbo C IDE

� Developer Studio-Fortran IDE

� Microsoft Visual Studio

� Microsoft Windows SDK

� Compaq Visual Fortran

� Microsoft O¢ ce

� Libre O¢ ce

� OpenO¢ ce

� MathType

� Scienti�c WorkPlace

� Microsoft SQL Server

� PostgreSQL

� SPSS

[email protected] 17 Antonio Carrillo Ledesma, Et alii

Page 20: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� PSPP

� SAS

� Vensim PLE

� Statgraphics

� GPower

� EViews

� Systat

� Stata

� Statistica

� ITSM2000

� R

� Tinn-R

� RStudio

� Gretl

� MATLAB

� Scilab

� Octave

� FreeMat

� Maple

� Mathematica

� NetLogo

� GeoGebra

� Compresores y descompresores de archivos Winzip, WinRAR, 7-zip

[email protected] 18 Antonio Carrillo Ledesma, Et alii

Page 21: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� SSH Secure File Transfer

� PDFCreator

� Adobe Reader

� Navegadores de páginas Web: Internet Explorer, Google Chrome, Mozilla,Konquerror

Estos paquetes pueden ser clasi�cados de forma burda en:

� Sistemas Operativos

� Programas de Cálculo Numérico

� Programas de Cálculo Simbólico

� Programas de Estadística

� Programas O�máticos

� Lenguajes de Programación y Entornos de Desarrollo

� Programación Desde la Nube

� Otros Programas de Cómputo

En el presente trabajo, nos centraremos en los rubros más usados, peroel tipo de programas usados, las plataformas de ejecución soportada y lasdiferentes versiones de un mismo paquete que solicitan los profesores y ayu-dantes, crecen constantemente, así mismo, su complejidad y en su caso, elcosto monetario de las licencias de uso también se incrementa de maneraonerosa.

[email protected] 19 Antonio Carrillo Ledesma, Et alii

Page 22: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

1.3.1 Sistemas Operativos

Los sistemas operativos son un conjunto de programas de cómputo que ges-tionan los recursos de Hardware y provee servicios a los programas de apli-caciones, ejecutándose en modo privilegiado respecto a los restantes. Entrelos más usados tenemos:

� Windows

� Linux

� Mac OS

� Android

� UNIX

Hay cientos de sistemas operativos y miles de distribuciones, pero losusuarios están más familiarizados con Windows para equipos de escritorio yen dispositivos móviles Android. En cualquier sistema operativo es posibleejecutar una gran variedad de paquetes de cómputo y más ahora con la vir-tualización, es posible ejecutar múltiples sistemas operativos y sus paquetescorrespondientes simultáneamente en un mismo equipo de cómputo (véaseapéndice 16).

1.3.2 Paquetes de Cálculo Numérico

Los paquetes de cálculo numérico, son programas matemáticos que ofrecenun entorno de desarrollo integrado (IDE) con un lenguaje de programaciónpropio. Entre sus prestaciones básicas se hallan:

� Manejo de números reales y complejos

� La manipulación de vectores y matrices tanto reales como complejas

� Manejo de funciones elementales y especiales

� Resolución de problemas de álgebra lineal

� Resolución de ecuaciones no lineales

� La representación de datos y funciones

[email protected] 20 Antonio Carrillo Ledesma, Et alii

Page 23: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� La implementación de algoritmos

� Integración de funciones

� Máximos y mínimos de funciones

� Manipulación de polinomios

� Integración de ecuaciones diferenciales

� Gra�cación de funciones en 2D y 3D

� La comunicación con programas en otros lenguajes y con otros dispositivosde Hardware

1.3.3 Paquetes de Cálculo Simbólico

Los paquetes de cálculo Simbólico, son programas matemáticos que realizanmanipulación algebraica y ofrecen un entorno de desarrollo integrado (IDE)con un lenguaje de programación propio. Entre sus prestaciones básicas sehallan:

� Expresiones y funciones simbólicas

� Simpli�car expresiones

� Manejo de polinomios

� Ecuaciones e inecuaciones

� Evaluar una relación

� Factorización

� Resolver ecuaciones y sistemas de ecuaciones

� Integrar y diferenciar expresiones

� Matrices con parámetros

� Computación matemática

� Teoría de números

[email protected] 21 Antonio Carrillo Ledesma, Et alii

Page 24: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Análisis de datos

� Computación geométrica

� Manipulación algebraica

1.3.4 Paquetes Estadísticos

Los paquetes estadísticos, son programas matemáticos que ofrecen un entornode desarrollo integrado (IDE) con un lenguaje de programación propio. Entresus prestaciones básicas destacan:

� Análisis de datos mediante operadores para cálculos sobre arreglos, matricesy/o tablas

� Tablas cruzadas

� Reordenamiento de datos

� Análisis de la varianza (ANOVA)

� Frecuencias

� Estadística descriptiva

� Estadística lineal

� Estadística no lineal

� Bioestadística

� Pruebas estadísticas clásicas

� Análisis de serie de temporales

� Modelos de regresión

� Clasi�cación

� Fiabilidad

� Categorías

� Clustering

[email protected] 22 Antonio Carrillo Ledesma, Et alii

Page 25: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Validación de datos

� Tendencias

� Grá�cos y diagramas

1.3.5 Paquetes O�máticos

En la actualidad, los llamados paquetes o�máticos, no son otra cosa queprogramas de cómputo integrado, que permiten automatizar múltiples ta-reas que permiten idear, crear, manipular, transmitir, almacenar informaciónnecesaria en una o�cina. Entre sus prestaciones básicas destacan:

� Procesamiento de Textos � con formato enriquecido y notación cientí�ca�

� Hojas de cálculo

� Bases de datos

� Herramientas de presentación y multimedia

1.3.6 Lenguajes de Programación y Entornos de Desarrollo

� Lenguajes de programación

� Entornos de desarrollo integrados y editores para programación

� Depuradores

� Formateadores de código

� Manejadores de versiones

� Generadores de documentación

1.3.7 Otros Programas de Cómputo

Dentro del abanico de programas que son usados en las carreras de Actuaría,Ciencias de la Computación, Matemáticas, Matemáticas Aplicadas y los cur-sos de Matemáticas de las demás carreras de la Facultad, y que no tienencabida en los rubros anteriores, destacan:

[email protected] 23 Antonio Carrillo Ledesma, Et alii

Page 26: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Otros programas matemáticos

� Programas de visualización y gra�cación

� Programas de navegación en la red

� Compresores y descompresores de archivos

� Virtualización

Sobre los Ejemplos de este Trabajo La documentación y los diferentesejemplos que se presentan en este trabajo, se encuentran disponibles en lapágina Web: Herramientas, para que puedan ser copiados desde el navegadory ser usados en la terminal de línea de comandos. En aras de que el interesadopueda correr dichos ejemplos y a�anzar sus conocimientos, además de quepuedan ser usados en diferentes ámbitos a los presentados aquí.

Agradecimientos Este proyecto fue posible gracias al apoyo recibido porla Facultad de Ciencias de la Universidad Nacional Autónoma de México(UNAM) y al tiempo robado a nuestras actividades académicas, principal-mente durante el período de con�namiento del año 2020.

[email protected] 24 Antonio Carrillo Ledesma, Et alii

Page 27: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

2 Sistemas Operativos

Actualmente tenemos 5 grandes sistemas operativos en el mercado: Win-dows 10, Mac OS X2, Android, iOS y GNU/Linux con todas sus diferentesdistribuciones.

¿Qué Sistema Operativo Usar? ¿Apple o Microsoft? ¿Windows oLinux? ¿Android o iOS? Son preguntas frecuentes que todos nos hemoshecho alguna vez, y es que elegir un sistema operativo, una computadora oun dispositivo móvil no es tan simple. O al menos no lo era años atrás. Enla actualidad las diferencias entre sistemas operativos de escritorio son cadavez menos, hasta el punto que prácticamente cualquier servicio Online escompatible con Windows, Mac OS X y GNU/Linux y las principales �rmasde Software crean aplicaciones para las tres plataformas principales, salvoexcepciones. Lo mismo empieza a ocurrir con el Hardware.Poco tendremos que decir del sistema operativo de Apple, Mac OS X

o iOS (ambos son derivados de Darwin BSD que es un sistema operativotipo UNIX), ya que son los sistemas operativos más bonitos y que mejoresresultados han dado a todos los usuarios que los han probado. Mac OS Xes un sistema pensado para los profesionales de los sectores que necesitande un equipo de cómputo que sea capaz de todo, como los desarrolladores,programadores, diseñadores, periodistas, fotógrafos, músicos, DJ�s y muchosmás empleos que se bene�cian de este sistema operativo.Después tenemos a Windows, un sistema operativo versátil pensado sobre

todo para un uso doméstico, aunque eso no quita que muchas empresas uti-licen Windows en sus equipos de cómputo ya que es un sistema operativoque puede dar muy buenos resultados en este aspecto.Sin embargo, llegamos a Linux, el gran desconocido por muchos. Un

sistema operativo mucho más versátil que Windows y que puede ser igual omás profesional que Mac OS X. Sin embargo, la ventaja que tienen estos dossistemas operativos, es que vienen ya preparados y con�gurados para el tipode mercado al que van dirigidos, pero GNU/Linux no.Esto es una ventaja y una desventaja al mismo tiempo, ya que si tenemos

práctica, podemos hacer que el sistema operativo se adapte a nuestras necesi-dades sin problemas, pero si no tienes práctica, puede que sea demasiado lo

2macOS Big Sur 11.0 será el reemplazo de Mac OS X, disponible a partir noviembrede 2020..

[email protected] 25 Antonio Carrillo Ledesma, Et alii

Page 28: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

que tienes que con�gurar.

Cuota de Mercado para los Sistemas Operativos Agosto es uno delos meses en los que miles de compañías analizan el trá�co que les llegade usuarios a sus páginas Web y desde que plataformas llegan, según uninforme de International Data Corporation (https://www.idc.com) en el año2021 tenemos:

� En el segmento de los sistemas operativos de escritorio basados en Linuxha subido su cuota de mercado llegando al 3%, esto no parecerá mucho,pero si nos �jamos bien, vemos que Mac OS X tiene un 7.5% -basadoen Unix-, Chrome OS -usa el kernel de Linux- tiene 10.8% y Windowsel resto.

� En el segmento de teléfonos inteligentes (SmartPhones) y tabletas basa-das en Android -usa el Kernel de Linux- tiene 86 % , iOS tiene 13.9 %-basado en Unix- y menos del 1% el resto de los sistemas operativos.

� En el segmento de servidores se estima que más del 60% de los servi-dores a nivel mundial usan Linux, 1% usan Unix y el resto Windows.Es de destacar que en el servicio de servidores Azure de Windows, elsistema predominante es Linux.

� En el segmento de supercomputadoras, Linux tiene la cuota más im-portante del mercado; es utilizado por los más poderosos 500 sistemasde supercómputo de alto desempeño del mundo3.

Hay que decir, que hoy en día y tal y como están las cosas, no existe unsistema operativo que sea de�nitivo. Así que la pregunta de si GNU/Linux4

3Existe el Ranking de las 500 supercomputadoras más poderosas del mundo (esta seactualiza cada seis meses en junio y noviembre) y puede ser consultada en:https://top500.orgLa cuota de supercomputadoras con GNU/Linux ha sido de: 2012 (94%), 2013 (95%),

2014 (97%), 2015 (97.2%), 2016 (99.6%), 2017 (99.6%), 2018 (100%), 2019 (100%), 2020(100%).

4Los resultados de GNU/Linux son muy satisfactorios para los desarrolladores ypartícipes de la comunidad Linux, pero todavía hace falta mucho por hacer para quetenga una cuota signi�cativa en el escritorio y esto sólo será posible si los distribuidores deequipo generan un esquema más agresivo para vender máquinas con Linux preinstalado.

[email protected] 26 Antonio Carrillo Ledesma, Et alii

Page 29: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

es mejor que Windows o Mac OS X no tiene sentido, ya que cada sistemaoperativo tiene sus pros y sus contras.Pero la disyuntiva sigue ahí. ¿Debemos usar Windows en nuestro equipo

de cómputo?, ¿nos conviene pasarnos a Linux?. Hay razones a favor y encontra para todos los gustos.

¿Qué es un Sistema Operativo? El conjunto de programas informáticosque permiten la administración e�caz de los recursos de una computadoraes conocido como sistema operativo o Software de sistema. Estos progra-mas comienzan a trabajar apenas se enciende el equipo, ya que gestionanel Hardware desde los niveles más básicos y permiten además la interaccióncon el usuario. Cabe destacar que los sistemas operativos no funcionan sóloen las computadoras. Por el contrario, este tipo de sistemas se encuentranen la mayoría de los dispositivos electrónicos que utilizan microprocesadores:el Software de sistema posibilita que el dispositivo cumpla con sus funciones-por ejemplo, un teléfono móvil o un reproductor de DVD-.

El sistema operativo cumple con cinco funciones básicas:

� Proporciona la interfaz del usuario -grá�ca o de texto-

� La administración de recursos

� La administración de archivos

� La administración de tareas

� El servicio de soporte y utilidades

En cuanto a la interfaz del usuario, el sistema se encarga de que el usuariopueda ejecutar programas, acceder a archivos y realizar otras tareas con lacomputadora. La administración de recursos permite el control del Hardware,incluyendo los periféricos y la red. El Software de sistema también se encargade la gestión de archivos, al controlar la creación, la eliminación y el acceso alos mismos, así también, de la administración de las tareas informáticas queejecutan los usuarios �nales. Por último, podemos mencionar que el serviciode soporte se encarga de actualizar las versiones, mejorar la seguridad delsistema, agregar nuevas utilidades, controlar los nuevos periféricos que seagregan a la computadora y corregir los errores del Software.

[email protected] 27 Antonio Carrillo Ledesma, Et alii

Page 30: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El Kernel o Núcleo Es un componente fundamental de cualquier sistemaoperativo. Es el encargado de que el Software y el Hardware de cualquierequipo de cómputo puedan trabajar juntos en un mismo sistema, para lo cualadministra la memoria de los programas y procesos ejecutados, el tiempo deprocesador que utilizan los programas, o se encarga de permitir el acceso yel correcto funcionamiento de periféricos y otros elementos físicos del equipo.El núcleo del sistema operativo Linux/Unix (llamado Kernel) es un pro-

grama escrito casi en su totalidad en lenguaje C, con excepción de unaparte del manejo de interrupciones, expresada en el lenguaje ensambladordel procesador en el que opera, el Kernel reside permanentemente en memo-ria y alguna parte de él está ejecutándose en todo momento.Los usuarios de Linux/Unix estamos acostumbrados a hablar y oír hablar

sobre su Kernel5, el cual puede actualizarse y manipularse en cualquier dis-tribución. Sin embargo, en un sistema operativo tan centrado en el usuarioy la sencillez como Windows, su Kernel es un gran desconocido.

Kernel de Windows en la década de los noventa Microsoft estababasando sus sistemas operativos en los Kernel Windows 9x, donde el códigobásico tenía muchas similitudes con MS-DOS. De hecho necesitaba recurrir aél para poder operar. Paralelamente, Microsoft también estaba desarrollandootra versión de su sistema dirigido a los servidores llamada Windows NT.Ambas versiones de Windows fueron desarrollándose por separado. Win-

dows NT era más bien una jugada a largo plazo, una tecnología para irdesarrollando para los Windows del mañana, y en el año 2000 dieron unnuevo paso en esa dirección. A la versión 5.0 de NT la llamaron Windows2000, y se convirtió en un interesante participante en el sector empresarial.Tras ver la buena acogida que tuvo, Microsoft decidió llevar NT al resto

de usuarios para que ambas rami�caciones convergieran. Lo hicieron en oc-tubre del 2001 con la versión 5.1 de Windows NT, que llegó al mercado con

5En el caso de los sistemas derivados de Unix y Linux el Kernel lo podemos encontraren el directorio /boot/, este directorio incluye todos los ejecutables y archivos que sonnecesarios en el proceso de arranque del sistema y deben ser utilizados antes que el Kernelempiece a dar las órdenes de ejecución de los diferentes módulos del sistema, aquí tambiénes donde reside el gestor de arranque.En algunas distribuciones al usar un gestor de volúmenes lógico (Logical Volume Ma-

nager, LVM) se genera un esquema de particiones con el directorio boot en una particiónaparte.

[email protected] 28 Antonio Carrillo Ledesma, Et alii

Page 31: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

el nombre de Windows XP. Por lo tanto, esta versión marcó un antes y undespués no sólo por su gran impacto en el mercado, sino porque era el prin-cipio de la aventura del Kernel Windows NT en el mundo de los usuarioscomunes.Desde ese día, todas las versiones de Windows han estado basadas en

este Kernel con más de 20 años de edad. La versión 5.1.2600 fue WindowsXP, la 6.0.6002 fue Windows Vista, y la 6.1.7601 Windows 7. Antes hubootros Windows Server 2008 y 2003, y después llegaron las versiones de NT6.2.9200 llamada Windows 8, la 6.3.9600 o Windows 8, y �nalmente la NT10.0, también conocida como Windows 10.La principal característica del Kernel de Windows NT es que es bastante

modular, y está basada en dos capas principales, la de usuario y la de Kernel.El sistema utiliza cada una para diferentes tipos de programa. Por ejemplo,las aplicaciones se ejecutan en el modo usuario, y los componentes principalesdel sistema operativo en el modo Kernel. Mientras, la mayoría de los Driverssuelen usar el modo Kernel, aunque con excepciones.Es por eso que se re�eren a él como Kernel híbrido, pero sobre todo

también porque permite tener subsistemas en el espacio del usuario que secomunicaban con el Kernel a través de un mecanismo de intercomunicaciónde procesos IPC (Interprocess Communication).Cuando ejecutas una aplicación, está accede al modo usuario, donde Win-

dows crea un proceso especí�co para la aplicación. Cada aplicación tiene sudirección virtual privada, ninguna puede alterar los datos que pertenecen aotra y tampoco acceder al espacio virtual del propio sistema operativo. Es porlo tanto el modo que menos privilegios otorga, incluso el acceso al Hardwareestá limitado, y para pedir los servicios del sistema las aplicaciones tienenque recurrir a la interfaz de programación de aplicaciones API (ApplicationProgramming Interface) de Windows.El modo núcleo en cambio es ese en el que el código que se ejecuta en él

tiene acceso directo a todo el Hardware y toda la memoria del equipo. Aquítodo el código comparte un mismo espacio virtual, y puede incluso accedera los espacios de dirección de todos los procesos del modo usuario. Esto espeligroso, ya que si un Driver en el modo Kernel modi�ca lo que no debe,podría afectar al funcionamiento de todo el sistema operativo.Este modo núcleo está formado por servicios Executive, como el contro-

lador de caché, el gestor de comunicación, gestor de E/S, las llamadas deprocedimientos locales, o los gestores de energía y memoria entre otros. Es-tos a su vez están formados por varios módulos que realizan tareas especí�cas,

[email protected] 29 Antonio Carrillo Ledesma, Et alii

Page 32: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

controladores de núcleo, un núcleo y una capa de abstracción del HardwareHAL (Hardware Abstraction Layer).

Diferencias entre los Kernel de Linux y Windows La principaldiferencia entre el Kernel de los sistemas operativos Windows y el de Linuxestá en su �losofía. El desarrollado por el equipo de Linus Torvalds es decódigo abierto y cualquiera puede usarlo y modi�carlo, algo que le sirve paraestar presente en múltiples sistemas operativos o distribuciones GNU/Linux.El de Microsoft en cambio es bastante más cerrado, y está hecho por y parael sistema operativo Windows.En esencia, en Linux adoptaron los principios de modularidad de Unix

y decidieron abrir el código y las discusiones técnicas. Gracias a ello, Linuxha creado una comunidad meritocrática de desarrolladores, una en la quetodos pueden colaborar y en la que cada cambio que se sugiere se debate condureza para desechar las peores ideas y quedarse con las mejores. Tambiénse halaga a quienes consiguen mejorar las funcionalidades más veteranas.Mientras, en Windows no funciona así, los responsables del Kernel no ven

con buenos ojos que se hagan propuestas que se desvíen del plan de trabajo, yasegura que hay pocos incentivos para mejorar las funcionalidades existentesque no sean prioritarias.Esto hace, a ojos de ese antiguo desarrollador, que al dársele mayor im-

portancia a cumplir planes que a aceptar cambios que mejoren la calidad delproducto, o al no tener tantos programadores sin experiencia, el Kernel deWindows NT siempre esté un paso por detrás en estabilidad y funcionali-dades.A nivel técnico existen similitudes entre ambos. Los dos núcleos controlan

el Software del sistema de bajo nivel y las interacciones con el Hardwaredel ordenador a través de la capa de abstracción de Hardware (HAL). ElHAL es un elemento del sistema que funciona como interfaz entre Software yHardware, y como las API, permite que las aplicaciones sean independientesdel Hardware.Los dos están escritos principalmente en C, y son capaces de manejar

el almacenamiento en caché, los controladores de dispositivos, la memoriavirtual, los sistemas de archivos, los protocolos de red y las llamadas desistema. En esencia sus funcionalidades son las mismas, aunque la manerade llevarlas a cabo es diferente.Así como el Kernel de Windows tiene dos modos, y por lo tanto se le

[email protected] 30 Antonio Carrillo Ledesma, Et alii

Page 33: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

considera híbrido, la gran diferencia es que el de Linux sólo tiene una capa,o sea que es un núcleo monolítico. Eso sí, pese a ser más sencillo en este as-pecto, para funcionar correctamente tiene su núcleo dividido en tres subcapasdiferentes.Ambos gestionan los problemas de memoria de forma parecida. Tienen

sistemas de "Swapping" para mover un proceso o parte de él temporalmentede la memoria principal a una secundaria de almacenamiento en el caso de queen la principal haya poco espacio. Windows lo hace en los �cheros Page�le.sysy Swap�le.sys, mientras que Linux lo suele hacer en una partición, aunquetambién lo puede hacer en uno o varios �cheros o deshabilitarlo.Por lo tanto, podemos decir que la principal diferencia entre ambos es

la manera en que se desarrolla cada uno. Además, el Kernel de Linux esmucho más sencillo, lo cual es bueno para los desarrolladores. Mientras,el de Windows intenta poner una capa de protección en su modo usuariopara que los usuarios con menos conocimientos tienen menos posibilidadesde dañar el sistema, y su estructura lo hace más estable frente, por ejemploa fallos del Driver grá�co.Pero todo esto ya está cambiando, en las últimas versiones de Windows

10, Microsoft está integrando el Kernel de Linux a su propio Kernel6 y estoha permitido usar Linux dentro de Windows 10 de forma nativa gracias alllamado Windows Subsystem for Linux (WSL y WSL2), lo cual ha permitidomejorar la estabilidad y desempeño de Windows.

Tipos de Sistemas Operativos en Función de la Administración delas Tareas Podemos distinguir dos clases de sistemas operativos en funciónde cómo administran sus tareas, pueden ser:

6Para conocer la información del Kernel de Windows usando la línea de comandospodemos utilizar el siguiente comando en un cmd shell:

systeminfo j �ndstr /B /C:"OS Name" /C:"OS Version"

Y en powershell:

Get-CimInstance Win32_OperatingSystem j Select-Object Caption, CS-DVersion, ServicePackMajorVersion, BuildNumber j FL

o

[System.Environment]::OSVersion.Version

[email protected] 31 Antonio Carrillo Ledesma, Et alii

Page 34: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Sistemas Operativos Monotarea: son sistemas operativos que úni-camente cuentan con la capacidad para realizar una tarea al mismo tiempo.Son los sistemas más antiguos, que también llevan aparejados un CPU demenor capacidad. En estos casos, si el equipo está imprimiendo, no atenderáa las nuevas órdenes, ni será capaz de iniciar un nuevo proceso hasta que elanterior haya �nalizado.

Sistemas Operativos Multitarea: son los sistemas operativos másmodernos, con capacidad para el procesamiento de varias tareas al mismotiempo. Cuentan con la capacidad para ejecutar varios procesos en uno omás procesadores, por lo que existe la posibilidad de que sean utilizados porvarios usuarios al mismo tiempo, y podrían aceptar múltiples conexiones através de sesiones remotas.

Tipos de Sistemas Operativos en Función de la Administraciónde los Usuarios También es posible realizar una división de los sistemasoperativos en función de la forma en la que se administran los usuarios, comovemos a continuación:

Sistema de Administración Monousuario: sólo pueden gestionarun usuario al mismo tiempo. Así, a pesar de que varios usuarios puedentener acceso al sistema, solo un usuario puede acceder para realizar y ejecutaroperaciones y programas.

Sistemas de Administración Multiusuario: se re�ere a todos aque-llos sistemas operativos que permiten el empleo de sus procesamientos y ser-vicios al mismo tiempo. Así, el sistema operativo cuenta con la capacidad desatisfacer las necesidades de varios usuarios al mismo tiempo, siendo capazde gestionar y compartir sus recursos en función del número de usuarios queestén conectados a la vez.

Las Vulnerabilidades y Exposiciones Comunes El mundo está cadavez más interconectado y, como resultado de esto, la exposición a las vulne-rabilidades de seguridad también ha aumentado dramáticamente. Las com-plejidades de mantener las plataformas de cómputo actuales hacen que seamuy difícil para los desarrolladores cubrir cada punto de entrada potencial.

[email protected] 32 Antonio Carrillo Ledesma, Et alii

Page 35: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

En 2019 hubo un promedio de más de 45 vulnerabilidades y exposicionescomunes registradas por día y estas siguen en aumento año con año.Las vulnerabilidades y exposiciones comunes (Common Vulnerabilities

and Exposures, CVE https://cve.mitre.org) que tienen los distintos sistemasoperativos, es una lista de información registrada sobre vulnerabilidades deseguridad conocidas, en la que cada referencia tiene un número de identi-�cación CVE-ID, descripción de la vulnerabilidad, que versiones del Soft-ware están afectadas, posible solución al fallo (si existe) o como con�gu-rar para mitigar la vulnerabilidad y referencias a publicaciones o entradasde foros o Blogs donde se ha hecho pública la vulnerabilidad o se demues-tra su explotación. Además suele también mostrarse un enlace directo ala información de la base de datos de vulnerabilidades (https://nvd.nist.gov,https://openssf.org y https://docs.aws.amazon.com/security), en la que pue-den conseguirse más detalles de la vulnerabilidad y su valoración.El CVE-ID ofrece una nomenclatura estándar para identi�cación de la

vulnerabilidad de forma inequívoca que es usada en la mayoría de repositoriosde vulnerabilidades. Es de�nido y es mantenido por TheMITRECorporation(por eso a veces a la lista se la conoce por el nombre MITRE CVE List) confondos de la National Cyber Security Division del gobierno de los EstadosUnidos de América. Forma parte del llamado Security Content AutomationProtocol.

Mitos Hay varios mitos en torno a Linux/Unix y al Software libre, a saber:

� Linux/Unix se puede usar para revivir un equipo de cómputo viejo.La realidad es que si bien, hay múltiples distribuciones de Linux/Unixque corren en una gran cantidad de procesadores antiguos y actuales,los Drivers necesarios para reconocer periféricos como tarjetas grá�cas,de red alámbrica e inalámbrica, entre muchos otros, no tienen soporteen Linux/Unix, lo cual hará imposible su uso en Linux/Unix. Esto escierto en cualquier computadora no importa de cuál generación es elequipo de cómputo. La verdad de todo esto, es que los fabricantes estánenfocados en producir Hardware y Drivers que corran en los sistemasoperativos con mayor cuota de mercado y por el momento Linux/Unixen equipos personales no son de ellos.

� La retrocompatibilidad7 es un enorme dolor de cabeza, tomar Software7Siempre estamos en posibilidad de usar una Máquina Virtual que nos permite usar un

[email protected] 33 Antonio Carrillo Ledesma, Et alii

Page 36: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

hecho para Linux/Unix de hace 10 o 5 años y ejecutarlo en una dis-tribución moderna. Cualquier cosa de mínima complejidad o que useuna GUI, simplemente no funciona. Mientras la retrocompatibilidaden Windows es simplemente increíble. En Linux/Unix somos depen-dientes de los repositorios en línea, y cuando una aplicación dependede ciertas librerías que empiezan a desaparecer de esos repositorios, nosencontramos en una pesadilla. Y mientras más viejo el Software, peor.

� Si tengo un Software ahora y quiero ejecutarlo dentro de cinco o diezaños en el futuro ¿Por qué no debería ser capaz de hacerlo? Partede la belleza del Open Source es que el código fuente está disponible,por lo que es más fácil mantener operativo el Software, de modo queno deje de funcionar cuando alguien deja de mantenerlo. Excepto quemantener el Software en Linux/Unix se está convirtiendo en un desafíotan grande que daría igual que fuese privativo. Porque sería complicadohacerlo funcionar en un tiempo razonable, incluso siendo desarrollador,podría costar mucho trabajo y es posible dejar algo sin funcionar en elcamino.

2.1 Windows

Microsoft Windows (véase [3]), conocido generalmente como Windows o MSWindows es el nombre de una familia de Software propietario (véase apéndice14.2) de distribuciones de Software para PC, Smartphone -que perdió cuotade mercado con Android hasta desaparecer-, servidores y sistemas empo-trados, desarrollados y vendidos por Microsoft y disponibles para múltiplesarquitecturas, tales como x86, x86-64 y ARM.Desde un punto de vista técnico, no son sistemas operativos, sino que

contienen uno (tradicionalmente MS-DOS, o el más actual, cuyo núcleo esWindows NT) junto con una amplia variedad de Software; no obstante, esusual (aunque no necesariamente correcto) denominar al conjunto como sis-tema operativo en lugar de distribución.La versión más reciente de Windows es Windows 10 para equipos de

escritorio, Windows Server 2019 para servidores y Windows 10 Mobile paradispositivos móviles. Windws 10 llegó de forma o�cial y gratuita a usuarios

programa desarrollado hace años o décadas en su entorno original, corriendo en un equipomoderno con un sistema operativo de última generación con todas las actualizaciones deseguridad pertinentes.

[email protected] 34 Antonio Carrillo Ledesma, Et alii

Page 37: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

con licencia genuina de Windows 7, Windows 8 y Windows 8.1 así como aInsiders, siendo la primera versión que busca la uni�cación de dispositivos(escritorio, portátiles, teléfonos inteligentes, tabletas y videoconsolas) bajouna experiencia común, con lo que se espera eliminar algunos problemas quese presentaron con Windows 8.1.Windows 10 tiene al menos doce ediciones con diferente conjunto de carac-

terísticas y Hardware previsto, algunas de ellas son: Home, Pro, Enterprise,Enterprise LTBS/LTSC, Education, Mobile, S, Pro for Workstation, Team,Pro Education, loT (Embedded), N y KN.Todas las ediciones mencionadas tienen la capacidad de utilizar los pa-

quetes de idiomas, lo que permite múltiples idiomas de interfaz de usuario.A pesar de la múltiple cantidad de ediciones, solamente Windows 10 Homey Pro están orientadas para el común de los usuarios y vienen instaladas enequipos nuevos. Las demás ediciones se adquieren mediante otros tipos decompra.Además está Windows PE que es un pequeño sistema operativo usado

para instalar, desplegar y reparar Windows 10 en todas sus versiones deescritorio, servidor y para otras ediciones de Windows. En concreto, podemospreparar el disco antes de la instalación, instalar Windows con apps desde undisco local o una red, instalar imágenes de Windows, hacer modi�cacionesen Windows sin iniciar sesión, recuperar datos perdidos y un largo etcétera.

Seguridad Una de las principales críticas que reciben los sistemas opera-tivos Windows es la debilidad del sistema en lo que a seguridad se re�ere yel alto índice de vulnerabilidades críticas. El propio Bill Gates, fundador deMicrosoft, ha asegurado en repetidas ocasiones que la seguridad es objetivoprimordial para su empresa.Partiendo de que no existe un sistema completamente libre de errores,

las críticas se centran en la lentitud con la que la empresa reacciona ante unproblema de seguridad que pueden llegar a meses o incluso años de diferenciadesde que se avisa de la vulnerabilidad hasta que se publica la actualizaciónque corrija dicha vulnerabilidad (parche). En algunos casos la falta de res-puesta por parte de Microsoft ha provocado que se desarrollen parches quearreglan problemas de seguridad hechos por terceros.Uno de los pilares en que se basa la seguridad de los productos Windows es

la seguridad por ocultación, en general, un aspecto característico del Softwarepropietario que sin embargo parece ser uno de los responsables de la debilidad

[email protected] 35 Antonio Carrillo Ledesma, Et alii

Page 38: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de este sistema operativo debido a que, la propia seguridad por ocultación,constituye una infracción del uno de los principios de Kerckho¤s, el cuala�rma que la seguridad de un sistema reside en su diseño y no en una supuestaignorancia del diseño por parte del atacante.

Microsoft Open Source En Agosto del 2020 presentó la empresa de Red-mond el nuevo sitio Microsoft Open Source en que el público puede navegara través de todo el ecosistema de código abierto que ha estado construyendoen los últimos años. La Web no solo muestra los proyectos Open Source deMicrosoft sino que cuenta con secciones para colaborar con la comunidad,descargar herramientas, explorar su código, y hasta encontrar oportunidadesde trabajo.Las dos partes más importantes de este nuevo sitio son las secciones "Get

involved" y "Explore proyects". En la primera se puede revisar toda laactividad reciente en los proyectos Open Source de Microsoft alojados enGitHub, y además se cuenta con una larga lista de recursos para aprender acolaborar con proyectos de código abierto, y no necesariamente solo los quemantiene Microsoft.La segunda sección es la lista de proyectos, y ahí nos encontramos los

principales proyectos Open Source mantenidos por los ingenieros de Microsofty la comunidad. La lista de proyectos es larga y podemos encontrar losproyectos de los empleados de la empresa patrocinados a través de MicrosoftFOSS Fund.

Linux Dentro deWindows Desde el 2018 inició la integración de GNU/Li-nux en Windows 10 se ha dado, con la actualización de Windows 10 FallCreator Update con WSL (Windows Subsystem for Linux), se permitía ins-talar consolas de diversas distribuciones de GNU/Linux como un programamás. Y en el 2020, con la llegada de Windows 10 Build 2020 con WSL2, elcual cuenta con su propio Kernel de Linux que permite instalar de maneracasi nativa diversas distribuciones de GNU/Linux con todo el ambiente grá-�co permitiendo tener lo mejor de ambos mundos en un mismo equipo -sinhacer uso de programas de virtualización-, incluso es posible ejecutar variasdistribuciones de Linux al mismo tiempo en pantalla.Para usarlo hay que tener todas las actualizaciones de Windows y activar

el Subsistema de Windows para Linux (WSL8). Reiniciando el sistema, ya

8https://docs.microsoft.com/en-us/windows/wsl/install-win10

[email protected] 36 Antonio Carrillo Ledesma, Et alii

Page 39: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

podemos usar distribuciones de Linux desde Microsoft Store.En el Windows Insider Preview Build 20150 ha incluido soporte para GPU

de Intel, AMD y NVIDIA y es compatible con Direct ML (una API de bajonivel para aprendizaje automático soportado por DirectX 12) permitiendo eluso de las capacidades de computación por GPU de WSL para Linux.

Android Dentro de Windows En el Windows Build 20185 ha incluidosoporte para que Windows 10 permite no sólo sincronizar teléfonos Android,sino además mediante "your Phone" permite integrar las aplicaciones, noti�-caciones, mensajes, fotos, llamadas y otras opciones de teléfonos inteligentesen Android directamente en Windows, ejecutando las aplicaciones sin tenerque abrirlas en el teléfono, aunque siguen proviniendo de ahí.Además en noviembre de 2020, se ha informado que existe la posibili-

dad de que Microsoft permita la instalación y ejecución de aplicaciones paraAndroid en Windows 10. Con cambios mínimos o directamente sin modi�-caciones en el código, los desarrolladores podrían enviar a Microsoft Storesus aplicaciones para que sean descargadas e instaladas en PCs, el proyectotiene el nombre de Latte.

2.2 UNIX y BSD

Unix (véase [?]) es un sistema operativo portable, multitarea y multiusuario;desarrollado en 1969 por un grupo de empleados de los laboratorios Bell deAT&T. El sistema, junto con todos los derechos fueron vendidos por AT&Ta Novell Inc. Esta vendió posteriormente el Software a Santa Cruz Operationen 1995, y está, a su vez, lo revendió a Caldera Software en 2001, empresa quedespués se convirtió en el grupo SCO. Sin embargo, Novell siempre argumentóque solo vendió los derechos de uso del Software, pero que retuvo el Copyrightsobre "UNIX". En 2010, y tras una larga batalla legal, esta ha pasadonuevamente a ser propiedad de Novell.Solo los sistemas totalmente compatibles y que se encuentran certi�ca-

dos por la especi�cación Single UNIX Speci�cation pueden ser denominados"UNIX" (otros reciben la denominación «similar a un sistema Unix» ). Enocasiones, suele usarse el término "Unix tradicional" para referirse a Unix oa un sistema operativo que cuenta con las características de UNIX Versión 7o UNIX System V o UNIX versión 6.

[email protected] 37 Antonio Carrillo Ledesma, Et alii

Page 40: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Berkeley Software Distribution o BSD (en español, «distribución deSoftware Berkeley» ) (véase [?]) fue un sistema operativo derivado de Unixque nace a partir de los aportes realizados a ese sistema por la Universidad deCalifornia en Berkeley. En los primeros años del sistema Unix sus creadores,los Laboratorios Bell de la compañía AT&T, autorizaron a la Universidad deBerkeley en California y a otras universidades, a utilizar el código fuente yadaptarlo a sus necesidades. Durante los años 1970 y 1980 Berkeley utilizóel sistema para sus investigaciones en materia de sistemas operativos.Cuando AT&T retiró el permiso de uso a la universidad por motivos

comerciales, la universidad promovió la creación de una versión inspiradaen el sistema Unix utilizando los aportes que ellos habían realizado, permi-tiendo luego su distribución con �nes académicos y al cabo de algún tiemporeduciendo al mínimo las restricciones referente a su copia, distribución omodi�cación (véase apéndice 14.1.1).Algunos sistemas operativos descendientes del sistema desarrollado por

Berkeley son SunOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD y MacOS X. BSD también ha hecho grandes contribuciones en el campo de lossistemas operativos en general. Además, la licencia permisiva de BSD hapermitido que otros sistemas operativos, tanto libres como propietarios in-corporaron código BSD. Por ejemplo, Microsoft Windows ha utilizado códigoderivado de BSD en su implementación de TCP/IP, y utiliza versiones re-compiladas de la línea de comandos BSD para las herramientas de redes.También Darwin, el sistema en el cual está construido Mac OS X, el sistemaoperativo de Apple, está derivado en parte de FreeBSD 5. Otros sistemasbasados en Unix comerciales como Solaris también utilizan código BSD.

Algunos proyectos activos descendientes del sistema BSD son:

FreeBSD (https://www.freebsd.org/es/)Es un sistema operativo para computadoras basadas en las CPU de arqui-

tectura Intel. También funciona con procesadores compatibles como AMD.Está basado en la versión 4.4 BSD-Lite del CSRG (Computer Systems Re-search Group) y fue escrito en C y C++. Tiene Licencia BSD. Este proyectoha realizado una gran inversión de tiempo en ajustar el sistema para ofrecerlas mejores condiciones de rendimiento con carga real y facilidad de uso alusuario �nal.

NetBSD (https://www.netbsd.org)

[email protected] 38 Antonio Carrillo Ledesma, Et alii

Page 41: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Está basado en un conjunto de aplicaciones open source, incluyendo 4.4BSD-Lite de la Universidad de California en Berkeley, Net/2 (Berkeley Net-working Release 2), el sistema grá�co X del MIT y aplicaciones del proyectoGNU. Tiene Licencia BSD. NetBSD ha invertido sus energías en proveer deun sistema operativo estable, multiplataforma, seguro y orientado a la inves-tigación. Está portado a 56 arquitecturas de Hardware y suele ser el primeroen implementar tecnologías nuevas, como IPv6.

OpenBSD (https://www.openbsd.org)Está basado en 4.4 BSD y es un descendiente de NetBSD. El proyecto

tiene el foco puesto de forma particular en la seguridad y criptografía. Losesfuerzos se centran en la portabilidad, cumplimiento de normas, correc-ción, seguridad y criptografía integrada. Tiene Licencia BSD. La �losofía delproyecto puede ser descrita en tres palabras: "Free, Functional and Secure"(Libre, Funcional y Seguro).

DragonFlyBSD (https://www.dragon�ybsd.org)Tiene comometa ofrecer un alto rendimiento y escalabilidad bajo cualquier

entorno, desde computadoras de un solo usuario hasta enormes sistemas declústeres. DragonFlyBSD tiene varios objetivos técnicos a largo plazo, peroel desarrollo se centra en ofrecer una infraestructura habilitada para SMPque sea fácil de entender, mantener y desarrollar.

2.3 Mac OS

Mac OS9 (véase [5]) -del inglés Macintosh Operating System, en español Sis-tema Operativo Macintosh- es el nombre del sistema operativo propietario(véase apéndice 14.2) creado por Apple para su línea de computadoras Mac-intosh, también aplicado retroactivamente a las versiones anteriores a System7.6, y que apareció por primera vez en System 7.5.1. Es conocido por habersido uno de los primeros sistemas dirigidos a un gran público al contar conuna interfaz grá�ca compuesta por la interacción del Mouse con ventanas,íconos y menús.

9macOS Big Sur 11.0 es el reemplazo de Mac OS X disponible a partir de noviembredel 2020, con el abandono de los procesadores de INTEL para usar los procesadores M1de ARM.

[email protected] 39 Antonio Carrillo Ledesma, Et alii

Page 42: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Debido a la existencia del sistema operativo en los primeros años de sulínea Macintosh resultó a favor de que la máquina fuera más agradable alusuario, diferenciándolo de otros sistemas contemporáneos, como MS-DOS,que eran un desafío técnico. El equipo de desarrollo del Mac OS originalincluía a Bill Atkinson, Jef Raskin y Andy Hertzfeld.Este fue el comienzo del Mac OS clásico, desarrollado íntegramente por

Apple, cuya primera versión vio la luz en 1985. Su desarrollo se extenderíahasta la versión 9 del sistema, lanzada en 1999. A partir de la versión 10 (MacOS X), el sistema cambió su arquitectura totalmente y comenzó a basarseen BSD Unix, sin embargo su interfaz grá�ca mantiene muchos elementos delas versiones anteriores.Hay una gran variedad de versiones sobre cómo fue desarrollado el Mac

OS original y dónde se originaron las ideas subyacentes. Pese a esto, losdocumentos históricos prueban la existencia de una relación, en sus inicios,entre el proyecto Macintosh y el proyecto Alto de Xerox PARC. Las con-tribuciones iniciales del Sketchpad de Ivan Sutherland y el On-Line Systemde Doug Engelbart también fueron signi�cativas.

Versiones Antes de la introducción de los últimos sistemas basados en elmicroprocesador PowerPC G3, partes signi�cativas del sistema se almace-naban en la memoria física de sólo lectura de la placa base. El propósitoinicial de esto fue evitar el uso de la capacidad de almacenamiento limitadade los disquetes de apoyo al sistema, dado que los primeros equipos Macintoshno tenían disco duro. Sólo el modelo Macintosh Classic de 1991, podía seriniciado desde la memoria ROM.Esta arquitectura también permitió una interfaz de sistema operativo

totalmente grá�ca en el nivel más bajo, sin la necesidad de una consola desólo texto o el modo de comandos de línea. Los errores en tiempo de arranque,como la búsqueda de unidades de disco que no funcionaban, se comunicabanal usuario de manera grá�ca, generalmente con un ícono o con mensajes conel tipo de letra Chicago y un "timbre de la muerte" o una serie de pitidos.Esto contrastaba con los PCs de la época, que mostraban tales mensajes

con un tipo de letra monoespaciada sobre un fondo negro, y que requeríanel uso del teclado y no de un ratón, para el acceso. Para proporcionar talesdetalles en un nivel bajo, Mac OS dependía del Software de la base del sistemagrabado en la ROM de la placa base, lo que más tarde ayudó a garantizarque sólo los equipos de Apple o los clones bajo licencia (con el contenido de la

[email protected] 40 Antonio Carrillo Ledesma, Et alii

Page 43: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

memoria ROM protegido por derechos de autor de Apple, pudieran ejecutarMac OS).Mac OS puede ser dividido en tres familias:

� La familia Mac OS Classic, basada en el código propio de Apple Com-puter.

� El Sistema Operativo Mac OS X, desarrollado a partir de la familiaMac OS Classic y NeXTSTEP, el cual estaba basado en UNIX.

� macOS Big Sur 11 es el reemplazo de Mac OS X, disponible a partirde noviembre del 2020 usando los procesadores M1 de ARM que hanmostrado un gran desempeño en comparación con equipos INTEL degama alta.

Linux Dentro de IOS Es posible tener un Linux completo en IOS ademásde poder hacer uso de Secure Shell (SSH) a una computadora con Linux. Parala primera forma, se puede ejecutar un sistema virtualizado utilizando AlpineLinux con iSH, que es de código abierto, pero debe instalarse utilizando laaplicación TestFlight propiedad de Apple.Alternativamente hay aplicaciones de emulador de terminal de código

abierto que proporcionan herramientas de código abierto dentro de un en-torno restringido. Esta es la opción más limitada -en realidad no nos permiteejecutar Linux, pero estaremos ejecutando herramientas de Linux- pero brin-dan algunas funciones de línea de comandos. Por ejemplo:

� Sandboxed Shell, con más de 80 comandos e incluye Python 2 y 3, Lua,C, Clang, etc.

� a-Shell, otorga acceso al sistema de archivos e incluye Lua, Python,Tex, Vim, JavaScript, C yC++, junto con Clang y Clang++; y permiteinstalar paquetes de Python con pip.

� Blink Shell, permite la conexión con servidores.

� iSH, es un Shell Linux que usa usermode x86 emulación y traduccionesde syscall.

[email protected] 41 Antonio Carrillo Ledesma, Et alii

Page 44: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

2.4 Linux

GNU/Linux (véase [4]) también conocido como Linux, es un sistema ope-rativo libre (véase apéndice 14.1) tipo Unix; multiplataforma, multiusuarioy multitarea. El sistema es la combinación de varios proyectos, entre loscuales destacan GNU (encabezado por Richard Stallman y la Free SoftwareFoundation) y el núcleo Linux (encabezado por Linus Torvalds). Su desa-rrollo es uno de los ejemplos más prominentes de Software libre: todo sucódigo fuente puede ser utilizado, modi�cado y redistribuido libremente porcualquiera, bajo los términos de la GPL (Licencia Pública General de GNU)y otra serie de licencias libres.A pesar de que «Linux» se denomina en la jerga cotidiana al sistema

operativo, este es en realidad solo el Kernel (núcleo) del sistema. La idea dehacer un sistema completo se remonta a mediados de la década de 1980 con elproyecto GNU, así como una gran cantidad de los componentes que se usanhoy en día -además del núcleo-, que van desde los compiladores de GNU hastaentornos de escritorio. Sin embargo, tras la aparición de Linux en la décadade 1990 una parte signi�cativa de los medios generales y especializados hanutilizado el término «Linux» para referirse a todo. Esto ha sido motivo depolémicas.Cabe señalar que existen derivados de Linux que no tienen componentes

GNU -por ejemplo Android-, así como distribuciones de GNU donde Linuxestá ausente -por ejemplo Debian GNU/Hurd-.A GNU/Linux se le encuentra normalmente en forma de compendios

conocidos como distribuciones o distros, a las cuales se les ha adicionadoselecciones de aplicaciones y programas para descargar e instalar las mismas.El propósito de una distribución es ofrecer GNU/Linux como un producto�nal que el usuario pueda instalar, cumpliendo con las necesidades de ungrupo de usuarios o bien del público en general.Algunas de ellas son especialmente conocidas por su uso en servidores

de internet y supercomputadoras -donde GNU/Linux tiene la cuota más im-portante del mercado. Según el informe de International Data Corporation(IDC), GNU/Linux es utilizado por los más poderosos 500 sistemas de super-cómputo de alto desempeño del mundo10-, en cuanto a teléfonos inteligentesy tabletas tiene una cuota de 86% y con menor participación, el sistemaGNU/Linux también se usa en el segmento de las computadoras de escrito-

10Top500.org informó, en su lista de noviembre de 2017 -y así ha continuado hastaahora-, que las 500 supercomputadoras más potentes del mundo utilizan Linux.

[email protected] 42 Antonio Carrillo Ledesma, Et alii

Page 45: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

rio, portátiles, computadoras de bolsillo, sistemas embebidos, videoconsolasy otros dispositivos.

Creación El proyecto GNU, iniciado en 1983 por Richard Stallman, tieneel objetivo de crear un «sistema de Software compatible con Unix compuestoenteramente de Software libre» . El trabajo comenzó en el año 1984. Mástarde, en 1985, Stallman fundó la Free Software Foundation para �nanciar eldesarrollo de GNU, y escribió la Licencia Pública General de GNU en 1989.A principios de la década de 1990, muchos de los programas que se requierenen un sistema operativo -como bibliotecas, compiladores, editores de texto,el Shell Unix, y un sistema de ventanas- ya se encontraban en operación. Sinembargo otros elementos como los controladores de dispositivos y los serviciosestaban incompletos.Linus Torvalds ha declarado que si el núcleo de GNU hubiera estado

disponible en el momento (1991), no se habría decidido a escribir su propionúcleo. Aunque no fue liberado hasta 1992 debido a complicaciones legales, eldesarrollo de BSD -de los cuales NetBSD, OpenBSD y FreeBSD descienden-es anterior al de Linux. Torvalds también ha declarado que si BSD hubieraestado disponible en ese momento, probablemente no habría creado Linux.En 1991 Torvalds asistía a la Universidad de Helsinki. Usuario de MINIX

y de los programas provenientes de GNU, se mostraba interesado por lossistemas operativos. Comenzó a trabajar en su propio núcleo en ese año,frustrado por la concesión de licencias que utilizaba MINIX, que en ese mo-mento se limitaba a uso educativo.El núcleo Linux maduró hasta superar a los otros núcleos en desarro-

llo. Las aplicaciones GNU también reemplazaron todos los componentes deMINIX, porque era ventajoso utilizar el código libre del proyecto GNU con elnuevo sistema operativo. El código GNU con licencia bajo la GPL puede serreutilizado en otros programas de computadora, siempre y cuando tambiénse liberen bajo la misma licencia o una licencia compatible. Torvalds inicióun cambio de su licencia original, que prohibía la redistribución comercial ala GPL. Los desarrolladores de ambas partes trabajaron para integrar com-ponentes de GNU con el núcleo Linux, consiguiendo un sistema operativocompletamente funcional.Para darnos una idea del frenético crecimiento del Kernel de Linux, por

ejemplo, en la versión 4.10 se añadieron 632,782 líneas de código nuevo yen el Kernel 4.12 se añadieron más 1.2 millones de líneas de código nuevas,

[email protected] 43 Antonio Carrillo Ledesma, Et alii

Page 46: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

teniendo un total de 24,170,860 líneas de código. El número de desarro-lladores involucrados fue de 1821 colaboradores y 220 empleados hicieron unpromedio de 231 cambios por día, casi 10 cambios por hora, diariamente seañadieron casi 20 mil líneas de código, y casi 800 líneas por hora en dichaversión.Hay que precisar que, si bien el código alojado en el repositorio del Kernel

es cuantioso, sólo una pequeña parte del mismo afectará a nuestras propiasinstalaciones de GNU/Linux, pues gran parte del código fuente es especí�copara cada una de las (múltiples) arquitecturas de Hardware compatibles conLinux.De hecho, a principios de 2018, Greg Kroah-Hartman (responsable de

mantenimiento del código), a�rmó que "un portátil promedio usa alrededorde 2 millones de líneas de código del Kernel para funcionar correctamente",cuando en aquel momento, el Kernel completo ya contaba con 25 millones delíneas de código (que ya han aumentado a más de 28 millones en la versión5.8).GNU/Linux puede funcionar tanto en entorno grá�co como en modo con-

sola. La consola es común en distribuciones para servidores, mientras que lainterfaz grá�ca está orientada al usuario �nal del hogar como empresarial.Así mismo, también existen los entornos de escritorio, que son un conjuntode programas conformado por ventanas, íconos y muchas aplicaciones que fa-cilitan el uso de la computadora. Los entornos de escritorio más populares enGNU/Linux son: GNOME, KDE, LXQt, LXDE, Xfce, Unity, MATE, Cin-namon, Pantheon, Deepin, Budgie, PIXEL, Enlightenment, Trinity, Moksha,Ukui, entre muchos otros.

¿Qué es lo que está llevando a la gente a probar distribuciones de GNU/Li-nux y a utilizarlas como sistema operativo principal en sus equipos de cóm-puto? A continuación, vamos a exponer una lista con las razones por lasque deberías probar una distribución de GNU/Linux -ya que es una sabiaelección- como sistema operativo principal en tu equipo de cómputo:

Software Libre y Código Abierto muchos usuarios de internet noconocen el signi�cado principal del Software libre ni del código abierto. Soft-ware libre son esos programas que se automani�estan, por parte de sus au-tores, que puede ser copiado, modi�cado y redistribuido con o sin cambioso mejoras. El concepto de código abierto, es el Software desarrollado y dis-tribuido libremente. Tiene bene�cios prácticos ya que si alguien tiene una

[email protected] 44 Antonio Carrillo Ledesma, Et alii

Page 47: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

idea o piensa que puede mejorar el código puede modi�carlo sin problemas.

Seguridad no descubrimos el agua tibia diciendo que el sistema ope-rativo de Microsoft es el más atacado por virus y Malware y además, se handescubierto varios virus para Mac OS, unos que llevan ocultos mucho tiempo.Pero con GNU/Linux eso no pasa, ya que es un sistema su�cientementeseguro y que no tenemos muchos registros de ataques a esta plataforma.Aunque hay compañías Linuxeras, como Oracle, Novell, Canonical, Red

Hat o SUSE, donde el grueso de distribuciones y Software Linux está man-tenido por usuarios y colectivos sin ánimo de lucro. A diferencia de Microsofty Windows, detrás de Linux no es habitual encontrarnos con una empresa conintereses empresariales, de manera que es más fácil evitar problemas de tipolegal o violaciones de nuestra privacidad o seguridad por parte de quienes hanprogramado esa aplicación o versión de GNU/Linux que usamos. Un ejemploes la recopilación de datos de uso. A diferencia de los sistemas operativoscomerciales, en GNU/Linux no es habitual toparse con este problema.

Es Gratis aunque Mac OS X también es gratuito, está pensado parafuncionar solamente en equipos de cómputo Apple. En cuanto a Windows,a pesar de la tendencia, sigue siendo de pago, a pesar de las muchas ofertasque hizo para cambiar de Windows 7 a Windows 10.Si adquieres una computadora nueva con Windows, el precio incluye la

licencia de compra. Por otro lado, todo el mundo sabe que los sistemasoperativos de GNU/Linux son totalmente gratuitos y puedes instalarlos encualquier equipo de cómputo. Las distribuciones más populares puedesdescargarlas desde sus páginas o�ciales e instalarlas las veces que quierasy en el número de equipos de cómputo que necesites. Además, no tendremosque pagar por utilizar el Software, sin embargo, podremos donar lo que nosplazca al proyecto para que sigan mejorándolo.

Fácil de Utilizar muchos de nosotros hemos utilizado un sistema ope-rativo basado en GNU/Linux y no lo sabíamos. Aeropuertos, estaciones detren, sistemas de gestión empresarial y ahora en el espacio con SpaceX, etc.Muchos de estos sistemas están basados en GNU/Linux.Una de las barreras que durante años ha evitado a muchos usar Linux

es su complejidad. O al menos lo era cuando la mayoría de tareas debíashacerlas desde la línea de comandos.

[email protected] 45 Antonio Carrillo Ledesma, Et alii

Page 48: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

En la actualidad, distribuciones GNU/Linux como Ubuntu, Mint, Man-jaro, Debian u OpenSUSE ofrecen una interfaz similar aWindows y con todaslas herramientas y aplicaciones necesarias para empezar a disfrutar desde elprimer día.Si necesitas un nuevo Software, la mayoría de distribuciones cuentan con

su propia tienda de aplicaciones o herramienta de gestión de aplicaciones.Todo está pensado para que cualquiera pueda manejarse sin problemas.Está claro que existen versiones de GNU/Linux complejas, pero están

enfocadas a un público muy concreto. Las distribuciones domésticas cumplencon creces con los requisitos de usuarios amateurs o recién llegados.

Versatilidad con�gurar un sistema a nuestro gusto, en Windows o enMac OS X, es algo realmente difícil, pero con los sistemas operativos basa-dos en GNU/Linux se puede tener un sistema operativo totalmente único ytotalmente personalizable.La naturaleza de GNU/Linux y su �losofía de código abierto y libre hace

posible que contemos con cientos de versiones diferentes. Esto implica quepodamos elegir una versión de GNU/Linux, o distribución, en función depara qué la queremos. ¿Para educación? ¿Para niños? ¿Para uso doméstico?¿Para gestión de redes? ¿Para temas de seguridad? ¿Para reciclar un PCantiguo? Incluso las hay para arreglar problemas de Windows.Esta variedad signi�ca que no sólo podemos emplear GNU/Linux en una

computadora doméstica. Los ejemplos más claros son Raspberry Pi, JetsonNano, Pine64 y Arduino11, son soluciones baratas y diminutas para montartu propia computadora personal, tu centro multimedia o cualquier artilugioelectrónico que desees diseñar. Y para hacerlo funcionar, cuentas con variasdistribuciones Linux enfocadas a dicho Hardware.Usar GNU/Linux signi�ca que puedes cambiar cualquier elemento de tu

sistema operativo. Me re�ero a ir más allá de los programas y aplicaciones pordefecto. GNU/Linux cuenta con diferentes escritorios y gestores de ventanas,de manera que podemos elegir el que queramos, algo que permiten muchasdistribuciones GNU/Linux. Mientras que Windows cuenta con un escritoriopor defecto, en GNU/Linux podemos elegir entre: GNOME, KDE, LXQt,LXDE, Xfce, Unity, MATE, Cinnamon, Pantheon, Deepin, Budgie, PIXEL,

11Son ordenadores del tamaño de una tarjeta de crédito que se conectan a un televisor, unteclado y ratón. Es una placa que soporta varios componentes necesarios en un ordenadorcomún y cuyo precio inicial es de 15 dólares.

[email protected] 46 Antonio Carrillo Ledesma, Et alii

Page 49: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Enlightenment, Trinity, Moksha, Ukui, etc. En la variedad está el gusto.Además, cualquier con�guración o elemento del sistema operativo es sus-

ceptible de ser alterado. La única limitación es que seamos capaces o ten-gamos los conocimientos adecuados. Pero siempre podemos encontrar eninternet un tutorial donde nos explique cómo hacerlo.Existen distribuciones de Linux de tamaño muy reducido, por ejemplo:

BasicLinux ocupa 2.8 MB, requiere un procesador 386 y 3 MB de RAM ycuenta con el escritorio grá�co JWM, Nanolinux ocupa 14 MB, utiliza SLWMcomo escritorio y cuenta con navegador, procesador de texto, hoja de cálculo,cliente IRC, etc.

Actualizaciones del Sistema Operativo hablando de actualizaciones,sus aplicaciones se actualizan prácticamente al día, en cuanto el desarrolladorlanza dicha actualización. Por lo que siempre podemos tener nuestros pro-gramas y aplicaciones actualizadas.Además para los usuarios que así lo requieran existen versiones de so-

porte a largo plazo (Long-Term Support , LTS) normalmente se asocia conuna aplicación o un sistema operativo para el que obtendremos seguridad,mantenimiento y (a veces) actualizaciones de funciones durante un períodode tiempo más largo.Las versiones LTS se consideran las versiones más estables que se someten

a pruebas exhaustivas y en su mayoría incluyen años de mejoras en el camino.Es importante tener en cuenta que una versión de Software LTS no implicanecesariamente actualizaciones de funciones a menos que haya una versiónmás reciente de LTS. Sin embargo, obtendrá las correcciones de errores y lascorrecciones de seguridad necesarias en las actualizaciones de una versión deSoporte a largo plazo.Se recomienda una versión LTS para consumidores, negocios y empresas

listos para la producción porque obtiene años de soporte de Software y sincambios que rompan el sistema con las actualizaciones. Si observamos unaversión que no es LTS para cualquier Software, generalmente es la versión másavanzada con nuevas funciones y un período corto de soporte (por ejemplo,6-9 meses) en comparación con 3-5 años de soporte en un LTS.

Tiendas de Aplicaciones lo mejor de las distribuciones de GNU/Linuxes que tienen una característica en común, sus tiendas de aplicaciones. Yaque vamos a poder instalar cualquier tipo de programa que necesitemos con

[email protected] 47 Antonio Carrillo Ledesma, Et alii

Page 50: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

un Click. Recordamos que esto es algo que Windows está intentando con supropia tienda de aplicaciones, pero no están teniendo muy buenos resultados.

Compatibilidad muchos han experimentado problemas a la hora deactualizar sus sistemas operativos con los programas que tenían instalados.Pero eso con GNU/Linux, no pasa, ya que todas sus actualizaciones tienenretrocompatibilidad a largo plazo dentro de su distribución.Hoy en día la mayoría de aplicaciones y servicios Online cuentan con ver-

sión compatible para cualquier sistema operativo. Siendo más fácil crear unaaplicación multiplataforma, por lo que GNU/Linux cuenta con un catálogode Software que poco o nada tiene que envidiar a Windows o Mac OS X.En el catálogo destacan las aplicaciones gratuitas y de código abierto, pero

también surgen proyectos comerciales, y en la lista se incluyen los juegos, cadavez más presentes en GNU/Linux.Seguramente hay algún Software no disponible en GNU/Linux, pero es

más que probable que encontremos una alternativa o, en su defecto, quepodamos ejecutarlo mediante Wine o empleando máquinas virtuales comoKVM/QEMU o VirtualBox.En cuanto al Hardware, la comunidad GNU/Linux ha avanzado mucho

en la creación de controladores o Drivers para emplear cualquier dispositivoo componente en GNU/Linux. Podemos encontrarnos con alguna excepción,pero la mayoría de dispositivos cuentan con un controlador compatible pordefecto.

Está en Todas Partes GNU/Linux está presente en la infraestructurade grandes empresas como Amazon, Facebook, Net�ix, NASA, SpaceX, elgran colisionador de hadrones o IBM y en el año 2021 llego a Marte enel sistema operativo del helicóptero que acompaña al rover Perseverance,etc. A nivel de usuario, muchos dispositivos emplean este sistema operativo,bien en alguna de sus versiones o a través de Android, que salvando lasdistancias, todavía conserva gran parte de su origen Linuxero. Por otro lado,las quinientas principales supercomputadoras emplean Linux como sistemaoperativo, ya que permite trabajar en todo tipo de entornos y situaciones.Las grandes empresas de internet hace años que vieron en GNU/Linux

una gran oportunidad, y si bien a nivel usuario doméstico no está tan exten-dido, nunca había sido tan fácil dar el paso. Para hacernos una idea, sólohay que ver la lista de empresas que apoyan a GNU/Linux a través de The

[email protected] 48 Antonio Carrillo Ledesma, Et alii

Page 51: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Linux Foundation. Una de las más recientes, la propia Microsoft.

La Comunidad GNU/Linux �nalmente, hay que hablar de la fabu-losa comunidad de GNU/Linux. Podemos preguntar lo que queramos en susforos, cambiar el código, enviar tus programas, sin problemas. ¿Trabas en lacon�guración? Te lo solucionan sin preocupación, ¿consejos sobre Software?Hay cientos de hilos con soluciones. Y nosotros, ponemos nuestro granito dearena con este trabajo.

Aprender a Usar Linux Existen diversos sitios Web que están enfocadosa explorar detalladamente cada distribución actual o antigua, a un niveltécnico acompañado de grandes y útiles análisis técnicos sobre los mismos,lo que facilita el aprendizaje puntual sobre qué distribución usar o empezara usar sin tanta incertidumbre, algunos de estos lugares son:

� ArchiveOS https://archiveos.org

� Distro Chooser https://distrochooser.de/es/

� Distro Watch https://distrowatch.com

� Linux Distribution List https://lwn.net/Distributions/

¿Qué otros sabores de GNU/Linux hay?

https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg

Existen distintas distribuciones de GNU/Linux12 para instalar, una delas más ampliamente usadas es Debian GNU/Linux13 y sus derivadas comoUbuntu. La comunidad de GNU/Linux te apoya para obtener, instalar y quede una vez por todas puedas usar GNU/Linux en tu computadora.Puedes conocer y descargar las diferentes distribuciones desde:

https://es.wikipedia.org/wiki/Anexo:Distribuciones_Linux

https://en.wikipedia.org/wiki/List_of_Linux_distributions

12Una lista de las distribuciones de Linux y su árbol de vida puede verse en la páginaWeb http://futurist.se/gldt/13Algunas de las razones para instalar GNU/Linux Debian están detalladas en su página

Web https://www.debian.org/intro/why_debian.es.html

[email protected] 49 Antonio Carrillo Ledesma, Et alii

Page 52: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y ver cuál es la que más te conviene:

https://en.wikipedia.org/wiki/Comparison_of_Linux_distributions

o probar alguna versión Live14:

https://livecdlist.com/

también las puedes correr como máquina virtual para VirtualBox:

https://www.osboxes.org/

o máquina virtual para QEMU/KVM:

https://docs.openstack.org/image-guide/obtain-images.html

https://github.com/palmerclu¤/qemu-images

https://bierbaumer.net/qemu/

por otro lado, existen diferentes servicios Web que permiten instalar, con-�gurar y usar cientos de sistemas operativos Linux y Unix desde el navegador,una muestra de estos proyectos son:Distrotest https://distrotest.netJSLinux https://bellard.org/jslinux

Ahora, Windows 10 Build 2020 con WSL215 (Windows Subsystem forLinux), tiene su propio Kernel de Linux que permite instalar de manera casinativa diversas distribuciones de GNU/Linux permitiendo tener lo mejor deambos mundos en un mismo equipo.

En la red existen múltiples sitios especializados y una amplia bibliografíapara aprender a usar, administrar y optimizar cada uno de los distintos as-pectos de Linux, nosotros hemos seleccionado diversos textos que ponemos asu disposición en:

Sistemas operativos

14Linux es uno de los sistemas operativos pioneros en ejecutar de forma autónoma osin instalar en la computadora, existen diferentes distribuciones Live -descargables paraformato CD, DVD, USB- de sistemas operativos y múltiples aplicaciones almacenados enun medio extraíble, que pueden ejecutarse directamente en una computadora, estos sedescargan de la Web generalmente en formato ISO.15https://docs.microsoft.com/en-us/windows/wsl/install-win10

[email protected] 50 Antonio Carrillo Ledesma, Et alii

Page 53: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

2.5 Android

Android (véase [6]) es un sistema operativo basado en el núcleo Linux (véaseapéndice 14.1). Fue diseñado principalmente para dispositivos móviles conpantalla táctil, como teléfonos inteligentes, tabletas y también para relojesinteligentes, televisores y automóviles. Inicialmente fue desarrollado por An-droid Inc., empresa que Google respaldó económicamente y más tarde, en2005, compró. Android fue presentado en 2007 junto a la fundación delOpen Handset Alliance (un consorcio de compañías de Hardware, Softwarey telecomunicaciones) para avanzar en los estándares abiertos de los disposi-tivos móviles. El primer móvil con el sistema operativo Android fue el HTCDream y se vendió en octubre de 2008. Android es el sistema operativo móvil(SmartPhone y tabletas) más utilizado del mundo, con una cuota de mercadodel 86% al año 2020, muy por encima del 13.9% de iOS.El éxito del sistema operativo lo ha convertido en objeto de litigios sobre

patentes en el marco de las llamadas guerras de patentes entre las empresas deteléfonos inteligentes. Según los documentos secretos �ltrados en 2013 y 2014,el sistema operativo es uno de los objetivos de las agencias de inteligenciainternacionales.La versión básica de Android es conocida como Android Open Source

Project (AOSP). El 25 de junio de 2014 en la Conferencia de DesarrolladoresGoogle I/O, Google mostró una evolución de la marca Android, con el �n deuni�car tanto el Hardware como el Software y ampliar mercados. El 17 demayo de 2017, se presentó Android Go. Una versión más ligera del sistemaoperativo para ayudar a que la mitad del mundo sin Smartphone consigauno en menos de cinco años. Incluye versiones especiales de sus aplicacionesdonde el consumo de datos se reduce al máximo.

Arquitectura del Sistema Android los componentes principales del sis-tema operativo de Android16:

Aplicaciones: las aplicaciones base incluyen un cliente de correo elec-trónico, programa de SMS, calendario, mapas, navegador, contactos y otros.Todas las aplicaciones están escritas en lenguaje de programación Java.

16Android tiene la base de Linux, por ello en cualquier dispositivo que soporte dichosistema operativo es posible instalar una aplicación para acceder a la terminal de líneade comandos -por ejemplo ConnectBot-, y en ella podemos correr los comandos de BASHcomo en un sistema GNU/Linux.

[email protected] 51 Antonio Carrillo Ledesma, Et alii

Page 54: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Marco de trabajo de aplicaciones: los desarrolladores tienen accesocompleto a las mismas API del entorno de trabajo usados por las aplicacionesbase. La arquitectura esta diseñada para simpli�car la reutilización de com-ponentes; cualquier aplicación puede publicar sus capacidades y cualquierotra aplicación puede luego hacer uso de esas capacidades (sujeto a reglas deseguridad del Framework). Este mismo mecanismo permite que los compo-nentes sean reemplazados por el usuario.

Bibliotecas: Android incluye un conjunto de bibliotecas de C/C++usadas por varios componentes del sistema. Estas características se expo-nen a los desarrolladores a través del marco de trabajo de aplicaciones deAndroid. Algunas son: System C library (implementación biblioteca C es-tándar), bibliotecas de medios, bibliotecas de grá�cos, 3D y SQLite, entreotras.

Runtime de Android: Android incluye un conjunto de bibliotecasbase que proporcionan la mayor parte de las funciones disponibles en las bi-bliotecas base del lenguaje Java. Cada aplicación Android ejecuta su propioproceso, con su propia instancia de la máquina virtual Dalvik. Dalvik hasido escrito de forma que un dispositivo puede ejecutar múltiples máquinasvirtuales de forma e�ciente. Dalvik ejecutaba hasta la versión 5.0 archivos enel formato de ejecutable Dalvik (.dex), el cual está optimizado para memoriamínima. La Máquina Virtual está basada en registros y corre clases compi-ladas por el compilador de Java que han sido transformadas al formato .dexpor la herramienta incluida DX. Desde la versión 5.0 utiliza el ART, quecompila totalmente al momento de instalación de la aplicación.

Personalización muchos conocen a Android como el sistema operativomóvil más personalizable. Pero para los que no lo saben, recordamos que estábasado en el núcleo de Linux y que muchos desarrolladores están queriendollevar Android a un sistema operativo de escritorio.

Núcleo Linux: Android depende de Linux para los servicios base delsistema como seguridad, gestión de memoria, gestión de procesos, pila dered y modelo de controladores. El núcleo también actúa como una capa deabstracción entre el Hardware y el resto del Software.

[email protected] 52 Antonio Carrillo Ledesma, Et alii

Page 55: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

2.6 Chromebook y Chrome OS

Para entender la razón de ser de los Chromebooks, primero tenemos que en-tender qué es Chrome OS. Se trata de un sistema operativo creado por Googley diferente a Android. Está basado en el Kernel de Linux, y utiliza Chromecomo su interfaz de usuario principal. Esto quiere decir que su aspecto esprácticamente idéntico al de Chrome, pero con algunos añadidos como unabarra de tareas, un explorador de archivos y otros elementos presentes encualquier sistema operativo.Fue anunciado a mediados del 2009 como un intento de crear un sistema

basado en la nube y en aplicaciones Web. Esto hacía que, cuando se estabaconectado a internet se pudiera hacer muchas cosas gracias a herramientascomo Google Drive o las aplicaciones de la Chrome Web Store, pero quecuando dejaba de tener internet se limitaba mucho sus funciones.En cualquier caso, y pese a lo limitado que era en sus primeros años,

poco a poco Google lo ha hecho evolucionar. Primero se empezaron a añadiropciones a las aplicaciones de Google para poderse utilizar sin conexión, algoque también bene�ció a los usuarios que usaran Chrome en otros sistemasoperativos.Pero la evolución más grande fue llegando después. El primer gran paso

fue el anuncio de la compatibilidad para ejecutar aplicaciones de Android, yse fue implementando directamente la tienda de aplicaciones Google Play deAndroid para hacer que la experiencia de instalarlas fuera tan nativa como enAndroid. Aun así, hay que decir que la llegada de Android a Chrome OS hasido lenta, y han tardado algunos años en hacer que todo vaya funcionandocomo debería.Y a mediados de 2018 se anunció que Google Chrome también podrá uti-

lizar aplicaciones creadas para los sistemas GNU/Linux. Con ello, el catálogode aplicaciones diseñadas para funcionar sin conexión se multiplica bene�-ciando a la comunidad de desarrolladores libres, aunque también es de esperarque tarde algunos años en estar todo perfectamente integrado, ya que todavíase están lanzando poco a poco mejoras.Chrome OS es hoy en día un sistema operativo completo. Tiene lo básico,

aplicaciones nativas y compatibilidad con Android, que se une al reproductorde medios, gestor de archivos, con�guración de impresoras, etcétera. Además,al igual que el navegador, Chrome OS tiene también una versión libre llamadaChromium OS, que pese a no tener la tecnología nativa de Google sirvepara que la comunidad de desarrolladores independientes pueda ayudar a

[email protected] 53 Antonio Carrillo Ledesma, Et alii

Page 56: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

mejorarlo.Ahora bien, los Chromebook son equipos de cómputo personales que uti-

lizan como sistema operativo Chrome OS, desarrollado por Google y que, adiferencia de Windows, OS X y Linux, están pensados para utilizarse perma-nentemente conectados a internet, ya que se basan casi completamente en lanube.

Chromebook Apps también se incluye un reproductor multimedia, ytodo se sincroniza permanentemente en la nube. Por ello, si pretendemosutilizar un Chromebook sin conexión a internet, su funcionalidad es máslimitada que la de otros equipos de cómputo. De hecho, las aplicaciones seinstalan a través de Chrome Web Store, la tienda de aplicaciones integradaen Google Chrome, con lo que algunas de las herramientas más habituales(como O¢ ce o Skype, por ejemplo) tendrían que verse reemplazadas porGoogle Drive y Google Hangouts, aplicaciones nativas de Google.

Chrome Web Store no obstante, también se pueden utilizar de formalocal sin recurrir a la red, ya que muchos de los servicios de Google disponende un modo sin conexión que, una vez volvemos a disponer de internet, sesincronizarán sin problemas.

¿Cómo es un Chromebook? en un Chromebook podemos utilizardispositivos USB sin problemas, como memorias y discos externos, Web-cams, teclados y ratones, y por lo general suelen venir con una cantidad dealmacenamiento inferior a lo que estamos acostumbrados (ya que lo que sepretende es que todo esté en la nube, y no en nuestro disco duro local). Dehecho, al adquirir uno se nos obsequia con 100 GBytes de espacio en GoogleDrive.Igualmente, su precio suele ser bastante asequible (desde 179 dólares o

130 euros) y no requieren de un Hardware potente para funcionar, siendo laligereza de recursos una de sus mayores bondades. Por su parte, los equiposde cómputo portátiles con Chrome OS son lo que llamamos Chromebook,mientras que si preferimos el formato Mini PC, estaremos ante un Chrome-box.El inicio del sistema es prácticamente instantáneo y todo está listo para

funcionar en cuestión de segundos, y dadas sus características, un Chrome-book es un equipo ideal para navegar por internet ante todo.

[email protected] 54 Antonio Carrillo Ledesma, Et alii

Page 57: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Se accede desde la barra de herramientas en la parte inferior de la pantallaa las aplicaciones que tengamos instaladas, que en realidad se trata de unatajo a las apps que tengamos instaladas en Google Chrome.

Chromebook Integración por supuesto, los Chromebook tambiénson multiusuario, con la ventaja de que con simplemente iniciar sesión conotra cuenta de Gmail todo estará tal y como si lo hubiésemos con�guradocon ella (aplicaciones, servicios, historial y demás), y por este mismo mo-tivo se complementan a la perfección con otros dispositivos (ya sean equiposde cómputo, Smartphones o Tablets) en los que utilicemos los servicios deGoogle, gracias a la sincronización en la nube.Además, los Chromebook también presumen de no necesitar antivirus,

pues al almacenarse todo en la nube la seguridad está integrada por defectoy corre por parte de Google.

Microsoft en un Chromebook En el 2020 las empresas Parallels17 yGoogle llegaron a un acuerdo para ofrecer a los usuarios la posibilidad deejecutar aplicaciones Windows en Chrome OS. Ellas aseguran que en ChromeOS la integración será completa: las aplicaciones se ejecutarán cada una ensu propia ventana, como las nativas, y no dentro de unWindows virtualizado.Aunque ninguna de las dos compañías ha ofrecido aún una lista de apli-

caciones compatibles con esta función que será lanzada en el 2021, JohnSolomon (vicepresidente de Chrome OS) ha a�rmado que Microsoft O¢ ceserá una de ellas.El problema es que, por ahora, estas nuevas funcionalidades no estarán

disponibles para todos los usuarios de Chrome OS, sino únicamente para losde Chrome OS Enterprise, la versión empresarial del mismo.

Nota: en últimas fechas han aparecido proyectos que permiten instalardiversas distribuciones de GNU/Linux en los Chromebook, esto es debido aque Google deja de dar soporte a sus equipos después de algunos años de quesalieron al mercado, pese a que el equipo es totalmente funcional.

17Empresa (propiedad de Corel desde hace un año) desarrolladora del Software homó-nimo de virtualización que es especialmente popular entre los usuarios de Mac.

[email protected] 55 Antonio Carrillo Ledesma, Et alii

Page 58: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

2.7 Otros Sistemas Operativos

Sistemas Operativos para PC

1. Fuchsia OS.- Es un sistema operativo versátil y adaptable esta basadoen el microkernel Zircon en desarrollo por parte de Google, está disponibledesde un repositorio de Git y parece ser más un experimento para de-sarrollar al sucesor de Android, Chrome OS y Wear OS.

2. eComStation.- Seguro que muchos recuerdan el mítico OS/2 de IBM,sistema operativo que perdura con eComStation, derivado de este adap-tado al Hardware moderno. A diferencia de otras alternativas de lalista, este no es gratuito y sus precios comienzan desde 145 dólarespara la versión doméstica. Muchas aplicaciones libres como Firefox,OpenO¢ ce o VLC han sido portadas a este sistema operativo.

3. Haiku.- BeOS fue un sistema operativo lanzado en el año 1991 con muybuenas intenciones a nivel de optimización e interfaz. Sin embargo,como les sucedió a muchos otros, terminó sucumbiendo en este compli-cado mercado. Su legado ha sido continuado por Haiku, un sistema decódigo abierto que lleva ya años en desarrollo.

4. ReactOS.- Es una alternativa a la arquitectura Windows NT de Mi-crosoft totalmente abierta que no utiliza ningún tipo de código propie-tario. No obstante, es compatible con muchos de los controladores yaplicaciones de Windows. Como punto negativo, su desarrollo no estan rápido como muchos esperarían en un entorno tan cambiante comoeste.

5. FreeDOS.- Alternativa libre a DOS cuyo desarrollo sigue activo en estosmomentos. Se trata de un entorno bastante estable, pero que carecede interfaz grá�ca o multitarea. Es compatible a todos los niveles conMS-DOS y sus programas.

6. Solaris.- El sucesor de SunOS, de Sun Microsystems, empezó comouna distribución propietaria de UNIX, pero en 2005 fue liberado comoOpenSolaris. Más tarde, Oracle compró Sun y le cambió el nombre aOracle Solaris.

7. Illumos.- Basado en Open Solaris, este proyecto nació por parte de al-gunos de los ingenieros originales del sistema. En realidad, busca ser

[email protected] 56 Antonio Carrillo Ledesma, Et alii

Page 59: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

una base para crear distribuciones de este sistema operativo. OpenIn-diana es una de las más conocidas y utilizadas.

8. DexOS.- Un sistema operativo de 32 Bits escrito para la arquitecturax86 en lenguaje ensamblador. Está diseñado para programadores quedesean tener acceso directo al Hardware (incluyendo CPU y grá�cos)con un código bien comentado y documentado.

9. Syllable.- Sistema operativo nacido como fork de AtheOS, un clon deAmigaOS, aunque comparte mucho código con Linux. No tiene de-masiada utilidad para los usuarios domésticos, aunque es compatiblecon arquitecturas x86.

10. AROS Research Operating System.- Es otro sistema que implementa encódigo abierto las APIs de AmigaOS, con cuyos ejecutables es compa-tible a nivel binario en procesadores de 68k, además de ser compatiblea nivel de código con otras arquitecturas como x86 para la que se ofrecede manera nativa. Es portable y puede correr hospedado en Windows,Linux y FreeBSD.

11. MenuetOS.- Llamado también comoMeOS, su característica más desta-cada es que está programado completamente en lenguaje ensamblador.Está diseñado para funcionar en equipos muy básicos aunque soportahasta 32 GigaBytes de RAM. Con decir que el sistema cabe en un dis-quete de 1.44 Megabytes, está dicho todo. Aún así se las arregla paraincluir un escritorio grá�co y controladores para teclados, video, audio,USB o impresoras.

12. Visopsys.- Se trara de un sistema gratuito y libre bajo GPL que haestado en desarrollo desde 1997, como hobby de un solo programador,Andy McLaughlin. Soporta arquitecturas x86, está escrito en C y en-samblador y no se basa en ningún sistema preexistente, si bien utilizacódigo del kernel Linux, ofrece herramientas comunes de GNU y partede la interfaz grá�ca de usuario como los iconos, resultarán familiaresa los usuarios de KDE Plasma.

13. mOS.- Sistema operativo usado en centros de datos y para cómputode alto rendimiento (High Performance Computing HPC), se basa enel Kernel de Linux pero tiene su propio núcleo ligero LWK, el Kernel

[email protected] 57 Antonio Carrillo Ledesma, Et alii

Page 60: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

gestiona un pequeño número de núcleos de la CPU para asegurarse lacompatibilidad y el LWK Kernel gestiona el resto del sistema.

Sistemas Operativos para móviles

1. PinePhone.- Usa un sistema operativo basado en sistemas operativosde código abierto impulsado por la comunidad Linux, ha sido portadoa 16 diferentes distribuciones de Linux y 7 diferentes interfaces grá�-cas de usuario como: Mobian, Manjaro con interfaz plasma, UbuntuTouch, postmarketOS, LuneOS, Nemo Mobile, Maemo Leste, Tizen,entre otros. Además la compañía Pine64 es el segundo fabricante deteléfonos (después de OpenMoko) que ofrece el arranque desde unatarjeta microSD, que permite a los usuarios probar múltiples sistemasoperativos, antes de instalarse en la memoria Flash interna.

2. HarmonyOS.- Sistema operativo desarrollado por Huawei para reem-plazar a Android en sus equipos por el bloqueo por parte del gobiernode Estados Unidos, es un sistema operativo similar a la idea de FuchsiaOS, con la idea que pueda instalarse tanto en un ordenador, como enun teléfono, como en un coche conectado. En donde todos estos dis-positivos se conecten entre sí con una sola cuenta, dando así un pasohacia adelante en la utopía de la convergencia.

3. PostmarketOS.- Sistema operativo de Software libre y código abierto endesarrollo principalmente para teléfonos inteligentes y tabletas -es unaidea genial, la persecución de tener Linux en los dispositivos Smart-phone, como otra alternativa a los sistemas Android e iOS-, haciéndoselas primeras pruebas en teléfonos que ya no tienen uso. Distribuciónbasada en Alpine Linux. Puede usar diferentes interfaces de usuario,por ejemplo Plasma Mobile, Hildon, LuneOS UI, MATE, GNOME 3 yXFCE.

4. Plasma Mobile.- Es un sistema en fase de desarrollo por KDE quepermite la convergencia con los usuarios de KDE para escritorio.

5. Lomiri.- Sistema operativo basado en Linux que soporta dos sabores:Ubuntu Touch y Manjaro. Ambos basados en Unity 8 que están enconstante desarrollo.

[email protected] 58 Antonio Carrillo Ledesma, Et alii

Page 61: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

6. Windows Phone.- Sistema operativo móvil desarrollado por Microsoft,como sucesor de Windows Mobile. A diferencia de su predecesor fueenfocado en el mercado de consumo en lugar del mercado empresarial.

7. Symbian OS.- Era un sistema operativo que fue producto de la alianzade varias empresas de telefonía móvil, entre las que se encuentranNokia, Sony Ericsson y otros, el objetivo de Symbian fue crear unsistema operativo para terminales móviles.

8. BlackBerry OS.- Es un sistema operativo móvil desarrollado por Re-search In Motion para sus dispositivos BlackBerry. Es multitarea ytiene soporte para diferentes métodos de entrada adoptados por RIMpara su uso en computadoras de mano, particularmente la trackwheel,trackball, touchpad y pantallas táctiles.

9. HP webOS.- Se trata de un sistema operativo multitarea para sis-temas embebidos basado en Linux, desarrollado por Palm Inc., ahoraes propiedad de Hewlett-Packard Company.

10. Bada.- Fue un sistema operativo para teléfonos móviles desarrolladopor Samsung (Bada «océano» o «mar» en coreano). Diseñado paracubrir teléfonos inteligentes de gama alta como gama baja.

[email protected] 59 Antonio Carrillo Ledesma, Et alii

Page 62: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

3 Paquetes de Cálculo Numérico

El cálculo numérico permite diseñar e implementar algoritmos para que através de números y reglas matemáticas, simular procesos matemáticos com-plejos aplicados a la resolución de problemas de Ciencias e Ingenierías. Deesta forma los paquetes de cálculo numérico proporcionan todo el andamiajepara llevar a cabo todos aquellos procedimientos matemáticos susceptiblesde expresarse algorítmicamente que permitan su simulación o cálculo en pro-cesos más sencillos empleando números.Los paquetes de cálculo numérico, son programas matemáticos que ofre-

cen un entorno de desarrollo integrado (IDE) con un lenguaje de progra-mación propio con un amplio abanico de herramientas numéricas para lalectura, manipulación, análisis y gra�cación de datos. Entre sus prestacionesbásicas se hallan:

� Manejo de números reales y complejos

� La manipulación de vectores y matrices tanto reales como complejas

� Manejo de funciones elementales y especiales

� Resolución de problemas de álgebra lineal

� Resolución de ecuaciones no lineales

� La representación de datos y funciones

� La implementación de algoritmos

� Integración de funciones

� Máximos y mínimos de funciones

� Manipulación de polinomios

� Integración de ecuaciones diferenciales

� Gra�cación de funciones en 2D y 3D

� La comunicación con programas en otros lenguajes de programación ycon otros dispositivos de Hardware.

[email protected] 60 Antonio Carrillo Ledesma, Et alii

Page 63: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El programa comercial líder para el cálculo numérico es MATLAB (véase[35]) de la compañía MathWorks, este paquete salió a la venta en el año de1984 con la versión 1.0 y casi año con año, ha generado nuevas versiones de supaquete y múltiples sistemas de licenciamiento. Actualmente se comercializala versión 7.14 (R2012a) del año 2012 con más de 8 tipos de licenciamiento.Esta empresa cuenta con más de mil empleados y o�cinas en más de docepaíses alrededor del mundo.La idea detrás de paquetes como MATLAB es la de emplear grupos de

subrutinas escritas en principio en el lenguaje de programación FORTRANcomo son las librerías LINPACK (véase [55]) y EISPACK (véase [56]) paramanipular matrices y vectores y proporcionar un sencillo acceso a dicho Soft-ware y así, ser usado en los cursos de álgebra lineal y análisis numérico, sinnecesidad de escribir programas en lenguajes de bajo nivel.Estos paquetes, pueden disponer de herramientas adicionales que ex-

panden sus prestaciones, como son el diseño y simulación de sistemas decontrol. Además, se pueden ampliar las capacidades base de dichos pro-gramas con las cajas de herramientas y con los paquetes de bloques. Enalgunos casos existen versiones para cómputo secuencial y paralelo � tantoen memoria compartida como distribuida, también para usar los múltiplesCores grá�cos CUDA (GPUs) de las tarjetas NVIDIA� .Los paquetes de cómputo para el Cálculo Numérico más usados actual-

mente son:

� MATLAB (véase [35]) (abreviatura de MATrix LABoratory, "labora-torio de matrices") es un Software matemático que ofrece un entornode desarrollo integrado (IDE) con un lenguaje de programación pro-pio (lenguaje M). Entre sus prestaciones básicas se hallan: la mani-pulación de matrices, la representación de datos y funciones, la imple-mentación de algoritmos, la creación de interfaces de usuario (GUI) yla comunicación con programas en otros lenguajes y con otros dispo-sitivos Hardware. El paquete MATLAB dispone de dos herramientasadicionales que expanden sus prestaciones, a saber, plataforma de si-mulación multidominio Simulink (véase [58]) y editor de interfaces deusuario GUIDE. Además, se pueden ampliar las capacidades de MAT-LAB con su caja de herramientas (Tool Box) y las de Simulink con lospaquetes de bloques.

� Octave (véase [39]) es un programa de cálculo numérico de licenciaGNU (véase [15]), conocido por buscar una sintaxis similar a la de

[email protected] 61 Antonio Carrillo Ledesma, Et alii

Page 64: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

MATLAB, existiendo una gran compatibilidad en las funciones de cál-culo numérico.

� FreeMat (véase [38]) es un programa de cálculo numérico de licenciaGPL (véase [15]) que proporciona un ambiente libre para el rápidodesarrollo de prototipos para la Ciencia y la Ingeniería, además delprocesamiento de datos. Es similar a MATLAB y Octave, pero cuentacon una interfaz externa de código en los lenguajes de programaciónC, C++ y Fortran, incluso distribuye el desarrollo de algoritmos enparalelo con la interfaz de paso de mensajes llamada MPI.

� Scilab (véase [36]) es un programa de cálculo numérico de licencia Ce-CILL compatible con GPL (véase apéndice 14.1), desarrollado princi-palmente en Francia, que incluye su propia librería para grá�cos. Essimilar a MATLAB, pero no busca una compatibilidad total, como lopuede hacer FreeMat y Octave. Scilab tiene una herramienta para eldiseño y simulación de sistemas de control Scicos (véase [57]) similar aSimulink (véase [58]) de MATLAB.

� Julia (véase [37]) es un lenguaje de programación homoicónico, multi-plataforma y multiparadigma de tipado dinámico de alto nivel y altodesempeño para la computación genérica, técnica y cientí�ca, con unasintaxis similar a la de otros entornos de computación similares, conlicencia MIT (véase apéndice 14.1).

� Scipy (véase [40]) es una librería de herramientas numéricas para Python(véase [41]) con licencia Open Source (véase [15]). En su �losofía no hatratado de imitar a ninguno de los paquetes anteriores y tiene detrás elrespaldo de un auténtico lenguaje de programación orientado a objetose interpretado que también puede ser compilado para ganar velocidaden la ejecución. Este hecho le con�ere una gran potencia y la capacidadde bene�ciarse de las mejoras del lenguaje base.

Existen otros paquetes que pueden ser usados en el cálculo numérico� estos poseen características que enriquecen las opciones clásicas de los pa-quetes de cálculo numérico� :

� R (véase [77])

� Maple (véase [74])

[email protected] 62 Antonio Carrillo Ledesma, Et alii

Page 65: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Mathematica (véase [75])

� Maxima (véase [76])

3.1 MATLAB

El paquete MATLAB (véase [35]) tiene cientos de características, tan varia-das como el segmento de usuarios al que dicho Software esta dirigido. Al serun paquete tan completo, es difícil que un usuario promedio use las carac-terísticas avanzadas de dicho paquete; esto repercute en que el usuario prome-dio pague un alto costo por el valor de las licencias de uso sin usar dichascaracterísticas; y esto contrasta con un vertiginoso desarrollo de nuevas ca-racterísticas, que permite a la compañía lanzar una o más versiones por año,cada una con múltiples opciones de licenciamiento, según las necesidades delsegmento al que estan dirigidas.Las múltiples características y los miles de usuarios, han creado una comu-

nidad robusta, la que ha logrado una gran cantidad de funciones optimizadas,que han permitido la publicación de decenas libros, cientos de artículos ymiles de páginas Web en los cuales se muestra como resolver diversos pro-blemas concomitantes en Ciencias e Ingenierías usando dicho paquete y lainteracción con otros lenguajes como son C/C++, Fortran o Java.Entre las principales aplicaciones de MATLAB incluyen la de métodos

secuenciales y paralelos para resolver problemas de álgebra lineal con matri-ces (ralas, dispersas y densas), estadística, análisis de Fourier, optimización,integración numérica, resolución de ecuaciones diferenciales ordinarias y par-ciales, creación de grá�cos y visualización de datos. Además de opciones parahacer interpolación y regresión de datos, cálculo de eigen-valores y valoressingulares, etc.

Entornos de Programación Uno de los aspectos más agradables de MAT-LAB es su entorno de programación, que permite centralizar la informaciónen un entorno de ventanas. El depurador esta también incorporado en eleditor. Desgraciadamente, estas facilidades no se encuentran del todo desa-rrolladas en las otras herramientas � Octave, FreeMat, Scilab, Scipy� , peroes posible obtener la misma efectividad para las opciones básicas usando lalínea de comandos.

[email protected] 63 Antonio Carrillo Ledesma, Et alii

Page 66: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

3.2 Octave

El paquete Octave (véase [39]), al mantener una sintaxis similar a la deMATLAB, la gran mayoría de funcionalidades básicas son compatibles. Lasmúltiples características y los miles de usuarios, han creado una comunidadrobusta, la que ha logrado una gran cantidad de funciones optimizadas, quehan permitido la publicación de decenas libros, cientos de artículos y milesde páginas Web en los cuales se muestra como resolver diversos problemasconcomitantes en Ciencias e Ingenierías usando dicho paquete y la interaccióncon otros lenguajes como son C/C++, Fortran o Java.Entre las principales aplicaciones de Octave/MATLAB incluyen la de

métodos secuenciales y paralelos para resolver problemas de álgebra linealcon matrices (ralas, dispersas y densas), estadística, análisis de Fourier, op-timización, integración numérica, resolución de ecuaciones diferenciales or-dinarias y parciales, creación de grá�cos y visualización de datos. Ademásde opciones para hacer interpolación y regresión de datos, cálculo de eigen-valores y valores singulares, etc.Uno de los aspectos más agradables de Octave/MATLAB es su entorno

de programación, que permite centralizar la información en un entorno deventanas. El depurador esta también incorporado en el editor.

3.3 FreeMat

El paquete FreeMat (véase [38]) es un programa de cálculo numérico de li-cencia GPL (véase [15]) que proporciona un ambiente libre para el rápidodesarrollo de prototipos para la Ciencia y la Ingeniería, además del proce-samiento de datos, además cuenta con una interfaz externa de código en loslenguajes de programación en C, C++ y Fortran, incluso distribuye el desa-rrollo de algoritmos en paralelo con la interfaz de paso de mensajes llamadaMPI.Es similar a MATLAB, pero según sus desarrolladores es casi 95% com-

patible con MATLAB, actualmente trabaja en Windows, Linux, MAC yalgunas versiones de UNIX, las características soportadas son:

� Manipulación de arreglos N-dimensionales (N esta limitado a 6)

� Soporta enteros de 8, 16 y 32 bits y números de punto �otante de 32 y64 bits y tipo complejos de 64 y 128 bits

[email protected] 64 Antonio Carrillo Ledesma, Et alii

Page 67: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Soporta la aritmética de todos los tipos de datos soportados

� Resolución de sistemas de ecuaciones

� Descomposición de eigen-valores y valores singulares

� Arreglos heterogéneos

� Soporte completo para la estructura de arreglos dinámicos

� Soporte para FFT

� Paso por referencia

� Interfase para código externo C/C++/Fortran

� Soporte nativo para matrices dispersas

� Clases y sobrecarga de operadores

� Visualización de grá�cos en dos y tres dimensiones

Algunas diferencias básicas son:

� Soporte parcial para construcción de Widgets/GUI

� FreeMat a MEX interfase para portar archivos de MEX de MATLAB

� No implementación de GUI/Widgets

En cuanto al ambiente de desarrollo, FreeMat instala todo lo necesariopara un trabajo cómodo y funcional. Ya que permite abrir el editor de textoen el cual podemos hacer la depuración del mismo, ejecutar los programas dedemostración, acceder a las ventanas grá�cas, controlar la ejecución en curso,abrir �cheros y ejecutarlos, observar el estado de las variables de�nidas, entreotras cosas.

[email protected] 65 Antonio Carrillo Ledesma, Et alii

Page 68: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

3.4 Scilab

El paquete Scilab(véase [36]) tiene una licencia compatible con la de GPL,que por su madurez y la gran cantidad de usuarios, Universidades y Centrosde Investigación que lo usan y dan retroalimentación del paquete, ha logradoser un Software que permite hacer todas las opciones básicas de MATLABy algunas avanzadas también, es similar a MATLAB y permite cómputosecuencial y paralelo, pero no busca una compatibilidad total, por ello haydiferencias entre ambos paquetes. Scilab provee una forma para tratar deimportar código de MATLAB y generar su equivalente en Scilab.Algunas diferencias básicas son:

� Funciones: Las funciones en Scilab no son consideradas como archivospor separado � como archivos con extensión M en MATLAB� , unao más funciones pueden ser de�nidas en un solo archivo y el nom-bre de archivo no necesariamente tiene que estar relacionado con elnombre de las funciones. También, la(s) función(es) no se cargarán au-tomáticamente en Scilab, como lo es en MATLAB, después de que sunombre es invocado. Por lo general, se tiene que ejecutar el comandoGETF(�funcion_name�) antes de ser capaz de utilizar la función. Lasfunciones también se pueden de�nir en línea con el comando: de¤,además en Scilab para ejecutar un archivo de comandos se debe deusar exec(�archivo�), en MATLAB solo es necesario escribir el nombredel archivo.

� Comentarios: En MATLAB los comentarios inician con: %, en Scilablos comentarios inician con: //

� Variables: En Scilab las variables prede�nidas usualmente tienen el pre-�jo % (%i, %inf, etc.) estas son protegidas y no pueden ser rede�nidas.MATLAB prede�ne a las variables i y j como la unidad imaginaria ypueden ocasionar problemas si se tratan de usar estas en índices dearreglos, esto no pasa en Scilab.

� Variables Booleanas: En Scilab las variables booleanas son %T, %F y0, 1 en MATLAB, ellas corresponden con los conceptos de verdadero yfalso respectivamente. Haciendo uso de las variables booleanas puedenno producir el mismo valor en MATLAB como en Scilab. Por ejemplox=[1,2]; x([1,1]) [which is NOT x([%T,%T])] retorna [1,1] en SCILAB

[email protected] 66 Antonio Carrillo Ledesma, Et alii

Page 69: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y [1,2] en MATLAB. También si x es una matriz x(1:n,1)=[] or x(:)=[]no son validas en MATLAB.

� Polinomios: En Scilab los polinomios y las matrices polinomiales sonde�nidas por la función poly, ellas son consideradas como vectores decoe�cientes en MATLAB.

� Gra�cación: Excepto para los grá�cos simples plot y mesh en MATLABy plot3D en Scilab, estos no son compatibles y no siempre es posibleobtener grá�cos con la calidad de MATLAB.

� En Scilab existe un tipo de dato distinto, las listas, que en la prácticapermiten de�nir una nueva clase. Aunque hay también celdas y estruc-turas como en MATLAB, Scilab en sus últimas versiones recomiendausar las listas.

Estas y otras diferencias hacen que no sean compatibles los programasde MATLAB en Scilab, pero si se usa como una plataforma en la cual se leenseñe a los alumnos la sintaxis del paquete, Scilab proporciona todas lascapacidades básicas de MATLAB.Por otro lado, Scilab tiene una interfaz para integrar funciones escritas

en C o Fortran de manera relativamente sencilla, al menos para los tipos dedatos habituales. También, puede ser llamado desde un programa en Fortran,C, C++ o Java las rutinas de Scilab, o incluso traducir un programa de Scilaba Fortran.En cuanto al ambiente de desarrollo, Scilab instala todo lo necesario para

un trabajo cómodo y funcional. Ya que permite abrir el editor de texto enel cual podemos hacer la depuración del mismo, ejecutar los programas dedemostración, acceder a las ventanas grá�cas, controlar la ejecución en curso,abrir �cheros y ejecutarlos, observar el estado de las variables de�nidas, entreotras cosas.

3.5 Julia

Julia (véase [37]) es un lenguaje de programación homoicónico, multiplatafor-ma y multiparadigma � soporta programación orientada a objetos, por pro-cedimientos, funcional y meta además de multietapas� de tipado dinámicode alto nivel y alto desempeño para la computación genérica, técnica y cientí-�ca, con una sintaxis similar a la de otros entornos de computación similares,con licencia MIT (véase apéndice 14.1).

[email protected] 67 Antonio Carrillo Ledesma, Et alii

Page 70: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Dispone de un compilador avanzado (JIT), mecanismos para la ejecu-ción en paralelo y distribuida, además de una extensa biblioteca de funcionesmatemáticas. La biblioteca, desarrollada fundamentalmente en Julia, tam-bién contiene código desarrollado en C o Fortran, para el álgebra lineal, ge-neración de números aleatorios, procesamiento de señales, y procesamientode cadenas. Adicionalmente, la comunidad de desarrolladores de Julia con-tribuye con la creación y distribución de paquetes externos a través del gestorde paquetes integrado de Julia a un paso acelerado. IJulia es el resultadode la colaboración entre las comunidades de IPython y Julia, provee de unapoderosa interfaz grá�ca basada en el navegador para Julia.Algunas características básicas son:

� El despacho múltiple: permite de�nir el comportamiento de las fun-ciones a través de diversas combinaciones de tipos de argumentos

� Sistema de tipado dinámico: tipos para la documentación, la opti-mización y el despacho de funciones

� Buen desempeño, acercándose al de lenguajes estaticamente compiladoscomo C

� Gestor de paquetes integrado

� Macros tipo Lisp y otras herramientas para la meta-programación

� Llamar funciones de Python: mediante el paquete PyCall

� Llamar funciones de C directamente: sin necesidad de usar envoltoriosu APIs especiales

� Poderosas características de línea de comandos para gestionar otrosprocesos

� Diseñado para la computación paralela y distribuida

� Corutinas: hilos ligeros

� Los tipos de�nidos por el usuario son tan rápidos y compactos comolos tipos estandar integrados.

� Generación automática de código e�ciente y especializado para difer-entes tipos de argumentos

[email protected] 68 Antonio Carrillo Ledesma, Et alii

Page 71: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Conversiones y promociones para tipos numéricos y de otros tipos, ele-gantes y extensibles

� Soporte e�ciente para Unicode, incluyendo UTF-8 pero sin limitarsesolo a este

� Es de uso general, pero tiene todo lo necesario para hacer ciencia dedatos, aprendizaje automático, ecuaciones diferenciales, resolvedores desistemas lineales, etc.

Julia incluye una terminal interactiva, llamada REPL en donde se puedevisualizar automáticamente los resultados de la ejecución del programa osegmento de código. Tanto el compilador justo a tiempo (JIT) basado enLLVM así como el diseño del lenguaje le permiten a Julia acercarse e inclusoigualar a menudo el desempeño de C. Julia no le impone al usuario ningúnestilo de paralelismo en particular. En vez de esto, le provee con bloques deconstrucción clave para la computación distribuida, logrando hacer lo su�-cientemente �exible el soporte de varios estilos de paralelismo y permitiendoque los usuarios añadan más.

3.6 Scipy

El paquete Scipy (véase [40]) es parte de Python (véase [41]) y es imposiblecondensar en unas pocas páginas todas las posibilidades de un lenguaje depropósito general como Python. Al ser este un lenguaje interpretado, puedeteclearse línea a línea desde la entrada de comandos, pero también es posibleusar �cheros, estos por claridad suelen tener la extensión .py, este podría serejecutado con la orden python nombre_�chero.py. En este sentido es similara MATLAB.Ya que en su �losofía no ha tratado de imitar a ningún otro paquete y

tiene detrás el respaldo de un auténtico lenguaje de programación orientadoa objetos e interpretado que también puede ser compilado para ganar veloci-dad en la ejecución. Este hecho le con�ere una gran potencia y la capacidadde bene�ciarse de las mejoras del lenguaje base y posee herramientas secuen-ciales y paralelas � en memoria compartida y distribuida además de usar losCores grá�cos CUDA (GPUs) de las tarjetas NVIDIA� .Algunas diferencias básicas son:

[email protected] 69 Antonio Carrillo Ledesma, Et alii

Page 72: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� La sintaxis para introducir arreglos debe de incluir comas entre loselementos. Además, debe haber tantos símbolos �[�como dimensionesdel arreglo � y sus correspondientes cierres� .

� Los índices en los arreglos empiezan en 0.

� Es posible indicar el tipo de dato de cada elemento del arreglo en sucreación.

� Existen verdaderas operaciones entre enteros, como en C.

� Salvo los tipos de datos muy simples, todos los demás objetos que sepasan de una función lo hacen por referencia.

� En los arreglos de dos dimensiones las operaciones * y / se realizanelemento a elemento. La multiplicación de matrices y la multiplicaciónpor la inversa deben hacerse con dot e inv. Pero también se puede usarel tipo matrix en lugar de un arreglo, donde se recupera una sintaxissimilar a MATLAB.

En cuanto al entorno de programación por omisión se tiene acceso a IDLE(véase [61]), el entorno de desarrollo típico de Python. Permite compatibilizaruna ventana interactiva con la edición de los programas. La ventana inte-ractiva es similar a una consola normal de IPython (véase [62]), pero permitever de forma grá�ca los módulos accesibles, las clases y sus métodos, y sobretodo, una ventana de depuración que puede ser de gran ayuda. Existenotros entornos de programación como son Pydev (véase [63]), el cual es unprograma que permite desarrollar código dentro del entorno de programaciónECLIPSE (véase [64]). Otra opción es usar The Eric Python IDE (véase[65]), el cual es un auténtico entorno de desarrollo y gestión de proyectos dePython, este permite trabajar varias ventanas e incorpora el depurador.

3.7 Ventajas, Desventajas y Carencias

Notemos que el tener múltiples herramientas para realizar operaciones ele-mentales y avanzadas de cálculo numérico, es en sí misma una gran ventaja.Para los centros universitarios y usuarios ocasionales, las herramientas deSoftware libre son una herramienta invaluable. En el caso de empresas o

[email protected] 70 Antonio Carrillo Ledesma, Et alii

Page 73: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

usuarios avanzados que requieren usar opciones especializadas o generadaspor terceros, MATLAB destaca como la mejor herramienta de trabajo.Pero hay que hacer notar que:

� Funcionalidades básicas: Todos los paquetes implementan las funciona-lidades básicas, ya que todos llevan años desarrollándose.

� Funcionalidades especializadas: Por mucho, MATLAB tiene implemen-tadas cientos de funciones especializadas que pueden ser muy útiles parausuarios avanzados, pero rara vez son usados por los usuarios noveleso cotidianos.

� Grá�cos e imágenes: Todos los paquetes permiten hacer grá�cos en 2Dy 3D y controlar las marcas, poner títulos, etc. Pero los que mejoresprestaciones tienen para los usuarios �nales son MATLAB, FreeMat yScilab.

� Potencia del lenguaje de programación: En este caso Scipy destaca porsu modularidad, por tener una orientación a objetos más convencional,por su mayor precisión en los tipos de datos y porqué Python poseemuchos módulos que permiten integrar otras tareas típicas de progra-mación con el cálculo numérico.

� Fiabilidad: En los paquetes en desarrollo son comunes las caídas delprograma, pero MATLAB destaca por ser más �able que los demás.

� Información: MATLAB es el paquete con una abundante bibliografíay la propia ayuda del programa. FreeMat y Octave también tienemanuales aceptables y mucha información en Internet, aunque la ayudaes escasa. La documentación de Scipy es algo escasa, pero se estatrabajando en ella. Scilab tiene menos difusión y al �nal casi toda ladocumentación proviene de su página Web o�cial, pero la ayuda delprograma es buena.

� Facilidad de Manejo: Ninguno de los programas presenta grandes di�-cultades a la hora de su utilización. MATLAB destaca por su entornointegrado, por las facilidades grá�cas y por la opción de realizar ac-ciones desde sus menús. Pero en menor o mayor medida, todos lospaquetes presentan entornos de desarrollo funcional, pero perfectible.

[email protected] 71 Antonio Carrillo Ledesma, Et alii

Page 74: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Costo: El costo de las diversas versiones de MATLAB supera los dos milpesos por licencia estudiantil, en el caso del Software libre, los paquetesse pueden descargar de la red sin más costo que el acceso a Internet.

Así, es posible resumir las características de los paquetes libres como:

� FreeMat y Octave son programas con una sintaxis muy similar a MAT-LAB. Su uso no debe suponer problemas para aquellos usuarios habi-tuados a usar MATLAB. En el caso de Octave quizás echará de menosalgunas funciones, pero las que posee cubren un gran espectro de apli-caciones, y a partir de ellas se pueden implementar fácilmente las quefalten, por otro lado, ambos proyectos son jóvenes y con gran empujepor parte de la comunidad GNU, lo cual, en algunos años permitirátener productos maduros y de gran calidad, pero por el momento eldesarrollo de la interfaz de usuario es algo limitada, al igual que sudocumentación, pero permiten hacer uso de los cada vez más comunesmultiCores en los equipos de cómputo mediante el cómputo en paralelo.

� Scilab es también parecido a MATLAB, pero dado que no busca teneruna sintaxis similar, los nombres de las funciones pueden cambiar. Hayguías de paso de una herramienta a otra (véase [66]). Además, existela utilidad de conversión directa de un �chero de MATLAB a uno deScilab. El comando se llama: m�le2sci, aunque esta herramienta no esperfecta, es sin duda muy interesante contar con esta posibilidad.

� En cuanto a Scipy o Julia, los cuales más di�eren de MATLAB, al serlenguajes ricos en funcionalidades, también permite usar herramientassecuenciales y paralelas � en memoria compartida y distribuida ademásde usar los Cores Grá�cos CUDA (GPUs) de las tarjetas NVIDIA� . Apesar de que al principio pueden parecer algo más pesado escribir conScipy o Julia, pronto se comprueba la elegancia del lenguaje de progra-mación y su lógica. Ser estrictos permite, a la larga, evitar errores yorganizar mejor las ideas del programador. Además, hay que destacarlos numerosos módulos disponibles para tareas distintas a las del cál-culo numérico: transmisión de datos por Internet, e-mail, manejo debases de datos, creación de interfaces grá�cas, etc.

Por otro lado existe Anaconda, una Suite de código abierto que abarcauna serie de aplicaciones, librerías y conceptos diseñados para el desarrollo

[email protected] 72 Antonio Carrillo Ledesma, Et alii

Page 75: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de la Ciencia de datos con Python. En líneas generales Anaconda Distribu-tion es una distribucción de Python que funciona como un gestor de en-torno, un gestor de paquetes y que posee una colección de más de 720 pa-quetes de código abierto. Anaconda Distribution se agrupa en 4 sectoreso soluciones tecnológicas, Anaconda Navigator, Anaconda Project, Las li-brerías de Ciencia de datos y Conda. Todas estas se instalan de maneraautomática y en un procedimiento muy sencillo. Para más información ver:https://www.anaconda.com/.También esta SageMath, una Suite de código abierto bajo la licencia GPL

de Software matemático como: NumPy, SciPy, matplotlib, Sympy, Maxi-ma, GAP, FLINT, R, entre otros. Además combina acceso a una poderosacombinación del lenguaje basada en Python o directamente vía interfaceso Wrappers. La misión del proyecto es crear una alternativa de Softwarelibre a Magma, Maple, Mathematica y Matlab. Para más información ver:http://www.sagemath.org/.

3.8 Desde la Nube

Existen diferentes servicios Web18 que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso ared y un navegador puedan programar en los más diversos lenguajes, IDEs yTerminales sin hacer instalación alguna en su equipo de cómputo, tableta oteléfono celular.Algunos ejemplos de estos servicio son:

� Para Octave https://nclab.com/free-portal/

� Para Octave https://octave-online.net/

� Para SciLab http://cloud.scilab.in/

18Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.

[email protected] 73 Antonio Carrillo Ledesma, Et alii

Page 76: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Para SciLab http://hotcalcul.com/on-line-calculator/scilab

� Para Julia https://juliabox.com

� Para Scipy https://www.jdoodle.com

� Para Scipy https://try.jupyter.org/

� Para Scipy http://browxy.com

[email protected] 74 Antonio Carrillo Ledesma, Et alii

Page 77: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

4 Paquetes de Cálculo Simbólico

En Matemáticas y Ciencias de la Computación, el cálculo simbólico, tam-bién conocido como cálculo algebraico o álgebra computacional, es un áreacientí�ca que se re�ere al estudio y desarrollo de algoritmos y Software parala manipulación de expresiones matemáticas y otros objetos matemáticos.Aunque, hablando con propiedad, el álgebra computacional debe ser un sub-campo de la computación cientí�ca, estos son considerados generalmentecomo campos distintos, porque la computación cientí�ca se basa general-mente en el análisis numérico con números aproximados en punto �otante;mientras que, el álgebra computacional enfatiza el cálculo exacto con expre-siones que contengan variables que no tienen un valor dado y por lo tanto sonmanipulados como símbolos (de ahí se debe el nombre de cálculo simbólico).Las aplicaciones de Software que realizan cálculos simbólicos son cono-

cidas como sistemas de álgebra computacional, con el término sistema, alu-diendo a la complejidad de las principales aplicaciones que incluyen, al menos,un método para representar los datos matemáticos en una computadora, unlenguaje de programación de usuario (por lo general diferente del lenguajeusado para la ejecución), un administrador de memoria, una interfaz deusuario para la entrada/salida de expresiones matemáticas, un gran con-junto de subrutinas para realizar operaciones usuales, como la simpli�caciónde expresiones, la regla de la cadena utilizando diferenciación, factorizaciónde polinomios, integración inde�nida, etc.El álgebra computacional es ampliamente utilizada para experimentar en

matemática y diseñar las fórmulas que se utilizan en los programas numéricos.También se usa para cálculos cientí�cos completos, cuando los métodos pu-ramente numéricos fallan, como en la criptografía asimétrica o para algunosproblemas no lineales.

Los paquetes de cálculo simbólico, son programas matemáticos que ofre-cen un entorno de desarrollo integrado (IDE) con un lenguaje de progra-mación propio con un amplio abanico de herramientas simbólicas y numéri-cas para la lectura, manipulación, análisis y gra�cación de datos. Entre susprestaciones básicas se hallan:

� Bibliotecas de funciones matemáticas elementales y especiales

� Matrices y manipulación de datos

[email protected] 75 Antonio Carrillo Ledesma, Et alii

Page 78: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Soporte para números complejos, precisión arbitraria, computación deintervalos aritméticos y simbólicos

� Datos en 2D y 3D, función, visualización geográ�ca y herramientas deanimación

� Solucionadores para sistemas de ecuaciones, ecuaciones diofánticas, ecua-ciones diferenciales ordinarias, parciales, diferenciales algebraicas, deretraso, diferenciales estocásticas y relaciones de recurrencia

� Herramientas numéricas y simbólicas para cálculo de variable continuao discreta

� Bibliotecas de Estadística multivariable, incluyendo ajuste, pruebas dehipótesis, y cálculos de probabilidad

� Soporte para datos censurados, datos temporales, series temporales ydatos basados en unidades

� Cálculos y simulaciones en procesos aleatorios y Queues

� Geometría computacional en 2D, 3D y dimensiones mayores

� Optimización restringida y no restringida, local y global

� Herramientas para problemas combinatorios

� Soporta el desarrollo de cálculos matemáticos de manera simbólica ynumérica con precisión arbitraria

� Librerías para funciones matemáticas básicas y avanzadas

� Manejo de números complejos y sus diversas operaciones

� Aritmética, álgebra, operaciones para desarrollo de polinomios multi-variados

� Límites, series y sucesiones

� Álgebra diferencial

� Herramientas para la manipulación de matrices incluyendo matricesdispersas

[email protected] 76 Antonio Carrillo Ledesma, Et alii

Page 79: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Sistemas de solución para ecuaciones diferenciales en sus diferentes va-riedades (ODE, DAE, PDE, DDE)

� Herramientas simbólicas y numéricas para cálculo discreto y continuo,incluye integración de�nida e inde�nida, diferenciación

� Optimización con restricciones y sin restricciones

� Herramientas para la resolución de problemas en el campo de la pro-babilidad

� Herramientas para el uso de series de tiempo

� Conexión a datos en línea, recopilados para aplicaciones �nancieras yeconómicas

� Herramientas para cálculos �nancieros, incluyendo: bonos, anualidades,etc.

� Cálculos y simulaciones para procesos aleatorios

� Herramientas para el desarrollo de sistemas lineales y no lineales

� Incluye matemáticas discretas

Los programas líderes para el cálculo simbólico son Mathemática y Maple,los costos de sus licencias respectivas son onerosos, pero para la UNAM setienen licencias académicas disponibles para profesores y estudiantes. Existenotros paquetes como Maxima que tiene licencia GPL (véase apéndice 14.1)y estan disponibles para los usuarios en múltiples plataformas.Estos paquetes, pueden disponer de herramientas adicionales que ex-

panden sus prestaciones en modo local como en la Web. En algunos casosexisten versiones para cómputo secuencial y paralelo � tanto en memoriacompartida como distribuida, también para usar los múltiples Cores grá�cosCUDA (GPUs) de las tarjetas NVIDIA� .Los paquetes de cómputo para el Cálculo Simbólico más usados actual-

mente son:

� Mathematica (véase [75])

� Maple (véase [74])

� Maxima (véase [76])

[email protected] 77 Antonio Carrillo Ledesma, Et alii

Page 80: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

4.1 Mathematica

Mathematica (véase [75]) es un programa utilizado en áreas cientí�cas, de in-geniería, matemática y áreas computacionales. Originalmente fue concebidopor Stephen Wolfram, quien continúa siendo el líder del grupo de matemáti-cos y programadores que desarrollan el producto en Wolfram Research, com-pañía ubicada en Champaign, Illinois. Comúnmente considerado como unsistema de álgebra computacional, Mathematica es también un poderosolenguaje de programación de propósito general.Los atributos de Mathematica incluyen:

� Bibliotecas de funciones matemáticas elementales y especiales

� Matrices y manipulación de datos, así como soporte de matrices tipoSparse

� Soporte para números complejos, precisión arbitraria, computación deintervalos aritméticos y simbólicos

� Datos en 2D y 3D, función, visualización geográ�ca y herramientas deanimación

� Solucionadores para sistemas de ecuaciones, ecuaciones diofánticas, ecua-ciones diferenciales ordinarias, parciales, diferenciales algebraicas, deretraso, diferenciales estocásticas y relaciones de recurrencia

� Herramientas numéricas y simbólicas para cálculo de variable continuao discreta

� Bibliotecas de Estadística multivariable, incluyendo ajuste, pruebas dehipótesis, cálculos de probabilidad y expectativa en más de 140 dis-tribuciones

� Soporte para datos censurados, datos temporales, series temporales ydatos basados en unidades

� Cálculos y simulaciones en procesos aleatorios y Queues

� Herramientas de aprendizaje de máquina supervisadas y no super-visadas para datos, imágenes y sonidos

� Geometría computacional en 2D, 3D y dimensiones mayores

[email protected] 78 Antonio Carrillo Ledesma, Et alii

Page 81: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Análisis de elementos �nitos incluyendo generación de malla adaptivaen 2D y 3D

� Optimización restringida y no restringida, local y global

� Lenguaje de programación que da soporte a construcciones de proce-dimiento, funcionales y orientados a objetos

� Juego de herramientas para agregar interfaces de usuario a cálculos yaplicaciones

� Herramientas para procesamiento de imágenes en 2D y 3D, y proce-samiento morfológico de imágenes incluyendo reconocimiento de imá-genes

� Herramientas para visualización y análisis de grafos dirigidos y no di-rigidos

� Herramientas para problemas combinatorios

� Herramientas para minería de textos incluyendo expresiones reguralesy análisis semántico

� Herramientas de minería de datos tales como análisis de grupos, ali-neación de secuencias y búsqueda de patrones

� Biblioteca de funciones de teoría de números

� Herramientas para cálculos �nancieros, incluyendo bonos, anualidades,derivados, opciones

� Teoría de grupo y funciones de tensor simbólicas

� Bibliotecas para procesamiento de señales, incluyendo análisis de ondasen sonidos, imágenes y datos

� Bibliotecas de sistemas de control lineales y no lineales

� Transformaciones integrales continuas y discretas

� Importación y exportación de �ltros para datos, imágenes, video, sonido,CAD, GIS, formato de documento y biomédicos

[email protected] 79 Antonio Carrillo Ledesma, Et alii

Page 82: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Colección de base de datos para información matemática, cientí�ca ysocioeconómica y acceso a datos de WolframAlpha y cálculos

� Procesamiento de palabras técnicas incluyendo edición de fórmulas yreportes automatizados

� Herramientas para conectarse a sistemas basados en DLL, SQL, Java,.NET, C++, Fortran, CUDA, OpenCL y HTTP

� Herramientas para programación paralela

� Usando ambas "entradas lingüística de forma libre" (una interfaz deusuario de lenguaje natural) yWolfram Language en el cuaderno cuandoesta conectado a internet

Interfaces La interfaz preseleccionada por Mathematica tiene extensascaracterísticas y capacidades grá�cas, ofreciendo analogías a un cuadernode trabajo: la entrada de datos por parte del usuario y los resultados envia-dos por el núcleo (incluyendo grá�cas y sonidos), son colocados en formade celdas jerárquicas (igual que Maple), lo cual permite seguir con facilidadla secuencia de las manipulaciones algebraicas o cálculos que se estan de-sarrollando en una sesión. Comenzando con la versión 3.0 del Software, loscuadernos se representan como expresiones que puedan ser manipuladas, asu vez, por el núcleo.Para permitir a aquellos usuarios que no tienen una licencia, la visua-

lización de los cuadernos de trabajo escritos en Mathematica, se creó unpaquete de lectura dedicado. Este paquete, llamado MathReader puede ba-jarse de la red gratuitamente.Otras interfaces se encuentran disponibles, como, JMath o Mash, pero la

interfaz estandar de Mathematica es la más popular.

Conexiones con otras aplicaciones Las comunicaciones con otras apli-caciones ocurren a través del protocolo llamado MathLink. Este protocolopermite no solo comunicaciones entre el núcleo de Mathematica y las pan-tallas, sino que también provee la interfaz entre el núcleo y aplicaciones arbi-trarias. Wolfram Research distribuye de forma gratuita un kit para enlazaraplicaciones escritas en el lenguaje de programación C hacia el núcleo deMathematica a través de MathLink. Otros componentes de Mathematica,

[email protected] 80 Antonio Carrillo Ledesma, Et alii

Page 83: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

que usan el protocolo Mathlink, permite a los desarrolladores establecer co-municaciones entre el núcleo y Java o para programas .NET como J/Link y.NET/LinkUsando J/Link, un programa de Java puede decirle a Mathematica que

ejecute cálculos; también Mathematica puede cargar cualquier clase de Java,manipular objetos de Java y desempeñar llamadas a métodos, haciendo posi-ble construir interfaces grá�cas desde Mathematica. De forma similar, laplataforma .NET puede enviarle órdenes al núcleo para que ejecute cálcu-los, y devuelva los resultados, también los desarrolladores de Mathematicapueden acceder con facilidad a la funcionalidad de la plataforma .NET.Mathematica 9 es compatible con varias versiones de Linux, OS X de

Apple, Windows (XP SP3, Vista, 7 y 8) de Microsoft y Raspberry Pi. Todasestas plataformas son compatibles con implementaciones de 64 bits. Ver-siones anteriores de Mathematica hasta la 6.0.3 son compatibles con otrossistemas operativos, incluyendo Solaris, AIX, Convex, HP-UX, IRIX, MS-DOS, NeXTSTEP, OS/2, Ultrix y Windows Me.Mathematica puede conectarse a una variedad de servicios en la nube

para recuperar o enviar datos, incluido ArXiv, Bing, ChemSpider, Dropbox,Facebook, el Sistema de la Reserva Federal, Fitbit, Flickr, Google (Analyti-cs, Calendar, Contacts, Custom search, Plus, Search, Translate), Instagram,LinkedIn, Mailchimp, Open Library, PubChem, PubMed, Reddit, Survey-Monkey, Twitter y Wikipedia.

Funcionalidades de Mathematica para Internet Wolfram Researchcuenta con un programa denominado WebMathematica que añade funciona-lidades para publicación Web capaz de hacer cálculos y desplegar visualiza-ciones de Mathematica en línea.Como demostración de las capacidades de Mathematica y WebMathema-

tica, Wolfram Research mantiene un sitio Web en la que es posible realizarintegrales inde�nidas simples "The Integrator" en:

http : ==www:wolframalpha:com=calculators=integral � calculator=

así como el "Demonstrations project" que consiste en pequeños programasencapsulados que muestran un concepto matemático o una función de Mathe-matica de manera simpli�cada, visual y libre ya que el código fuente tambiénpuede descargarse. Estos pequeños programas pueden visualizarse inclusosin contar con Mathematica sino directamente en el browser o con el Mathe-

[email protected] 81 Antonio Carrillo Ledesma, Et alii

Page 84: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

matica Player que es gratuito y puede descargarse en la página de WolframResearch.

4.2 Maple

Maple (véase [74]) es un programa orientado a la resolución de problemasmatemáticos, capaz de realizar cálculos simbólicos, algebraicos y de álgebracomputacional. Fue desarrollado originalmente en 1981 por el Grupo de Cál-culo Simbólico en la Universidad de Waterloo en Waterloo, Ontario, Canadá.Desde 1988 ha sido mejorado y vendido comercialmente por Waterloo MapleInc. (también conocida como Maplesoft), compañía canadiense con sede enla misma localidad. La última versión es Maple 2018.Maple se basa en un pequeño núcleo escrito en C, que proporciona el

lenguaje Maple. Maple es un lenguaje de programación interpretado. Lasexpresiones simbólicas son almacenadas en memoria como grafos dirigidossin ciclos. La mayoría de funcionalidades son proporcionadas por librerías:unas escritas en lenguaje Maple, con acceso a su código fuente; pero tambiénhace uso de otras librerías bien conocidas como las NAG, ATLAS o GMP.Estas son algunas de las características mas relevantes del Software:

� Soporta el desarrollo de cálculos matemáticos de manera simbólica ynumérica con precisión arbitraria

� Librerías para funciones matemáticas básicas y avanzadas

� Manejo de números complejos y sus diversas operaciones

� Aritmética, álgebra, operaciones para desarrollo de polinomios multi-variados

� Límites, series y sucesiones

� Bases Groebner

� Álgebra diferencial

� Herramientas para la manipulación de matrices incluyendo matricesdispersas

� Herramientas para grá�cos y animaciones matemáticas

[email protected] 82 Antonio Carrillo Ledesma, Et alii

Page 85: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Sistemas de solución para ecuaciones diferenciales en sus diferentes va-riedades (ODE, DAE, PDE, DDE)

� Herramientas simbólicas y numéricas para cálculo discreto y continuo,incluye integración de�nida e inde�nida, diferenciación

� Optimización con restricciones y sin restricciones

� Herramientas estadísticas que incluyen adaptación a diversos modelos,pruebas de hipótesis y distribuciones probabilísticas

� Herramientas para la manipulación, visualización y análisis de datos

� Herramientas para la resolución de problemas en el campo de la proba-bilidad

� Herramientas para el uso de series de tiempo

� Conexión a datos en línea, recopilados para aplicaciones �nancieras yeconómicas

� Herramientas para cálculos �nancieros, incluyendo: bonos, anualidadesetc.

� Cálculos y simulaciones para procesos aleatorios

� Herramientas para el procesamiento de señales

� Herramientas para el desarrollo de sistemas lineales y no lineales

� Incluye matemáticas discretas

� Herramientas para visualizar y analizar grá�cos

� Importación y exportación de �ltros para datos, imágenes, sonido, CADy documentos

� Procesamiento de texto, incluyendo formulas matemáticas

� Herramientas para agregar interfaces de usuario para el desarrollo decálculos y aplicaciones

� Herramientas para conectarse a SQL, Java, .NET, C++, Fortran yHTTP

[email protected] 83 Antonio Carrillo Ledesma, Et alii

Page 86: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Herramientas para la generación de códigos en lenguajes C, C++, For-tran, Java, JavaScript, Julia, Matlab, Perl, Python, R y Visual Basic.

� Herramientas para programación paralela.

4.3 Maxima

El sistema de álgebra computacional Maxima (véase [76]) es un motor decálculo simbólico escrito en lenguaje Lisp publicado bajo licencia GNU GPL(véase apéndice 14.1). Cuenta con un amplio conjunto de funciones parahacer manipulación simbólica de polinomios, matrices, funciones racionales,integración, derivación, manejo de grá�cos en 2D y 3D, manejo de númerosde coma �otante muy grandes, expansión en series de potencias y de Fourier,entre otras funcionalidades. Además tiene un depurador a nivel fuente parael código de Maxima.Maxima esta basado en el sistema original de Macsyma desarrollado por

MIT en los años 70. Es bastante �able, tiene un buen recolector de basura,por lo que no desperdicia memoria. Viene con cientos de auto pruebas (test-suite). Maxima funciona en modo consola, sin embargo incluye las intefacesgrá�cas xMaxima y wxMaxima para facilitar su uso.El editor de texto cientí�co GNU TeXmacs también puede ser usado para

facilitar una interfaz grá�ca de usuario para Maxima. Otras opciones son,imaxima, y el modo interactivo de Emacs. También puede hacer uso de la in-terfaz grá�ca de SageMath, que facilita su integración con otras herramientasCASE.Como esta escrito en Common Lisp, es fácilmente accesible para la pro-

gramación, desde la capa inferior de Lisp puede llamarse a Maxima.Como la mayoría de sistemas algebraicos, Maxima se especializa en ope-

raciones simbólicas. También ofrece capacidades numéricas especiales, comoson los números enteros y racionales, los cuales pueden crecer en tamaño sólolimitado por la memoria de la máquina; y números reales en coma �otante,cuya precisión puede ser arbitrariamente larga (b�oat). Permite el manejode expresiones simbólicas y numéricas, y además produce resultados con unaalta precisión.Para cálculos intensivos en reales de coma �otante, Maxima ofrece la posi-

bilidad de generar código en otros lenguajes de programación, como Fortran,que quizá se ejecuten de manera más e�ciente.

[email protected] 84 Antonio Carrillo Ledesma, Et alii

Page 87: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Maxima es un sistema de propósito general; como tal los cálculos espe-ciales como la factorización de números grandes, la manipulación de poli-nomios extremadamente grandes, etc. son normalmente realizados de formamás e�ciente y rápida en sistemas especializados.

� Números

� Listas, arreglos y Matrices

� Transformaciones algebraicas

� Resolución de ecuaciones

� Límites, derivadas e integrales

� Conjuntos

� Vectores y campos

� Grá�cos

� Ecuaciones diferenciales

� Probabilidades y análisis de datos

� Interpolación numérica

� Inecuaciones racionales

� Ecuaciones diferenciales ordinarias

� Sistemas de ecuaciones diferenciales ordinarias

� Series de potencias

� Transformada de Laplace

� Ecuaciones recurrentes

� Generacion de expresiones en Tex

� Programación en Maxima

[email protected] 85 Antonio Carrillo Ledesma, Et alii

Page 88: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

4.4 Ventajas, Desventajas y Carencias

Notemos que el tener múltiples herramientas para realizar operaciones ele-mentales y avanzadas de cálculo simbólico, es en sí misma una gran ventaja.Para los centros universitarios y usuarios ocasionales, las herramientas deSoftware libre son una herramienta invaluable. En el caso de empresas ousuarios avanzados que requieren usar opciones especializadas o generadaspor terceros, Maple y Mathematica son grandes herramientas de trabajo.Pero hay que hacer notar que:

� Funcionalidades básicas: Todos los paquetes implementan las funciona-lidades básicas, ya que todos llevan años desarrollándose

� Funcionalidades especializadas: Mathematica y Maple tienen imple-mentadas cientos de funciones especializadas que pueden ser muy útilespara usuarios avanzados, pero rara vez son usados por los usuarios nove-les o cotidianos

� Grá�cos e imágenes: Todos los paquetes permiten hacer grá�cos en 2Dy 3D. Pero Mathematica y Maple poseen prestaciones de alto desem-peño para los usuarios �nales

� Potencia del lenguaje de programación

� Fiabilidad: En los paquetes en desarrollo son comunes las caídas delprograma, pero Maple y Mathematica destacan por ser más �ables

� Información: Maple y Mathematica son paquetes con una abundantebibliografía y la propia ayuda del programa

� Facilidad de Manejo: Ninguno de los programas presenta grandes di�-cultades a la hora de su utilización

� Costo: El costo de las diversas versiones de Maple y Mathematicasupera los dos mil pesos por licencia estudiantil, en el caso del Softwarelibre, los paquetes se pueden descargar de la red sin más costo que elacceso a Internet

[email protected] 86 Antonio Carrillo Ledesma, Et alii

Page 89: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

4.5 Desde la Nube

Existen diferentes servicios Web19 que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso ared y un navegador puedan programar en los más diversos lenguajes, IDEs yTerminales sin hacer instalación alguna en su equipo de cómputo, tableta oteléfono celular.Algunos ejemplos de estos servicio son:

� https://mathics.angusgri¢ th.com/ Clon de Mathematica

� http://www.wolframalpha.com/

� http://www.quickmath.com/

� http://maxima-online.org

19Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.

[email protected] 87 Antonio Carrillo Ledesma, Et alii

Page 90: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

5 Paquetes Estadísticos

Los paquetes estadísticos, son programas matemáticos que ofrecen un en-torno de desarrollo integrado (IDE) con un lenguaje de programación propiocon un amplio abanico de herramientas la lectura, manipulación, análisis ygra�cación de datos estadísticos. Entre sus prestaciones básicas destacan:

� Análisis de datos mediante operadores para cálculos sobre arreglos,matrices y/o Tablas

� Tablas Cruzadas

� Reordenamiento de Datos

� Análisis de la Varianza (ANOVA)

� Frecuencias

� Estadística Descriptiva

� Estadística Lineal

� Estadística no Lineal

� Estadística Biestadística

� Pruebas Estadísticas Clásicas

� Análisis de Serie de Temporales

� Modelos de Regresión

� Clasi�cación

� Fiabilidad

� Categorías

� Clustering

� Validación de Datos

� Tendencias

[email protected] 88 Antonio Carrillo Ledesma, Et alii

Page 91: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Grá�cos y Diagramas

Actualmente, los paquetes estadísticos usados en las carreras de Actua-ría, Ciencias de la Computación, Matemáticas, Matemáticas Aplicadas y loscursos de Mátemáticas de las demás carreras de la Facultad (véase [2]) son:

� SPSS (véase [43])

� R (véase [77])

� SAS (véase [42])

� PSPP (véase [44])

� EViews (véase [67])

� Gretel (véase [68])

� Stata (véase [66])

� Statgraphics (véase [70])

� Statistica (véase [71])

� Systat (véase [72])

� Vensim (véase [73])

� Maple (véase [74])

� Mathematica (véase [75])

� MATLAB (véase [35])

� FreeMat (véase [38])

� Octave (véase [39])

� Maxima (véase [76])

� Scipy (véase [40])

[email protected] 89 Antonio Carrillo Ledesma, Et alii

Page 92: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

En el presente trabajo nos centraremos en los tres primeros paquetes,pero el resto de los paquetes son muy usados ya sea por sus características,facilidad de uso o la accesibilidad del paquete para los estudiantes. Cabeaclarar, que los paquete SPSS y SAS tienen un alto costo monetario, en elcaso de SAS existe una versión estudiantil gratuita y SPPS hay una versiónde prueba.

5.1 SPSS

El paquete SPSS (véase [43]) es un programa estadístico informático muyusado en las ciencias sociales y las empresas de investigación de mercado.Originalmente SPSS fue creado como el acrónimo de «Statistical Packagefor the Social Sciences» aunque también se ha referido como «StatisticalProduct and Service Solutions» . Sin embargo, en la actualidad la parte SPSSdel nombre completo del paquete es IBM SPSS20 el cual no es acrónimo denada.Es uno de los programas estadísticos más conocidos teniendo en cuenta

su capacidad para trabajar con grandes bases de datos y una sencilla interfazpara la mayoría de los análisis. En las últimas versiones de SPSS se podíanrealizar análisis con millones de registros y miles de variables. El programaconsiste en un módulo base y módulos anexos que se han ido actualizandoconstantemente con nuevos procedimientos estadísticos. Cada uno de estosmódulos se compra por separado. SPSS soporta hacer interfase con lenguajesde programación como Python, R, C, C++, Visual Basic, .NET

Existe una versión incipiente que pretende ser un reemplazo libre paraSPSS, se llama PSPP (véase [44]) con una interfaz llamada PSPPire (véase[45]), esta es aplicación de Software libre para el análisis de datos multi-plataforma, se presenta en modo grá�co y esta escrita en el lenguaje de pro-gramación C. Usa la biblioteca cientí�ca GNU para sus rutinas matemáticas,y plotutils para la generación de grá�cos. PSPP puede importar formatos de:Gnumeric, OpenDocument, hojas de Excel, bases de datos Postgres, valoresseparados por coma y archivos ASCII. Puede exportar archivos en formatoSPSS y archivos ASCII. Algunas de las bibliotecas usadas por PSPP puedenser accedidas vía programación.

20Existe una versión gratuita del paquete IBM SPSS para todo aquel que desee conocerel producto y puede ser descargada de su página Web.

[email protected] 90 Antonio Carrillo Ledesma, Et alii

Page 93: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

5.2 R

El paquete R (véase [77]) es un lenguaje y entorno de programación paraanálisis estadístico y grá�co. Se trata de un proyecto de Software libre,resultado de la implementación GNU del premiado lenguaje S. SPSS, R yS-Plus � versión comercial de S� son, probablemente, los tres lenguajes másutilizados en investigación por la comunidad estadística, siendo además muypopulares en el campo de la investigación biomédica, la bioinformática y lasmatemáticas �nancieras. A esto contribuye la posibilidad de cargar diferentesbibliotecas o paquetes con �nalidades especí�cas de cálculo o grá�co.Además, R puede integrarse con distintas bases de datos y existen bi-

bliotecas que facilitan su utilización desde lenguajes de programación inter-pretados como Perl y Python. R soporta hacer interfase con lenguajes deprogramación como C, C++ y Fortran.Otra de las características de R es su capacidad grá�ca, que permite

generar grá�cos con alta calidad. R posee su propio formato para la do-cumentación basado en LaTeX (véase [34]). R también puede usarse comoherramienta de cálculo numérico, campo en el que puede ser tan e�caz comootras herramientas especí�cas tales como FreeMat, GNU Octave y su equi-valente comercial, MATLAB. Se ha desarrollado una interfaz RWeka parainteractuar con Weka (véase [78]) que permite leer y escribir �cheros en elformato ar¤ y enriquecer R con los algoritmos de minería de datos de dichaplataforma.Los ambientes de desarrollo integrado para R existen como proyectos

externos, como pueden ser editores � que sólo soportan la sintaxis� , los IDEs(Integrate Development Environments) y los GUI (Graphical User Interfaces)� permiten editar, ejecutar y depurar código desarrollado para R� . Hay másde 20 proyectos activos, dos de los más conocidos son Tinn-R (véase [79]) yRStudio (véase [80]).

5.3 SAS

SAS Institute es uno de los principales fabricantes de Business IntelligenceSoftware (véase [81]). Su nombre es el acrónimo de «Statistical Analysis Sys-tems» (sistemas de análisis estadístico) aunque, posteriormente, al extendersu oferta de productos más allá de los meramente dedicados al análisis es-tadístico, pasó a utilizarlo como nombre propio. El primer producto de SASInstitute fue el SAS Software Package (véase [42]), un lenguaje de progra-

[email protected] 91 Antonio Carrillo Ledesma, Et alii

Page 94: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

mación para el análisis estadístico de datos en mainframes de IBM.Actualmente, este lenguaje de programación, llamado SAS Base, es el

motor de una serie de herramientas para la dirección estratégica de empresas,la gestión del riesgo �nanciero, el desarrollo de modelos de minería de datos,etc.El lenguaje SAS opera principalmente sobre tablas de datos: puede leer-

las, transformarlas, combinarlas, resumirlas, crear informes a partir de ellas,etc. El núcleo del lenguaje (conocido habitualmente como SAS Base) incluye:

� Pasos data que permiten realizar operaciones sobre las �las de un con-junto de datos.

� Procedimientos de manipulación de datos que permiten ordenar tablas,enlazarlas, etc.

� Un intérprete de SQL.

� Un super lenguaje de macros.

SAS Institute comercializa paquetes de procedimientos adicionales parael análisis estadístico de los datos, tales como:

� SAS/IML, módulo que implementa un lenguaje alternativo similar aOctave, MATLAB o R.

� SAS/STAT, un módulo con procedimientos para realizar determinadosanálisis estadísticos (regresiones, etc.)

� SAS/ETS para el análisis estadístico de series temporales

� SAS/OR para la resolución de problemas de investigación operativa

� SAS/GRAPH para generar grá�cos

Además, SAS Institute21 ha desarrollado aplicaciones, denominadas in-terfases, tales como SAS Enterprise Guide, SAS Data Integration Studio,SAS Enterprise Miner y otras que generan código SAS para aplicaciones es-pecí�cas: ETL, minería de datos, etc.

21Existe una versión de SAS llamada Free SAS Software para uso académico, en la queuna vez registrado el usuario, se tiene acceso al programa, documentación y una comunidaden línea con acceso a una gran cantidad de las aplicaciones de SAS.

[email protected] 92 Antonio Carrillo Ledesma, Et alii

Page 95: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

5.4 Ventajas, Desventajas y Carencias

Las organizaciones actuales, manejan una gran cantidad de información,la cual puede o no estar dispersa en sus múltiples sistemas operacionales.Además, en un mercado tan competitivo como el actual, las organizacionesfocalizan sus recursos en las estrategias más adecuadas para conducir a lacompañía hacia el éxito. Los paquetes estadísticos pueden ayudar a conseguireste objetivo, completando la inversión ya realizada en sistemas operacionalesy el hecho de usar paquetes estadísticos que tengan integrado el manejo delas grandes bases de datos ofrece bene�cios adicionales.De los paquetes mencionados, SAS ofrece soluciones en forma de una

suite completa para la gestión de datos y Software analítico para encontrarel llamado poder del conocimiento. En general, los paquetes estadísticosproveen un ambiente integrado de análisis de datos, de la gran cantidadde Software existente, la determinación de cual usar en un caso particular,depende de la cantidad de datos y la forma de acceder a ellos.Pese a existir versiones de prueba para SPSS o estudiantiles para SAS,

por el tipo de licencia22 del paquete, no se pueden instalar en los equiposde la UNAM, pues violaría la licencia de dichos paquetes. El costo de lasversiones completas es prohibitivo para la gran mayoría de las institucioneseducativas, en particular para la UNAM. Por ello, el resto de los paquetesestadísticos libres ofrecen una ventaja competitiva, al permitirle al profe-sor y sus estudiantes contar con versiones completas y funcionales en lasque pueden ser aplicados los conocimientos adquiridos en los diversos cur-sos de las carreras de Actuaría, Ciencias de la Computación, Matemáticas,Matemáticas Aplicadas y los cursos de Mátemáticas de las demás carreras dela Facultad, dejando el manejo especializado de paquetes como SAS y SPSSa cursos avanzados o para cuando el educando realice sus prácticas profe-sionales. De esta forma se pueden preparar a los estudiantes para aplicar susconocimientos al egresar en diversas áreas de las carreras de Actuaría, Cien-cias de la Computación, Matemáticas, Matemáticas Aplicadas y los cursos deMátemáticas de las demás carreras de la Facultad y con pocos conocimien-tos técnicos adicionales puedan laborar en pequeñas, medianas y grandesempresas.

22Estas versiones de prueba o estudiantiles piden que se instale en el equipo del estudian-te o académico que se registra para el uso del paquete, no esta permitida su instalación enmúltiples equipos o en equipos compartidos por varios estudiantes, además caduca en uncorto período de tiempo.

[email protected] 93 Antonio Carrillo Ledesma, Et alii

Page 96: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Por otro lado existe Anaconda, una Suite de código abierto que abarcauna serie de aplicaciones, librerías y conceptos diseñados para el desarrollode la Ciencia de datos con Python. En líneas generales Anaconda Distrib-ution es una distribucción de Python que funciona como un gestor de en-torno, un gestor de paquetes y que posee una colección de más de 720 pa-quetes de código abierto. Anaconda Distribu-tion se agrupa en 4 sectoreso soluciones tecnológicas, Anaconda Navigator, Anaconda Project, Las li-brerías de Ciencia de datos y Conda. Todas estas se instalan de maneraautomática y en un procedimiento muy sencillo. Para más información ver:https://www.anaconda.com/.También esta SageMath, una Suite de código abierto bajo la licencia GPL

de Software matemático como: NumPy, SciPy, matplotlib, Sympy, Maxi-ma, GAP, FLINT, R, entre otros. Además combina acceso a una poderosacombinación del lenguaje basada en Python o directamente vía interfaceso Wrappers. La misión del proyecto es crear una alternativa de Softwarelibre a Magma, Maple, Mathematica y Matlab. Para más información ver:http://www.sagemath.org/.

5.5 Desde la Nube

Existen diferentes servicios Web23 que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso ared y un navegador puedan programar en los más diversos lenguajes, IDEs yTerminales sin hacer instalación alguna en su equipo de cómputo, tableta oteléfono celular.Algunos ejemplos de estos servicios son:

� Para R https://nclab.com/free-portal/

� Para R https://cdn.datacamp.com/dcl-react-prod/example.html

23Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.

[email protected] 94 Antonio Carrillo Ledesma, Et alii

Page 97: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

6 Paquetes O�máticos

En la actualidad, los llamados paquetes o�máticos, no son otra cosa queprogramas de cómputo integrado, que permiten automatizar multiples ta-reas que ayudan a idear, crear, manipular, transmitir, almacenar informaciónnecesaria en una o�cina. Entre sus prestaciones básicas destacan:

� Hojas de Cálculo

� Bases de Datos

� Herramientas de Presentación y Multimedia

� Procesamiento de Imágenes

� Procesamiento de Textos

Existe una gran cantidad de paquetes o�máticos, que van, desde los ins-talados hasta los asequibles a través de la Web, entre los más comunes ten-emos:

� Microsoft O¢ ce (véase [24])

� Libre O¢ ce (véase [26])

� OpenO¢ ce (véase [25])

� Calligra (véase [28])

� Google Docs (véase [27])

� Lotus Symphony (véase [33])

� Only O¢ ce (véase [29])

� WPS O¢ ce (véase [30])

� O¢ ce Online (véase [31])

� Collabora (véase [32])

[email protected] 95 Antonio Carrillo Ledesma, Et alii

Page 98: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

6.1 Hojas de Cálculo

Es un Software a través del cual se pueden usar datos numéricos y realizarcálculos automáticos de números que estan en una tabla. También es posibleautomatizar cálculos complejos al utilizar una gran cantidad de parámetrosy al crear tablas llamadas hojas de trabajo.Las hojas de cálculo permiten a los usuarios elaborar tablas y formatos

que incluyan cálculos matemáticos mediante fórmulas, las cuales pueden usaroperadores matemáticos como son: + (suma), - (resta), * (multiplicación), /(división) y ^(exponenciación), además de poder utilizar elementos denomi-nados funciones como por ejemplo: Suma(), Promedio(), Buscar(), etc.Así mismo las hojas de cálculo son útiles para gestionar Listas o Bases

de Datos; es decir Ordenar y Filtrar la información. Por lo tanto, la hojade cálculo es una herramienta multiuso que sirve tanto para actividades deo�cina, que implican la organización de grandes cantidades de datos, comopara niveles estratégicos y de toma de decisiones al crear representacionesgrá�cas de la información sintetizada.Existe una gran variedad de paquetes para el manejo hojas de cálculo �

los cuales existen tanto en las plataformas de Windows, Linux, Mac� , entrelos que destacan:

� Excel: Paquete de Microsoft O¢ ce (véase [24])

� Calc: Paquete Libre O¢ ce (véase [26])

� OpenCalc: Paquete OpenO¢ ce (véase [25])

� Spread Sheet: Google Docs (véase [27])

� Sheets: Paquete Calligra (véase [28])

Por otro lado, Microsoft VBA (Visual Basic for Applications) es el lenguajede macros de Microsoft Visual Basic que se utiliza para programar aplica-ciones Windows y que se incluye en varias aplicaciones Microsoft. VBA per-mite a usuarios y programadores ampliar la funcionalidad de programas dela suite Microsoft O¢ ce. Visual Basic para Aplicaciones es un subconjuntocasi completo de Visual Basic 5.0 y 6.0.Microsoft VBA viene integrado en aplicaciones de Microsoft O¢ ce, como

Word, Excel, Access y PowerPoint. Prácticamente cualquier cosa que sepueda programar en Visual Basic 5.0 o 6.0 se puede hacer también dentro

[email protected] 96 Antonio Carrillo Ledesma, Et alii

Page 99: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de un documento de O¢ ce, con la sola limitación que el producto �nal no sepuede compilar separadamente del documento, hoja o base de datos en quefue creado; es decir, se convierte en una macro (o más bien súper macro).Esta macro puede instalarse o distribuirse con sólo copiar el documento,presentación o base de datos.Su utilidad principal es automatizar tareas cotidianas, así como crear

aplicaciones y servicios de bases de datos para el escritorio. Permite accedera las funcionalidades de un lenguaje orientado a eventos con acceso a la APIde Windows.Al provenir de un lenguaje basado en Basic tiene similitudes con lenguajes

incluidos en otros productos de o�mática como Libre O¢ ce y Openo¢ ce, perono hay compatibilidad entre productos.Así también, es común que en los cursos de la carreras de Actuaría, Cien-

cias de la Computación, Matemáticas, Matemáticas Aplicadas y los cursos deMátemáticas de las demás carreras de la Facultad, se requiera hacer análi-sis estadísticos de datos, esto se realiza mediante el uso de complementosde Excel � Herramientas para análisis y Solver� . En donde al usar estasherramientas, se proporcionan los datos y parámetros para cada análisis y laherramienta utilizará las funciones de macros estadísticas o técnicas corres-pondientes para realizar los cálculos y mostrar los resultados en una tablade resultados. Algunas herramientas generan grá�cos además de tablas deresultados.Entre las herramientas para análisis se incluyen:

� Análisis de Fourier

� Correlación

� Covarianza

� Estadística descriptiva

� Generación de números aleatorios

� Histograma

� Jerarquía y percentil

� Media móvil

� Muestreo

[email protected] 97 Antonio Carrillo Ledesma, Et alii

Page 100: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Prueba t

� Prueba t para varianzas de dos muestras

� Prueba z

� Regresión

� Suavización exponencial

� Varianza

El acceso a tablas de Excel usando Visual Basic for Applications, ademásdel uso de los complementos de Excel � Herramientas para análisis y Solver�para manejo de datos, ha generalizado el uso de los paquetes de MicrosoftO¢ ce, esto redunda en el uso de dicha suite en una importante cantidad decursos dentro de las carreras de la Facultad de Ciencias.

6.2 Bases de Datos

Una parte importante de la Modelación Matemática es trabajar con datosde prueba, lo más cercano posible a la realidad. Ello implica que, es nece-sario contar con mecanismos para almacenar, editar y consultar una cantidadgrande de datos, esto se logra usando las bases de datos.Existe una gran variedad de paquetes para el manejo de base de datos

� los cuales se ejecutan en las plataformas de Windows, Linux, Mac� , entrelos que destacan:

� Access en Microsoft O¢ ce para Windows (véase [24])

� Microsoft SQL Server (véase [94])

� PostgreSQL (véase [95])

� MySQL (véase [96])

� MongoBD (véase [97])

En donde, entendemos a un Sistema de Gestión de Bases de Datos (SGBD)como un conjunto de programas que permiten el almacenamiento, modi�-cación y extracción de la información en una base de datos, además de pro-porcionar herramientas para añadir, borrar modi�car y analizar los datos.

[email protected] 98 Antonio Carrillo Ledesma, Et alii

Page 101: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Los usuarios pueden acceder a la información usando herramientas especí�-cas de interrogación y de generación de informes, o bien mediante aplicacionesdiseñadas para este �n.Los SGBD también proporcionan métodos para mantener la integridad

de los datos, para administrar el acceso de usuarios a los datos y recuperarla información si el sistema se corrompe. Permite presentar la informaciónde la base de datos en varios formatos. La mayoría de los SGBD incluyen ungenerador de informes. También puede incluir un módulo grá�co que permitapresentar la información con grá�cos y diagramas.Hay muchos tipos de SGBD distintos según manejen los datos y muchos

tamaños distintos según funcionen sobre equipos de cómputo personales y conpoca memoria a grandes sistemas que funcionan en mainframes con sistemasde almacenamiento especiales.Generalmente se accede a los datos mediante lenguajes de interrogación24,

lenguajes de alto nivel que simpli�can la tarea de construir las aplicaciones.También simpli�can la interrogación y la presentación de la información.Un SGDB permite controlar el acceso a los datos, asegurar su integridad,gestionar el acceso concurrente a ellos, recuperar los datos tras un fallo delsistema y hacer copias de seguridad.El uso generalizado de los paquetes de Microsoft O¢ ce, en particular el

acceso a el paquete Access mediante tablas de Excel usando Visual Basicfor Applications, además del uso de los complementos de Excel para manejode datos, hace que sean propicios para que un importante número de cursosdentro de las carreras de la Facultad de Ciencias hagan uso extensivo dedicha suite.

Instalación de Manejadores de Bases de Datos e IDEs en DebianGNU/Linux Existen diversas versiones de paquetes para manejar basesde Datos en Linux, para instalar las más comunes en Debian GNU/Linux esnecesario hacer:

# apt install apache2 libapache2-mod-evasive apachetop# apt install php libapache2-mod-php php-mysql php-gd ph-

pmyadmin

24Lenguajes tipo SQL (Structured Query Languaje) que es un lenguaje de consultaestructurada que da acceso a un sistema de gestión de bases de datos.

[email protected] 99 Antonio Carrillo Ledesma, Et alii

Page 102: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

# apt install mysql-common mysql-client mysql-server mytopmysql-admin ferret mysql-workbench mysql-workbench-data my-cli# apt install postgresql postgresql-client postgresql-doc postgresql-

contrib pgcli# apt install sqlite3 sqlite3-doc sqlitebrowser# apt install mongodb mongodb-clients mongodb-server

6.3 Herramientas de Presentación y Multimedia

El programa líder del mercado es Microsoft PowerPoint (véase [24]), estees un programa de presentación desarrollado por la empresa Microsoft parasistemas operativos Microsoft Windows y Mac OS, ampliamente usado endistintos campos como la enseñanza, negocios, etc. Pero todos los paqueteso�máticos tienen una herramienta pera realizar presentaciones, en algunoscasos son altamente compatibles con la desarrollada por Microsoft.Estos programas se han diseñado para hacer presentaciones con texto

esquematizado, animaciones de texto e imágenes prediseñadas o importadasdesde imágenes de la computadora. Se le pueden aplicar distintos diseñosde fuente, plantilla y animación. Este tipo de presentaciones suelen ser másprácticas que las de los paquetes de edición de textos.Las herramientas de Presentación vienen integrados en los paquetes o�má-

ticos como un elemento más, que puede aprovechar las ventajas que le ofrecenlos demás componentes del paquete para obtener un resultado óptimo.En el caso de PowerPoint, se puede usar como complemento para la edi-

ción de texto cientí�co a MathType (véase [82]) para Microsoft O¢ ce, este esun paquete adicional pero es uno de los más usados en cuanto a la tipografíamatemática.Por otro lado, esta ganando terreno en la Facultad de Ciencias el uso

de Beamer (véase [93]), el cual es una clase de LaTeX (véase [34]) parala creación de presentaciones. Este funciona con pd�atex, dvips, LyX entreotros. Al estar basado en LaTeX, Beamer es especialmente útil para prepararpresentaciones en las que es necesario mostrar gran cantidad de expresionesmatemáticas. En los últimos semestres se ha hecho una amplia difusión a lospaquetes que usan a LaTeX como base, pues son ampliamente usados por lacomunidad cientí�ca mundial.

[email protected] 100 Antonio Carrillo Ledesma, Et alii

Page 103: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

6.4 Procesamiento de Imágenes

Existe una gran cantidad de usos para los programas de edición de imágenes,pero en las carreras de la Facultad de Ciencias, la edición y manipulación degrá�cos vectoriales25 es común. Es por ello que la gran mayoría de los paque-tes de edición y manipulación de imágenes no proporcionan las herramientasnecesarias para procesar adecuadamente imágenes vectoriales. En caso deproveer dichas herramientas, muchas de ellas son de uso tedioso, pues estandiseñadas para uso ocasional.Para subsanar este hecho, existen herramientas y editores hechos a ex-

profeso, para permitir la edición y manipulación de grá�cos vectoriales en loscuales su procesamiento es una tarea sencilla de realizar. Existe una granvariedad de paquetes para edición de grá�cos vectoriales � los cuales existentanto en las plataformas de Windows, Linux, Mac� , entre los que destacan:

� Adobe InDesign

� Scribus

� Inkscape

� Gravit

� Vectr

� Libre O¢ ce Draw

� SK1

� Maya

� Blender

� Autodesk 3Ds Max

� Gimp25Una imagen vectorial es una imagen digital formada por objetos geométricos depen-

dientes, cada uno de ellos de�nido por atributos matemáticos de forma, posición, etc. Yson completamente diferentes a las imágenes de mapa de bits. El interés principal de losgrá�cos vectoriales es poder ampliar el tamaño de la imagen a voluntad sin sufrir perdidade calidad que sufren los mapas de bits. Pero todos los ordenadores traducen los grá�cosvectoriales a mapas de bits para poderlos representar en la pantalla, impresora, etc.

[email protected] 101 Antonio Carrillo Ledesma, Et alii

Page 104: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Corel Photo-Paint

� Adobe Photoshop

� CorelDRAW

� Adobe illustrator

� Photoshop

6.5 Procesamiento de Textos

Existe una gran cantidad de usos para los programas de edición de texto, peroen las carreras de la Facultad de Ciencias, la edición de textos con tipografíacientí�ca es común. Es por ello que la gran mayoría de los procesadores detextos no proporcionan las herramientas necesarias para incluir en el textofórmulas y/o notación matemática. En caso de proveer dichas herramientas,muchas de ellas son de uso tedioso, pues estan diseñadas para uso ocasional.Para subsanar este hecho, existen herramientas y editores hechos a ex-

profeso, para permitir la edición de textos cientí�cos en los cuales numerarecuaciones, usar tipografía matemática, manipular bibliografía y referenciascruzadas es una tarea sencilla de realizar.Existe una gran variedad de paquetes para la edición de textos cientí�cos

� los cuales existen tanto en las plataformas de Windows, Linux, Mac� ,entre los que destacan:

� Editor de ecuaciones integrado en Word en Microsoft O¢ ce (véase [24])

� MathType para Word en Microsoft O¢ ce para Windows (véase [82])

� Scienti�c WorkPlace LaTex para Windows (véase [83])

� Gummi LaTeX (véase [84])

� Kile LaTeX (véase [85])

� LED LaTeX (véase [86])

� LyX LaTeX (véase [87])

� Texmaker LaTeX (véase [88])

[email protected] 102 Antonio Carrillo Ledesma, Et alii

Page 105: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� TeXnicCenter LaTeX (véase [89])

� TextPad LaTeX (véase [90])

� TeXstudio LaTeX (véase [91])

� WinEdt LaTeX (véase [92])

� Formula de Libre O¢ ce (véase [26])

� Math de OpenO¢ ce (véase [25])

� Formula de Calligra (véase [28])

Salvo para los productos de Microsoft O¢ ce, el resto de los paquetestienen una curva de aprendizaje de media a alta, pero en contraste permitendesarrollar textos y grá�cos con tipografía cientí�ca de alta calidad. Enla Facultad de Ciencias, desde hace ya varios años, semestre a semestre seimparten cursos a estudiantes, tesistas y profesores de LaTeX y el manejo deuno o mas editores que lo soportan; una cantidad importante de ellos se hanimpartido en las Aulas y Talleres del Departamento de Matemáticas en elTlahuizcalpan, además de contar con el repositorio o�cial de LaTeX (véase[99]) dentro de la Facultad.

Instalación de Procesadores de Texto e IDEs en Debian GNU/LinuxExisten diversas versiones de paquetes para procesar texto en Linux, parainstalar las más comunes en Debian GNU/Linux es necesario hacer:

# apt install science-typesetting texlive-science texstudio pan-doc texmaker inkscape kile gummi texstudio enchant texlive-latex-base texlive-latex-recommended latexila lyx medit texworkstexlive-full latexila libreo¢ ce calligra abiword evince gnumerickexi texlive-extra-utils pdf-viewer msttcorefonts djview4 okulargv zathura di¤pdf mupdf pdf-presenter-console evince xpdf okularpoppler-utils atril pdftk pdfgrep xpdf-utils pdfcrack qpdf pdfsampdfshu­ er htmldoc pdf2svg pdfmod pdfposter pdfchain pdf2djvugpdftext catdoc chktex cxref cxref-doc latex2rtf antiword uno-conv a2ps bookletimposer qpdfview rst2pdf xchm chm2pdf arch-mage qpdfview-ps-plugin qpdfview qpdfview-djvu-plugin kchmviewerispanish wspanish texlive-lang-spanish myspell-es myspell-en-ustranslate-shell

[email protected] 103 Antonio Carrillo Ledesma, Et alii

Page 106: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Aprender a Trabajar en LaTeX En la red existen múltiples sitios espe-cializados y una amplia bibliografía para aprender a programar cada uno delos distintos aspectos de LaTeX, nosotros hemos seleccionado diversos textosque ponemos a su disposición en:

HerramientasO�mática/Latex/

6.6 Desde la Nube

Existen diferentes servicios Web26 que permiten editar, compilar y generar elarchivo PDF o DVI desde el navegador, esto en aras de que los estudiantesy profesores que cuenten con algún sistema de acceso a red y un navegadorpuedan trabajar en LaTeX sin hacer instalación alguna en su equipo de cóm-puto, tableta o teléfono celular.Algunos ejemplos de estos servicio son:

� Para LaTex https://es.sharelatex.com/

� Para LaTex https://papeeria.com/

� Para LaTex https://www.overleaf.com/

� Para LaTex https://www.authorea.com/

� Para LaTex https://latexbase.com/

� Para LaTex https://www.codecogs.com/latex/eqneditor.php

26Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar al navegador.

[email protected] 104 Antonio Carrillo Ledesma, Et alii

Page 107: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7 Lenguajes de Programación

Hay muchas aplicaciones a las herramientas computacionales, pero nos in-teresan aquellas que permitan resolver problemas concomitantes en Cienciae Ingeniería. Muchas de estas aplicaciones caen en lo que comúnmente sellama cómputo cientí�co. La computación cientí�ca es el campo de estudiorelacionado con la construcción de modelos matemáticos, técnicas numéricaspara resolver problemas cientí�cos y de ingeniería; y su respectiva imple-mentación computacional.Este campo es distinto a las ciencias de la computación y el procesamiento

de información, también es diferente a la teoría y experimentación, que sonlas formas tradicionales de la ciencia y la ingeniería. El enfoque de la com-putación cientí�ca es para ganar entendimiento, principalmente a través delanálisis de modelos matemáticos implementados en computadoras.Los programas de aplicación de la computación cientí�ca a menudo mode-

lan cambios en las condiciones del mundo real, tales como el tiempo atmos-férico, el �ujo de aire alrededor de un avión, el movimiento de las estre-llas en una galaxia, el comportamiento de un dispositivo explosivo, entreotros. Estos programas deberían crear una �malla lógica�en la memoria dela computadora, donde cada ítem corresponda a un área en el espacio y con-tenga información acerca del espacio relevante para el modelo. Por ejemplo,en modelos para el tiempo atmosférico, cada ítem podría ser un kilómetrocuadrado, con la altitud del suelo, dirección actual del viento, humedad am-biental, temperatura, presión, etc. El programa debería calcular el siguienteestado probable basado en el estado actual, simulado en medidas de tiempo,resolviendo ecuaciones que describen cómo operan los sistemas mediante eluso de un algoritmo27, y repetir el proceso para calcular el siguiente estado.Este código o programa se escribe en un lenguaje de programación que siguealgún paradigma de programación28, que posteriormente puede ser ejecutadopor una unidad central de procesamiento � computadora� .

27Un algoritmo es un conjunto preescrito de instrucciones o reglas bien de�nidas, orde-nadas y �nitas que permiten llevar a cabo una actividad mediante pasos sucesivos que nogeneren dudas a quien deba hacer dicha actividad. Dados un estado inicial y una entrada,siguiendo los pasos sucesivos se llega a un estado �nal y se obtiene una solución.28Este representa un enfoque particular o �losofía para diseñar soluciones e implemen-

tarlas en algún lenguaje de programación.

[email protected] 105 Antonio Carrillo Ledesma, Et alii

Page 108: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Así, una parte importante de la programación es el hecho de conocer yusar uno o más paradigmas de programación. Entonces iniciemos delineandolo que es un paradigma de programación. Los paradigmas di�eren unos deotros, en los conceptos y la forma de abstraer los elementos involucrados enun problema, así como en los pasos que integran la solución del problema,en otras palabras, el cómputo. Tiene una estrecha relación con la forma-lización de determinados lenguajes al momento de de�nirlos � es el estilo deprogramación empleado� .

Los Tipos más comunes de paradigmas de programación son29:

� Programación imperativa o por procedimientos: es el más usado engeneral, se basa en dar instrucciones a la computadora de como hacerlas cosas en forma de algoritmos. La programación imperativa es lamás usada y la más antigua, el ejemplo principal es el lenguaje demáquina. Ejemplos de lenguajes puros de este paradigma serían C,BASIC o Pascal.

� Programación orientada a objetos: esta basado en el imperativo, peroencapsula elementos denominados objetos que incluyen tanto variablescomo funciones. Esta representado por C++, C#, Java o Python entreotros, pero el más representativo sería el Smalltalk que esta completa-mente orientado a objetos.

� Programación dinámica: esta de�nido como el proceso de romper pro-blemas en partes pequeñas para analizarlos y resolverlos de forma lomás cercana al óptimo, busca resolver problemas en O(n) sin usarpor tanto métodos recursivos. Este paradigma está más basado en elmodo de realizar los algoritmos, por lo que se puede usar con cualquierlenguaje imperativo como C, C++, Java o Python.

� Programación dirigida por eventos: la programación dirigida por even-tos es un paradigma de programación en el que tanto la estructuracomo la ejecución de los programas van determinados por los sucesosque ocurran en el sistema, de�nidos por el usuario o que ellos mismosdiseñen, por ejemplo en las interfaces grá�cas de usuarios o en la Web.

29En general la mayoría son variantes de los dos tipos principales: imperativa y decla-rativa.

[email protected] 106 Antonio Carrillo Ledesma, Et alii

Page 109: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Programación declarativa: esta basado en describir el problema declaran-do propiedades y reglas que deben cumplirse, en lugar de instrucciones.Hay lenguajes para la programación funcional, la programación lógica,o la combinación lógico-funcional. Unos de los primeros lenguajes fun-cionales fueron Lisp y Prolog.

� Programación funcional: basada en la de�nición los predicados y es decorte más matemático, está representado por Scheme (una variante deLisp) o Haskell. Python también representa este paradigma.

� Programación lógica: basado en la de�nición de relaciones lógicas, estárepresentado por Prolog.

� Programación con restricciones: similar a la lógica usando ecuaciones.Casi todos los lenguajes son variantes del Prolog.

� Programación multiparadigma: es el uso de dos o más paradigmasdentro de un programa. El lenguaje Lisp se considera multiparadigma.Al igual que Python, que es orientado a objetos, re�exivo, imperativoy funcional.

� Programación reactiva: este paradigma se basa en la declaración de unaserie de objetos emisores de eventos asíncronos y otra serie de objetosque se «suscriben» a los primeros � es decir, quedan a la escucha de laemisión de eventos de estos� y "reaccionan" a los valores que reciben.Es muy común usar la librería Rx de Microsoft (Acrónimo de ReactiveExtensions), disponible para múltiples lenguajes de programación.

El paradigma de programación más utilizado en la actualidad, es el de«orientación a objetos» . El núcleo central de este paradigma es la unión dedatos y procesamiento en una entidad llamada «objeto» , relacionable a suvez con otras entidades «objeto» .Tradicionalmente, datos y procesamiento se han separado en diferentes

áreas del diseño y la implementación de Software. Esto provocó que grandesdesarrollos tuvieran problemas de �abilidad, mantenimiento, adaptación a loscambios y escalabilidad. Con la orientación a objetos y características comoel encapsulado, polimor�smo o la herencia, se permitió un avance signi�cativoen el desarrollo de Software a cualquier escala de producción.

[email protected] 107 Antonio Carrillo Ledesma, Et alii

Page 110: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Otra parte importante de la programación tiene que ver con el algoritmoa implementar y las estructuras de datos necesarias para soportar los datosdel problema, así como su e�ciencia. Entonces entenderemos por e�cienciaalgorítmica para describir aquellas propiedades de los algoritmos que estánrelacionadas con la cantidad de recursos utilizados por el algoritmo. Un al-goritmo debe ser analizado para determinar el uso de los recursos que realiza.La e�ciencia algorítmica puede ser vista como análogo a la ingeniería de pro-ductividad de un proceso repetitivo o continuo. Con el objetivo de lograruna e�ciencia máxima se quiere minimizar el uso de recursos. Sin embargo,varias medidas (e.g. complejidad temporal, complejidad espacial) no puedenser comparadas directamente, luego, cual de los algoritmos es consideradomás e�ciente, depende de cual medida de e�ciencia se está considerandocomo prioridad, e.g. la prioridad podría ser obtener la salida del algoritmolo más rápido posible, o que minimice el uso de la memoria, o alguna otramedida particular.

Entonces, ¿cómo determinar si un algoritmo es mejor que otro?. Algunaspautas pueden ser:

� Facilidad de implementar

� Facilidad de entender

� Facilidad de modi�car

� Usa menos memoria

� Menor tiempo de ejecución

Tomando en cuenta todo lo anterior, ¿cómo se hace un pro-grama?

� Hay que tener claro el problema a resolver (formalización)

� Se debe planear cómo se quiere resolver o abordar el problema (análisisy diseño)

� Se elige uno o más lenguajes de programación y se escriben las instruc-ciones en ese lenguaje para llevar a cabo esa tarea (codi�cación)

[email protected] 108 Antonio Carrillo Ledesma, Et alii

Page 111: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� El texto se compila o interpreta para detectar errores sintácticos ysemánticos (depuración)

� El programa revisado se prueba con los distintos datos de entrada (eje-cución)

� Se evalúan los resultados, y de ser necesario se regresa a cualquiera delos pasos anteriores para completar el proceso de corrección (validación)

Así, para dar solución a algún problema de nuestro interés, debemoselegir el mejor algoritmo a nuestra disposición, seleccionar30 el paradigma deprogramación que nos ofrezca ventajas según su e�ciencia algorítmica y conello usar el lenguaje que nos permita implementar dicho programa usandolas técnicas de análisis y diseño que garanticen la calidad de un producto deSoftware31.

Lenguaje de Programación Entenderemos por un lenguaje de pro-gramación, a un lenguaje formal que especi�ca una serie de instruccionespara que una computadora produzca diversas clases de datos. Los lenguajesde programación pueden usarse para crear programas que pongan en prácticaalgoritmos especí�cos que controlen el comportamiento físico y lógico de unacomputadora. Esta formado por un conjunto de símbolos y reglas sintácticasy semánticas que de�nen su estructura y el signi�cado de sus elementos y ex-presiones. Al proceso por el cual se escribe, se prueba, se depura, se compila(de ser necesario) y se mantiene el código fuente de un programa informáticose le llama programación.Un programa permite especi�car de manera precisa sobre qué datos debe

operar una computadora, cómo deben ser almacenados o transmitidos y quéacciones debe tomar bajo una variada gama de circunstancias. Todo esto,a través de un lenguaje que intenta estar relativamente próximo al lenguaje

30Si bien puede seleccionarse la forma pura de estos paradigmas al momento de progra-mar, en la práctica es habitual que se mezclen, dando lugar a la programación multipara-digma o lenguajes de programación multiparadigma.31La ingeniería de Software es la aplicación de un enfoque sistemático, disciplinado y

cuanti�cable al desarrollo, operación y mantenimiento de Software y el estudio de estosenfoques, es decir, el estudio de las aplicaciones de la ingeniería al Software. Integramatemáticas, ciencias de la computación y prácticas cuyos orígenes se encuentran en laingeniería.

[email protected] 109 Antonio Carrillo Ledesma, Et alii

Page 112: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

humano o natural. Una característica relevante de los lenguajes de progra-mación es precisamente que más de un programador pueda usar un conjuntocomún de instrucciones que sean comprendidas entre ellos para realizar laconstrucción de un programa de forma colaborativa.

Variables son títulos asignados a espacios en memoria para almacenardatos especí�cos. Son contenedores de datos y por ello se diferencian segúnel tipo de dato que son capaces de almacenar. En la mayoría de lenguajesde programación se requiere especi�car un tipo de variable concreto paraguardar un dato especí�co. A continuación, un listado con los tipos de varia-bles más comunes:

Tipo de dato Breve descripciónChar Contienen un único carácterInt Contienen un número enteroFloat Contienen un número decimalString Contienen cadenas de textoBoolean Solo pueden contener32verdadero o falso

Condicionales son estructuras de código que indican que, para quecierta parte del programa se ejecute, deben cumplirse ciertas premisas; porejemplo: que dos valores sean iguales, que un valor exista, que un valor seamayor que otro. Estos condicionantes por lo general solo se ejecutan una veza lo largo del programa. Los condicionantes más conocidos y empleados enprogramación son:

� If: Indica una condición para que se ejecute una parte del programa.

� Else if: Siempre va precedido de un "If" e indica una condición para quese ejecute una parte del programa siempre que no cumpla la condicióndel if previo y sí se cumpla con la que el "else if" especi�que.

� Else: Siempre precedido de "If" y en ocasiones de "Else If". Indica quedebe ejecutarse cuando no se cumplan las condiciones previas.

32 En el caso de variables booleanas, el cero es considerado para muchos lenguajes comoel literal falso ("False"), mientras que el uno se considera verdadero ("True").

[email protected] 110 Antonio Carrillo Ledesma, Et alii

Page 113: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Bucles son parientes cercanos de los condicionantes, pero ejecutan cons-tantemente un código mientras se cumpla una determinada condición. Losmás frecuentes son:

� For: Ejecuta un código mientras una variable se encuentre entre 2determinados parámetros.

� While: Ejecuta un código mientras que se cumpla la condición quesolicita.

Hay que decir que a pesar de que existan distintos tipos de bucles, todosson capaces de realizar exactamente las mismas funciones. El empleo de unou otro depende, por lo general, del gusto del programador.

Funciones estas se crearon para evitar tener que repetir constante-mente fragmentos de código. Una función podría considerarse como unavariable que encierra código dentro de sí. Por lo tanto cuando accedemos adicha variable (la función), en realidad lo que estamos haciendo es ordenaral programa que ejecute un determinado código prede�nido anteriormente.Todos los lenguajes de programación tienen algunos elementos de forma-

ción primitivos para la descripción de los datos y de los procesos o transfor-maciones aplicadas a estos datos � tal como la suma de dos números o laselección de un elemento que forma parte de una colección� . Estos elemen-tos primitivos son de�nidos por reglas sintácticas y semánticas que describensu estructura y signi�cado respectivamente.

Implementación de un Lenguaje de Programación Es la queprovee una manera de que se ejecute un programa para una determinadacombinación de Software y Hardware. Existen básicamente dos maneras deimplementar un lenguaje:

� Compilación: es el proceso que traduce un programa escrito en unlenguaje de programación a otro lenguaje de programación, generandoun programa equivalente que la máquina será capaz interpretar. Losprogramas traductores que pueden realizar esta operación se llamancompiladores. Estos, como los programas ensambladores avanzados,pueden generar muchas líneas de código de máquina por cada proposi-ción del programa fuente.

[email protected] 111 Antonio Carrillo Ledesma, Et alii

Page 114: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Interpretación: es una asignación de signi�cados a las fórmulas bienformadas de un lenguaje formal. Como los lenguajes formales33 puedende�nirse en términos puramente sintácticos, sus fórmulas bien formadaspueden no ser más que cadenas de símbolos sin ningún signi�cado. Unainterpretación otorga signi�cado a esas fórmulas.

Para ayudar al programador es común el uso de editores de texto o am-bientes integrados de desarrollo que permiten resaltar los elementos de lasintaxis con colores diferentes para facilitar su lectura. A la forma visiblede un lenguaje de programación se le conoce como sintaxis. La mayoría delos lenguajes de programación son puramente textuales, es decir, utilizansecuencias de texto que incluyen palabras, números y puntuación, de ma-nera similar a los lenguajes naturales escritos. Por otra parte, hay algunoslenguajes de programación que son más grá�cos en su naturaleza, utilizandorelaciones visuales entre símbolos para especi�car un programa.La sintaxis de un lenguaje de programación describe las combinaciones

posibles de los símbolos que forman un programa sintácticamente correcto.El signi�cado que se le da a una combinación de símbolos es manejado porsu semántica � ya sea formal o como parte del código duro34 de la referenciade implementación� .La sintaxis de los lenguajes de programación es de�nida generalmente

utilizando una combinación de expresiones regulares � para la estructuraléxica� y la Notación de Backus-Naur35 para la estructura gramática.33En matemáticas, lógica y ciencias de la computación, un lenguaje formal es un lenguaje

cuyos símbolos primitivos y reglas para unir esos símbolos están formalmente especi�cados.Al conjunto de los símbolos primitivos se le llama alfabeto (o vocabulario) del lenguaje,y al conjunto de las reglas se le llama gramática formal (o sintaxis). A una cadena desímbolos formada de acuerdo a la gramática se le llama fórmula bien formada (o palabra)del lenguaje. Estrictamente hablando, un lenguaje formal es idéntico al conjunto de todassus fórmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser unconjunto �nito) y con cada fórmula bien formada (que debe tener una longitud también�nita), un lenguaje formal puede estar compuesto por un número in�nito de fórmulas bienformadas.34Hard-Code, término del mundo de la informática que hace referencia a una mala

práctica en el desarrollo de Software que consiste en incrustar datos directamente (a fuego)en el código fuente del programa, en lugar de obtener esos datos de una fuente externacomo un �chero de con�guración o parámetros de la línea de comandos, o un archivo derecursos.35La notación de Backus-Naur, también conocida por sus denominaciones inglesas

Backus-Naur form (BNF), Backus-Naur formalism o Backus normal form, es un meta-

[email protected] 112 Antonio Carrillo Ledesma, Et alii

Page 115: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Objetivos a Cumplir en el Código Generado Para escribir progra-mas que proporcionen los mejores resultados, cabe tener en cuenta una seriede objetivos, entre los que destacan:

� Corrección: Un programa es correcto si hace lo que debe hacer tal ycomo se estableció en las fases previas a su desarrollo. Para determi-nar si un programa hace lo que debe, es muy importante especi�carclaramente qué debe hacer el programa antes de desarrollarlo y, unavez acabado, compararlo con lo que realmente hace.

� Claridad: Es muy importante que el programa sea lo más claro y legi-ble posible, para facilitar así su desarrollo y posterior mantenimiento.Al elaborar un programa se debe intentar que su estructura sea sencillay coherente, así como cuidar el estilo en la edición; de esta forma seve facilitado el trabajo del programador, tanto en la fase de creacióncomo en las fases posteriores de corrección de errores, ampliaciones,modi�caciones, etc. Fases que pueden ser realizadas incluso por otroprogramador, con lo cual la claridad es aún más necesaria para queotros programadores puedan continuar el trabajo fácilmente.

� E�ciencia: Se trata de que el programa, además de realizar aquello paralo que fue creado � es decir, que sea correcto� , lo haga gestionando dela mejor forma posible los recursos que utiliza. Normalmente, al hablarde e�ciencia de un programa, se suele hacer referencia al tiempo quetarda en realizar la tarea para la que ha sido creado y a la cantidadde memoria que necesita, pero hay otros recursos que también puedenser de consideración al obtener la e�ciencia de un programa, depen-diendo de su naturaleza � espacio en disco que utiliza, trá�co de redque genera, etc.� .

� Portabilidad: Un programa es portable cuando tiene la capacidad depoder ejecutarse en una plataforma, ya sea Hardware o Software, dife-rente a aquella en la que se elaboró. La portabilidad es una caracterís-tica muy deseable para un programa, ya que permite, por ejemplo, a unprograma que se ha desarrollado para sistemas GNU/Linux ejecutarsetambién en la familia de sistemas operativos Windows. Esto permiteque el programa pueda llegar a más usuarios más fácilmente.

lenguaje usado para expresar gramáticas libres de contexto: es decir, una manera formalde describir lenguajes formales.

[email protected] 113 Antonio Carrillo Ledesma, Et alii

Page 116: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Integridad: Un programa tiene integridad si es posible controlar su uso,el grado con que se puede controlar el acceso al Software o a los datosa personas no autorizadas denotará su integridad.

� Facilidad de uso: Un programa tiene facilidad de uso si el esfuerzorequerido es mínimo o moderado para aprender el manejo de una apli-cación, trabajar con ella, introducir datos y conseguir resultados.

� Facilidad de mantenimiento: Un programa tiene facilidad de manteni-miento si el esfuerzo requerido para localizar y reparar errores es mode-rado o mínimo.

� Flexibilidad: Un programa tiene �exibilidad si el esfuerzo requeridopara modi�car y/o añadir funcionalidades a una aplicación en fun-cionamiento es moderado o mínimo.

� Reusabilidad: Es el grado en que un programa o porción de este esreusable en otras aplicaciones.

� Interoperatibilidad: Un programa debe poder comunicarse con otrasaplicaciones o sistemas informáticos, el esfuerzo necesario para ellomedirá su interoperatibilidad.

Existe una gran variedad de lenguajes de programación y su grado deuso depende de diversos factores, entre los que destacan: C, C++, Java yPython.

7.1 Conceptos Transversales

En esta sección comentaremos algunos conceptos transversales a los distintosparadigmas de programación y a los lenguajes que los implementan.

Abstracción Entendiendo un sistema como una abstracción de la realidad,los datos son las entidades que representan cada uno de los aspectos dela realidad que son signi�cativos para el funcionamiento del sistema. Paraque tenga sentido como abstracción de la realidad, cada dato implica undeterminado valor y requiere de una convención que permita representarlosin ambigüedad y procesarlo de una manera con�able.

[email protected] 114 Antonio Carrillo Ledesma, Et alii

Page 117: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

En la misma línea, la lógica del procesamiento de los datos es tambiénuna abstracción de los procesos que suceden en la realidad que conforma eldominio de la aplicación. El proceso de abstraerse progresivamente de losdetalles y así manejar niveles de abstracción, es el que permite construirsistemas complejos.Las unidades de Software que realizan la funcionalidad del sistema re-

quieren también de convenciones y criterios de ordenamiento y articulacióninterna tanto para un funcionamiento con�able y e�ciente del sistema, comopara que el proceso de construcción y mantenimiento del Software sea de laforma más simple posible.

Modularización, Encapsulamiento y Delegación Una estrategia cen-tral de la programación es buscar la manera de organizar y distribuir lafuncionalidad de un sistema complejo en unidades más pequeñas de Softwarecon que se responsabilizan de tareas especí�cas y que interactúan entre ellas.Estas unidades reciben nombres diferentes según cada lenguaje de progra-mación, como rutinas, funciones, procedimientos, métodos, predicados, sub-programas, bloques, entidades, siendo "módulos" una de las más frecuentesy que dan origen al término.La clave de cada módulo es no conocer el funcionamiento interno de los

demás módulos con los que interactúa, sino sólo su interfaz, es decir, la formaen que debe enviarle información adicional en forma de parámetros y cómova a recibir las respuestas. Esta propiedad recibe diversos nombres, comoel de encapsulamiento, ocultación de información o "caja negra". Ante lamodi�cación de una funcionalidad en particular del sistema, en la medida quesu implementación esté encapsulada en un módulo, el impacto que producesu cambio no afectará a los otros módulos que interactúan con el.En concordancia con la distribución de responsabilidades entre las dife-

rentes unidades de Software, la delegación consiste en la invocación que desdeun módulo se efectúa a otro módulo, de manera que el que invoca indica deforma explicita qué es lo que pretende y el que es invocado se ocupa de todo lonecesario para realizarlo. Puede realizarse de numerosas maneras, variandoel criterio de distribución de responsabilidades, el modo de evaluación, laforma de paso de parámetros, los tipos de datos que utiliza, de acuerdo a lasposibilidades y restricciones de cada lenguaje y paradigma.

[email protected] 115 Antonio Carrillo Ledesma, Et alii

Page 118: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Declaratividad La declaratividad, en términos generales, se basa en laseparación del conocimiento sobre la de�nición del problema con la forma debuscar su solución, una separación entre la lógica y el control.En un programa declarativo se especi�can un conjunto de declaraciones,

que pueden ser proposiciones, condiciones, restricciones, a�rmaciones, o ecua-ciones, que caracterizan al problema y describen su solución. A partir de estainformación el sistema utiliza mecanismos internos de control, comúnmentellamado "motores", que evalúan y relacionan adecuadamente dichas especi-�caciones, la manera de obtener la solución. De esta forma, en vez de seruna secuencia de órdenes, un programa es un conjunto de de�niciones sobreel dominio del problema.Basándose en la noción de delegación, la declaratividad plantea como

criterio para distribuir las responsabilidades, separar las relacionadas conmodelar o de�nir el conocimiento del problema de aquellas de manipularese conocimiento para alcanzar un objetivo concreto. En otras palabras,distinguir el "qué" del "cómo".La declaratividad brinda la posibilidad de usar una misma descripción en

múltiples contextos en forma independiente de los motores que se utilicen.Permite focalizar por un lado en las cuestiones algorítmicas del motor,

por ejemplo para trabajar en forma uni�cada sobre e�ciencia, y por otro enla de�nición del dominio del problema y la funcionalidad de la aplicación ensí.La noción opuesta, aunque en cierta medida complementaria, de la decla-

ratividad, puede denominarse "proceduralidad". Los programas proceduralesse construyen indicando explícitamente la secuencia de ejecución en la que seprocesan los datos y obtienen los resultados. Para ello se detalla un conjuntode sentencias, ordenadas mediante estructuras de control como decisiones,iteraciones y secuencias, que conforman "algoritmos".En un sistema complejo, no se puede hablar de declaratividad o proce-

duralidad como conceptos excluyentes o totalizantes, sino que coexisten y serelacionan en una permanente tensión. Dependiendo de los lenguajes y delas herramientas que se utilicen, y en particular del diseño del sistema, habrápartes del sistema que por su sentido o ubicación dentro del sistema globalserán más declarativas o procedurales que otras, logrando con ello aprovecharlas ventajas respectivas.

[email protected] 116 Antonio Carrillo Ledesma, Et alii

Page 119: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Tipos de Datos Un tipo de dato, o como también es llamado, un tipo abs-tracto de dato, es un conjunto de valores y de operaciones asociadas a ellos.La utilización de diversos tipos de datos permite la agrupación o clasi�cacióndel gran volumen y variedad de valores que es necesario representar y operaren un sistema, según sus semejanzas y diferencias.Tomando como criterio las similitudes en cuanto al contenido de lo que

representan, una primera condición es la existencia de un conjunto de valoreso entidades homogéneos en su representación. Otra condición es que loselementos del mencionado conjunto se comporten en forma uniforme respectoa una serie de operaciones.Cada paradigma de programación, y en particular cada lenguaje, tiene su

forma de determinar tanto la conformación de cada tipo de dato, con sus va-lores y operaciones, como la forma en que se relacionan entre sí conformandoun sistema de tipo de datos.En un lenguaje fuertemente tipado, toda variable y parámetro deben

ser de�nidos de un tipo de dato en particular que se mantiene sin cambiosdurante la ejecución del programa, mientras que en uno débilmente tipadono, sino que pueden asumir valores y tipos de datos diferentes durante laejecución del programa.El tipo de dato al que pertenece una entidad determina la operatoria que

se puede realizar con el. Una tarea que realizan muchos de los lenguajes deprogramación como forma de su mecanismo interno es el chequeo del tipode dato de las entidades del programa. Esta acción se realiza de diferentesmaneras, con mayor o menor �exibilidad, y en diferentes momentos, como lacompilación o la ejecución del programa, y en otros no se realiza.De todas maneras, el tipo de datos permite entender qué entidades tienen

sentido en un contexto, independientemente de la forma de chequeo o si eltipado es débil o fuerte. Por ejemplo, a un bloque de Software que recibecomo argumento una variable, conocer de qué tipo de dato es, le permitesaber qué puede hacer con ella.

Estructuras de Datos Los valores atómicos, es decir, aquellos que nopueden ser descompuestos en otros valores, se representan mediante tipos dedatos simples.En contrapartida, en un tipo de dato compuesto los valores están com-

puestos a su vez por otros valores, de manera que conforma una estructura dedatos. Cada uno de los valores que forman la estructura de datos corresponde

[email protected] 117 Antonio Carrillo Ledesma, Et alii

Page 120: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

a algún tipo de dato que puede ser tanto simple como compuesto.Su utilidad consiste en que se pueden procesar en su conjunto como una

unidad o se pueden descomponer en sus partes y tratarlas en forma indepen-diente. En otras palabras, las estructuras de datos son conjuntos de valores.

Polimor�smo y Software Genérico El polimor�smo es un concepto parael que se pueden encontrar numerosas y diferentes de�niciones. En un sentidoamplio, más allá de las especi�cidades de cada paradigma y del alcance que sele dé a la de�nición del concepto desde la perspectiva teórica desde la que sele aborde, el objetivo general del polimor�smo es construir piezas de Softwaregenéricas que trabajen indistintamente con diferentes tipos de entidades, paraotra entidad que requiere interactuar con ellas; en otras palabras, que dichasentidades puedan ser intercambiables. Mirando con mayor detenimiento losmecanismos que se activan y sus consecuencias para el desarrollo de sistemas,se pueden distinguir dos grandes situaciones.Hay polimor�smo cuando, ante la existencia de dos o más bloques de

Software con una misma interfaz, otro bloque de Software cualquiera puedetrabajar indistintamente con ellos. Esta noción rescata la existencia de tantasimplementaciones como diferentes tipos de entidades con que se interactúe.Una entidad emisora puede interactuar con cualquiera de las otras en-

tidades de acuerdo a las características de la interfaz común, y la entidadreceptora realizará la tarea solicitada de acuerdo a la propia implementaciónque tenga de�nida, independientemente de las otras implementaciones quetengan las otras entidades. Consistentemente con la noción de delegación,la entidad emisora se desentiende de la forma en que las otras entidadesimplementaron sus respuestas, ya sea igual, parecida o totalmente diferente.Analizando el concepto desde el punto de vista de las entidades que res-

ponden a la invocación, el proceso de desarrollo debe contemplar la variedady especi�cidad de cada una para responder adecuadamente a lo que se lessolicita. Desde el punto de vista de la entidad que invoca, el proceso estransparente, y es en de�nitiva esta, la que se ve bene�ciada por el uso delconcepto.Otra forma de obtener un bloque de Software genérico es ante el caso en

que las entidades con las que el bloque quiere comunicarse, en vez de tenerdiferentes implementaciones, aún siendo de diferente tipo, sean lo su�ciente-mente similares para compartir una misma y única implementación.Desde el punto de vista de la entidad que invoca, el proceso continúa

[email protected] 118 Antonio Carrillo Ledesma, Et alii

Page 121: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

siendo transparente y sigue aprovechando los bene�cios de haber delegado latarea y haberse despreocupado de qué tipo de entidad es la receptora. En estecaso, el concepto de polimor�smo se relaciona o se basa en la coexistencia deherencia, de variables de tipo de dato o en las formas débiles de declaracióny chequeo de tipos de datos, dependiendo de las diferentes herramientas decada paradigma.

Asignación y Uni�cación La asignación destructiva es una operación queconsiste en cambiar la información representada por una variable, de formatal que si se consulta su valor antes y después de dicha operación, se obtieneun resultado distinto. Estas asignaciones se realizan repetitivamente sobrela misma celda de memoria, remplazando los valores anteriores.La asignación determina el estado de una variable, que consiste en el

valor que contiene en un momento en particular. La asignación destructivaes la forma más usual de provocar efecto de lado, pero no la única, ya que,dependiendo de los lenguajes, hay otro tipo de instrucciones que tambiénpermiten modi�car el estado de información de un sistema.La uni�cación es un mecanismo por el cual una variable que no tiene

valor, asume un valor. Una vez uni�cada, o "ligada", como también se ledice, una variable no cambia su valor, por lo que no existe la noción de es-tado. La duración de la uni�cación está condicionado por el alcance quetienen las variables en cada lenguaje en particular, pudiendo una variableuni�carse con varios valores alternativos en diferentes momentos de la eje-cución del bloque de Software en el que se encuentran. Se suele denominarcomo "indeterminada" a una variable sin ligar o no uni�cada.

Modo de Evaluación Los parámetros que se utilizan en la invocación deun bloque de Software cualquiera pueden ser evaluados en diferentes momen-tos de acuerdo al modo de evaluación que utilice el lenguaje de programación.La evaluación ansiosa consiste en que los argumentos son evaluados antes

de invocar al bloque de Software y es responsabilidad de la entidad que losinvoca.La evaluación diferida plantea que la evaluación de los argumentos es res-

ponsabilidad del bloque de Software invocado, quien decide el momento enque lo hará. Provoca que se di�era la evaluación de una expresión, permi-tiendo que en algunos casos, de acuerdo a cómo sea la implementación, nosea necesario evaluarla nunca, con el consiguiente bene�cio en términos de

[email protected] 119 Antonio Carrillo Ledesma, Et alii

Page 122: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

e�ciencia.La evaluación diferida es utilizada en cierto tipo de situaciones que serían

consideradas erróneas o imposibles de resolver con la evaluación ansiosa,como por ejemplo los bucles o las listas in�nitas.

Orden Superior Asumiendo un esquema de un único orden, en un pro-grama existen por un lado datos y por otro los procedimientos � y todobloque de Software� que trabajan con ellos, de manera tal que los proce-dimientos reciben datos como parámetros y devuelven datos como resulta-dos. La noción de orden superior plantea que los procedimientos son tratadoscomo datos y en consecuencia pueden ser utilizados como parámetros, repre-sentados en variables, devueltas como resultados u operados en cálculos máscomplejos con otros datos. Se denomina de orden superior a los procedimien-tos que reciben como argumentos a otros procedimientos.

Recursividad La recursividad, entendida como iteración con asignaciónno destructiva, está relacionada con el principio de inducción. En general,un bloque de Software recursivo se de�ne con al menos un término recursivo,en el que se vuelve a invocar el bloque que se está de�niendo, y algún términono recursivo como caso base para detener la recursividad.

[email protected] 120 Antonio Carrillo Ledesma, Et alii

Page 123: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.2 Algo de Programación

Tipos de datos Dependiendo del lenguaje (véase [7], [8], [9] y [10]), laimplementación del mismo y la arquitectura en la que se compile/ejecute elprograma, se tienen distintos tipos de datos, pero los básicos son36:

� char, 8 bits, rango de -128 a 127

� unsigned char, 8 bits, rago de 0 a 255

� int, 16 bits, rango de -32,768 a 32,767

� unsigned int, 16 bits, rango de 0 a 65,535

� long int, 32 bits, rango de -2,147,483,648 a 2,147,483,647

� long, 64 bits, rango de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

� �oat, 32 bits, rango de -3.4x1038 a 3.4x1038, con 14 dígitos de precisión

� double, 64 bits, rango de -1.7x10308 a 1.7x10308, con 16 dígitos de precisión

� long double, 80 bits, 3.4x10�4932 a 3.4x104932, con 18 dígitos de precisión

� boolean, 1 bit, rango de True o False

La conversión entre los diferentes tipos de datos esta en función dellenguaje y existe una perdida de datos si se hace de un tipo de dato queno "quepa" en el rango del otro; estos y otros errores de programación hangenerado graves errores en el sistema automatizado de control que han de-sembocado por ejemplo en, misiones fallidas de cohetes espaciales y su cargaen numerosas ocasiones37, la quiebra de la empresa Knight Capital 2012,sobredosis de radioterapia en 1985 a 1987, la desactivación de servidores deAmazon en el 2012, el apagón en el noreste de EE.UU. en el 2003, fallo enel sistema de reserva de vuelos de American Airlines en el 2013, fallo en elsistema de misiles estadounidense Patriot en Dhahran en el 1991, etc.

36La precedencia de los operadores básicos son: = el de mayor procedencia, siguen � y+ unario, luego �; =;% y �nalmente los operadores + y �.37Una de las pérdidas, fue el satélite mexicano Centenario en mayo del 2015.

[email protected] 121 Antonio Carrillo Ledesma, Et alii

Page 124: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Condicionales El �ujo de programas a menudo tiene que dividirse. Esdecir, si una condición se cumple, se hace algo, y si no, se hace otra cosa. Losenunciados condicionales permiten cambiar el comportamiento del programade acuerdo a una condición dada, la estructura básica de un condicional es:Pseudocódigo:

Si <condición> entonces<acción>

Ejemplo en C, C++ y Java38:

if (x > 0) x*= 10;

if (x > 0) {x *= 10;

}

Ejemplo en Python:

if x > 0:x = x * 10

La estructura completa del condicional es:Pseudocódigo:

Si <condición> entonces<acción>

else<acción>

Ejemplo en C, C++ y Java:

if (x % 2 == 0) x = x * x;else x = x * 2;

if (x % 2 == 0) {x = x * x;

} else {x = x * 2;

}

38En condicionales, tienen mayor precedencia <;>;>=; <=, luego están == y ! =,�nalmente && (AND) y jj (OR).

[email protected] 122 Antonio Carrillo Ledesma, Et alii

Page 125: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en Python:

if x % 2 == 0:x = x * x

else:x = x * 2

La estructura condicional encadenada es:Pseudocódigo:

Si <condición> entonces<acción>

else if<acción>

else<acción>

Ejemplo en C, C++ y Java:

if (x < y) {z = x;

} else if (x > y) {z = y;

} else {z = 0;

}

Ejemplo en Python:

if x < y:z = x

elif39 x > y:z = y

else:z = 0

39elif es una contracción de "else if", sirve para enlazar varios "else if", sin tener queaumentar las tabulaciones en cada nueva comparación.

[email protected] 123 Antonio Carrillo Ledesma, Et alii

Page 126: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Condicionales con operadores lógicos, tenemos dos operadores lógicos elAND (&&) y el OR (jj), ejemplos:Pseudocódigo:

Si <condición operador condición> entonces<acción>

else<acción>

Ejemplo en C, C++ y Java:

if (x % 2 == 0 jj x > 0) x = x * x;else x = x * 2;

if (x % 2 == 0 && x > 0) {x = x * x;

} else {x = x * 2;

}

Ejemplo en Python:

if x % 2 == 0 and x > 0:x = x * x

else:x = x * 2

Bucle for La implementación de bucles mediante el comando for per-mite ejecutar el código que se encuentre entre su cuerpo mientras una variablese encuentre entre 2 determinados parámetros, la estructura básica es:Pseudocódigo:

for <inicio; mientras; incremento/decremento> entonces<acción>

Ejemplo en C, C++ y Java:

for (x = 0; x < 21; x++) {z = z + x;

}

[email protected] 124 Antonio Carrillo Ledesma, Et alii

Page 127: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en Python:

for x in range(0, 21)z = z + x

Bucle while La implementación de bucles mediante el comando whilepermite ejecutar el código que se encuentre entre su cuerpo mientras unacondición se cumple, la estructura básica es:Pseudocódigo:

while <condición> entonces<acción>

Ejemplo en C, C++ y Java:

while (z < 20) {z = z + x;

}

Ejemplo en Python:

while z < 20:z = z + x

Bucle do-while La implementación de bucles mediante el comando do-while permite ejecutar el código que se encuentre entre su cuerpo y despuésrevisa si se cumple la condición para continuar el ciclo, se puede usar do-whileen C, C++ y Java, pero no esta presente en Python. La estructura básicaes:Pseudocódigo:

do<acción>

while <condición>

Ejemplo en C, C++ y Java:

do {z = z + x;

} while (z < 20);

[email protected] 125 Antonio Carrillo Ledesma, Et alii

Page 128: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Condicional switch Cuando se requiere hacer un condicional sobreuna variable y que esta tenga varias alternativas, una opción para evitar unacadena de sentencias if-else, se puede usar switch en C, C++ y Java, perono esta presente en Python. La estructura básica es:Pseudocódigo:

switch(expresion) {case constante:<acción>break;

case constante:<acción>break;

.

.

.default:<acción>

}

son opcionales los break y el default.

Ejemplo en C, C++ y Java:

switch(i) {case 1:x=23;

case 2:x ++;break;

default:x=0;

}

[email protected] 126 Antonio Carrillo Ledesma, Et alii

Page 129: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Primer ejemplo Como ya se ha hecho costumbre, el primer ejemplo deun programa es: Hola Mundo, así que iniciemos con ello creando el archivocorrespondiente hola.ext40 en cualquier editor de texto o en un IDE, entonces:Ejemplo en C:

#include <stdio.h>int main(void) {printf("Hello Worldnn");return 0;

}

para compilarlo usamos gcc en línea de comandos (véase 15.3) mediante:

$ gcc hola.c -o hola

y lo ejecutamos con:

$ ./hola

Ejemplo en C++:

#include <iostream>int main() {std::cout << "Hello World!nn";

}

para compilarlo usamos g++ en línea de comandos mediante:

$ g++ hola.cpp -o hola

y lo ejecutamos con:

$ ./hola

40La extensión depende del lenguaje de programación, para el lenguaje C la extensiónes .c, para el lenguaje C++ la extensión es .cpp, para el lenguaje Java la extensión es.java, para el lenguaje Python la extensión es .py.

[email protected] 127 Antonio Carrillo Ledesma, Et alii

Page 130: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en Java:

class hola {public static void main(String[] args) {System.out.println("Hello world!");

}}

para compilarlo usamos javac en línea de comandos mediante:

$ javac hola.java

y lo ejecutamos con:

$ java hola

Ejemplo en Python 2:

print "Hello Worldnn"

para compilarlo y ejecutarlo usamos python2 en línea de comandos me-diante:

$ python2 hola.py

Ejemplo en Python 3:

print ("Hello Worldnn")

para compilarlo y ejecutarlo usamos python3 en línea de comandos me-diante:

$ python3 hola.py

[email protected] 128 Antonio Carrillo Ledesma, Et alii

Page 131: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Un Ejemplo de Cálculo de Primos El algoritmo más simple, para de-terminar si un número es primo o compuesto, es hacer una serie de divisionessucesivas del número, con todos los números primos menores que él, si algunadivisión da como residuo 0 o es divisible con el número entonces es compuestoen caso contrario es primo.

� Iniciamos con el número 4

� Veri�camos si es divisible con los primos almacenados (iniciamos con 2y 3)

� Si es divisible con algún número primo entonces es compuesto, en casocontrario es primo y este se guarda como un nuevo primo

� se incrementa uno al número y se regresa a veri�car si es divisibleentre los números primos almacenados, hasta encontrar por ejemplolos primeros mil primos

Ejemplo en C y C++:

#include <stdio.h>// NPB Numero de primos a buscar#de�ne NPB 1000int main (){int n, i, np;int p[NPB];// Guarda los primeros 2 primosp[0] = 2;p[1] = 3;np = 2;// Empieza la busqueda de primos a partir del numero 4n = 4;// Ciclo para buscar los primeros NPB primoswhile (np < NPB){for (i = 0; i < np; i++){if((n % p[i]) == 0) break;

[email protected] 129 Antonio Carrillo Ledesma, Et alii

Page 132: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

}if(i == np){p[i] = n;np++;

}n++;

}// Visualiza los primos encontradosprintf("nnVisualiza los primeros %d primosnn", NPB);for (i = 0; i < NPB; i++)printf("%dnn", p[i]);

return 0;}

Ejemplo en Java:

public class CalPrimos {public static void main(String[] args) {// NPB Numero de primos a buscarint NPB = 1000;int n, i, np;int p[] = new int[NPB];// Guarda los primeros 2 primosp[0] = 2;p[1] = 3;np = 2;// Empieza la busqueda de primos a partir del numero 4n = 4;// Ciclo para buscar los primeros NPB primoswhile (np < NPB) {for (i = 0; i < np; i++) {if((n % p[i]) == 0) break;

}if (i == np) {p[i] = n;np++;

}

[email protected] 130 Antonio Carrillo Ledesma, Et alii

Page 133: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

n++;}// Visualiza los primos encontradosSystem.out.println("Visualiza los primeros " + NPB + "

primos");for (i = 0; i < NPB; i++) System.out.println(p[i]);

}}

Nótese que el algoritmo para buscar primos de los lenguajes C, C++ yel de Java son muy similares salvo la declaración de la función inicial y elarreglo que contendrá a los primos. Esto deja patente la cercanía entre dichoslenguajes y por que en este trabajo los presentamos en forma conjunta.Ejemplo en Python:

def cribaEratostenes(N):p = [] # inicializa el arreglo de primos encontrados# Guarda los primeros 2 primosp.append(2)p.append(3)np = 2# Empieza la busqueda de primos a partir del numero 4n = 4#Ciclo para buscar los primeros N primoswhile np < N:xi = 0for i in p:41

xi = xi + 1if (n % i) == 0:break

if xi == np:p.append(n)np = np + 1

n = n + 1# Visualiza los primos encontrados

41En este código, al usar el for sobre los elementos del arreglo de primos, es necesariousar un contador para saber si ya se recorrieron todos los primos existentes y así determinarsi es un nuevo primo y agregarlo a la lista.

[email protected] 131 Antonio Carrillo Ledesma, Et alii

Page 134: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

print("Visualiza los primeros " + str(N) + " primos ")for i in range(np):print(p[i])

return p# Solicita el calculo de los primeros primosP = cribaEratostenes(1000)print(P)

Otro ejemplo en Python:

def cribaEratostenes(N):p = [] # inicializa el arreglo de primos encontrados# Guarda los primeros 2 primosp.append(2)p.append(3)np = 2# Empieza la busqueda de primos a partir del numero 4n = 4#Ciclo para buscar los primeros N primoswhile np < N:for i in range(np):42

if (n % p[i]) == 0:break

if i == np-1:p.append(n)np = np + 1

n = n + 1# Visualiza los primos encontradosprint("Visualiza los primeros " + str(N) + " primos ")for i in range(np):print(p[i])

return p# Solicita el calculo de los primeros primosP = cribaEratostenes(1000)print(P)

42Aquí, se hace el recorrido sobre el arreglo de primos usando la indexación sobre suselementos, usando el número de elementos que se tiene mediante el uso del for con unrange.

[email protected] 132 Antonio Carrillo Ledesma, Et alii

Page 135: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.3 Introducción a los Paradigmas de Programación

La construcción de programas de cómputo � Software� puede involucrarelementos de gran complejidad, que en muchos casos no son tan evidentescomo los que se pueden ver en otras Ciencias e Ingenierías. Un avión, unamina, un edi�cio, una red de ferrocarriles son ejemplos de sistemas complejosde otras Ingenierías, pero el programador construye sistemas cuya compleji-dad puede parecer que permanece oculta. El usuario siempre supone que eninformática todo es muy fácil � "apretar un botón y ya esta"� .Cuando se inicia uno en la programación, es común el uso de pequeños

ejemplos, generalmente se programa usando una estructura secuencial � unainstrucción sigue a la otra� en programas cortos43, cuando los ejemplos cre-cen se empieza a usar programación estructurada44 � que usa funciones�para después proseguir con ejemplos más complejos haciendo uso de la pro-gramación orientada a objetos � uso de clases y objetos� o formulacioneshíbridas de las anteriores45.A continuación delinearemos estos paradigmas de programación:

Programación Secuencial es un paradigma de programación en la queuna instrucción del código sigue a otra en secuencia también conocido comocódigo espagueti. Las tareas se suceden de tal modo que la salida de una esla entrada de la siguiente y así sucesivamente hasta el �n del programa.

43Los ejemplos no son complejos, suelen estar construidos y mantenidos por una o pocaspersonas, son códigos de cientos o miles de líneas y tienen un ciclo de vida corto. Además,se puede construir aplicaciones alternativas en un período razonable de tiempo y no senecesitan grandes esfuerzos en anális y diseño.44Al crecer la complejidad del Software a desarrollar, es muy difícil o imposible que un

desarrollador o un grupo pequeño de ellos pueda comprender todas las sutilidades de sudiseño, para paliar los problemas que conlleva el desarrollo de grandes y complejos sistemasinformáticos surge la programación orientada a objetos.45El surgimiento de la programación orientada objetos trata de lidiar con una gran canti-

dad de requisitos que compiten entre sí, incluso contradiciéndose, tienen desacoplamientosde impedancias entre usuarios del sistema y desarrolladores y es común la modi�caciónde los requisitos con el paso del tiempo pues los usuarios y desarrolladores comienzan acompenetrarse mejor. Así, la programación orientada a objetos permite dirigir un equipogrande de desarrolladores, manejar una gran cantidad de código, usar estándares de de-sarrollo � al igual que en otras ingenierías� y veri�car la �abilidad de los estándaresexistentes en el mercado.

[email protected] 133 Antonio Carrillo Ledesma, Et alii

Page 136: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Programación Estructurada también llamada Procedimental, es un pa-radigma de programación orientado a mejorar la claridad, calidad y tiempode desarrollo de un programa de computadora recurriendo únicamente a sub-rutinas y tres estructuras básicas: secuencia, selección (if y switch) e iteración(bucles for y while); así mismo, se considera innecesario y contraproducenteel uso de la instrucción de transferencia incondicional, que podría conducira código espagueti, mucho más difícil de seguir y de mantener, y fuente denumerosos errores de programación.Entre las ventajas de la programación estructurada sobre el modelo an-

terior � hoy llamado despectivamente código espagueti� , cabe citar las si-guientes:

� Los programas son más fáciles de entender, pueden ser leídos de formasecuencial y no hay necesidad de tener que rastrear saltos de líneasdentro de los bloques de código para intentar entender la lógica interna.

� La estructura de los programas es clara, puesto que las instruccionesestán más ligadas o relacionadas entre sí.

� Se optimiza el esfuerzo en las fases de pruebas y depuración. El segui-miento de los fallos o errores del programa (debugging), y con él sudetección y corrección se facilita enormemente.

� Se reducen los costos de mantenimiento. Análogamente a la depu-ración, durante la fase de mantenimiento, modi�car o extender los pro-gramas resulta más fácil.

� Los programas son más sencillos y más rápidos de confeccionar.

� Se incrementa el rendimiento de los programadores.

Programación Orientada a Objetos (POO, u OOP según sus siglasen inglés) es un paradigma de programación que viene a innovar la formade obtener resultados. El surgimiento de la programación orientada obje-tos trata de lidiar con una gran cantidad de requisitos que compiten entresí, incluso contradiciéndose, tienen desacoplamientos de impedancias entreusuarios del sistema y desarrolladores y es común la modi�cación de los re-quisitos con el paso del tiempo pues los usuarios y desarrolladores comienzana compenetrarse mejor. Así, la programación orientada a objetos permite

[email protected] 134 Antonio Carrillo Ledesma, Et alii

Page 137: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

dirigir un equipo grande de desarrolladores, manejar una gran cantidad decódigo, usar estándares de desarrollo � al igual que en otras ingenierías� yveri�car la �abilidad de los estándares existentes en el mercado.Los objetos manipulan los datos de entrada para la obtención de datos

de salida especí�cos, donde cada objeto ofrece una funcionalidad especial.Los objetos son entidades que tienen un determinado «estado» , «compor-tamiento (método)» e «identidad» :

� La identidad es una propiedad de un objeto que lo diferencia del resto;dicho con otras palabras, es su identi�cador � concepto análogo al deidenti�cador de una variable o una constante� .

� Un objeto contiene toda la información que permite de�nirlo e identi�-carlo frente a otros objetos pertenecientes a otras clases e incluso frentea objetos de una misma clase, al poder tener valores bien diferencia-dos en sus atributos. A su vez, los objetos disponen de mecanismosde interacción llamados métodos, que favorecen la comunicación entreellos. Esta comunicación favorece a su vez el cambio de estado en lospropios objetos. Esta característica lleva a tratarlos como unidadesindivisibles, en las que no se separa el estado y el comportamiento.

� Los métodos (comportamiento) y atributos (estado) están estrechamenterelacionados por la propiedad de conjunto. Esta propiedad destaca queuna clase requiere de métodos para poder tratar los atributos con losque cuenta. El programador debe pensar indistintamente en ambosconceptos, sin separar ni darle mayor importancia a alguno de ellos.Hacerlo podría producir el hábito erróneo de crear clases contenedo-ras de información por un lado y clases con métodos que manejen alas primeras por el otro. De esta manera se estaría realizando una«programación estructurada camu�ada» en un lenguaje de POO.

La programación orientada a objetos di�ere de la programación estruc-turada tradicional, en la que los datos y los procedimientos están separados ysin relación, ya que lo único que se busca es el procesamiento de unos datos deentrada para obtener otros de salida. La programación estructurada anima alprogramador a pensar sobre todo en términos de procedimientos o funciones,y en segundo lugar en las estructuras de datos que esos procedimientos mane-jan. En la programación estructurada solo se escriben funciones que procesan

[email protected] 135 Antonio Carrillo Ledesma, Et alii

Page 138: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

datos. Los programadores que emplean POO, en cambio, primero de�nen ob-jetos para luego enviarles mensajes solicitándoles que realicen sus métodospor sí mismos.

Conceptos fundamentales La programación orientada a objetos esuna forma de programar que trata de encontrar solución a los problemas quegenera el desarrollo de proyectos de tamaño mediano o grande y/o complejos.Introduce nuevos conceptos, que superan y amplían conceptos antiguos yaconocidos. Entre ellos destacan los siguientes:

� Clase: se puede de�nir de las propiedades y comportamiento de un tipode objeto concreto. La instanciación es la lectura de estas de�nicionesy la creación de un objeto a partir de ella.

� Herencia: Por ejemplo, la herencia de la clase C a la clase D, es la facili-dad mediante la cual la clase D hereda en ella cada uno de los atributosy operaciones de C, como si esos atributos y operaciones hubiesen sidode�nidos por la misma D. Por lo tanto, puede usar los mismos métodosy variables registrados como «públicos (public)» en C. Los compo-nentes registrados como «privados (private)» también se heredan perose mantienen escondidos al programador y sólo pueden ser accedidos através de otros métodos públicos. Para poder acceder a un atributo uoperación de una clase en cualquiera de sus subclases pero mantenerlaoculta para otras clases es necesario registrar los componentes como«protegidos (protected)» , de esta manera serán visibles en C y en Dpero no en otras clases.

� Objeto: La instancia de una clase. Entidad provista de un conjunto depropiedades o atributos (datos) y de comportamiento o funcionalidad(métodos), los mismos que consecuentemente reaccionan a eventos. Secorresponden con los objetos reales del mundo que nos rodea, o conobjetos internos del sistema (del programa).

� Método: Es un algoritmo asociado a un objeto (o a una clase de obje-tos), cuya ejecución se desencadena tras la recepción de un «mensaje» .Desde el punto de vista del comportamiento, es lo que el objeto puedehacer. Un método puede producir un cambio en las propiedades delobjeto, o la generación de un «evento» con un nuevo mensaje paraotro objeto del sistema.

[email protected] 136 Antonio Carrillo Ledesma, Et alii

Page 139: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Evento: Es un suceso en el sistema � tal como una interacción delusuario con la máquina, o un mensaje enviado por un objeto� . Elsistema maneja el evento enviando el mensaje adecuado al objeto per-tinente. También se puede de�nir como evento la reacción que puededesencadenar un objeto; es decir, la acción que genera.

� Atributos: Características que tiene la clase.

� Mensaje: Una comunicación dirigida a un objeto, que le ordena queejecute uno de sus métodos con ciertos parámetros asociados al eventoque lo generó.

� Propiedad o atributo: Contenedor de un tipo de datos asociados a unobjeto (o a una clase de objetos), que hace los datos visibles desde fueradel objeto y esto se de�ne como sus características predeterminadas, ycuyo valor puede ser alterado por la ejecución de algún método.

� Estado interno: Es una variable que se declara privada, que puede serúnicamente accedida y alterada por un método del objeto, y que seutiliza para indicar distintas situaciones posibles para el objeto (o clasede objetos). No es visible al programador que maneja una instancia dela clase.

� Componentes de un objeto: Atributos, identidad, relaciones y métodos.

� Identi�cación de un objeto: Un objeto se representa por medio deuna tabla o entidad que esté compuesta por sus atributos y funcionescorrespondientes.

Características de la POO Existe un acuerdo acerca de qué carac-terísticas contempla la «orientación a objetos» . Las características siguientesson las más importantes:

� Abstracción: Denota las características esenciales de un objeto, dondese capturan sus comportamientos. Cada objeto en el sistema sirvecomo modelo de un «agente» abstracto que puede realizar trabajo, in-formar y cambiar su estado, y «comunicarse» con otros objetos en elsistema sin revelar «cómo» se implementan estas características. Losprocesos, las funciones o los métodos pueden también ser abstraídos,

[email protected] 137 Antonio Carrillo Ledesma, Et alii

Page 140: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y, cuando lo están, una variedad de técnicas son requeridas para am-pliar una abstracción. El proceso de abstracción permite seleccionar lascaracterísticas relevantes dentro de un conjunto e identi�car compor-tamientos comunes para de�nir nuevos tipos de entidades en el mundoreal. La abstracción es clave en el proceso de análisis y diseño orientadoa objetos, ya que mediante ella podemos llegar a armar un conjuntode clases que permitan modelar la realidad o el problema que se quiereatacar.

� Encapsulamiento: Signi�ca reunir todos los elementos que pueden con-siderarse pertenecientes a una misma entidad, al mismo nivel de abs-tracción. Esto permite aumentar la cohesión (diseño estructurado) delos componentes del sistema.

� Polimor�smo: Comportamientos diferentes, asociados a objetos distin-tos, pueden compartir el mismo nombre; al llamarlos por ese nombrese utilizará el comportamiento correspondiente al objeto que se estéusando. O, dicho de otro modo, las referencias y las colecciones deobjetos pueden contener objetos de diferentes tipos, y la invocación deun comportamiento en una referencia producirá el comportamiento co-rrecto para el tipo real del objeto referenciado. Cuando esto ocurre en«tiempo de ejecución» esta última característica se llama asignacióntardía o asignación dinámica.

� Herencia: Las clases no se encuentran aisladas, sino que se relacio-nan entre sí, formando una jerarquía de clasi�cación. Los objetosheredan las propiedades y el comportamiento de todas las clases a lasque pertenecen. La herencia organiza y facilita el polimor�smo y el en-capsulamiento, permitiendo a los objetos ser de�nidos y creados comotipos especializados de objetos preexistentes. Estos pueden compartir(y extender) su comportamiento sin tener que volver a implementarlo.Esto suele hacerse habitualmente agrupando los objetos en clases yestas en árboles o enrejados que re�ejan un comportamiento común.Cuando un objeto hereda de más de una clase se dice que hay herenciamúltiple; siendo de alta complejidad técnica por lo cual suele recurrirsea la herencia virtual para evitar la duplicación de datos.

� Modularidad: Se denomina «modularidad» a la propiedad que permitesubdividir una aplicación en partes más pequeñas (llamadas módulos),

[email protected] 138 Antonio Carrillo Ledesma, Et alii

Page 141: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

cada una de las cuales debe ser tan independiente como sea posible dela aplicación en sí y de las partes restantes. Estos módulos se puedencompilar por separado, pero tienen conexiones con otros módulos. Aligual que la encapsulación, los lenguajes soportan la modularidad dediversas formas.

� Principio de ocultación: Cada objeto está aislado del exterior, es unmódulo natural, y cada tipo de objeto expone una «interfaz» a otrosobjetos que especí�ca cómo pueden interactuar con los objetos de laclase. El aislamiento protege a las propiedades de un objeto contra sumodi�cación por quien no tenga derecho a acceder a ellas; solamentelos propios métodos internos del objeto pueden acceder a su estado.Esto asegura que otros objetos no puedan cambiar el estado internode un objeto de manera inesperada, eliminando efectos secundarios einteracciones inesperadas.

� Recolección de basura: La recolección de basura (garbage collection)es la técnica por la cual el entorno de objetos se encarga de destruirautomáticamente, y por tanto desvincular la memoria asociada, losobjetos que hayan quedado sin ninguna referencia a ellos. Esto signi�caque el programador no debe preocuparse por la asignación o liberaciónde memoria, ya que el entorno la asignará al crear un nuevo objeto yla liberará cuando nadie lo esté usando.

Muchos de los objetos prediseñados de los lenguajes de programación ac-tuales permiten la agrupación en bibliotecas o librerías, sin embargo, muchosde estos lenguajes permiten al usuario la creación de sus propias bibliotecas.Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción,polimor�smo, acoplamiento y encapsulamiento.

Recursión o Recursividad Un concepto que siempre le cuesta bastantea los programadores que están empezando es el de recursión o recursividad(se puede decir de las dos maneras). La recursividad consiste en funcionesque se llaman a sí mismas, evitando el uso de bucles y otros iteradores.Uno ejemplo fácil de ver y que se usa a menudo es el cálculo del factorial

de un número entero. El factorial de un número se de�ne como ese númeromultiplicado por el anterior, éste por el anterior, y así sucesivamente hasta

[email protected] 139 Antonio Carrillo Ledesma, Et alii

Page 142: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

llegar a 1. Así, por ejemplo, el factorial del número 5 sería: 5x4x3x2x1 =120.Tomando el factorial como base para un ejemplo, ¿cómo podemos crear

una función que calcule el factorial de un número? Bueno, existen multitudde formas. La más obvia quizá sería simplemente usar un bucle determinadopara hacerlo, algo así en C:

long factorial(int n){long res = 1;for(int i=n; i>=1; i- -) res = res * i;return res;

}

Sin embargo hay otra forma de hacerlo sin necesidad de usar ningunaestructura de bucle que es mediante recursividad. Esta versión de la funciónhace exactamente lo mismo, pero es más corta, más simple y más elegante:

long factorial(int n){long fact;if (n <= 1) return 1;return n*factorial(n-1);

}

Aquí lo que se hace es que la función se llama a sí misma (eso es recur-sividad), y deja de llamarse cuando se cumple la condición de parada (eneste caso que el argumento sea menor o igual que 1 que es lo que hay en elcondicional).

Ventajas e inconvenientes ¿Ganamos algo al utilizar recursión enlugar de bucles/iteradores para casos como este?En este caso concreto del cálculo factorial no, y de hecho es una forma más

lenta de hacerlo y ocupa más memoria. Esto no es preocupante en la realidad,pero conviene saberlo. Lo del factorial es solo una forma de explicarlo conun ejemplo sencillo y que sea fácil de entender.Pero entonces, si no ganamos nada en este caso ¿para qué sirve realmente

la recursividad?Pues para resolver ciertos problemas de manera elegante y e�ciente. El

ejemplo típico sería el recorrer un árbol de elementos para hacer algo con

[email protected] 140 Antonio Carrillo Ledesma, Et alii

Page 143: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

todos ellos. Imagínate un sistema de archivos con carpetas y subcarpetasy archivos dentro de estas carpetas, o el árbol de elementos de una páginaWeb donde unos elementos incluyen a su vez otros y no sabes cuántos hay encada uno. En este tipo de situaciones la manera más e�ciente de hacer unafunción que recorra todos los elementos es mediante recursión. Es decir, secrea una función que recorra todos los elementos hijo del nodo que se le pasey que se llame a sí misma para hacer lo mismo con los subnodos que haya.En el caso del sistema de archivos se le pasaría una carpeta y se llamaríaa sí misma por cada subcarpeta que hubiese, y así sucesivamente con todaslas demás. Con una sola llamada inicial recorrerá automáticamente toda laestructura del sistema de archivos.Con eso, y sin necesidad de complicarse, de repente se tiene una función

muy poderosa capaz de enumerar cualquier estructura arbitraria por com-pleja que sea. Ahí es donde se ve el verdadero poder de la recursividad,aunque hay aplicaciones más potentes y más complejas todavía.

Detalles a Tener en Cuenta Otra cosa importante a tener en cuentaes que, cada vez que se hace una llamada a una función desde otra función(aunque sea a sí misma), se crea una nueva entrada en la pila de llamadasdel intérprete. Esta tiene un espacio limitado por lo que puede llegar unpunto en el que si se hacen demasiadas se sature y se produzca un error.A este error se le denomina "Desbordamiento de pila" o "Stack Over�ow".Ahora ya sabemos de donde viene el nombre del famoso sitio para dudas deprogramadores sin el que la programación moderna no sería posible.Además, hay que tener mucho cuidado con la condición de parada. Esta

se re�ere a la condición que se debe comprobar para determinar que ya nose harán más llamadas a la función. Es en ese momento en el que empiezana devolverse los valores hacia "arriba", retornando a la llamada original.Si no tienes la condición de parada controlada pueden pasar varias cosas

(todas malas), como por ejemplo:

� Que se sature la pila y se produzca un desbordamiento

� Que se ocupe cada vez más memoria

� Que se produzcan desbordamientos de variables al ir acumulando re-sultados.

[email protected] 141 Antonio Carrillo Ledesma, Et alii

Page 144: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.4 Errores de Redondeo y de Aritmética en la Pro-gramación

La aritmética que realiza una computadora es distinta de la aritmética denuestros cursos de álgebra o cálculo. En nuestro mundo matemático tradi-cional consideramos la existencia de números con una cantidad in�nita decifras, en la computadora cada número representable tienen sólo un número�nito, �jo de cifras (véase 7.2), los cuales en la mayoría de los casos es satis-factoria y se aprueba sin más, aunque a veces esta discrepancia puede generarproblemas.

Un ejemplo de este hecho lo tenemos en el cálculo de raíces de:

ax2 + bx+ c = 0

cuando a 6= 0, donde las raíces se calculan comúnmente con el algoritmo:

x1 =�b+

pb2 � 4ac2a

y x2 =�b�

pb2 � 4ac2a

o de forma alternativa con el algoritmo que se obtiene mediante la raciona-lización del numerador:

x1 =�2c

b+pb2 � 4ac

y x2 =�2c

b�pb2 � 4ac

Otro algoritmo que implementaremos es el método de Newton-Raphsonen su forma iterativa:

xi+1 = xi �f(xi)

f 0(xi)

en el cual se usa x0 como una aproximación a la raíz buscada y xn es laaproximación a la raíz (sí se converge a ella).

Salida del Cálculo de Raíces La implementación computacional se mues-tra en los programas desarrollados en distintos lenguajes (C, C++, Java yPython) usando diferentes paradigmas de programación ( secuencial, proce-dimental y orientada a objetos), todos ellos generan la siguiente salida:

[email protected] 142 Antonio Carrillo Ledesma, Et alii

Page 145: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Polinomio (1.000000) X^2 + (4.000000 )X + (1.000000) = 0

Chicharronera 1Raiz (-0.2679491924311228), evaluacion raiz: -4.4408920985006262e-16Raiz (-3.7320508075688772), evaluacion raiz: 0.0000000000000000e+00

Chicharronera 2Raiz (-0.2679491924311227), evaluacion raiz: 0.0000000000000000e+00Raiz (-3.7320508075688759), evaluacion raiz: -5.3290705182007514e-15

Metodo Newton-RaphsonValor inicial aproximado de X1 = -1.2679491924311228Raiz (-0.2679491924311227), evaluacion raiz: 0.0000000000000000e+00Valor inicial aproximado de X2 = -4.7320508075688759Raiz (-3.7320508075688772), evaluacion raiz: 0.0000000000000000e+00

En esta salida se muestra la raíz calculada y su evaluación en la ecuacióncuadrática, la cual debería de ser cero al ser una raíz, pero esto no ocurre engeneral por los errores de redondeo. Además, nótese el impacto de seleccionarel algoritmo numérico adecuado a los objetivos que persigamos en la solucióndel problema planteado.

En cuanto a la implementación computacional, el paradigma de progra-mación seleccionado depende la complejidad del algoritmo a implementar ysi necesitamos reusar el código generado o no.Si lo que necesitamos implementar computacionalmente es una fórmula

o conjunto de ellas que generen un código de decenas de líneas, la imple-mentación secuencial es su�ciente, si es menor a una centena de líneas puedeser mejor opción la implementación procedimental y si el proyecto es grandeo complejo, seguramente se optará por la programación orientada a objetoso formulaciones híbridas de las anteriores.

En última instancia, lo que se persigue en la programación es generarun código: correcto, claro, e�ciente, de fácil uso y mantenimiento, que sea�exible, reusable y en su caso portable.

[email protected] 143 Antonio Carrillo Ledesma, Et alii

Page 146: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en C Usando Programación Estructurada: Escribimos elcódigo siguiente en cualquier editor y lo llamamos cuadratica.c:

#include <stdio.h>#include <math.h>

// Funcion cuadraticadouble f(double x, double a, double b, double c) {return (x * x * a + x * b + c);

}

// Derivada de la funcion cuadraticadouble df(double x, double a, double b) {return (2.0 * x * a + b);

}

// Evalua el valor X en la función cuadraticavoid evalua(double x, double a, double b, double c) {printf("nnRaiz (%1.16f), evaluacion raiz: %1.16e", x, (a * x * x

+ b * x + c));}

// Metodo Newton-Raphson// x = x - f(x)/f�(x)double metodoNewtonRapson(double x, int ni, double a, double

b, double c) {int i;for (i = 0; i < ni; i++) {x = x - (f(x, a, b, c) / df(x, a, b));

}return x;

}

// Funcion Principal ....int main() {// Coe�cientes del polinomiodouble A = 1.0, B = 4.0, C = 1.0;// Raices del polinomio

[email protected] 144 Antonio Carrillo Ledesma, Et alii

Page 147: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

double X1, X2, x;// Calculo del discriminantedouble d = B * B - 4.0 * A * C;// Raices realesif (d >= 0.0) {printf("nnPolinomio (%f) X^2 + (%f )X + (%f) = 0nn", A,

B, C);printf("nnChicharronera 1");X1 = (-B + sqrt(d)) / (2.0 * A);X2 = (-B - sqrt(d)) / (2.0 * A);evalua(X1, A, B, C);evalua(X2, A, B, C);printf("nnnnChicharronera 2");X1 = (-2.0 * C) / (B + sqrt(d));X2 = (-2.0 * C) / (B - sqrt(d));;evalua(X1, A, B, C);evalua(X2, A, B, C);// Metodo Newton-Raphsonprintf("nnnnMetodo Newton-Raphson");x = X1 - 1.0;printf("nnValor inicial aproximado de X1 = %f", x);x = metodoNewtonRapson(x, 6, A, B, C);evalua(x, A, B, C);x = X2 - 1.0;printf("nnValor inicial aproximado de X2 = %f", x);x = metodoNewtonRapson(x, 6, A, B, C);evalua(x, A, B, C);printf("nn");

} else {// Raices complejasprintf("Raices Complejas ...");}return 0;

}

[email protected] 145 Antonio Carrillo Ledesma, Et alii

Page 148: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en C++ Usando Programación Orientada a Objetos Es-cribimos el código siguiente en cualquier editor y lo llamamos cuadratica.cpp:

#include <stdio.h>#include <math.h>#include<iostream>using namespace std;class cuadratica {private:

// Coe�cientes del polinomiodouble A, B, C;

// Funcion cuadraticadouble f(double x, double a, double b, double c) {return (x * x * a + x * b + c);

}

// Derivada de la funcion cuadraticadouble df(double x, double a, double b) {return (2.0 * x * a + b);

}

// Evalua el valor X en la función cuadraticavoid evalua(double x, double a, double b, double c) {printf("nnRaiz (%1.16f), evaluacion raiz: %1.16e", x, (a * x

* x + b * x + c));}

// Metodo Newton-Raphson// x = x - f(x)/f�(x)double metodoNewtonRapson(double x, int ni, double a, double

b, double c) {int i;for (i = 0; i < ni; i++) {x = x - (f(x, a, b, c) / df(x, a, b));

}return x;

}

[email protected] 146 Antonio Carrillo Ledesma, Et alii

Page 149: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

public:// Constructor de la clasecuadratica(double a, double b, double c) {A = a;B = b;C = c;

}// calculo de raicesvoid raices() {// Raices del polinomiodouble X1, X2, x;// Calculo del discriminantedouble d = B * B - 4.0 * A * C;

// Raices realesif (d >= 0.0) {printf("nnPolinomio (%f) X^2 + (%f )X + (%f) = 0nn",

A, B, C);printf("nnChicharronera 1");X1 = (-B + sqrt(d)) / (2.0 * A);X2 = (-B - sqrt(d)) / (2.0 * A);evalua(X1, A, B, C);evalua(X2, A, B, C);

printf("nnnnChicharronera 2");X1 = (-2.0 * C) / (B + sqrt(d));X2 = (-2.0 * C) / (B - sqrt(d));;evalua(X1, A, B, C);evalua(X2, A, B, C);// Metodo Newton-Raphsonprintf("nnnnMetodo Newton-Raphson");x = X1 - 1.0;printf("nnValor inicial aproximado de X1 = %f", x);x = metodoNewtonRapson(x, 6, A, B, C);evalua(x, A, B, C);x = X2 - 1.0;printf("nnValor inicial aproximado de X2 = %f", x);

[email protected] 147 Antonio Carrillo Ledesma, Et alii

Page 150: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

x = metodoNewtonRapson(x, 6, A, B, C);evalua(x, A, B, C);printf("nn");

} else {// Raices complejasprintf("Raices Complejas ...");

}}

};

int main(void){cuadratica cu1 = cuadratica(1.0, 4.0, 1.0);cu1.raices();return 0;

}

Ejemplo en Java Usando Programación Orientada a Objetos Es-cribimos el código siguiente en cualquier editor y lo llamamos cuadratica.java:

import java.lang.Math;public class cuadratica {// Coe�cientes del polinomiodouble A, B, C, d;

// Constructor de la clasepublic cuadratica(double a, double b, double c) {A = a;B = b;C = c;

}

// Funcion cuadraticapublic double f(double x) {return (x * x * A + x * B + C);

}

[email protected] 148 Antonio Carrillo Ledesma, Et alii

Page 151: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

// Evalua el valor X en la función cuadraticapublic void evalua(double x) {System.out.println("Raiz (" + x + ") , evaluacion raiz:" +

(A * x * x + B * x + C));}

// Derivada de la funcion cuadraticapublic double df(double x) {return (2.0 * x * A + B);

}

// Metodo Newton-Raphson// x = x - f(x)/f�(x)public double metodoNewtonRapson(double x, int ni) {for (int i = 0; i < ni; i++) {x = x - (f(x) / df(x));

}return x;

}

public void raices() {// Raices del polinomiodouble X1, X2, x;// Calculo del discriminanted = B * B - 4.0 * A * C;// Raices realesif (d >= 0.0) {System.out.println("");System.out.println("Raices Reales (" + A + ")X^2 + ("

+ B + ")X + (" + C + ") = 0");System.out.println("Chicharronera 1");X1 = (-B + Math.sqrt(d)) / (2.0 * A);X2 = (-B - Math.sqrt(d)) / (2.0 * A);evalua(X1);evalua(X2);System.out.println("");System.out.println("Chicharronera 2");X1 = (-2.0 * C) / (B + Math.sqrt(d));

[email protected] 149 Antonio Carrillo Ledesma, Et alii

Page 152: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

X2 = (-2.0 * C) / (B - Math.sqrt(d));;evalua(X1);evalua(X2);System.out.println("");// Metodo Newton-RaphsonSystem.out.println("Newton-Rapson");X1 = Math.round(X1);System.out.print("Valor inicial aproximado de X1 = " +

X1);x = metodoNewtonRapson(X1, 8);evalua(x);X2 = Math.round(X2);System.out.print("Valor inicial aproximado de X2 = " +

X2);x = metodoNewtonRapson(X2, 8);evalua(x);

} else {// Raices complejasSystem.out.println("Raices Complejas ...");

}}

// Funcion Principal ....public static void main(String[] args) {cuadratica cu1 = new cuadratica(1.0, 4.0, 1.0);cu1.raices();

}}

[email protected] 150 Antonio Carrillo Ledesma, Et alii

Page 153: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ejemplo en Python Usando Programación Orientada a ObjetosEscribimos el código siguiente en cualquier editor y lo llamamos cuadra-tica.py:

#!/usr/bin/python3# -*- coding: utf-8 -*-import mathclass Ejemplo:# Constuctordef __init__(self, a, b ,c):self.A = a;self.B = b;self.C = c;

# Funcion cuadraticadef f(self, x, a, b, c):return (x * x * a + x * b + c);

# Derivada de la funcion cuadraticadef df(self, x, a, b):return (2.0 * x * a + b);

# Evalua el valor X en la funcion cuadraticadef evalua(self, x, a, b, c):print(�Raiz (%1.16f), evaluacion raiz: %1.16e�% (x, (a * x *

x + b * x + c)))# Metodo Newton-Raphson# x = x - f(x)/f�(x)def metodoNewtonRapson(self, x, ni, a, b, c):

for i in range(ni):x = x - (self.f(x, a, b, c) / self.df(x, a, b))

return x# Calculo de raicesdef raices(self):# Calculo del discriminanted = self.B * self.B - 4.0 * self.A * self.C

# Raices realesif d >= 0.0:

[email protected] 151 Antonio Carrillo Ledesma, Et alii

Page 154: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

print(�nnPolinomio (%f) X^2 + (%f )X + (%f) = 0nn�%(self.A, self.B, self.C))

print(�nnChicharronera 1�)X1 = (-self.B + math.sqrt(d)) / (2.0 * self.A)X2 = (-self.B - math.sqrt(d)) / (2.0 * self.A)self.evalua(X1, self.A, self.B, self.C)self.evalua(X2, self.A, self.B, self.C)print(�nnChicharronera 2�)X1 = (-2.0 * self.C) / (self.B + math.sqrt(d))X2 = (-2.0 * self.C) / (self.B - math.sqrt(d))self.evalua(X1, self.A, self.B, self.C)self.evalua(X2, self.A, self.B, self.C)# Metodo Newton-Raphsonprint("nnnnMetodo Newton-Raphson")x = X1 - 1.0;print("nnValor inicial aproximado de X1 = %1.16f" % x)x = self.metodoNewtonRapson(x, 6, self.A, self.B, self.C)self.evalua(x, self.A, self.B, self.C);x = X2 - 1.0;print("nnValor inicial aproximado de X2 = %1.16f" % x);x = self.metodoNewtonRapson(x, 6, self.A, self.B, self.C)self.evalua(x, self.A, self.B, self.C)print("nn")

else:# Raices complejasprint("Raices Complejas ...")

if __name__ == �__main__�:ej = Ejemplo(1.0, 4.0, 1.0)ej.raices()

[email protected] 152 Antonio Carrillo Ledesma, Et alii

Page 155: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.5 Trabajando con Punto Flotante

Hay varias trampas en las que incluso los programadores muy experimentadoscaen cuando escriben código que depende de la aritmética de punto �otante.En esta sección explicamos algunas cosas a tener en cuenta al trabajar connúmeros de punto �otante, es decir, tipos de datos �otantes y dobles.

No pruebes por la igualdad Cuando se usa Punto Flotante no es re-comendable escribir código como el siguiente46:

double x;double y;...if (x == y) {...}

La mayoría de las operaciones de punto �otante implican al menos unapequeña pérdida de precisión y, por lo tanto, incluso si dos números soniguales para todos los �nes prácticos, es posible que no sean exactamenteiguales hasta el último bit, por lo que es probable que la prueba de igualdadfalle. Por ejemplo, el siguiente fragmento de código imprime:

�1:778636e� 015

Aunque en teoría, la cuadratura debería deshacer una raíz cuadrada, la ope-ración de ida y vuelta es ligeramente inexacta.

double x = 10;double y = sqrt(x);y *= y;if (x == y)cout << "La reaiz cuadrada es exactann";elsecout << x-y << "nn";

En la mayoría de los casos, la prueba de igualdad anterior debe escribirsede la siguiente manera:

46Sin perdida de generalidad usamos C++ pero esto pasa en todos los lenguajes queusen operaciones de Punto Flotante.

[email protected] 153 Antonio Carrillo Ledesma, Et alii

Page 156: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

double tolerancia = ...if (fabs(x - y) < tolerancia) {...}

Aquí la tolerancia es un umbral que de�ne lo que está "lo su�cientementecerca" para la igualdad. Esto plantea la pregunta de qué tan cerca está losu�cientemente cerca. Esto no puede responderse en abstracto; tienes quesaber algo sobre tu problema particular para saber qué tan cerca está losu�cientemente cerca en tu contexto.

Preocúpate más por la suma y la resta que por la multiplicación yla división Los errores relativos en la multiplicación y división son siemprepequeños. La suma y la resta, por otro lado, pueden resultar en una pérdidacompleta de precisión. Realmente el problema es la resta; la suma solopuede ser un problema cuando los dos números que se agregan tienen signosopuestos, por lo que puedes pensar en eso como una resta. Aún así, el códigopodría escribirse con un "+" que sea realmente una resta.La resta es un problema cuando los dos números que se restan son casi

iguales. Cuanto más casi iguales sean los números, mayor será el potencialde pérdida de precisión. Especí�camente, si dos números están de acuerdocon n bits, se pueden perder n bits de precisión en la resta. Esto puede sermás fácil de ver en el extremo: si dos números no son iguales en teoría peroson iguales en su representación de máquina, su diferencia se calculará comocero, 100% de pérdida de precisión.Aquí hay un ejemplo donde tal pérdida de precisión surge a menudo. La

derivada de una función f en un punto x se de�ne como el límite de

(f(x+ h)� f(x))=h

cuando h llega a cero. Entonces, un enfoque natural para calcular la derivadade una función sería evaluar

(f(x+ h)� f(x))=h

para alguna h pequeña. En teoría, cuanto menor es h, mejor se aproximaesta fracción a la derivada. En la práctica, la precisión mejora por un tiempo,pero más allá de cierto punto, valores más pequeños de h resultan en peoresaproximaciones a la derivada. A medida que h disminuye, el error de aprox-imación se reduce pero el error numérico aumenta. Esto se debe a que laresta

f(x+ h)� f(x)

[email protected] 154 Antonio Carrillo Ledesma, Et alii

Page 157: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

se vuelve problemática. Si toma h lo su�cientemente pequeño (después detodo, en teoría, más pequeño es mejor), entonces f(x+h) será igual a f(x) a laprecisión de la máquina. Esto signi�ca que todas las derivadas se calcularáncomo cero, sin importar la función, si solo toma h lo su�cientemente pequeño.Aquí hay un ejemplo que calcula la derivada de sin(x) en x = 1.

cout << std::setprecision(15);for (int i = 1; i < 20; ++i){double h = pow(10.0, -i);cout << (sin(1.0+h) - sin(1.0))/h << "nn";}cout << "El verdadero resultado es: " << cos(1.0) << "nn";

Aquí está la salida del código anterior. Para que la salida sea más fácil deentender, los dígitos después del primer dígito incorrecto se han reemplazadopor puntos.

0.4...........0.53..........0.53..........0.5402........0.5402........0.540301......0.5403022.....0.540302302...0.54030235....0.5403022.....0.540301......0.54034.......0.53..........0.544.........0.55..........0000El verdadero resultado es: 0.54030230586814

[email protected] 155 Antonio Carrillo Ledesma, Et alii

Page 158: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

La precisión47 mejora a medida que h se hace más pequeña hasta queh = 10�8. Pasado ese punto, la precisión decae debido a la pérdida deprecisión en la resta. Cuando h = 10�16 o menor, la salida es exactamentecero porque sin(1:0 + h) es igual a sin(1:0) a la precisión de la máquina.(De hecho, 1 + h equivale a 1 a la precisión de la máquina. Más sobre eso acontinuación).¿Qué haces cuando tu problema requiere resta y va a causar una pérdida

de precisión? A veces la pérdida de precisión no es un problema; los doblescomienzan con mucha precisión de sobra. Cuando la precisión es importante,a menudo es posible usar algún truco para cambiar el problema de modo queno requiera resta o no requiera la misma resta con la que comenzaste.

Los números de punto �otante tienen rangos �nitos Todos saben quelos números de punto �otante tienen rangos �nitos, pero esta limitación puedeaparecer de manera inesperada. Por ejemplo, puede encontrar sorprendentela salida de las siguientes líneas de código

�oat f = 16777216;cout << f << " " << f+1 << "nn";

Este código imprime el valor 16777216 dos veces. ¿Que pasó? De acuerdocon la especi�cación IEEE para aritmética de punto �otante, un tipo �otantetiene 32 bits de ancho. Veinticuatro de estos bits están dedicados al signi�-cado (lo que solía llamarse la mantisa) y el resto al exponente. El número16777216 es 224 y, por lo tanto, a la variable �otante f no le queda precisiónpara representar f + 1. Ocurriría un fenómeno similar para 253 si f fueradel tipo double porque un doble de 64 bits dedica 53 bits al signi�cado. Elsiguiente código imprime 0 en lugar de 1.

x = 9007199254740992; // 2^53cout << ((x+1) - x) << "nn";

También podemos quedarnos sin precisión al agregar números pequeños anúmeros de tamaño moderado. Por ejemplo, el siguiente código imprime "¡Losiento!" porque DBL_EPSILON (de�nido en �oat.h) es el número positivomás pequeño e tal que 1 + e! = 1 cuando se usan tipos dobles.47Los resultados anteriores se calcularon con Visual C ++ 2008. Cuando se compiló con

gcc 4.2.3 en Linux, los resultados fueron los mismos, excepto los últimos cuatro números.Donde VC ++ produjo ceros, gcc produjo números negativos: -0.017 ..., - 0.17 ..., -1.7 ...y 17 ....

[email protected] 156 Antonio Carrillo Ledesma, Et alii

Page 159: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

x = 1.0;y = x + 0.5*DBL_EPSILON;if (x == y)cout << "¡Lo siento!nn";

De manera similar, la constante FLT_EPSILON es el número positivomás pequeño e tal que 1 + e no es 1 cuando se usan tipos �otantes.

Use logaritmos para evitar desbordamientos y subdesbordamientosLas limitaciones de los números de punto �otante descritos en la secciónanterior provienen de tener un número limitado de bits en el signi�cado.El desbordamiento y el subdesbordamientos resultan de tener también unnúmero �nito de bits en el exponente. Algunos números son demasiadograndes o demasiado pequeños para almacenarlos en un número de punto�otante.Muchos problemas parecen requerir calcular un número de tamaño mod-

erado como la razón de dos números enormes. El resultado �nal puede serrepresentable como un número de punto �otante aunque los resultados inter-medios no lo sean. En este caso, los logaritmos proporcionan una salida. Sidesea calcular M=N para grandes números M y N , calcule log(M)� log(N)y aplique exp() al resultado. Por ejemplo, las probabilidades a menudo im-plican proporciones de factoriales, y los factoriales se vuelven astronómica-mente grandes rápidamente. Para N > 170, N ! es mayor que DBL_MAX,el número más grande que puede representarse por un doble (sin precisiónextendida). Pero es posible evaluar expresiones como 200!=(190!10!) Sin des-bordamiento de la siguiente manera:

x = exp( logFactorial(200) - logFactorial(190) - logFactor-ial(10) );

Una función logFactorial simple pero ine�ciente podría escribirse de lasiguiente manera:

double logFactorial(int n){

double sum = 0.0;for (int i = 2; i <= n; ++i) sum += log((double)i);return sum;

}

[email protected] 157 Antonio Carrillo Ledesma, Et alii

Page 160: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Un mejor enfoque sería utilizar una función de registro gamma si hayuna disponible. Consulte Cómo calcular las probabilidades binomiales paraobtener más información.

Las operaciones numéricas no siempre devuelven números Debidoa que los números de punto �otante tienen sus limitaciones, a veces las op-eraciones de punto �otante devuelven "in�nito" como una forma de decir "elresultado es más grande de lo que puedo manejar". Por ejemplo, el siguientecódigo imprime 1. # INF en Windows e inf en Linux.

x = DBL_MAX;cout << 2*x << "nn";

A veces, la barrera para devolver un resultado signi�cativo tiene que vercon la lógica en lugar de la precisión �nita. Los tipos de datos de punto�otante representan números reales (a diferencia de los números complejos)y no hay un número real cuyo cuadrado sea �1. Eso signi�ca que no hayun número signi�cativo que devolver si el código solicita sqrt(�2), inclusocon una precisión in�nita. En este caso, las operaciones de punto �otantedevuelven NaN. Estos son valores de punto �otante que representan códigosde error en lugar de números. Los valores NaN se muestran como 1. # INDen Windows y NAN en Linux.Una vez que una cadena de operaciones encuentra un NaN, todo es un

NaN de ahí en adelante. Por ejemplo, suponga que tiene un código queequivale a algo como lo siguiente:

if (x - x == 0)// hacer algo

¿Qué podría impedir que se ejecute el código que sigue a la instrucciónif? Si x es un NaN, entonces también lo es x � x y los NaN no equivalen anada. De hecho, los NaN ni siquiera se igualan. Eso signi�ca que la expresiónx == x se puede usar para probar si x es un número (posiblemente in�nito).Para obtener más información sobre in�nitos y NaN, consulte las excepcionesde punto �otante IEEE en C ++.

[email protected] 158 Antonio Carrillo Ledesma, Et alii

Page 161: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Relaciones de Factoriales Los cálculos de probabilidad a menudo impli-can tomar la razón de números muy grandes para producir un número detamaño moderado. El resultado �nal puede caber dentro de un doble con es-pacio de sobra, pero los resultados intermedios se desbordarían. Por ejemplo,suponga que necesita calcular el número de formas de seleccionar 10 objetosde un conjunto de 200. ¡Esto es 200!=(190!10!), Aproximadamente 2:2e16:Pero 200! y 190! desbordaría el rango de un doble.Hay dos formas de solucionar este problema. Ambos usan la siguiente

regla: Use trucos algebraicos para evitar el desbordamiento.El primer truco es reconocer que

200! = 200 � 199 � 198 � ::: � 191 � 190!

y así200!=(190!10!) = 200 � 199 � 198 � ::: � 191=10!

esto ciertamente funciona, pero está limitado a factoriales.Una técnica más general es usar logaritmos para evitar el desbordamiento:

tome el logaritmo de la expresión que desea evaluar y luego exponga el re-sultado. En este ejemplo

log(200!=(190!10!)) = Log(200!)� log(190!)� log(10!)

si tiene un código que calcula el logaritmo de los factoriales directamente sincalcular primero los factoriales, puede usarlo para encontrar el logaritmo delresultado que desea y luego aplicar la función exp.

log (1 + x) Ahora veamos el ejemplo del calculo de log(x+1) . Considereel siguiente código:

double x = 1e-16;double y = log(1 + x)/x;

En este código y = 0, aunque el valor correcto sea igual a 1 para laprecisión de la máquina.

[email protected] 159 Antonio Carrillo Ledesma, Et alii

Page 162: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

¿Qué salió mal? los números de doble precisión tienen una precisiónde aproximadamente 15 decimales, por lo que 1 + x equivale a 1 para laprecisión de la máquina. El registro de 1 es cero, por lo que y se estableceen cero. Pero para valores pequeños de x, log(1 + x) es aproximadamente x,por lo que log(1 + x)=x es aproximadamente 1. Eso signi�ca que el códigoanterior para calcular log(1 + x)=x devuelve un resultado con 100% de errorrelativo. Si x no es tan pequeño que 1 + x es igual a 1 en la máquina, aúnpodemos tener problemas. Si x es moderadamente pequeño, los bits en xno se pierden totalmente al calcular 1 + x, pero algunos sí. Cuanto más seacerca x a 0, más bits se pierden. Podemos usar la siguiente regla: Utiliceaproximaciones analíticas para evitar la pérdida de precisión.La forma favorita de aproximación de los analistas numéricos es la serie

de potencia. ¡La serie de potencia para

log(1 + x) = x+ x2=2! + x3=3! + :::

Para valores pequeños de x, simplemente devolver x para log(1 + x) es unamejora. Esto funcionaría bien para los valores más pequeños de x, pero paraalgunos valores no tan pequeños, esto no será lo su�cientemente preciso, perotampoco lo hará directamente el cálculo del log(1 + x).

Logit inverso A continuación, veamos el cálculo f(x) = ex=(1 + ex). (Losestadísticos llaman a esto la función "logit inverso" porque es el inverso dela función que ellos llaman la función "logit".) El enfoque más directo seríacalcular exp(x)=(1 + exp(x)). Veamos dónde se puede romper eso.

double x = 1000;double t = exp(x);double y = t/(1.0 + t);

Imprimir y da -1. # IND. Esto se debe a que el cálculo de t se desbordó,produciendo un número mayor que el que cabía en un doble. Pero podemoscalcular el valor de y fácilmente. Si t es tan grande que no podemos alma-cenarlo, entonces 1 + t es esencialmente lo mismo que t y la relación es muycercana a 1. Esto sugiere que descubramos qué valores de x son tan grandesque f(x) será igual 1 a la precisión de la máquina, luego solo devuelva 1para esos valores de x para evitar la posibilidad de desbordamiento. Estaes nuestra siguiente regla: No calcules un resultado que puedas predecir conprecisión.

[email protected] 160 Antonio Carrillo Ledesma, Et alii

Page 163: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El archivo de encabezado �oat.h tiene un DBL_EPSILON constante,que es la precisión doble más pequeña que podemos agregar a 1 sin recuperar1. Un poco de álgebra muestra que si x es más grande que�log(DBL_EPSILON),entonces f(x) será igual a 1 a la precisión de la máquina. Así que aquí hayun fragmento de código para calcular f(x) para valores grandes de x:

const double x_max = -log(DBL_EPSILON);if (x > x_max) return 1.0;

El código provisto en esta sección calcula siete funciones que aparecen enlas estadísticas. Cada uno evita problemas de desbordamiento, subdesbor-damiento o pérdida de precisión que podrían ocurrir para grandes argumentosnegativos, grandes argumentos positivos o argumentos cercanos a cero:

� LogOnePlusX calcúlese como log(1 + x) como en ejemplo antes visto

� ExpMinusOne calcúlese como ex � 1

� Logit calcúlese como log(x=(1� x))

� LogitInverse calcúlese como ex=(1 + ex) como se discutió en el ejemploúltimo

� LogLogitInverse calcúlese como log(ex=(1 + ex))

� LogitInverseDi¤erence calcúlese como LogitInverse(x)�LogitInverse(y)

� LogOnePlusExpX calcúlese como log(1 + exp(x))

� ComplementaryLogLog calcúlese como log(�log(1� x))

� ComplementaryLogLogInverse calcúlese como 1:0� exp(�exp(x))

Las soluciones presentadas aquí parecen innecesarias o incluso incorrectasal principio. Si este tipo de código no está bien comentado, alguien lo veráy lo "simpli�cará" incorrectamente. Estarán orgullosos de todo el desordeninnecesario que eliminaron. Y si no prueban valores extremos, su nuevocódigo parecerá funcionar correctamente. Las respuestas incorrectas y losNaN solo aparecerán más tarde.

[email protected] 161 Antonio Carrillo Ledesma, Et alii

Page 164: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.6 Documentación del Código Fuente

La documentación dentro del código fuente (véase 8.5.1) tiene como objetivoque los que lo lean, mantengan y reparen el código, lo entiendan.La documentación básica en C, C++ y Java se realiza usando:

� // para comentar dentro de una línea de código:

for (int i = 0; i < 10; i ++) // Este ciclo se realiza 10 veces

� /* y */ para comentar una o más líneas:

/*Este ciclo se realiza 10 veces

*/for (int i = 0; i < 10; i ++) xp += 10 + i;

La documentación básica en Python se realiza usando:

� # para comentar dentro de una línea de código:

for i in Array: # Este ciclo se realiza tantas veces como ele-mentos en Array

� """ y """ para comentar una o más líneas:

"""Este ciclo se realiza tantas veces como elementos en Array

"""for i in Array:xp = xp + i

Además, si se realiza la documentación con cierta estructura, esta sepuede utilizar para generar un manual de referencia del código en formatos:HTML, PDF, PS, o XML a partir de los fuentes con unos cuantos comandosde texto en menos de un minuto, pues qué mejor.Existen varias herramientas para ello, una de ellas es DOXYGEN para

códigos de Java, Fortran, C y C++, en Python se puede usar Docstring ouna cadena de documentación como se verá a continuación.

[email protected] 162 Antonio Carrillo Ledesma, Et alii

Page 165: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.6.1 Documentar en C, C++ y Java

Para instalar DOXYGEN usar:

# apt install doxygen graphviz

una vez instalada, hay que generar el archivo de con�guración de DOXY-GEN, para ello usar:

$ doxygen -g

de aquí podemos editar el archivo Doxy�le generado según las necesidadesde la documentación, un ejemplo de dicha con�guración para generar la salidaen HTML, LaTeX y XML esta en:Jerarquia de Clases DOXYGENPara generar la documentación de los fuentes en la carpeta donde este el

archivo de con�guración y los archivos fuentes, usar:

$ doxygen

La documentación generada con DOXYGEN se mostrará en carpetas se-paradas para cada una de las salidas seleccionadas por ejemplo: HTML,LaTeX, XML, etc.Para ver la documentación generada, usar en la consola:

$ cd html$ xpdf index.html

Para generar la documentación en formato PDF a partir de la salida deLaTeX usar:

$ cd latex$ make pdf$ xpdf refman.pdf

en este caso se supone que se tiene instalado LaTeX en la máquina, encaso contrario podemos instalar lo básico usando:

# apt install science-typesetting texlive-science

[email protected] 163 Antonio Carrillo Ledesma, Et alii

Page 166: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y adicionalmente, si se requieren otras opciones instalamos:

# apt install texmaker texmacs texmacs-extra-fonts texlive-latex-base texlive-latex-recommended myspell-en-us myspell-es

Hay varios estilos de documentación (véase 8.5.1), aquí ponemos unaque es fácil de usar para códigos en C++, pero es lógicamente extensible alenguajes como Java.

#ifndef __test__#de�ne __test__/// Descripcion breve de la clase./*** Descripcion detallada de la clase ...** @author Antonio Carrillo* @date Winter 2010* @version 0.0.1* @bug No errors detected* @warning No warnings detected* @todo Exception handling*/class test{private:

/// Descripcion breve.const char *nmClass;/*** Descripcion corta.** Descripcion larga ...** 0 = Dirichlet, 1 = Neumann (or Robin)*/int bdType;

[email protected] 164 Antonio Carrillo Ledesma, Et alii

Page 167: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

public:/*** Descipcion breve.** Descripcion detallada ...** Algo de LaTeX ...** nf[* jI_2j=nleftj nint_{0}^T npsi(t)* nleftn{* u(a,t)-* nint_{ngamma(t)}^a* nfrac{dntheta}{k(ntheta,t)}* nint_{a}^ntheta c(nxi)u_t(nxi,t)n,dnxi* nrightn} dt* nrightj* nf]*** @param[out] clas Descripcion del parametro de salida* @param[in] fun Descripcion del parametro de entrada*/test(const char *clas, const char *fun){nameClassFunct(clas, fun);}

/*** Descripcion breve.** Descripcion detallada** @param nVert Descripcion del parametro* @param[in] g Descripcion del parametro* @param[in] me Descripcion del parametro

[email protected] 165 Antonio Carrillo Ledesma, Et alii

Page 168: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

* @param[out] values Descripcion del parametro* @param z Descripcion del parametro* @return Descripcion de lo que regresa*/int eval(int nVert, double **g, StdElem *me, double ***values,

double *z);};/*** Descripcion breve de la clase.** Descripcion detallada de la clase** Otro parrafo de la descripcion ...** Algo de formulas con LaTeX** nf{eqnarray*}{* g &=& nfrac{Gm_2}{r^2} nn* &=& nfrac{(6.673 ntimes 10^{-11}n,nmbox{m}^3n,nmbox{kg}^{-

1}n,* nmbox{s}^{-2})(5.9736 ntimes 10^{24}n,nmbox{kg})}{(6371.01n,nmbox{km})^2}

nn* &=& 9.82066032n,nmbox{m/s}^2* nf}*** Documentacion sobre la cual se basa la clase o archivo(s) que

hagan una descripcion de la* misma: Archivo.doc** Descripcion breve del ejemplo de uso de esta clase (este archivo

se supone que estara en* una carpeta de nombre ./Examples en la posicion actual del

código)** Algo de LaTeX*

[email protected] 166 Antonio Carrillo Ledesma, Et alii

Page 169: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

* La distancia entre nf$(x_1,y_1)nf$ and nf$(x_2,y_2)nf$ isnf$nsqrt{(x_2-x_1)^2+(y_2-y_1)^2}nf$.

** @example ExampleText.cpp*/#endif

Adicionalmente es deseable que algunos comportamientos o clases tenganinformación adicional como son: propósito, entradas, salidas, estructurasde datos usadas en entradas y salidas, dependencia de datos o ejecución,restricciones, etc., usando una estructura como la siguiente:

/*** Proposito y Metodo:* Entradas:* Salidas:* Entradas TDS:* Salidas TDS:* Dependencias:* Restricciones y advertencias"*/

Para controlar las versiones se podría usar algo como lo siguiente:

/*** @�le release.notes* @brief Package TkrRecon* @verbatim* Coordinator: Leon Rochester** v4r4p8 09-Mar-2002 LSR Remove GFxxxxx and SiRecObjs,

no longer used* v4r4p7 07-Mar-2002 TU Mainly, add a combo vertexing to

the TkrRecon sequence* @endverbatim*/

Un ejemplo completo puede ser el siguiente:

[email protected] 167 Antonio Carrillo Ledesma, Et alii

Page 170: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

#ifndef __ErrorControl__#de�ne __ErrorControl__#include <new>using namespace std;#include <stdlib.h>#include "Printf.hpp"#ifdef USE_HYPRE#include <mpi.h>#endif/// Error Control, this class handles errors for the system

RESSIM/*** @author Antonio Carrillo and Gerardo Cisneros* @date Winter 2010* @version 0.0.2* @verbatimCoordinator: Robert Yatesv0.0.1 Junuary 2011 Antonio Carrillo generates the �rst ver-

sion of the classv0.0.2 March 2011 Gerardo Cisneros add HYPRE errors con-

trolInputs: Name of class and functionOutputs: Exit of programTDS Inputs: noneTDS Outputs: noneDependencies: #ifdef USE_HYPRE, MPI packageRestrictions and Caveats: Non exception handling still@endverbatim* @bug No errors detected* @warning No warnings detected* @todo Exception handling*/class ErrorControl {private:/// Name of classconst char *nmClass;/// Name of function generating the errorconst char *nmFunction;

[email protected] 168 Antonio Carrillo Ledesma, Et alii

Page 171: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

public:/*** Class Constructor*/ErrorControl(void) {nameClassFunct(" ", " ");}/*** Class Constructor* @param clas Class name*/ErrorControl(const char *clas) {nameClassFunct(clas, " ");}/*** Class Constructor* @param clas Class name* @param fun Name of function generating the error*/ErrorControl(const char *clas, const char *fun) {nameClassFunct(clas, fun);}/*** Name of class and function* @param clas Class name* @param func Name of function generating the error*/void nameClassFunct(const char * clas, const char *func) {nameClass(clas);nameFunct(func);}/*** No memory for this request* @param var Var name*/void memoryError(const char * var) {Afprintf(stderr, "nnnnNo memory for %s request in %s of class

%snnnn", var, nmFunction, nmClass);

[email protected] 169 Antonio Carrillo Ledesma, Et alii

Page 172: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

fatalError(1);}/*** No memory for this request* @param var Var name* @param i Index number*/void memoryError(const char * var, int i) {Afprintf(stderr, "nnnnNo memory for %s request %d in %s of

class %snnnn", var, i, nmFunction, nmClass);fatalError(1);}/*** No memory for this request* @param var Var name* @param func Name of function generating the error*/void memoryError(const char * var, const char *func) {Afprintf(stderr, "nnnnNo memory for %s request in %s of class

%snnnn", var, func, nmClass);fatalError(1);}/*** Fatal error.* @param cod Error code*/void fatalError(int cod) {Afprintf(stderr, "nnFatal ErrornnEnd programnn");#ifdef USE_HYPREMPI_Abort(MPI_COMM_WORLD, cod);#elseexit(cod);#endif}/*** Fatal error.* @param cod Error code*/

[email protected] 170 Antonio Carrillo Ledesma, Et alii

Page 173: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

void fatalError(int cod, const char *txt) {Afprintf(stderr, txt);Afprintf(stderr, "nnFatal ErrornnEnd programnn");#ifdef USE_HYPREMPI_Abort(MPI_COMM_WORLD, cod);#elseexit(cod);#endif}/*** Set name of class* @param clas Class name*/void nameClass(const char *clas) {nmClass = clas;}/*** Set name of function* @param func Function name*/void nameFunct(const char *func) {nmFunction = func;}};/*** Error Control, this class handles errors for the systemRESSIM** Use of the class ErrorControl for error handling within the

system RESSIM,* for example in the error control of memory request** @example ExampleErrorControl.cpp*/#endif

Más detalles sobre los parámetros en la documentación del código fuentepara ser usada por DOXYGEN se pueden ver en:http://www.stack.nl/~dimitri/doxygen/commands.html#cmdparam

[email protected] 171 Antonio Carrillo Ledesma, Et alii

Page 174: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

7.6.2 Documentar en Python

En Python el uso de acentos y caracteres extendidos esta soportado por lacodi�cación UTF-8 (véase 8.5.1), para ello en las primeras líneas de códigoes necesario usar:

#!/usr/bin/env python# -*- coding: utf-8 -*-

siempre y cuando se use un editor o IDE que soporte dicha codi�cación,en caso contrario los caracteres se perderán.Para documentar en Python se usa un Docstring o cadena de docu-

mentación, esta es una cadena de caracteres que se coloca como primer enun-ciado de un módulo, clase, método o función, y cuyo propósito es explicar suintención. Un ejemplo sencillo (en Python 3), es:

def promedio(a, b):"""Calcula el promedio de dos numeros."""return (a + b) / 2

Un ejemplo más completo:

def formula_cuadratica(a, b, c):"""Resuelve una ecuación cuadratica.Devuelve en una tupla las dos raices que resuelven laecuacion cuadratica:

ax^2 + bx + c = 0.Utiliza la formula general (tambien conocidacoloquialmente como el "chicharronero").Parametros:a �coe�ciente cuadratico (debe ser distinto de 0)b �coe�ciente linealc �termino independienteExcepciones:ValueError �Si (a == 0)"""

if a == 0:

[email protected] 172 Antonio Carrillo Ledesma, Et alii

Page 175: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

raise ValueError(�Coe�ciente cuadratico no debe ser 0.�)

from cmath import sqrtdiscriminante = b ** 2 - 4 * a * cx1 = (-b + sqrt(discriminante)) / (2 * a)x2 = (-b - sqrt(discriminante)) / (2 * a)return (x1, x2)

La cadena de documentación en el segundo ejemplo es una cadena multi-líneas, la cual comienza y termina con triples comillas ("""). Aquí se puedeobservar el uso de las convenciones establecidas en el PEP 257 (Python En-hancement Proposals):

� La primera línea de la cadena de documentación debe ser una línea deresumen terminada con un punto. Debe ser una breve descripción dela función que indica los efectos de esta como comando. La línea de re-sumen puede ser utilizada por herramientas automáticas de indexación;es importante que quepa en una sola línea y que este separada del restodel docstring por una línea en blanco.

� El resto de la cadena de documentación debe describir el compor-tamiento de la función, los valores que devuelve, las excepciones quearroja y cualquier otro detalle que consideremos relevante.

� Se recomienda dejar una línea en blanco antes de las triples comillasque cierran la cadena de documentación.

Todos los objetos documentables (módulos, clases, métodos y funciones)cuentan con un atributo __doc__ el cual contiene su respectivo comentariode documentación. A partir de los ejemplos anteriores podemos inspeccionarla documentación de las funciones promedio y formula_cuadratica desde elshell de Python:

>>> promedio.__doc__�Calcula el promedio de dos numeros.�>>> formula_cuadratica.__doc__�Resuelve una ecuación cuadratica.nnnn Devuelve en unatupla las dos raices que resuelven lann ecuacioncuadratica:nn nn ax^2 + bx + c = 0.nnnn

[email protected] 173 Antonio Carrillo Ledesma, Et alii

Page 176: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Utiliza la formula general (tambien conocidanncoloquialmente como el "chicharronero").nnnnParametros:nn a �coe�ciente cuadratico (debe serdistinto de 0)nn b �coe�ciente linealnnc �termino independientennnn Excepciones:nnValueError �Si (a == 0)nn nn �

Sin embargo, si se esta usando el shell de Python es mejor usar la funciónhelp(), dado que la salida producida queda formateada de manera más claray conveniente:

>>> help(promedio)Help on function promedio in module __main__:promedio(a, b)Calcula el promedio de dos numeros.>>> help(formula_cuadratica)Help on function formula_cuadratica in module __main__:formula_cuadratica(a, b, c)Resuelve una ecuacion cuadratica.Devuelve en una tupla las dos raices que resuelven laecuacion cuadratica:ax^2 + bx + c = 0.Utiliza la formula general (tambien conocidacoloquialmente como el "chicharronero").Parametros:a �coe�ciente cuadratico (debe ser distinto de 0)b �coe�ciente linealc �termino independienteExcepciones:ValueError �Si (a == 0)

Ciertas herramientas, por ejemplo shells o editores de código, puedenayudar a visualizar de manera automática la información contenida en loscomentarios de documentación. De esta manera un usuario puede tener a sualcance de manera sencilla toda la información que necesita para poder usarnuestras funciones.

[email protected] 174 Antonio Carrillo Ledesma, Et alii

Page 177: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Generando documentación en páginas de HTML Los Docstringsse pueden usar también para producir documentación en páginas de HTMLque pueden ser consultadas usando un navegador de Web. Para ello se usa elcomando pydoc desde una terminal. Por ejemplo, si las dos funciones ante-riores (promedio y formula_cuadratica) se encuentran en un archivo fuentellamado ejemplos.py, podemos ejecutar el siguiente comando en una terminaldentro del mismo directorio donde esta el archivo fuente:

pydoc -w ejemplos

La salida queda en el archivo ejemplos.html, y así se visualiza desde unnavegador. La documentación de pydoc explica otros artilugios que puedehacer esta utilería de Python.

Docstrings vs. Comentarios Un comentario en Python inicia con elsímbolo de número (#) y se extiende hasta el �nal de la línea. En principiolos Docstrings pudieran parecer similares a los comentarios, pero hay unadiferencia pragmática importante: los comentarios son ignorados por el am-biente de ejecución de Python y por herramientas como pydoc; esto no es asíen el caso de los Docstrings.A un nivel más fundamental hay otra diferencia aún más grande entre los

Docstrings y los comentarios, y esta tiene que ver con la intención:

� Los Docstrings son documentación, y sirven para entender qué hace elcódigo.

� Los comentarios sirven para explicar cómo lo hace.

La documentación es para la gente que usa tu código. Los comentarios sonpara la gente que necesita entender cómo funciona tu código, posiblementepara extenderlo o darle mantenimiento.

El uso de Docstrings en Python facilita la escritura de la documentacióntécnica de un programa. Escribir una buena documentación requiere de dis-ciplina y tiempo, pero sus bene�cios se cosechan cuando alguien � quizásmi futuro yo dentro de seis meses� necesita entender qué hacen nuestrosprogramas. Los Docstrings no sustituyen otras buenas prácticas de progra-mación, como son el uso apropiado de comentarios o el empleo de nombresdescriptivos para variables y funciones.

[email protected] 175 Antonio Carrillo Ledesma, Et alii

Page 178: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8 Entornos de Desarrollo y Herramientas deProgramación

Para programar, es necesario como mínimo contar con un editor de texto-como vi o nano- y acceso al compilador o intérprete del lenguaje que nosinterese. En Linux se tiene una gran variedad de lenguajes y herramientas dedesarrollo -Linux fue hecho por programadores para programadores- que sepueden instalar. Pero, también están los entornos de desarrollo integrado oentorno de desarrollo interactivo -en inglés Integrated Development Environ-ment (IDE)-, estas son aplicaciones informáticas que proporcionan serviciosintegrales para facilitarle al programador el desarrollo de Software.Normalmente, un IDE consiste de un editor de código fuente, herramien-

tas de construcción automáticas y un depurador. La mayoría de los IDEtienen auto-completado inteligente de código (IntelliSense). Algunos IDEcontienen un compilador, un intérprete, o ambos, tales como NetBeans yEclipse. El límite entre un IDE y otras partes del entorno de desarrollo deSoftware más amplio no está bien de�nido. Muchas veces, a los efectos desimpli�car la construcción de la interfaz grá�ca de usuario (GUI, por sussiglas en inglés) se integran un sistema controlador de versión y varias he-rramientas. Muchos IDE modernos también cuentan con un navegador declases, un buscador de objetos y un diagrama de jerarquía de clases, para suuso con el desarrollo de Software orientado a objetos.Los IDE están diseñados para maximizar la productividad del progra-

mador proporcionando componentes muy unidos con interfaces de usuariosimilares. Los IDE presentan un único programa en el que se lleva a cabotodo el desarrollo. Generalmente, este programa suele ofrecer muchas ca-racterísticas para la creación, modi�cación, compilación, implementación ydepuración de Software. Esto contrasta con el desarrollo de Software uti-lizando herramientas no relacionadas, como vi, GNU Compiler Collection(gcc) o make.Uno de los propósitos de los IDE es reducir la con�guración necesaria

para reconstruir múltiples utilidades de desarrollo, en vez de proveer el mismoconjunto de servicios como una unidad cohesiva. Reduciendo ese tiempo deajustes, se puede incrementar la productividad de desarrollo, en casos dondeaprender a usar un IDE es más rápido que integrar manualmente todas lasherramientas por separado.Una mejor integración de todos los procesos de desarrollo hace posi-

[email protected] 176 Antonio Carrillo Ledesma, Et alii

Page 179: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

ble mejorar la productividad en general, que únicamente ayudando con losajustes de con�guración. Por ejemplo, el código puede ser continuamentearmado, mientras es editado, previendo retroalimentación instantánea, comocuando hay errores de sintaxis. Esto puede ayudar a aprender un nuevolenguaje de programación de una manera más rápida, así como sus libreríasasociadas.Algunos IDE están dedicados especí�camente a un lenguaje de progra-

mación, permitiendo que las características sean lo más cercanas al para-digma de programación de dicho lenguaje. Por otro lado, existen muchosIDE de múltiples lenguajes tales como Eclipse, ActiveState Komodo, IntelliJIDEA, MyEclipse, Oracle JDeveloper, NetBeans, Codenvy y Microsoft VisualStudio. Por otro lado Xcode, Xojo y Delphi están dedicados a un lenguajecerrado o a un tipo de lenguajes de programación.Los IDE ofrecen un marco de trabajo amigable para la mayoría de los

lenguajes de programación tales como C++, Python, Java, C#, Delphi, Vi-sual Basic, etc. En algunos lenguajes, un IDE puede funcionar como unsistema en tiempo de ejecución, en donde se permite utilizar el lenguajede programación en forma interactiva, sin necesidad de trabajo orientado aarchivos de texto. Es deseable que un IDE cuente con las siguientes carac-terísticas:

� Multiplataforma

� Soporte para diversos lenguajes de programación

� Integración con Sistemas de Control de Versiones

� Reconocimiento de Sintaxis

� Extensiones y Componentes para el IDE

� Integración con Framework populares

� Depurador

� Importar y Exportar proyectos

� Múltiples idiomas

� Manual de Usuarios y Ayuda

[email protected] 177 Antonio Carrillo Ledesma, Et alii

Page 180: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Componentes

� Editor de texto

� Compilador.

� Intérprete

� Herramientas de automatización

� Depurador

� Posibilidad de ofrecer un sistema de control de versiones

� Factibilidad para ayudar en la construcción de interfaces grá�cas deusuarios

Algunos de los más usados son: Eclipse, Aptana, NetBeans, Sublime Text,Geany, Visual Studio, Brackets, Monodevelop, Komodo, Anjuta, CodeLite,Code::Blocks, PyDev, Eric, PyCharm, PTK, Spyder, Blue�sh, Glade, Kde-velop, Emacs, QtCreator, Android SDK, WxFormBuilder, etc.

8.1 Java

Java (véase [7]) es un lenguaje de programación de propósito general, con-currente, orientado a objetos, que fue diseñado especí�camente para tenertan pocas dependencias de implementación como fuera posible. Su inten-ción es permitir que los desarrolladores de aplicaciones «escriban el pro-grama una vez y lo ejecuten en cualquier dispositivo (Write Once, Run Any-where» o WORA)» , lo que quiere decir que el código que es ejecutado enuna plataforma no tiene que ser recompilado para ejecutarse en otra.El lenguaje de programación Java fue originalmente desarrollado por

James Gosling, de Sun Microsystems (constituida en 1982 y posteriormenteadquirida el 27 de enero de 2010 por la compañía Oracle), y publicado en 1995como un componente fundamental de la plataforma Java de Sun Microsys-tems. Su sintaxis deriva en gran medida de C y C++, pero tiene menosutilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Javason compiladas a bytecode (clase Java), que puede ejecutarse en cualquiermáquina virtual Java (JVM) sin importar la arquitectura de la computadorasubyacente.

[email protected] 178 Antonio Carrillo Ledesma, Et alii

Page 181: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

La compañía Sun desarrolló la implementación de referencia original paralos compiladores de Java, máquinas virtuales y librerías de clases en 1991, ylas publicó por primera vez en 1995. A partir de mayo de 2007, en cumpli-miento de las especi�caciones del Proceso de la Comunidad Java, Sun volvióa licenciar la mayoría de sus tecnologías de Java bajo la Licencia PúblicaGeneral de GNU (véase [15]). Otros también han desarrollado implementa-ciones alternas a estas tecnologías de Sun, tales como el Compilador de Javade GNU y el GNU Classpath.

Orientado a Objetos La primera característica, orientado a objetos (OO),se re�ere a un método de programación y al diseño del lenguaje. Aunquehay muchas interpretaciones para OO, una primera idea es diseñar el Soft-ware de forma que los distintos tipos de datos que usen, esten unidos a susoperaciones. Así, los datos y el código (funciones o métodos) se combinanen entidades llamadas objetos. Un objeto puede verse como un paquete quecontiene el "comportamiento" (el código) y el "estado" (datos). El princi-pio es separar aquello que cambia de las cosas que permanecen inalterables.Frecuentemente, cambiar una estructura de datos implica un cambio en elcódigo que opera sobre los mismos, o viceversa. Esta separación en objetoscoherentes e independientes ofrece una base más estable para el diseño de unsistema Software. El objetivo es hacer que grandes proyectos sean fáciles degestionar y manejar, mejorando como consecuencia su calidad y reduciendoel número de proyectos fallidos.Otra de las grandes promesas de la programación orientada a objetos

es la creación de entidades más genéricas (objetos) que permitan la reuti-lización del Software entre proyectos, una de las premisas fundamentales dela Ingeniería del Software.La reutilización del Software ha experimentado resultados dispares, en-

contrando dos di�cultades principales: el diseño de objetos realmente genéri-cos es pobremente comprendido y falta una metodología para la amplia comu-nicación de oportunidades de reutilización. Algunas comunidades de códigoabierto quieren ayudar en este problema dando medios a los desarrolladorespara diseminar la información sobre el uso y versatilidad de objetos reutili-zables y bibliotecas de objetos.

Independencia de la plataforma La segunda característica, la indepen-dencia de la plataforma, signi�ca que programas escritos en el lenguaje Java

[email protected] 179 Antonio Carrillo Ledesma, Et alii

Page 182: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

pueden ejecutarse igualmente en cualquier tipo de Hardware. Este es el sig-ni�cado de ser capaz de escribir un programa una vez y que pueda ejecutarseen cualquier dispositivo, tal como reza el axioma de Java, "write once, runanywhere".Para ello, se compila el código fuente escrito en lenguaje Java, para

generar un código conocido como "bytecode" (especí�camente Java byte-code), instrucciones máquina simpli�cadas especí�cas de la plataforma Java.Esta pieza esta "a medio camino" entre el código fuente y el código máquinaque entiende el dispositivo destino. El bytecode es ejecutado entonces en lamáquina virtual (JVM), un programa escrito en código nativo de la plataformadestino (que es el que entiende su Hardware), que interpreta y ejecuta elcódigo. Además, se suministran bibliotecas adicionales para acceder a lascaracterísticas de cada dispositivo (como los grá�cos, ejecución mediante he-bras o threads, la interfaz de red) de forma uni�cada. Se debe tener presenteque, aunque hay una etapa explícita de compilación, el bytecode generadoes interpretado o convertido a instrucciones máquina del código nativo por«compilación al vuelo JIT (Just In Time)» .Hay implementaciones del compilador de Java que convierten el código

fuente directamente en código objeto nativo, como GCJ. Esto elimina laetapa intermedia donde se genera el bytecode, pero la salida de este tipo decompiladores sólo puede ejecutarse en un tipo de arquitectura.La licencia sobre Java de Sun insiste en que todas las implementaciones

sean "compatibles". Esto dio lugar a una disputa legal entre Microsoft ySun, cuando este último alegó que la implementación de Microsoft no dabasoporte a las interfaces RMI y JNI además de haber añadido características�dependientes� de su plataforma. Sun demandó a Microsoft y ganó pordaños y perjuicios (unos 20 millones de dólares), así como una orden judicialforzando el acatamiento de la licencia de Sun. Como respuesta, Microsoft noofrece Java con su versión de sistema operativo, y en recientes versiones deWindows, su navegador Internet Explorer no admite la ejecución de appletssin un «conector (Plugin)» aparte. Sin embargo, Sun y otras fuentes ofrecenversiones gratuitas para distintas versiones de Windows.Las primeras implementaciones del lenguaje usaban una máquina virtual

interpretada para conseguir la portabilidad. Sin embargo, el resultado eranprogramas que se ejecutaban comparativamente más lentos que aquellos es-critos en C o C++. Esto hizo que Java se ganase una reputación de lento enrendimiento. Las implementaciones recientes de la JVM dan lugar a progra-mas que se ejecutan considerablemente más rápido que las versiones antiguas,

[email protected] 180 Antonio Carrillo Ledesma, Et alii

Page 183: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

empleando diversas técnicas, aunque sigue siendo mucho más lentos que otroslenguajes.La primera de estas técnicas es simplemente compilar directamente en

código nativo como hacen los compiladores tradicionales, eliminando la etapadel bytecode. Esto da lugar a un gran rendimiento en la ejecución, pero tapael camino a la portabilidad. Otra técnica, conocida como «compilación alvuelo JIT (Just In Time)» , convierte el bytecode a código nativo cuando seejecuta la aplicación. Otras máquinas virtuales más so�sticadas usan una"recompilación dinámica" en la que la VM es capaz de analizar el compor-tamiento del programa en ejecución y recompila y optimiza las partes críticas.La recompilación dinámica puede lograr mayor grado de optimización que lacompilación tradicional (o estatica), ya que puede basar su trabajo en elconocimiento que de primera mano tiene sobre el entorno de ejecución y elconjunto de clases cargadas en memoria. La compilación JIT y la recompi-lación dinámica permiten a los programas Java aprovechar la velocidad deejecución del código nativo sin por ello perder la ventaja de la portabilidaden ambos.La portabilidad es técnicamente difícil de lograr, y el éxito de Java en ese

campo ha sido dispar. Aunque es de hecho posible escribir programas parala plataforma Java que actúen de forma correcta en múltiples plataformasde distinta arquitectura, el gran número de estas con pequeños errores oinconsistencias llevan a que a veces se parodie el eslogan de Sun, "Writeonce, run anywhere" como "Write once, debug everywhere" (o "Escríbelouna vez, ejecútalo en cualquier parte" por "Escríbelo una vez, depúralo entodas partes").El concepto de independencia de la plataforma de Java cuenta, sin em-

bargo, con un gran éxito en las aplicaciones en el entorno del servidor, comolos Servicios Web, los Servlets, los Java Beans, así como en sistemas empo-trados basados en OSGi, usando entornos Java empotrados.

El recolector de basura En Java el problema fugas de memoria se evitaen gran medida gracias a la «recolección automática de basura (o automaticgarbage collector)» . El programador determina cuándo se crean los objetos yel entorno en «tiempo de ejecución de Java (Java runtime)» es el responsablede gestionar el ciclo de vida de los objetos. El programa, u otros objetos,pueden tener localizado un objeto mediante una referencia a este. Cuandono quedan referencias a un objeto, el recolector de basura de Java borra

[email protected] 181 Antonio Carrillo Ledesma, Et alii

Page 184: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

el objeto, liberando así la memoria que ocupaba previniendo posibles fugas(ejemplo: un objeto creado y únicamente usado dentro de un método sólotiene entidad dentro de este; al salir del método el objeto es eliminado).Aun así, es posible que se produzcan fugas de memoria si el código almacenareferencias a objetos que ya no son necesarios; es decir, pueden aún ocurrir,pero en un nivel conceptual superior. En de�nitiva, el recolector de basura deJava permite una fácil creación y eliminación de objetos y mayor seguridad.

Instalación de Java e IDEs Existen diversas versiones de Java paraLinux, la más usada es JDK de Oracle pero también esta una versión abiertallamada OpenJDK, para instalar por ejemplo OpenJDK 14 en Debian GNU/Linuxes necesario hacer:

# apt install default-jdk

o

# apt install openjdk-14-jre openjdk-14-jdk openjdk-14-doc

si se desea instalar solo el Run-Time JRE, para ello usamos:

# apt install default-jre

o

# apt install openjdk-14-jre

y si hay más de una versión instalada, podemos actualizar la versión poromisión de Java:

# update-java-alternatives -s java-1.14.0-openjdk-amd64

para conocer la versión instalada usamos:

$ java �version

Además, se pueden instalar diversas herramientas e IDEs para facilitar laprogramación en Java, para ello usar:

[email protected] 182 Antonio Carrillo Ledesma, Et alii

Page 185: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

# apt install scite jedit kate gedit nedit emacs medit nkscope geany geany-plugins editra qtcreator anjuta nanjuta-extras codelite codelite-plugins tea vim-gtk nmousepad eric neovim neovim-qt medit kwrite katepart# apt install eclipse eclipse-cdt eclipse-pydev netbeans nblue�sh blue�sh-plugins codeblocks codeblocks-contrib# apt install fte fte-console fte-terminal nano joe vim nvim-python-jedi vim-tlib vim-latexsuite vim-nox micro nneovim micro kakoune vim-athena jed# apt install kdi¤3 meld di¤use dirdi¤ kompare numdi¤ ncolordi¤ dwdi¤ wdi¤ xxdi¤ tkdi¤ ndi¤ ccdi¤ xxdi¤# apt install alleyoop astyle c2html java2html code2html nc2html autodia txt2html html2text# apt install git git-all gitk gitg git-cola git-gui qgit tig nvim-fugitive git-extras# apt install mercurial# apt install subversion rapidsvn# apt install cvs tkcvs

Además, es posible instalar varios editores especializados de las páginaso�ciales de sus proyectos:

https://netbeans.apache.org/download/index.htmlhttps://www.eclipse.org/downloads/http://brackets.io/https://www.jetbrains.com/idea/download/#section=Linuxhttps://www.oracle.com/tools/downloads/Jdeveloper-12c-downloads.htmlhttp://www.drjava.org/https://www.jgrasp.org/https://www.bluej.org/http://www.jcreator.com/index.htmhttps://codenvy.com/https://atom.io/https://www.sublimetext.com/

[email protected] 183 Antonio Carrillo Ledesma, Et alii

Page 186: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Crear y Ejecutar Archivos .jar Un archivo .jar (Java ARchive) es unformato de archivo independiente de la plataforma que se utiliza para agregarmuchos archivos de clase Java, metadatos y recursos asociados, como texto,imágenes, etc., en un solo archivo para su distribución.Permite que los tiempos de ejecución de Java implementen de manera

e�ciente una aplicación completa en un archivo de almacenamiento y brindamuchos bene�cios, como seguridad, sus elementos pueden comprimirse, acor-tar los tiempos de descarga, permite el sellado y control de versiones de pa-quetes, admite la portabilidad. También es compatible con el empaquetadopara extensiones.Para crear y ejecutar archivos .jar necesitamos hacer lo siguiente:

1. Primero comencemos escribiendo una clase Java simple con un métodoprincipal para una aplicación llamadaMiApp, con �nes de demostración.

$ nano MiApp.java

Copie y pegue el siguiente código en el archivo MiApp.java.

public class MiApp {public static void main(String[] args){

System.out.println("Solo ejecuta MiApp");}

}

Grabe el archivo y cierre este.

2 A continuación, necesitamos compilar y empaquetar la clase en unarchivo JAR usando las utilidades javac y jar como se muestra:

$ javac -d . MiApp.java$ ls$ jar cvf MiApp.jar MiApp.class$ ls

3 Una vez creado MiApp.jar, ahora podemos ejecutar el archivo usandoel comando java como se muestra:

$ java -jar MiApp.jarno main manifest attribute, in MiApp.jar

[email protected] 184 Antonio Carrillo Ledesma, Et alii

Page 187: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

De la salida del comando anterior, encontramos un error. La JVM(Java Virtual Machine) no pudo encontrar nuestro atributo demani�esto principal, por lo que no pudo ubicar la clase principalque contiene el método principal (public static void main (String[] args)).

El archivo JAR debe tener un mani�esto que contenga una líneacon el formato Main-Class: classname que de�na la clase conel método principal que sirve como punto de partida de nuestraaplicación.

4 Para corregir el error anterior, necesitaremos actualizar el archivo JARpara incluir un atributo de mani�esto junto con nuestro código. Creemosun archivo MANIFEST.MF:

$ nano MANIFEST.MF

Copie y pegue la siguiente línea en el archivo MANIFEST.MF:

Main-Class: MiApp

Guarde el archivo y agreguemos el archivo MANIFEST.MF anuestro MiApp.jar usando el siguiente comando:

$ jar cvmf MANIFEST.MF MiApp.jar MiApp.class

5 Finalmente, cuando ejecutamos el archivo JAR nuevamente, deberíaproducir el resultado esperado como se muestra en la salida:

$ java -jar MiApp.jarSolo ejecuta MiApp

Para obtener más información, debemos consultar las páginas de manualde los comandos java, javac y jar.

$ man java$ man javac$ man jar

[email protected] 185 Antonio Carrillo Ledesma, Et alii

Page 188: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Aprender a Programar en Java En la red existen múltiples sitios espe-cializados y una amplia bibliografía para aprender a programar cada uno delos distintos aspectos de Java, nosotros hemos seleccionado diversos textosque ponemos a su disposición en:

Lenguaje Java

8.2 C y C++

C (véase [9]) es un lenguaje de programación originalmente desarrollado porDennis Ritchie entre 1969 y 1972 en los Laboratorios Bell, como evolucióndel lenguaje anterior B, a su vez basado en BCPL. Es un lenguaje orientadoa la implementación de Sistemas operativos, concretamente Unix, Linux y elKernel de Linux. C es apreciado por la e�ciencia del código que produce yes el lenguaje de programación más popular para crear Software de sistemas,aunque también se utiliza para crear aplicaciones.Se trata de un lenguaje de tipos de datos estaticos, débilmente tipi�cado,

de medio nivel, ya que dispone de las estructuras típicas de los lenguajes dealto nivel pero, a su vez, dispone de construcciones del lenguaje que permitenun control a muy bajo nivel. Los compiladores suelen ofrecer extensionesal lenguaje que posibilitan mezclar código en ensamblador con código C oacceder directamente a memoria o dispositivos periféricos.

Filosofía Uno de los objetivos de diseño del lenguaje C es que sólo seannecesarias unas pocas instrucciones en lenguaje máquina para traducir cadaelemento del lenguaje, sin que haga falta un soporte intenso en tiempo deejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho,C se usó como intermediario entre diferentes lenguajes.En parte, a causa de ser relativamente de bajo nivel y tener un modesto

conjunto de características, se pueden desarrollar compiladores de C fácil-mente. En consecuencia, el lenguaje C esta disponible en un amplio abanicode plataformas (más que cualquier otro lenguaje). Además, a pesar de sunaturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la progra-mación independiente de la máquina. Un programa escrito cumpliendo losestandares e intentando que sea portátil puede compilarse en muchos com-putadores.C se desarrolló originalmente (conjuntamente con el sistema operativo

Unix, con el que ha estado asociado mucho tiempo) por programadores para

[email protected] 186 Antonio Carrillo Ledesma, Et alii

Page 189: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

programadores. Sin embargo, ha alcanzado una popularidad enorme, y se hausado en contextos muy alejados de la programación de Software de sistemas,para la que se diseñó originalmente.

Propiedades Núcleo del lenguaje simple, con funcionalidades añadidasimportantes, como funciones matemáticas y de manejo de archivos, propor-cionadas por bibliotecas. Es un lenguaje muy �exible que permite programarcon múltiples estilos. Uno de los más empleados es el estructurado "no lle-vado al extremo", entre sus principales propiedades destacan:

� Un sistema de tipos que impide operaciones sin sentido

� Usa un lenguaje de preprocesado, el preprocesador de C, para tareascomo de�nir macros e incluir múltiples archivos de código fuente

� Acceso a memoria de bajo nivel mediante el uso de punteros

� Interrupciones al procesador con uniones

� Un conjunto reducido de palabras clave

� Por defecto, el paso de parámetros a una función se realiza por valor. Elpaso por referencia se consigue pasando explícitamente a las funcioneslas direcciones de memoria de dichos parámetros

� Punteros a funciones y variables estaticas, que permiten una formarudimentaria de encapsulado y polimor�smo

� Tipos de datos agregados (struct) que permiten que datos relacionados(como un empleado, que tiene un id, un nombre y un salario) se combi-nen y se manipulen como un todo (en una única variable "empleado")

Carencias Aunque la lista de las características útiles de las que careceC es larga, éstos factores han sido importantes para su aceptación, porqueescribir rápidamente nuevos compiladores para nuevas plataformas, mantienelo que realmente hace el programa bajo el control directo del programador, ypermite implementar la solución más natural para cada plataforma. esta es lacausa de que a menudo C sea más e�ciente que otros lenguajes. Típicamente,sólo la programación cuidadosa en lenguaje ensamblador produce un códigomás rápido, pues da control total sobre la máquina, aunque los avances en

[email protected] 187 Antonio Carrillo Ledesma, Et alii

Page 190: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

los compiladores de C y la complejidad creciente de los microprocesadoresmodernos han reducido gradualmente esta diferencia, Algunas carencias son:

� Recolección de basura nativa, sin embargo se encuentran a tal efectobibliotecas como la "libgc" desarrollada por Sun Microsystems, o elRecolector de basura de Boehm

� Soporte para programación orientada a objetos, aunque la implementa-ción original de C++ fue un preprocesador que traducía código fuentede C++ a C. Véase también la librería GObject

� Funciones anidadas, aunque GCC tiene esta característica como exten-sión

� Soporte nativo para programación multihilo. Disponible usando libre-rías como libpthread

Ventajas estas se pueden resumie en:

� Lenguaje muy e�ciente puesto que es posible utilizar sus característicasde bajo nivel para realizar implementaciones óptimas

� A pesar de su bajo nivel es el lenguaje más portado en existencia, ha-biendo compiladores para casi todos los sistemas de cómputo conocidos

� Proporciona facilidades para realizar programas modulares y/o utilizarcódigo o bibliotecas existentes

Inconvenientes El mayor problema que presenta el lenguaje C frentea los lenguajes de tipo de dato dinámico es la gran diferencia en velocidadde desarrollo: es más lento programar en C, sobre todo para el principiante.La razón estriba en que el compilador de C se limita a traducir código sinapenas añadir nada. La gestión de la memoria es un ejemplo clásico: enC el programador ha de reservar y liberar la memoria explícitamente. Enotros lenguajes (como BASIC, MATLAB o C#) la memoria es gestionadade forma transparente para el programador. Esto alivia la carga de trabajohumano y en muchas ocasiones evita errores, aunque también supone mayorcarga de trabajo para el procesador.

[email protected] 188 Antonio Carrillo Ledesma, Et alii

Page 191: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El mantenimiento en algunos casos puede ser más difícil y costoso quecon ciertos lenguajes de más alto nivel. El código en C se presta a sentenciascortas y enrevesadas de difícil interpretación.Cabe destacar el contexto y época en la que fue desarrollado C. En aque-

llos tiempos existían muy pocos programadores, los cuales, a su vez, eranprácticamente todos expertos en el área. De esta manera, se asumía quelos programadores eran conscientes de sus trabajos y capaces de manejarperfectamente el lenguaje. Por esta razón es muy importante que los re-cién iniciados adopten buenas prácticas a la hora de escribir en C y manejarla memoria, como por ejemplo un uso intensivo de indentación y conocer afondo todo lo que implica el manejo de punteros y direcciones de memoria.

Aplicabilidad Hecho principalmente para la �uidez de programaciónen sistemas UNIX. Se usa también para el desarrollo de otros sistemas ope-rativos como Windows o GNU/Linux. Igualmente para aplicaciones de es-critorio como GIMP, cuyo principal lenguaje de programación es C.De la misma forma, es muy usado en aplicaciones cientí�cas (para exper-

imentos informáticos, físicos, químicos, matemáticos, entre otros, conocidoscomo modelos y simuladores), industriales (industria robótica, cibernética,sistemas de información y base de datos para la industria petrolera y petro-química). Predominan también todo lo que se re�ere a simulación de máquinasde manufactura, simulaciones de vuelo (es la más delicada, ya que se tienenque usar demasiados recursos tanto de Hardware como de Software para de-sarrollar aplicaciones que permitan simular el vuelo real de una aeronave).Se aplica por tanto, en diversas áreas desconocidas por gran parte de losusuarios noveles.Los equipo de cómputo de �nales de los 90 son varios órdenes de mag-

nitud más potentes que las máquinas en que C se desarrolló originalmente.Programas escritos en lenguajes de tipo dinámico y fácil codi�cación (Ruby,Python, Perl, etc.) que antaño hubieran resultado demasiado lentos, son lobastante rápidos como para desplazar en uso a C. Aun así, se puede seguirencontrando código C en grandes desarrollos de animaciones, modelados yescenas en 3D en películas y otras aplicaciones multimedia.Actualmente, los grandes proyectos de Software se dividen en partes, den-

tro de un equipo de desarrollo. Aquellas partes que son más "burocráticas"o "de gestión" con los recursos del sistema, se suelen realizar en lenguajesde tipo dinámico o de guion (script), mientras que aquellas partes "críti-

[email protected] 189 Antonio Carrillo Ledesma, Et alii

Page 192: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

cas", por su necesidad de rapidez de ejecución, se realizan en un lenguaje detipo compilado, como C o C++. Si después de hacer la división, las partescríticas no superan un cierto porcentaje del total (aproximadamente el 10%)entonces todo el desarrollo se realiza con lenguajes dinámicos. Si la partecrítica no llega a cumplir las expectativas del proyecto, se comparan las al-ternativas de una inversión en nuevo Hardware frente a invertir en el costede un programador para que reescriba dicha parte crítica.Ya que muchos programas han sido escritos en el lenguaje C existe una

gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas enC debido a que C genera código objeto rápido; los programadores luegogeneran interfaces a la biblioteca para que las rutinas puedan ser utilizadasdesde lenguajes de mayor nivel, tales como Java, Perl y Python.

C++ (véase [10]) es un lenguaje de programación diseñado a mediados de1979 por Bjarne Stroustrup. La intención de su creación fue el extender allenguaje de programación C mecanismos que permiten la manipulación deobjetos. En ese sentido, desde el punto de vista de los lenguajes orientadosa objetos, C++ es un lenguaje híbrido.Posteriormente se añadieron facilidades de programación genérica, que

se sumaron a los paradigmas de programación estructurada y programaciónorientada a objetos. Por esto se suele decir que el C++ es un lenguaje deprogramación multiparadigma.Actualmente existe un estandar, denominado ISO C++, al que se han ad-

herido la mayoría de los fabricantes de compiladores más modernos. Existentambién algunos intérpretes, tales como ROOT.Una particularidad de C++ es la posibilidad de rede�nir los operadores,

y de poder crear nuevos tipos que se comporten como tipos fundamentales.El nombre "C++" fue propuesto por Rick Mascitti en el año 1983, cuando

el lenguaje fue utilizado por primera vez fuera de un laboratorio cientí�co.Antes se había usado el nombre "C con clases". En C++, la expresión"C++" signi�ca "incremento de C" y se re�ere a que C++ es una extensiónde C.

El concepto de clase Los objetos en C++ son abstraídos medianteuna clase. Según el paradigma de la programación orientada a objetos unobjeto consta de:

[email protected] 190 Antonio Carrillo Ledesma, Et alii

Page 193: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Identidad, que lo diferencia de otros objetos (Nombre que llevará laclase a la que pertenece dicho objeto).

� Métodos o funciones miembro

� Atributos o variables miembro

Diferencias de tipos respecto a C En C++, cualquier tipo de datosque sea declarado completo (fully quali�ed, en inglés) se convierte en un tipode datos único. Las condiciones para que un tipo de datos T sea declaradocompleto son a grandes rasgos las siguientes:

� Es posible al momento de compilación conocer el espacio asociado altipo de datos (es decir, el compilador debe conocer el resultado desizeof(T))

� T Tiene al menos un constructor, y un destructor, bien declarados

� Si T es un tipo compuesto, o es una clase derivada, o es la especi�caciónde una plantilla, o cualquier combinación de las anteriores, entonces lasdos condiciones establecidas previamente deben aplicar para cada tipode dato constituyente

� En general, esto signi�ca que cualquier tipo de datos de�nido haciendouso de las cabeceras completas, es un tipo de datos completo

� En particular, y a diferencia de lo que ocurría en C, los tipos de�nidospor medio de struct o enum son tipos completos. Como tales, ahorason sujetos a sobrecarga, conversiones implícitas, etcétera

Los tipos enumerados, entonces, ya no son simplemente alias para tiposenteros, sino que son tipos de datos únicos en C++. El tipo de datos bool,igualmente, también pasa a ser un tipo de datos único, mientras que en Cfuncionaba en algunos casos como un alias para alguna clase de dato de tipoentero.

[email protected] 191 Antonio Carrillo Ledesma, Et alii

Page 194: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Compiladores Uno de los compiladores libres de C++ es el de GNU, elcompilador G++ (parte del proyecto GCC, que engloba varios compiladorespara distintos lenguajes). Otros compiladores comunes son Intel C++ Com-piler, el compilador de Xcode, el compilador de Borland C++, el compiladorde CodeWarrior C++, el compilador g++ de Cygwin, el compilador g++ deMinGW, el compilador de Visual C++, Carbide.c++, entre otros.

Instalación de C y C++ e IDEs Existen diversas versiones de C y C++para Linux, para instalarlos en Debian GNU/Linux es necesario hacer:

# apt install build-essential manpages-dev glibc-doc nglibc-doc-reference gcc-doc-base gcc-doc splint nc++-annotations-pdf c++-compiler c-compiler g++ ncppcheck cccc autoconf automake make cmake scons njam ohcount

Además, se pueden instalar diversas herramientas e IDEs para facilitar laprogramación en C y C++, para ello usar:

# apt install scite jedit kate gedit nedit emacs medit nkscope geany geany-plugins editra qtcreator anjuta nanjuta-extras codelite codelite-plugins tea vim-gtk nmousepad eric neovim neovim-qt medit kwrite katepart# apt install eclipse eclipse-cdt eclipse-pydev netbeans nblue�sh blue�sh-plugins codeblocks codeblocks-contrib# apt install fte fte-console fte-terminal nano joe vim nvim-python-jedi vim-tlib vim-latexsuite vim-nox micro nneovim micro kakoune vim-athena jed# apt install kdi¤3 meld di¤use dirdi¤ kompare numdi¤ ncolordi¤ dwdi¤ wdi¤ xxdi¤ tkdi¤ ndi¤ ccdi¤ xxdi¤# apt install alleyoop astyle c2html java2html code2html nc2html autodia txt2html html2text# apt install git git-all gitk gitg git-cola git-gui qgit tig nvim-fugitive git-extras# apt install mercurial# apt install subversion rapidsvn# apt install cvs tkcvs

[email protected] 192 Antonio Carrillo Ledesma, Et alii

Page 195: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Aprender a Programar en C y C++ En la red existen múltiples sitiosespecializados y una amplia bibliografía para aprender a programar cada unode los distintos aspectos de C y C++, nosotros hemos seleccionado diversostextos que ponemos a su disposición en:

Lenguajes C y C++

8.3 Fortran

Fortran (véase [?]) contracción del inglés The IBM Mathematical FormulaTranslating System, es un lenguaje de programación de alto nivel de propósitogeneral, procedimental e imperativo, que está especialmente adaptado al cál-culo numérico y a la computación cientí�ca. Desarrollado originalmente porIBM en 1957 para el equipo IBM 704, y usado para aplicaciones cientí�cas yde ingeniería, el Fortran vino a dominar esta área de la programación desdeel principio y ha estado en uso continuo por más de medio siglo en áreas decómputo intensivo tales como la predicción numérica del tiempo, análisis deelementos �nitos, dinámica de �uidos computacional, física computacional yquímica computacional. Es uno de los lenguajes más populares en el área dela computación de alto rendimiento y es el lenguaje usado para programasque evalúan el desempeño (benchmark) y el ranking de los supercomputa-dores más rápidos del mundo.El Fortran abarca un linaje de versiones, cada una de las cuales evolu-

cionó para añadir extensiones al lenguaje mientras que usualmente reteníacompatibilidad con las versiones previas. Versiones sucesivas han añadidosoporte para procesamiento de datos basados en caracteres (Fortran 77),programación de arreglos, programación modular y programación orientadaa objetos (Fortran 90/95), y programación genérica (Fortran 2003).

Ventajas e inconvenientes de su sintaxis como fue una primeratentativa de creación de un lenguaje de programación de alto nivel, tieneuna sintaxis considerada arcaica por muchos programadores que aprendenlenguajes más modernos. Es difícil escribir un bucle "for", y errores en laescritura de un solo carácter pueden llevar a errores durante el tiempo deejecución en vez de errores de compilación, en el caso de que no se usen lasconstrucciones más frecuentes. Algunas de las primeras versiones no poseíanfacilidades que son consideradas muy útiles, tal como la asignación dinámicade memoria.

[email protected] 193 Antonio Carrillo Ledesma, Et alii

Page 196: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Se debe tener en cuenta que la sintaxis de Fortran fue orientada parael uso en trabajos numéricos y cientí�cos. Muchas de sus de�ciencias hansido abordadas en revisiones recientes del lenguaje. Por ejemplo, Fortran 95posee comandos mucho más breves para efectuar operaciones matemáticascon matrices y dispone de tipos. Esto no solo mejora mucho la lectura delprograma sino que además aporta información útil al compilador.Por estas razones Fortran prácticamente no se usa fuera de los campos

cientí�cos y del análisis numérico, pero permanece como el lenguaje preferidopara desarrollar aplicaciones de computación numérica de alto rendimiento.

Características

Tipos de datos soportados:

� Numéricos (enteros, reales, complejos y doble precisión).

� Boleanos (logical).

� Arreglos.

� Cadenas de caracteres.

� Archivos.

FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sóloadmite dos ámbitos para las variables: local y global.

Variables y constantes

� Fortran no es sensible a mayúsculas y minúsculas. Los nombre devariables tienen de 6 a 31 caracteres máximo y deben comenzar poruna letra. Los blancos son signi�cativos.

� Declaración explicita de variables.

� Enteras (I-N), el resto reales. (se modi�ca con IMPLICIT).

� Punteros: en los primeros FORTRAN no hay punteros y todas las vari-ables se almacenan en memoria estática. En FORTRAN 90 se declaranINTEGER, POINTER::P.

� Para memoria dinámica ALLOCATE y DEALLOCATE

[email protected] 194 Antonio Carrillo Ledesma, Et alii

Page 197: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Tipos de datos

� Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.

� REAL M(20),N(-5:5)

� DIMENSION I(20,20) (tipo por nomenclatura implícita)

� Cadenas de caracteres, el primer carácter es el 1, el operador // permiteconcatenar cadenas.

� CHARACTER S*10, T*25

� Almacenamiento de datos. Se usa COMMON para datos compartidosy EQUIVALENCE cuando almacenamos una variable con dos posiblestipos en la misma posición de memoria (como union en C). Se usaDATA para inicializar datos estáticos.

� DATA X/1.0/,Y/3.1416/,K/20/

� Tipos de�nidos por el usuario, con TYPE <nombre>... END TYPE<nombre>

Control de secuencia el conjunto de estructuras de control es limi-tado:

� Expresiones, prioridad de operadores

� Enunciados

� Asignación, cuando se hace entre cadenas hay ajuste de tamañocon blancos o truncamiento.

� Condicional. Permite IF ELSE IF... Para selección múltipleSELECT CASE CASE.....CASE DEFAULT.... END SELECT

� Iteración. DO....END DO� Nulo, se usa solo para la etiqueta. CONTINUE.

� Control de subprogramas. CALL invoca al subprograma y RETURNdevuelve un valor al programa llamante.

� Construcciones propensas a error: GOTO.

[email protected] 195 Antonio Carrillo Ledesma, Et alii

Page 198: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Entrada y salida

� Tipos de archivos:

� Secuenciales� De acceso directo

� Comandos: READ,WRITE, PRINT, OPEN , CLASE, INQUIRE (pro-piedades o estado del archivo) REWIND y ENDFILE (para ubicar elpuntero del �chero).

� Para el tratamiento de excepciones en las sentencias READ/WRITE sepuede introducir la posición de la rutina de dicho tratamiento (ERR=90).

Subprogramas

� Hay tres tipos de subprogramas:

� Function, devuelven un solo valor de tipo numérico, lógico o cadena decaracteres.� Subroutine, devuelve valores a través de variables no locales COMMON.� Función de enunciado, permite calcular una sola expresión aritmética o

lógica.� FN(X,Y)=SIN(X)**2-COS(Y)**2

� Gestión de almacenamiento.

� Las variables son locales o globales (COMMON)� Recursividad: RECURSIVE FUNCTION FACTORIAL(X)� Parámetros de subprograma. Paso por referencia.

Abstracción y encapsulación. Evaluación del lenguaje

� La abstracción es posible mediante los subprogramas y el uso de varia-bles COMMON, aunque su uso es propenso a errores.

� FORTRAN sigue siendo utilizado en el ámbito cientí�co y es muy e�-ciente realizando cálculos.

[email protected] 196 Antonio Carrillo Ledesma, Et alii

Page 199: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� La estructura del programa suele ser di�cil de entender.� En FORTRAN 90 se incluye la recursividad y la memoriadinámica.

� Las etiquetas de las sentencias ya no son necesarias, ni elGOTO, pues se ha transformado en un lenguaje estructurado.

� El aspecto de los programas sigue siendo de procesamiento porlotes

Instalación de Fortran e IDEs Existen diversas versiones de Forteanpara Linux, para instalarlos en Debian GNU/Linux es necesario hacer:

# apt install gfortran gfortran-doc fortran77-compiler nfortran95-compiler fortran-compiler cfortran

Además, se pueden instalar diversas herramientas e IDEs para facilitar laprogramación en Fortran, para ello usar:

# apt install scite jedit kate gedit nedit emacs medit nkscope geany geany-plugins editra qtcreator anjuta nanjuta-extras codelite codelite-plugins tea vim-gtk nmousepad eric neovim neovim-qt medit kwrite katepart# apt install fte fte-console fte-terminal nano joe vim nvim-python-jedi vim-tlib vim-latexsuite vim-nox micro nneovim micro kakoune vim-athena jed# apt install kdi¤3 meld di¤use dirdi¤ kompare numdi¤ ncolordi¤ dwdi¤ wdi¤ xxdi¤ tkdi¤ ndi¤ ccdi¤ xxdi¤# apt install alleyoop astyle c2html java2html code2html nc2html autodia txt2html html2text# apt install git git-all gitk gitg git-cola git-gui qgit tig nvim-fugitive git-extras# apt install mercurial# apt install subversion rapidsvn# apt install cvs tkcvs

[email protected] 197 Antonio Carrillo Ledesma, Et alii

Page 200: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.4 Python

Python (véase [8]) es un lenguaje de programación interpretado cuya �losofíahace hincapié en una sintaxis que favorezca un código legible. Se trata de unlenguaje de programación multiparadigma, ya que soporta orientación a ob-jetos, programación imperativa y, en menor medida, programación funcional.Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.Es administrado por la Python Software Foundation. Posee una licencia

de código abierto, denominada Python Software Foundation License, que escompatible con la Licencia pública general de GNU a partir de la versión2.1.1, e incompatible en ciertas versiones anteriores (véase apéndice 14.1).Python fue creado a �nales de los ochenta por Guido van Rossum en

el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde& Informatica), en los Países Bajos, como un sucesor del lenguaje de pro-gramación ABC, capaz de manejar excepciones e interactuar con el sistemaoperativo Amoeba. Van Rossum es el principal autor de Python, y su con-tinuo rol central en decidir la dirección de Python es reconocido, re�riéndosea él como Benevolente Dictador Vitalicio (en inglés: Benevolent Dictator forLife, BDFL).

Características y paradigmas Python es un lenguaje de programaciónmultiparadigma. Esto signi�ca que más que forzar a los programadores aadoptar un estilo particular de programación, permite varios estilos: progra-mación orientada a objetos, programación imperativa y programación fun-cional. Otros paradigmas estan soportados mediante el uso de extensiones.Python usa tipado dinámico y conteo de referencias para la administración

de memoria.Una característica importante de Python es la resolución dinámica de

nombres; es decir, lo que enlaza un método y un nombre de variable durantela ejecución del programa (también llamado enlace dinámico de métodos).Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se

pueden escribir nuevos módulos fácilmente en C o C++. Python puedeincluirse en aplicaciones que necesitan una interfaz programable.Aunque la programación en Python podría considerarse en algunas situa-

ciones hostil a la programación funcional tradicional del Lisp, existen bas-tantes analogías entre Python y los lenguajes minimalistas de la familia Lispcomo puede ser Scheme.El intérprete de Python estandar incluye un modo interactivo en el cual

[email protected] 198 Antonio Carrillo Ledesma, Et alii

Page 201: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

se escriben las instrucciones en una especie de intérprete de comandos: lasexpresiones pueden ser introducidas una a una, pudiendo verse el resultado desu evaluación inmediatamente, lo que da la posibilidad de probar porciones decódigo en el modo interactivo antes de integrarlo como parte de un programa.Esto resulta útil tanto para las personas que se estan familiarizando con ellenguaje como para los programadores más avanzados.Existen otros programas, tales como IDLE, bpython o IPython, que

añaden funcionalidades extra al modo interactivo, como el autocompletadode código y el coloreado de la sintaxis del lenguaje.

Elementos del lenguaje Python fue diseñado para ser leído con facilidad.Una de sus características es el uso de palabras donde otros lenguajes uti-lizarían símbolos. Por ejemplo, los operadores lógicos: !, jj y &&, en Pythonse escriben; not, or y and, respectivamente. Curiosamente el lenguaje Pascales junto con COBOL uno de los lenguajes con muy clara sintaxis y ambosson de la década de los 70. La idea del código claro y legible no es algo nuevo.El contenido de los bloques de código (bucles, funciones, clases, etc.)

es delimitado mediante espacios o tabuladores, conocidos como indentación,antes de cada línea de órdenes pertenecientes al bloque. Python se diferen-cia así de otros lenguajes de programación que mantienen como costumbredeclarar los bloques mediante un conjunto de caracteres, normalmente entrellaves {}. Se pueden utilizar tanto espacios como tabuladores para indentarel código, pero se recomienda no mezclarlos.Debido al signi�cado sintáctico de la indentación, cada instrucción debe

estar contenida en una sola línea. No obstante, si por legibilidad se quieredividir la instrucción en varias líneas, añadiendo una barra invertida: n al�nal de una línea, se indica que la instrucción continúa en la siguiente.

Variables Las variables se de�nen de forma dinámica, lo que signi�caque no se tiene que especi�car cuál es su tipo de antemano y puede tomardistintos valores en otro momento, incluso de un tipo diferente al que teníapreviamente. Se usa el símbolo = para asignar valores.

Módulos Existen muchas propiedades que se pueden agregar al lenguajeimportando módulos, que son "minicódigos" (la mayoría escritos también enPython) que proveen de ciertas funciones y clases para realizar determinadastareas. Un ejemplo es el módulo: Tkinter, que permite crear interfaces grá-

[email protected] 199 Antonio Carrillo Ledesma, Et alii

Page 202: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

�cas basadas en la biblioteca Tk. Otro ejemplo es el módulo: os, que proveeacceso a muchas funciones del sistema operativo. Los módulos se agregan alos códigos escribiendo la palabra reservada import seguida del nombre delmódulo que queramos usar.Python tiene una gran biblioteca estandar, usada para una diversidad de

tareas. Esto viene de la �losofía "pilas incluidas" ("batteries included") enreferencia a los módulos de Python48. Los módulos de la biblioteca estandarpueden mejorarse por módulos personalizados escritos tanto en C como enPython. Debido a la gran variedad de herramientas incluidas en la bibliotecaestandar, combinada con la habilidad de usar lenguajes de bajo nivel como Cy C++, los cuales son capaces de interactuar con otras bibliotecas, Python esun lenguaje que combina su clara sintaxis con el inmenso poder de lenguajesmenos elegantes.

Algunos Módulos para Python

TensorFlow Models sirve para el aprendizaje automático y apren-dizaje profundo. TensorFlow Models es el repositorio de fuente abierta paraencontrar muchas bibliotecas y modelos relacionados con el aprendizaje pro-fundo.

Keras es una API de redes neuronales de alto nivel, escrita en Python yes capaz de ejecutarse sobre TensorFlow, CNTK o Theano. Fue desarrolladocon un enfoque para permitir la experimentación rápida.

Frasco es un framework ligero de aplicaciones Web WSGI. esta dise-ñado para que el inicio sea rápido y fácil, con la capacidad de escalar hastaaplicaciones complejas. Comenzó como un simple envoltorio alrededor deWerkzeug y Jinja y se ha convertido en uno de los frameworks de aplicaciónWeb Python más populares.

Scikit-learn es un módulo de Python para el aprendizaje automáticoconstruido sobre SciPy y distribuido bajo la licencia BSD.

48Una lista de módulos disponibles en Python esta en su página o�cial.Para la versión 2 en: https://docs.python.org/2/py-modindex.htmlPara la versión 3 en: https://docs.python.org/3/py-modindex.html

[email protected] 200 Antonio Carrillo Ledesma, Et alii

Page 203: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Zulip es una poderosa aplicación de chat grupal de código abierto quecombina la inmediatez del chat en tiempo real con los bene�cios de produc-tividad de las conversaciones enhebradas. Zulip es utilizado por proyectosde código abierto, compañías de Fortune 500, cuerpos de grandes estandaresy otros que necesitan un sistema de chat en tiempo real que les permita alos usuarios procesar fácilmente cientos o miles de mensajes al día. Con másde 300 colaboradores que fusionan más de 500 commits por mes, Zulip estambién el proyecto de chat grupal de código abierto más grande y de másrápido crecimiento.

Django es un framework Web Python de alto nivel que fomenta un de-sarrollo rápido y un diseño limpio y pragmático de desarrollo Web de códigoabierto, escrito en Python, que respeta el patron de diseño conocido comomodelo-vista-template. Fue desarrollado en origen para gertionar varias pági-nas orientadas a noticias de la World Company de Lawrence, Kanzas y fúeliberada al público bajo unalicencia BSD en julio del 2005.

Rebound es una herramienta de línea de comandos que obtiene instan-táneamente los resultados de desbordamiento de pila cuando se produce unerror de compilación.

Google Images Download Este es un programa de línea de comandode Python para buscar palabras clave / frases clave en Google Imágenes y op-cionalmente descargar imágenes a su computadora. También puede invocareste script desde otro archivo Python.

YouTube-dl es usado para descargar videos de: youtube.com u otrasplataformas de video.

System Design Primer este repositorio es una colección organizadade recursos para ayudar a aprender a construir sistemas a escala.

Mask R-CNN es para detección y segmentación de objetos. Esta esuna implementación de Mask R-CNN en Python 3, Keras y TensorFlow. Elmodelo genera cuadros de delimitación y máscaras de segmentación para cadainstancia de un objeto en la imagen. Se basa en Feature Pyramid Network(FPN) y ResNet101 backbone.

[email protected] 201 Antonio Carrillo Ledesma, Et alii

Page 204: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Face Recognition es usado para reconocer y manipular caras desdePython o desde la línea de comandos con la biblioteca de reconocimientofacial más simple del mundo. Esto también proporciona una herramienta delínea de comandos: face_recognition simple que permite hacer reconocimientode rostros en una carpeta de imágenes desde la línea de comandos.

Snallygaster Herramienta para buscar archivos secretos en servidoresHTTP.

Ansible es un sistema de automatización de TI radicalmente simple.Maneja la administración de con�guraciones, la implementación de aplica-ciones, el aprovisionamiento en la nube, la ejecución de tareas ad-hoc y laorquestación multinodo, incluida la trivialización de cosas como actualiza-ciones continuas de tiempo de inactividad cero con balanceadores de carga.

Detectron es el sistema de software de Facebook AI Research que im-plementa algoritmos de detección de objetos de última generación, incluyendoMask R-CNN. esta escrito en Python y funciona con el marco de aprendizajeprofundo Ca¤e2.

Asciinema registrador de sesión de terminal y el mejor compañero deasciinema.org.

HTTPie es un cliente HTTP de línea de comando. Su objetivo es hacerque la interacción de la CLI con los servicios Web sea lo más amigable posiblepara los humanos. Proporciona un comando http simple que permite el envíode solicitudes HTTP arbitrarias utilizando una sintaxis simple y natural, ymuestra una salida coloreada. HTTPie se puede usar para probar, depurary, en general, interactuar con servidores HTTP.

You-Get es una pequeña utilidad de línea de comandos para descargarcontenidos multimedia (videos, audios, imágenes) desde la Web, en caso deque no haya otra forma práctica de hacerlo.

Sentry es un servicio que ayuda a controlar y corregir fallas en tiemporeal. El servidor esta en Python, pero contiene una API completa para enviareventos desde cualquier lenguaje, en cualquier aplicación.

[email protected] 202 Antonio Carrillo Ledesma, Et alii

Page 205: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Tornado es un framework Web de Python y una biblioteca de red asín-crona, desarrollada originalmente en FriendFeed. Mediante el uso de E/S dered sin bloqueo, Tornado puede escalar a decenas de miles de conexionesabiertas, lo hace ideal para largos sondeos, WebSockets y otras aplicacionesque requieren una conexión de larga duración para cada usuario.

Magenta es un proyecto de investigación que explora el papel del apren-dizaje automático en el proceso de creación de arte y música. Principalmente,esto implica desarrollar nuevos algoritmos de aprendizaje profundo y apren-dizaje de refuerzo para generar canciones, imágenes, dibujos y otros materia-les. Pero también es una exploración en la construcción de herramientas einterfaces inteligentes que permiten a artistas y músicos ampliar sus procesosutilizando estos modelos.

ZeroNet crea sitios Web descentralizados utilizando Bitcoin Crypto yla red BitTorrent.

Gym OpenAI Gym es un conjunto de herramientas para desarrollar ycomparar algoritmos de aprendizaje de refuerzo. Esta es la biblioteca decódigo abierto de Gym, que le da acceso a un conjunto estandarizado deentornos.

Pandas es un paquete de Python que proporciona estructuras de datosrápidas, �exibles y expresivas diseñadas para que trabajar con datos "rela-cionales" o "etiquetados" sea fácil e intuitivo. Su objetivo es ser el com-ponente fundamental de alto nivel para hacer un análisis práctico y real dedatos en Python. Además, tiene el objetivo más amplio de convertirse enla herramienta de análisis / manipulación de datos de código abierto máspotente y �exible disponible en cualquier lenguaje.

Luigi es un paquete de Python que te ayuda a construir tuberías com-plejas de trabajos por lotes. Maneja la resolución de dependencia, la ad-ministración del �ujo de trabajo, la visualización, el manejo de fallas, laintegración de línea de comando y mucho más.

[email protected] 203 Antonio Carrillo Ledesma, Et alii

Page 206: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

SpaCy (by Explosion AI) es una biblioteca para el procesamientoavanzado del lenguaje natural en Python y Cython. esta basado en las últi-mas investigaciones y fue diseñado desde el primer día para ser utilizado enproductos reales. SpaCy viene con modelos estadísticos precompilados y vec-tores de palabras, y actualmente admite tokenización para más de 20 lengua-jes. Cuenta con el analizador sintáctico más rápido del mundo, modelos deredes neuronales convolucionales para etiquetado, análisis y reconocimientode una entidad nombrada y fácil integración de aprendizaje profundo.

Theano es una biblioteca de Python que permite de�nir, optimizar yevaluar expresiones matemáticas que involucran matrices multidimensionalesde manera e�ciente. Puede usar GPU y realizar una diferenciación simbólicae�ciente.

TFlearn es una biblioteca de aprendizaje profundo modular y trans-parente construida sobre Tensor�ow. Fue diseñada para proporcionar unaAPI de nivel superior a TensorFlow con el �n de facilitar y agilizar la ex-perimentación, sin dejar de ser totalmente transparente y compatible conella.

Kivy es un framework Python de código abierto y plataforma para eldesarrollo de aplicaciones que hacen uso de interfaces de usuario innovadorasy multitáctiles. El objetivo es permitir un diseño de interacción rápido y fácily un prototipado rápido a la vez que hace que su código sea reutilizable.

Mailpile es un cliente de correo electrónico moderno y rápido con ca-racterísticas de cifrado y privacidad fáciles de usar. El desarrollo de Mailpileesta �nanciado por una gran comunidad de patrocinadores y todo el códigorelacionado con el proyecto es y será lanzado bajo una licencia de SoftwareLibre aprobada por OSI.

Matplotlib es una biblioteca de trazado 2D de Python que produce�guras con calidad de publicación en una variedad de formatos impresos yentornos interactivos en todas las plataformas. Matplotlib se puede utilizaren scripts Python, el shell Python e IPython, así como en servidores deaplicaciones Web y varios toolkits de interfaz grá�ca de usuario.

[email protected] 204 Antonio Carrillo Ledesma, Et alii

Page 207: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

YAPF (by Google) toma el código y lo reformatea con el mejor for-mato que cumpla con la guía de estilo, incluso si el código original no violala guía de estilo.

Cookiecutter una utilidad de línea de comandos que crea proyectosdesde cookiecutters (plantillas de proyecto), por ejemplo creando un proyectode paquete Python a partir de una plantilla de proyecto de paquete Python.

HTTP Prompt es un cliente HTTP interactivo de línea de comandoscon autocompletado y resaltado de sintaxis, basado en prompt_toolkit yHTTPie.

Speedtest-cli interfaz de línea de comandos para probar el ancho debanda de Internet con speedtest.net: http://www.speedtest.net/

Pattern es un módulo de minería Web para Python. Tiene herramien-tas para Minería de datos, Procesamiento de lenguaje natural, Aprendizajeautomático y Análisis de red.

Gooey (Beta) convierte (casi) cualquier programa de consola Python2 o 3 en una aplicación GUI con una línea.

Wagtail CMS es un sistema de gestión de contenido creado en Django.Se centra en la experiencia del usuario y ofrece un control preciso para di-señadores y desarrolladores.

Bottle es un micro-Framework WSGI rápido, simple y liviano paraPython. Se distribuye como un módulo de archivo único y no tiene depen-dencias distintas de la biblioteca estandar de Python.

Prophet (by Facebook) es un procedimiento para pronosticar datosde series temporales. Se basa en un modelo aditivo en el que las tendenciasno lineales se ajustan a la estacionalidad anual y semanal, más las vacaciones.Funciona mejor con datos de periodicidad diaria con al menos un año de datoshistóricos. Prophet es robusto para datos faltantes, cambios en la tendenciay grandes valores atípicos.

[email protected] 205 Antonio Carrillo Ledesma, Et alii

Page 208: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Falcon es un marcoWeb de Python con�able y de alto rendimiento paraconstruir Backend de aplicaciones a gran escala y microservicios. Fomentael estilo arquitectónico REST e intenta hacer lo mínimo posible sin dejar deser altamente efectivo.

Mopidy es un servidor de música extensible escrito en Python. Mopidyreproduce música desde el disco local, Spotify, SoundCloud, Google PlayMusic y más. Edita la lista de reproducción desde cualquier teléfono, tabletao computadora usando una gama de clientes MPD y Web.

Hug tiene como objetivo hacer que el desarrollar APIs impulsadas porPython sea lo más simple posible, pero no más simple. Como resultado,simpli�ca drásticamente el desarrollo de la API de Python.

SymPy es una biblioteca de Python para matemática simbólica.

Visdom es una herramienta �exible para crear, organizar y compartirvisualizaciones de datos vivos y enriquecidos. Admite Torch y Numpy.

Pygame es una biblioteca de plataforma cruzada diseñada para facilitarla escritura de software multimedia, como juegos en Python.

Requests es una biblioteca de Python que le permite enviar solicitudesHTTP / 1.1, agregar encabezados, datos de formularios, archivos multipartey parámetros con simples diccionarios de Python. También le permite accedera los datos de respuesta de la misma manera.

Statsmodels es un paquete de Python que proporciona un comple-mento para Scipy para cálculos estadísticos que incluyen estadística descrip-tiva y estimación e inferencia para modelos estadísticos.

Scrapy es ampliamente utilizada en la biblioteca de raspado Web dePython. Se usa para crear programas de rastreo. Inicialmente, fue diseñadopara raspar, como su nombre indica, pero ahora se usa para muchos propósi-tos, incluida la extracción de datos, las pruebas automatizadas, etc. Scrapyes de código abierto.

[email protected] 206 Antonio Carrillo Ledesma, Et alii

Page 209: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

PyTorch es una biblioteca de código abierto, básicamente es un reem-plazo de la biblioteca Numpy y esta equipada con funcionalidades de nivel su-perior para construir redes neuronales profundas. Se puede usar otro lenguajecomo Scipy, Cython y Numpy, que ayudan a extender PyTorch cuando seanecesario. Muchas organizaciones, incluyendo Facebook, Twitter, Nvidia,Uber y otras organizaciones usan Pytorch para la creación rápida de prototi-pos en investigación y para entrenar modelos de aprendizaje profundo.

Requests es una de las famosas bibliotecas de Python que tiene licenciabajo Apache2 y esta escrita en Python. Esta biblioteca ayuda a los humanosa interactuar con los lenguajes. Con la biblioteca de solicitudes, no es nece-sario que agregue consultas, cadenas manualmente a las URL ni codi�carlos datos POST. Se puede enviar solicitudes HTTP al servidor mediante labiblioteca de solicitudes y se puede agregar datos de formularios, contenidocomo encabezado, archivos en varias partes, etc.

PyFlux es una biblioteca de Python que se usa para predecir y analizarseries temporales. esta desarrollado por Ross Taylor, esta biblioteca tienemuchas opciones para la interfaz y contiene muchas clases nuevas de tiposde modelos. Py�ux permite a los usuarios implementar muchos modelosmodernos de series de tiempo como GARCH y predecir la naturaleza decómo reaccionará en el futuro.

Zappa es uno de los mejores paquetes de Python creados por Miser-lou, es tan fácil de construir e implementar aplicaciones sin servidor en APIGateway y Amazon Web Services Lambda. Dado que AWS maneja la es-cala horizontal de forma automática, por lo que no habrá tiempo de esperade solicitud. Con Zappa, puede actualizar su código en una sola línea conZappa.

Arrow es una famosa biblioteca de Python amigable para los humanosque ofrece funciones sensatas como crear, formatear, manipular y convertirfechas, horas y marcas de tiempo. Es compatible con Python 2 y 3 y es unaalternativa de fecha y hora, ofrece funciones completas con una interfaz másagradable.

[email protected] 207 Antonio Carrillo Ledesma, Et alii

Page 210: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Pendulum es un paquete de Python que se utiliza para manipular fe-chas y horas. el código seguirá funcionando si se reemplaza todos los elemen-tos de DateTime. Con Pendulum, se puede analizar DateTime y mostrarla fecha y hora con la zona horaria. Básicamente, Pendulum es una ver-sión mejorada de la biblioteca Arrow y tiene todos los métodos útiles comoredondear, truncar, convertir, analizar, formatear y aritmética.

Theano es una biblioteca de aprendizaje profundo de Python, que seutiliza para optimizar, de�nir y evaluar ecuaciones numéricas matemáticasy matriz multidimensionales. esta desarrollado por el grupo de aprendizajeautomático, por lo que, básicamente, Theano es un compilador de expresiónmatemática y proporciona una estrecha integración con Numpy y propor-ciona una optimización rápida y estable.

IPython esta es una de las herramientas de Python más útiles, ya queproporciona una rica arquitectura para el usuario. Esta herramienta permiteescribir y ejecutar el código Python en el navegador. Ipython funciona envarios sistemas operativos, incluidos Windows, Mac OS X, Linux y la mayoríade los sistemas operativos Unix. IPython brinda todas las características queobtendrá en el intérprete básico con algunas características adicionales comonúmeros, más funciones, funciones de ayuda, edición avanzada, etc.

Imbalanced-learn en un mundo ideal, tendríamos conjuntos de datosperfectamente equilibrados y todos entrenaríamos modelos y seríamos felices.Desafortunadamente, el mundo real no es así, y ciertas tareas favorecen datosmuy desequilibrados. Por ejemplo, al predecir el fraude en las transaccionesde tarjetas de crédito, es de esperar que la gran mayoría de las transacciones(+ 99.9%) sean realmente legítimas. El entrenamiento ingenuo de algorit-mos de ML conducirá a un rendimiento deprimente, por lo que se necesitacuidado adicional al trabajar con estos tipos de conjuntos de datos. Afor-tunadamente, este es un problema de investigación estudiado y existe unavariedad de técnicas. Imbalanced-learn es un paquete de Python que ofreceimplementaciones de algunas de esas técnicas, para hacer la vida mucho másfácil. Es compatible con Scikit-learn y es parte de los proyectos Scikit-learn-contrib.

[email protected] 208 Antonio Carrillo Ledesma, Et alii

Page 211: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ca¤e2 el marco original de Ca¤e ha sido ampliamente utilizado du-rante años, y es conocido por su rendimiento incomparable y base de códigoprobado en batalla. Sin embargo, las tendencias recientes en DL hicieron queel marco se estancara en algunas direcciones. Ca¤e2 es el intento de llevarCa¤e al mundo moderno. Admite formación distribuida, implementación (in-cluso en plataformas móviles), las CPU más nuevas y Hardware compatiblecon CUDA. Si bien PyTorch puede ser mejor para la investigación, Ca¤e2 esadecuado para despliegues a gran escala como se ve en Facebook.

Dash es una biblioteca de código abierto para crear aplicaciones Web,especialmente aquellas que hacen un buen uso de la visualización de datos,en Python puro. esta construido sobre Flask, Plotly.js y React, y propor-ciona abstracciones que te liberan de tener que aprender esos Frameworks ypermitirte ser productivo rápidamente. Las aplicaciones se representan en elnavegador y responderán para que se puedan usar en dispositivos móviles.No se requiere JavaScript.

Fire es una biblioteca de código abierto que puede generar automáti-camente una CLI para cualquier proyecto de Python. La clave aquí es au-tomática: ¡casi no es necesario escribir ningún código o docstrings para cons-truir una CLI!. Para hacer el trabajo, solo se tiene que llamar a un métodoFire y pasarlo como se quiera para convertirlo en una CLI: una función, unobjeto, una clase, un diccionario, o incluso no pasar ningún tipo de argumento(lo que convertirá todo el código en una CLI).

Flashtext es una biblioteca para busqueda y remplazo de palabras enun documento. La belleza de FlashText es que el tiempo de ejecución esel mismo sin importar cuántos términos de búsqueda se tenga, en contrastecon la expresión regular en la que el tiempo de ejecución aumentará casilinealmente con el número de términos.

Pipenv con Pipenv, se especi�ca todas las dependencias en un Pip�le,que normalmente se genera mediante el uso de comandos para agregar, elimi-nar o actualizar dependencias. La herramienta puede generar un archivo Pip-�le.lock, lo que permite que las compilaciones sean deterministas, ayudándoa evitar esos errores difíciles de detectar debido a una dependencia poco claraque ni siquiera se cree que es necesaria.

[email protected] 209 Antonio Carrillo Ledesma, Et alii

Page 212: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Luminoth las imágenes estan en todas partes hoy en día y comprendersu contenido puede ser crítico para varias aplicaciones. Afortunadamente,las técnicas de procesamiento de imágenes han avanzado mucho, impulsadaspor los avances en DL. Luminoth es un kit de herramientas de código abiertoPython para visión arti�cial, construido con TensorFlow y Sonnet. Actual-mente, viene de fábrica y es compatible con la detección de objetos en formade un modelo llamado Faster R-CNN.

Instalación de Python e IDEs Existen diversas versiones de Pythonpara Linux, para instalar Python 2 en Debian GNU/Linux es necesario hacer:

# apt install ipython python-matplotlib python-numpy npython-scipy python-pandas python-sympy python-nose npython-dev spyder python-rpy2 python-rpy python-axiom npython-pip python python-tk idle python-pmw bpython npython-imaging python-pip python-pandas python-sklearn npython-sklearn-doc wxglade python-rpy2 pypy pypy-tk npython-gnuplot pypy-six python-mpi4py pyqt5-dev npyqt5-dev-tools

para instalar Python 3 en Debian GNU/Linux es necesario hacer:

# apt install ipython3 python3 idle3 python3-pip npython3-matplotlib python3-rpy2 python3-numpy spyder3 npython3-scipy bpython3 python3-pandas python-sklearn npython-sklearn-docspe python-wxgtk3.0 jython xonsh npython3-mpi4pypython3-pyqt5 python3-pyqtgraph mypy npython-wxgtk3.0-dev python3-numba

Para instalar Jupyter (entorno de trabajo orientado a cientí�cos que so-porta los lenguajes R y Python):

# apt install jupyter-console jupyter-notebook# pip3 install jupyter# pip3 install matplotlib# pip3 install ipywidgets# jupyter nbextension enable �py �sys-pre�x nwidgetsnbextension

[email protected] 210 Antonio Carrillo Ledesma, Et alii

Page 213: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y podemos instalar PYREPOT usando:

# pip install pyreport

además podemos instalar editores especializados en Python usando:

# apt install eric pyzo pyzo-doc thonny

otras opciones se pueden descargar de:

https://www.jetbrains.com/pycharm/http://www.pydev.org/https://wingware.com/

También, se pueden instalar diversas herramientas e IDEs para facilitarla programación en Python, para ello usar:

# apt install scite jedit kate gedit nedit emacs medit nkscope geany geany-plugins editra qtcreator anjuta nanjuta-extras codelite codelite-plugins tea vim-gtk nmousepad eric neovim neovim-qt medit kwrite katepart# apt install fte fte-console fte-terminal nano joe vim nvim-python-jedi vim-tlib vim-latexsuite vim-nox micro nneovim micro kakoune vim-athena jed# apt install kdi¤3 meld di¤use dirdi¤ kompare numdi¤ ncolordi¤ dwdi¤ wdi¤ xxdi¤ tkdi¤ ndi¤ ccdi¤ xxdi¤# apt install alleyoop astyle c2html java2html code2html nc2html autodia txt2html html2text moreutils# apt install git git-all gitk gitg git-cola git-gui qgit tig nvim-fugitive git-extras# apt install mercurial# apt install subversion rapidsvn# apt install cvs tkcvs

Por otro lado existe Anaconda, una Suite de código abierto que abarcauna serie de aplicaciones, librerías y conceptos diseñados para el desarrollode la Ciencia de datos con Python. En líneas generales Anaconda Distribu-tion es una distribucción de Python que funciona como un gestor de entorno,

[email protected] 211 Antonio Carrillo Ledesma, Et alii

Page 214: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

un gestor de paquetes y que posee una colección de más de 720 paquetes decódigo abierto. Anaconda Distribution se agrupa en 4 sectores o solucionestecnológicas; Anaconda Navigator, Anaconda Project, las librerías de Cienciade Datos y Conda. Todas estas se instalan de manera automática y en unprocedimiento muy sencillo.Para más información ver: https://www.anaconda.com/.

También esta SageMath, una Suite de código abierto bajo la licencia GPLde Software matemático como: NumPy, SciPy, matplotlib, Sympy, Maxi-ma, GAP, FLINT, R, entre otros. Además combina acceso a una poderosacombinación del lenguaje basada en Python o directamente vía interfaces oWrappers. La misión del proyecto es crear una alternativa de Software librea Magma, Maple, Mathematica y Matlab.Para más información ver: http://www.sagemath.org/.

Instalación de Aplicaciones Usando Pip Pip es un sistema de admi-nistración de paquetes que se utiliza para instalar y administrar paquetesde Software escritos en Python. Pip se usa principalmente para instalarpaquetes disponibles en Python Package Index (PyPI, página del proyexto:https://pypi.org). Los desarrolladores también pueden usar Pip para instalarmódulos y paquetes desarrollados localmente.Para instalar Pip en Python 2 hacemos:

# apt install Python-pip

y para instalar alguna aplicación para todos los usuarios, por ejemploratarmount, usamos:

# pip2 install ratarmount

y para instalar alguna aplicación para el usuario, por ejemplo ratarmount,usamos:

$ pip2 install �user ratarmount

Para instalar Pip en Python 3 hacemos:

# apt install python3-venv python3-pip

[email protected] 212 Antonio Carrillo Ledesma, Et alii

Page 215: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y para instalar alguna aplicación para todos los usuarios, por ejemploratarmount, usamos:

# pip3 install ratarmount

y para instalar alguna aplicación para el usuario, por ejemplo ratarmount,usamos:

$ pip3 install �user ratarmount

En caso de instalación para el usuario, para usar la aplicación debemosagregar al PATH:

export PATH ="$PATH:/home/$USER/.local/bin"

Sin pérdida de generalidad (usando pip2 o pip3), podemos ver los detallesde algún paquete, usando:

# pip3 show nombre

Podemos instalar algún paquete, usando:

# pip3 install nombre

Podemos actualizar algún paquete, usando:

# pip3 install �upgrade nombre

Podemos desinstalar algún paquete, usando:

# pip3 uninstall nombre

Podemos listar los paquetes instalados, usando:

# pip3 list nombre

Podemos buscar algún paquete, usando:

# pip3 search nombre

Podemos listar los paquetes desactualizados, usando:

# pip3 list �outdated

[email protected] 213 Antonio Carrillo Ledesma, Et alii

Page 216: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Aprender a Programar en Python En la red existen múltiples sitiosespecializados y una amplia bibliografía para aprender a programar cada unode los distintos aspectos de Python, nosotros hemos seleccionado diversostextos que ponemos a su disposición en:

Lenguaje Python

8.5 Herramientas de Programación

En Linux existe una gran variedad de herramientas para programación, yaque este sistema operativo fue hecho por programadores y para progra-madores, por ello entre las miles de herramientas, tenemos algunas que sonampliamente usadas, entre las que destacan:

Editores de Terminal

� Diakonos

� Jet

� Joe

� LE

� Mined

� Nano

� Nice Editor (NE)

� Pico

� Setedit

� Vim

� Fte

[email protected] 214 Antonio Carrillo Ledesma, Et alii

Page 217: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Editores Sencillos con Interfaz Grá�ca

� Gedit

� SciTE

� JEdit

� NEdit

� MEdit

� KScope

� Editra

� Kate

� KWrite

� Leafpad

� Mousepad

� Anjunta

� TEA

� Pluma

� GVim

� Emacs

Editores Avanzados con Interfaz Grá�ca

� Atom

� Blue�sh

� BlueGri¤on

� Brackets

[email protected] 215 Antonio Carrillo Ledesma, Et alii

Page 218: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Geany

� Glade

� Google Web Designer

� KompoZer

� Light Table

� Notepadqq

� Scribes

� Sublime Text

Entornos de Programación Integrado (IDEs)

� Aptana

� Arduino IDE

� Android Studio

� CodeLite

� Code::Blocks

� Eclipse

� Gambas

� JetBrains Suite

� NetBeans

� Ninja-IDE

� Python IDLE

� PyDev

� Postman

[email protected] 216 Antonio Carrillo Ledesma, Et alii

Page 219: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Qt Creator

� Simply Fortran

� Visual Studio Code

� Wing Python IDE

� Spyder

� PyCharm

� Jupyter

� Eric

Kit de Desarrollo de Software

� .Net Core SDK

� Android SDK

� Java JDK

Comparadores de texto y fuentes

� KDi¤3

� Meld

� Di¤use

� DirDi¤

� kompare

� Numdi¤

� colordi¤

� wdi¤

� xxdi¤

� tkdi¤

� Ndi¤

[email protected] 217 Antonio Carrillo Ledesma, Et alii

Page 220: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Otras Herramientas

� Alleyoop

� C2HTML

� Java2HTML

� Code2HTML

� c2html

� AutoDia

� txt2html

� html2text

Programas para control de versiones que permite desarrollo colab-orativo de Software:

� Git https://git-scm.com/

� Mercurial https://www.mercurial-scm.org/

� Subversion https://subversion.apache.org/

� Perforce

� Bazaar

� CVS

� LibreSource

� Monotone

� SmartGit

� GitKraken

� Git Cola

[email protected] 218 Antonio Carrillo Ledesma, Et alii

Page 221: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Generadores automaticos de documentación que generan salidaen PDF, HTML y XML para lenguajes como C++ y Java:

� Doxygen http://www.doxygen.org/

� JavaDoc

Formateador de código fuente para C, C++, Java y C#

� Astyle http://astyle.sourceforge.net

Lenguaje Uni�cado de Modelado (Uni�ed Modeling Language)49

forja un lenguaje de modelado visual común semántica y sintácticamente ricopara la arquitectura, el diseño y la implementación de sistemas de Softwarecomplejos tanto en estructura como en comportamiento:

� UML https://www.uml.org/

Depuradores de programas

� ddd https://www.gnu.org/Software/ddd/

� gdb https://www.gnu.org/Software/gdb/

� kdbg http://www.kdbg.org/

Programas para rastrear errores en la manipulación de memoriay punteros desbordados

� Valgrind http://valgrind.org/

� DUMA http://duma.sourceforge.net/

Programas para hacer análisis de rendimiento50

49Otras opciones son: UML Diagram Generation, Code Generation, Document Genera-tion and Reporting, Scaling, Database Schema Generation, Entity Relationship Diagrams,Data Flow Datagrams, StarUML BOUML, EclipseUML, UML Modeller, Papyrus, Nclass,PlantUML, UMLet, NetBeansIDE, Open ModelSphere, gModeler, RISE, Oracle jdevel-oper, Oracle SQL Developer, Dia, Kivio, ArgoUML, X�g, etc.50Otras opciones son: Splint, cppcheck, Rough Auditing Tool for Security, C y C++

Code Counter, CppNcss, Gnocchi, CUnit, CppUnit, OPro�le, Intel VTune, Nemiver, Mud-�ap, etc.

[email protected] 219 Antonio Carrillo Ledesma, Et alii

Page 222: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� gprof https://sourceware.org/binutils/docs/gprof/

� Callgrind http://valgrind.org/docs/manual/cl-manual.html

� kCachegrind http://kCachegrind.sourceforge.net/html/Home.html

� time https://www.cyberciti.biz/faq/unix-Linux-time-command-examples-usage-syntax/

En este apartado, solo tocaremos las más usadas, pero abunda la docu-mentación de estas y otras importantes herramientas en línea de comandos(véase 15.3). Iniciaremos por las de compilar51 y depurar52 programas com-pilables en C, C++, Fortran, entre otros.

8.5.1 ¿Qué es eso de ASCII, ISO-8859-1 y UTF-8?

Los tres estándares representan el esfuerzo informático por brindar un sistemade codi�cación que permita representar los caracteres que se usan en todoslos idiomas. El primer esfuerzo lo hizo ASCII y fue para el idioma inglés(128 caracteres), luego ante su insu�ciencia para representar otros caracterescomo los latinos por ejemplo, nace ISO-8859-1 (también llamado LATIN-1ó ASCII extendido) pero debido a que no podía representar caracteres deotros idiomas aparece el estándar Unicode (del cual es parte UTF-8 ).Un buen detalle a saber es que mientras ISO-8859-1 usa un byte para

representar un carácter, no pasa lo mismo con UTF-8 que puede usar hasta4 bytes ya que es de longitud variable. Esto hace que una base de datos enUTF-8 sea un poco mas grande que una en ISO-8859-1. Esto sucede porque� por ejemplo� mientras ISO-8859-1 usa un byte para representar la letrañ, UTF-8 usa dos bytes. Hay un tema más y es que muchas veces cuando

51Un compilador es un programa informático que traduce un programa que ha sidoescrito en un lenguaje de programación a un lenguaje común, usualmente lenguaje demáquina, aunque también puede ser traducido a un código intermedio (bytecode) o atexto y que reúne diversos elementos o fragmentos en una misma unidad, este proceso detraducción se conoce como compilación.52Un depurador (en inglés, debugger), es un programa usado para probar y depurar

(eliminar) los errores de el programa "objetivo". El código a ser examinado puede al-ternativamente estar corriendo en un simulador de conjunto de instrucciones (ISS), unatécnica que permite gran potencia en su capacidad de detenerse cuando son encontradascondiciones especí�cas pero será típicamente más lento que ejecutando el código directa-mente en el apropiado (o el mismo) procesador.

[email protected] 220 Antonio Carrillo Ledesma, Et alii

Page 223: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

vamos a migrar información nos encontramos con caracteres ISO-8859-1 (loscorrespondientes a los números 147, 148, 149, 150, 151 y 133) que no puedenverse en un editor UNIX/LINUX pero si en un navegador HTML.

Unicode es un set de caracteres universal, es decir, un estándar en elque se de�nen todos los caracteres necesarios para la escritura de la mayoríade los idiomas hablados en la actualidad que se usan en la computadora. Suobjetivo es ser, y, en gran medida, ya lo ha logrado, un superconjunto detodos los sets de caracteres que se hayan codi�cado. El texto que apareceen la computadora o en la Web se compone de caracteres. Los caracteresrepresentan letras del abecedario, signos de puntuación y otros símbolos.En el pasado, distintas organizaciones han recopilado diferentes sets de

caracteres y han creado codi�caciones especí�cas para ellos. Un set puedeabarcar tan sólo los idiomas de Europa occidental con base en el latín (sinincluir países de la Unión Europea como Bulgaria o Grecia), otro set puedecontemplar un idioma especí�co del Lejano Oriente (como el japonés), y otrospueden ser parte de distintos sets diseñados especialmente para representarotro idioma de algún lugar del mundo.Lamentablemente, no es posible garantizar que su aplicación particular

pueda soportar todas las codi�caciones, ni que una determinada codi�caciónpueda soportar todos sus requerimientos para la representación de un ciertoidioma. Además, generalmente resulta imposible combinar distintas codi�-caciones en la misma página Web o en una base de datos, por lo que siemprees muy difícil soportar páginas plurilingües si se aplican enfoques "antiguos"cuando se trata de tareas de codi�cación.El Consorcio Unicode proporciona un único y extenso set de caracteres

que pretende incluir todos los caracteres necesarios para cualquier sistema deescritura del mundo, incluyendo sistemas ancestrales (como el cuneiforme, elgótico y los jeroglí�cos egipcios). Hoy resulta fundamental para la arquitec-tura de la Web y de los sistemas operativos, y las principales aplicacionesy navegadores Web incluyen soporte para este elemento. En el EstándarUnicode también se describen las propiedades y algoritmos necesarios paratrabajar con caracteres. Este enfoque facilita mucho el trabajo con sistemaso páginas plurilingües y responde mucho mejor a las necesidades del usuarioque la mayoría de los sistemas de codi�cación tradicionales.

[email protected] 221 Antonio Carrillo Ledesma, Et alii

Page 224: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Sets de caracteres, sets de caracteres codi�cados y codi�cacionesun set de caracteres o repertorio comprende el grupo de caracteres que seutilizarían para una �nalidad especí�ca, ya sea los necesarios para el soportede los idiomas de Europa Occidental en la computadora.Un set de caracteres codi�cados es un grupo de caracteres en el que se

ha asignado un número exclusivo a cada carácter. Las unidades de un setde caracteres codi�cados se conocen como puntos de código. El valor de unpunto de código representa la ubicación de un carácter en el set de caracterescodi�cados. Por ejemplo, el punto de código para la letra á en el set decaracteres codi�cados Unicode es 225 en notación decimal, o E1 en notaciónhexadecimal.La codi�cación de caracteres re�eja la manera en la que el set de caracteres

codi�cados se convierte a bytes para su procesamiento en la computadora.Además, en Unicode existen distintas formas de codi�car el mismo carácter.Por ejemplo, la letra á se puede representar mediante dos bytes en una co-di�cación y con cuatro bytes, en otra. Los formatos de codi�cación que sepueden usar con Unicode se denominan UTF-8, UTF-16 y UTF-32.Por todo lo anterior, al programar es necesario tener en cuenta la co-

di�cación usada por el editor o IDE que se use para ello y que no todos loseditores soportan las mismas codi�caciones53, además puede haber problemasde portabilidad en los archivos entre distintos sistemas operativos. En elcódigo fuente (las instrucciones del programa) no se suele usar caracteresdistintos alASCII, pero en las cadenas de visualización o en la documentaciónes común el uso de caracteres acentuados, es aquí donde hay que tomar unadecisón sobre el usar o no dichos caracteres, siempre y cuando el compiladorlos soporte.Si siempre se usa el mismo editor y la misma plataforma de desarrollo,

no hay razón para no usar caracteres extendidos como los acentos. Pero si seusarán múltiples sistemas operativos y no hay garantía de usar editores quesoporten dichos caracteres, entonces existe la posibilidad de perder dichoscaracteres o bien pueden generar errores al compilar los archivos por no sersoportados. Por ello una opción para evitar problemas es sólo usar caracteresASCII o tener el cuidado de usar editores que no pierdan dichos caracteres.En Linux, para veri�car la codi�cación de un archivo se utiliza el comando

53Dado que los archivos fuente se intercambian entre usuarios y es común el uso de dife-rentes sistemas operativos, la conversiones de los caracteres entre diferentes formatos puedeser causa de problemas de codi�cación, perdiéndose dichos caracteres en la conversión.

[email protected] 222 Antonio Carrillo Ledesma, Et alii

Page 225: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

�le �i o �mime, este comando permite mostrar en pantalla el tipo de archivoy su codi�cación, usando:

$ �le -i Car.java

El comando iconv es utilizado para realizar esta tarea de convertir elcódigo de un texto a otro. La lógica para aplicar correctamente el commandoiconv es la siguiente:

$ iconv options -f from-encoding -t to-encoding input�le(s) -ooutput�le

Así, -f o �from-code signi�ca la entrada de la codi�cación, y �t o �to-encoding especi�ca la salida de la misma. Con todo esto en mente podemosproceder a explicar la codi�cación de UTF-8 a ASCII. Primero hay quecomenzar con conocer las codi�caciones de los caracteres en el archivo yluego poder ver el contenido del mismo. Así, se podrán convertir todos losarchivos a la codi�cación ASCII. Todo después de haber utilizado el comandoiconv, para poder veri�car lo que contiene la salida del archivo. Para eso hayque hacer lo siguiente:

$ �le -i input.�le$ cat input.�le$ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.�le -o

out.�le$ cat out.�le$ �le -i out.�le

Cabe destacar que, si el comando //IGNORE se añade a to-encoding,los caracteres no pueden ser convertidos y un error se mostrará luego de laconversión. También, si el comando //TRANSLIT es añadido a to-encodingcomo en el ejemplo dado (ASCII//TRANSLIT), los caracteres convertidosson transliterados, si es posible, como necesarios.Esto implicaría que en este evento los caracteres no pueden ser represen-

tados como lo que se desea, aunque pueden haber aproximaciones del mismo,inclusive dos. Por lo que, si un carácter no puede ser transliterado, no seráreconocido como un objetivo para reemplazo y se mostrará la marca (?) enla salida del archivo.Algunas veces es necesario convertir el archivo de UTF-8 a ASCII y lo

hacemos mediante:

[email protected] 223 Antonio Carrillo Ledesma, Et alii

Page 226: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ iconv -f UTF-8 -t ISO-8859-1 prog.c -o progMod.c

o mediante:

$ iconv -f UTF-8 -t ASCII//TRASLIT prog.c -o progMod.c

8.5.2 Uso de Espacios o Tabuladores en Fuentes

Los programadores siempre han debatido entre el uso de espacios y ta-bulaciones para estructurar su código. Los espacios y las tabulaciones sonutilizados por los programadores para estructurar el código de una formadeterminada. La primera línea de código (sin espacio o tabulación) inicia un�bloque�de contenido. Si las sucesivas líneas de código forman parte de esemismo bloque (encerrado entre corchetes) o forman nuevos subbloques, estasse van desplazando hacia la derecha para indicar esa subordinación. En casode formar un bloque completamente nuevo, se mantiene en la misma posiciónque la línea inmediatamente anterior.A nivel funcional, la diferencia entre el uso de espacios o tabulaciones es

nula. Cuando el código pasa por el compilador antes de ser ejecutado, lamáquina interpreta de igual forma ambos formatos. No obstante, sí existendiferencias técnicas que marcan la diferencia entre el uso de tabulaciones yespacios:

� Precisión. Una tabulación no es más que un conjunto de espacios agru-pados. Por norma general, este conjunto suele ser de 8 caracteres, peropuede variar. ¿Qué quiere decir esto? Que cuando un mismo �cherode código se abre en dos máquinas diferentes, la apariencia del códigopuede ser diferente. En cambio, el uso de espacios no conlleva esteproblema: un espacio siempre ocupa el mismo �espacio� � valga laredundancia� y asegura que el código se visualiza de la misma formaen todas las máquinas.

� Comodidad. En el caso de las tabulaciones, basta con pulsar la teclade tabulación una única vez para estructurar correctamente el código.En el caso de los espacios, es necesario pulsar varias veces la mismatecla para lograr la estructura deseada.

� Almacenamiento. El uso de tabulaciones también reduce el tamaño el�chero �nal, mientras que el uso de espacios lo aumenta. Lo mismosucedería con el uso de espacios en lugar de saltos de línea.

[email protected] 224 Antonio Carrillo Ledesma, Et alii

Page 227: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Entonces, ¿cuál es la más correcta? La realidad es que todo depende delas preferencias personales. Si necesitas optimizar el tamaño de los �cherosal máximo, el uso de espacios se convierte en un sacrilegio. Si, en cambio, tucódigo debe lucir exactamente igual en múltiples máquinas, el uso de espaciospuede ser más conveniente para lograr esa homogeneidad.Por suerte, existen múltiples editores en la actualidad que trabajan y faci-

litan la transición entre ambos sistemas. Asimismo, los equipos de desarrollode software establecen en sus guidelines el uso de espacios o tabulaciones.De esta forma, se evitan con�ictos entre los programadores de un mismoproyecto y se alcanza esa homogeneidad tan deseada.El comando expand y unexpand (que vienen instalados en los paquetes

GNU Core) permite convertir tabuladores en espacios y viceversa, segúnnuestras necesidades o gustos. Estos comandos sacan el resultado de stdin ode los archivos nombrados en la línea de comando. Utilizando la opción -tse pueden establecer una o más posiciones de tabulador.Para ver si se usan espacios o tabuladores en un archivo fuente podemos

usar el comando cat con la opción -T que nos mostrará los caracteres tabu-lador como ^I, ejemplo:

$ cat -T archivo

Para convertir los espacios en tabuladores (un tabulador igual a 8 espa-cios) usamos:

$ unexpand progEsp.c

o redireccionando la salida usando:

$ unexpand progEsp.c > progTab.c

Para convertir los tabuladores en espacios (1 tabulador por ejemplo 4caracteres) usamos:

$ expand -t 4 progTab.c

o redireccionando la salida usando:

$ expand -t 4 progTab.c > progEsp.c

También es posible buscar todos los archivos (digamos *.cpp) y cambiarlos tabuladores por 4 espacios (para ello usamos el comando sponge que estacontenido en el paquete moreutils), mediante:

$ �nd . -name �*.cpp�-type f -exec bash -c n�expand -t 4 "$0" j sponge "$0"�{} n;

[email protected] 225 Antonio Carrillo Ledesma, Et alii

Page 228: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.3 Comparar Contenido de Fuentes

Cuando se programa es común generar distintas versiones de un mismoarchivo, en GNU/Linux se tiene varias herramientas para comparar y com-binar cambios. En la línea de comandos el comando di¤ permite ver loscambios entre dos versiones de un archivo y el comando merge sirve paracombinar cambios. Por otro lado sdi¤ nos permite ver las diferencias entredos archivos y de forma interactiva combinar cambios.Pese a que son poderosos estos comandos, en forma grá�ca se puede

obtener todo su potencial. Algunas de estas opciones son:

# apt install kdi¤3 meld di¤use dirdi¤ kompare wdi¤ nnumdi¤ colordi¤ xxdi¤ tkdi¤ ndi¤

Estos permiten comparar dos o tres versiones de un archivo simultánea-mente, y hacerlo con el contenido de una o más carpetas. Cada uno tiene lacapacidad de mostrar los cambios y si se requiere hacer la combinación deellos.

meld nos muestra grá�camente las diferencias entre dos archivos o tam-bién, entre todos los archivos de dos directorios utilizando distintos colores,y nos permite editar estos archivos desde el propio programa, actualizandodinámicamente las diferencias. El programa incluye �ltros y distintas ayudaspara hacer la edición más sencilla, como �echas al lado de los cambios paraaplicar cambio en cualquiera de los archivos con un simple clic. Este pro-grama se puede utilizar como un sencillo cliente de control de cambios paraGit, CVS, Subversion, etc.

kdi¤3 nos muestra grá�camente las diferencias entre tres archivos uti-lizando distintos colores, y nos permite editar estos archivos desde el propioprograma, actualizando dinámicamente las diferencias. El programa incluye�ltros y distintas ayudas para hacer la edición más sencilla, como �echas allado de los cambios para aplicar cambio en cualquiera de los archivos con unsimple clic.

8.5.4 Astyle

Para dar uniformidad a la codi�cación de los programas fuente, se puede usarun formateador automático de código, Astyle soporta una gran variedad de

[email protected] 226 Antonio Carrillo Ledesma, Et alii

Page 229: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

lenguajes y opciones, para instalar en Debian GNU/Linux usar:

# apt install astyle

para formatear los archivos de C, C++, C# usar:

$ astyle -s3 -p �style=allman �lineend=Linux *.?pp

para Java, una opción es

$ astyle -s3 -p �style=java �lineend=Linux *.java

Algunos estilos disponibles son:

style=allman style=java style=kr style=stroustrup

style=whitesmith style=vtk style=ratli¤ style=gnu

style=Linux style=horstmann style=1tbs style=google

style=mozilla style=pico style=lisp

más opciones en:

� http://astyle.sourceforge.net/astyle.html

� https://en.wikipedia.org/wiki/Programming_style

� https://en.wikipedia.org/wiki/Indent_style

Aprender a Usar ASTYLE en la red existen múltiples sitios espe-cializados y una amplia bibliografía para formatear código nosotros hemosseleccionado diversos textos que ponemos a su disposición en:

Sistema Operativo Linux

[email protected] 227 Antonio Carrillo Ledesma, Et alii

Page 230: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.5 Compilación y la Optimización del Ejecutable

Al programar es necesario revisar nuestro código por un compilador y loserrores son inherentes al proceso de programación. Los errores de progra-mación responden a diferentes tipos y pueden clasi�carse dependiendo dela fase en que se presenten. Algunos tipos de errores son más difíciles dedetectar y reparar que otros, veamos entonces:

� Errores de sintaxis

� Advertencias

� Errores de enlazado

� Errores de ejecución

� Errores de diseño

Errores de sintaxis son errores en el código fuente. Pueden debersea palabras reservadas mal escritas, expresiones erróneas o incompletas, vari-ables que no han sido declaradas, etc. Los errores de sintaxis se detectan enla fase de compilación. El compilador, además de generar el código objeto,nos dará una lista de errores de sintaxis. De hecho nos dará sólo una cosa ola otra, ya que si hay errores no es posible generar un código objeto.

Advertencias además de errores, el compilador puede dar también ad-vertencias (Warnings). Las advertencias son errores, pero no lo su�ciente-mente graves como para impedir la generación del código objeto. No ob-stante, es importante corregir estos errores la mayoría de las veces, ya queante un aviso el compilador tiene que tomar decisiones, y estas no tienenpor qué coincidir con lo que nosotros pretendemos hacer, ya se basan en lasdirectivas que los creadores del compilador decidieron durante la creacióndel compilador. Por lo tanto en ocasiones, ignorar las advertencias puedeocasionar que nuestro programa arroje resultados inesperados o erróneos.

Errores de enlazado el programa enlazador también puede encon-trar errores. Normalmente se re�eren a funciones que no están de�nidas enninguno de los �cheros objetos ni en las bibliotecas. Puede que hayamos olvi-dado incluir alguna biblioteca, o algún �chero objeto, o puede que hayamosolvidado de�nir alguna función o variable, o lo hayamos hecho mal.

[email protected] 228 Antonio Carrillo Ledesma, Et alii

Page 231: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Errores de ejecución incluso después de obtener un �chero ejecutable,es posible que se produzcan errores, durante la ejecución del código. En elcaso de los errores de ejecución normalmente no obtendremos mensajes de er-ror muy especí�cos o incluso puede que no obtengamos ningún error, sino quesimplemente el programa terminará inesperadamente. Estos errores son másdifíciles de detectar y corregir (pues se trata de la lógica como tal de nuestraaplicación). Existen herramientas auxiliares para buscar estos errores, sonlos llamados depuradores (Debuggers). Estos programas permiten detenerla ejecución de nuestros programas, inspeccionar variables y ejecutar nue-stro programa paso a paso (instrucción a instrucción). Esto resulta útil paradetectar excepciones, errores sutiles, y fallos que se presentan dependiendode circunstancias distintas. Generalmente los errores en tiempo de ejecuciónse dan por situaciones no consideradas en la aplicación, por ejemplo, que elusuario ingrese una letra en vez de un número y ésto no es controle.

Errores de diseño �nalmente los errores más difíciles de corregir y pre-venir. Si nos hemos equivocado al diseñar nuestro algoritmo, no habrá ningúnprograma que nos pueda ayudar a corregirlos, pues es imposible que un pro-grama pueda determinar qué es lo que tratamos de conseguir o un programaque realice aplicaciones cualquiera por nosotros. Contra estos errores sólocabe practicar y pensar, realizar pruebas de escritorio, hacerle seguimiento ydepuración a la aplicación hasta dar con el problema (una mala asignación,un valor inesperado, olvidar actualizar una variable, etc.), también es útilbuscar un poco de ayuda de libros o en sitios y foros especializados.

Compilación y la Optimización del Ejecutable Para usar muchas deestas herramientas (en línea de comandos), primero debemos conocer comocompilar fuentes54, sin perdida de generalidad trabajaremos en C++ solici-tando que el archivo ejecutable55 tenga el nombre ejemp:

$ g++ *.cpp -o ejemp

Para ejecutar el programa ya compilado:

54Compilador para C es gcc, para C++ es g++, para Fortran es f77 o f95, etc.55Un archivo ejecutable es tradicionalmente un archivo binario con instrucciones en

código de máquina cuyo contenido se interpreta por el ordenador como un programa.Además, suele contener llamadas a funciones especí�cas de un sistema operativo.

[email protected] 229 Antonio Carrillo Ledesma, Et alii

Page 232: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ ./ejemp

Para compilar y ver todos los avisos usar:

$ g++ -pedantic -Wall -Wextra -O *.cpp

o de forma alternativa:

$ g++ -We¤c++ *.cpp

Por otro lado, también podemos hacer una revisión estática del código,por ejemplo en C++ usamos:

$ cppcheck �enable=all *.?pp

mostrará los avisos de análisis estático del código indicado.

Para conocer el tiempo de ejecución56 de un programa, podemos usar elcomando básico time, mediante:

$ time ejecutable

que entregara información del tipo:

$ time ls

real 0m0.004s

user 0m0.001s

sys 0m0.004s

Pero podemos instalar una versión optimizada de este comando que pro-porciona información adicional, para ello instalar:

# apt install time

y su ejecución mediante:

56El tiempo total de ejecución de un programa (tiempo real) es la suma del tiempo deejecución del programa del usuario (tiempo de usuario) más el tiempo de ejecución delsistema necesario para soportar la ejecución (tiempo de sistema).

[email protected] 230 Antonio Carrillo Ledesma, Et alii

Page 233: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ /usr/bin/time ejecutable

por ejemplo para el comando ls, entrega una salida del tipo:

$ /usr/bin/time -v lsCommand being timed: "ls"User time (seconds): 0.00System time (seconds): 0.00Percent of CPU this job got: 66%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00Average shared text size (kBytes): 0Average unshared data size (kBytes): 0Average stack size (kBytes): 0Average total size (kBytes): 0Maximum resident set size (kBytes): 2360Average resident set size (kBytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 110Voluntary context switches: 1Involuntary context switches: 1Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (Bytes): 4096Exit status: 0

Además, podemos compilar usando diversas optimizaciones57 disponiblesen todos los compiladores GNU de Linux, estas opciones de optimizaciónestán ordenadas, desde no optimizar, a la mejor optimización posible, estasson: �O0, O1, -O2, -O3, -O3 -march=native, -O3 -march=native -�to, -Ofast-march=native.Para compilar y solicitar la optimización usamos:

57La optimización de código es el conjunto de fases de un compilador que transforma unfragmento de código en otro fragmento con un comportamiento equivalente y se ejecuta deforma más e�ciente, es decir, usando menos recursos de cálculo como memoria o tiempode ejecución.

[email protected] 231 Antonio Carrillo Ledesma, Et alii

Page 234: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ g++ -O1 *.cpp

y para ejecutar el programa usamos:

$ ./a.out

El resultado de las optimizaciones dependen del programa y se puedever que el rendimiento (tiempo de ejecución) mejora en varios órdenes demagnitud.

Por ejemplo en los siguientes test58 se obtienen estos rendimientos:Cryto++ v8.2:

O0 (95), -O2 (660.46), -O3 (712.01), -O3 -march=native (751.56),-O3 -march=native -�to (699.80), -Ofast -march=native (751.01)

LeelaChessZero:

O0 (18,300), -O2 (157,289), -O3 (142,198), -O3 -march=native(136,608), -O3 -march=native -�to (163,773), -Ofast -march=native(157,629)

Himeno Benchmark v3.0:

O0 (597.53), -O2 (4,150.11), -O3 (4,015.86), -O3 -march=native(4,771.42), -O3 -march=native -�to (4,774.03), -Ofast -march=native(5,065.07)

C-Ray v1.1:

O0 (113.58), -O2 (69.70), -O3 (38.00), -O3 -march=native (30.46),-O3 -march=native -�to (30.24), -Ofast -march=native (27.13)

Geometric Mean Of All Test Results:

O0 (222.36), -O2 (681.88), -O3 (709.76), -O3 -march=native (735.14),-O3 -march=native -�to (755.97), -Ofast -march=native (758.30)

58https://www.phoronix.com/scan.php?page=news_item&px=GCC-10.1-Compiler-Optimizations

[email protected] 232 Antonio Carrillo Ledesma, Et alii

Page 235: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.6 Análisis de Rendimiento y Depuración

El comando gprof produce un per�l de ejecución de programas en C, C++,Pascal, FORTRAN77, etc. El efecto de las rutinas llamadas se incorpora enel per�l de cada llamador. Los datos del per�l se toman del �chero de per�lde grafos de llamada (�gmon.out�por omisión) que es creado por programasque se han compilado con la opción -pg de cc(1), pc(1), y f77(1). La opción-pg también enlaza al programa versiones de las rutinas de biblioteca queestán compiladas para la per�lación. Gprof lee el �chero objeto dado (elpredeterminado es �a.out�) y establece la relación entre su tabla de símbolosy el per�l de grafo de llamadas de �gmon.out�. Si se especi�ca más de un�chero de per�l, la salida de gprof muestra la suma de la información deper�lado en los �cheros de per�l dados.Gprof calcula la cantidad de tiempo empleado en cada rutina. Después,

estos tiempos se propagan a lo largo de los vértices del grafo de llamadas. Sedescubren los ciclos, y se hace que las llamadas dentro de un ciclo compartanel tiempo del ciclo. El primer listado muestra las funciones clasi�cadas deacuerdo al tiempo que representan incluyendo el tiempo de sus descendientesen su grafo de llamadas. Debajo de cada entrada de función se muestran sushijos (directos) del grafo de llamadas, y cómo sus tiempos se propagan a estafunción. Un despliegue similar sobre la función muestra cómo el tiempo deesta función y el de sus descendientes se propagan a sus padres (directos) delgrafo de llamadas.También se muestran los ciclos, con una entrada para el ciclo completo y

un listado da los miembros del ciclo y sus contribuciones al tiempo y númerode llamadas del ciclo. En segundo lugar, se da un per�l plano, similar alproducido por prof. Este listado de los tiempos de ejecución totales, losnúmeros de llamadas, el tiempo en milisegundos que la llamada empleó en lapropia rutina, y el tiempo en ms que la llamada empleó en la propia rutinapero incluyendo sus descendientes. Finalmente, se proporciona un índice alos nombres de función.Para obtener el análisis de rendimiento, hacemos:

$ g++ -g -pg -O0 *.cpp$ ./a.out$ gprof -c -z a.out gmon.out > sal.txt

el archivo sal.txt contiene el análisis de rendimiento detallado. Un ejemplode esta salida es:

[email protected] 233 Antonio Carrillo Ledesma, Et alii

Page 236: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Flat pro�le:Each sample counts as 0.01 seconds.% cumulative self self totaltime seconds seconds calls s/call s/call name23.25 0.60 0.60 40656734 0.00 0.00 retorna(int, int)

14.85 0.98 0.38 27627674 0.00 0.00 retoaNumColu(int, int)

12.89 1.31 0.33 91126931 0.00 0.00 Vector::retorna(int)

10.94 1.59 0.28 31 0.01 0.03 ResJacob i::resuelve()

...

que permite conocer en que parte del código se consume más tiempo deejecución.

Aprender a Usar GPROF en la red existen múltiples sitios especia-lizados y una amplia bibliografía para optimizar código, nosotros hemos se-leccionado diversos textos que ponemos a su disposición en:

GPROF

Depuración con ddd un depurador (en inglés: Debugger) es un pro-grama usado para probar y depurar (eliminar) los errores de otros programas(el programa "objetivo"). El código a ser examinado puede alternativamenteestar corriendo en un simulador de conjunto de instrucciones (ISS), una téc-nica que permite gran potencia en su capacidad de detenerse cuando sonencontradas condiciones especí�cas pero será típicamente algo más lento queejecutando el código directamente en el apropiado (o el mismo) procesador.Algunos depuradores ofrecen dos modos de operación - la simulación parcialo completa, para limitar este impacto.Si es un depurador de nivel de fuente o depurador simbólico, común-

mente ahora visto en entornos de desarrollo integrados, cuando el programa"se estrella" o alcanza una condición prede�nida, la depuración típicamentemuestra la posición en el código original. Si es un depurador de bajo nivelo un depurador de lenguaje de máquina, muestra la línea en el fuente de-sensamblado (a menos que también tenga acceso en línea al código fuenteoriginal y pueda exhibir la sección apropiada del código del ensamblador odel compilador). Un "estrellamiento" sucede cuando el programa no puedecontinuar normalmente debido a un error de programación. Por ejemplo,el programa pudo haber intentado usar una instrucción no disponible en la

[email protected] 234 Antonio Carrillo Ledesma, Et alii

Page 237: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

versión actual del CPU o haber intentado tener acceso a memoria protegidao no disponible.Típicamente, los depuradores también ofrecen funciones más so�sticadas

tales como correr un programa paso a paso (un paso o animación del pro-grama), parar el programa (Breaking), es decir, pausar el programa para ex-aminar el estado actual en cierto evento o instrucción especi�cada por mediode un Breakpoint, y el seguimiento de valores de algunas variables. Algunosdepuradores tienen la capacidad de modi�car el estado del programa mientrasque está corriendo, en vez de simplemente observarlo. También es posiblecontinuar la ejecución en una posición diferente en el programa pasando unestrellamiento o error lógico.La importancia de un buen depurador no puede ser exagerada. De he-

cho, la existencia y la calidad de tal herramienta para un lenguaje y unaplataforma dadas a menudo puede ser el factor de decisión en su uso, inclusosi otro lenguaje/plataforma es más adecuado para la tarea.Para hacer depuración del código mediante el depurador grá�co ddd usar:

$ g++ -g -O0 *.cpp$ ddd ./a.out

Puede usarse también los depuradores xxgdb, gdb, kdbg cada uno tienesus pros y contras, depende del usuario cual es el más adecuado para usar.

Depuración con valgrind es un conjunto de herramientas libres queayuda en la depuración de problemas de memoria y rendimiento de progra-mas.La herramienta más usada es Memcheck. Memcheck introduce código

de instrumentación en el programa a depurar, lo que le permite realizar unseguimiento del uso de la memoria y detectar los siguientes problemas:

� Uso de memoria no inicializada.

� Lectura/escritura de memoria que ha sido previamente liberada.

� Lectura/escritura fuera de los límites de bloques de memoria dinámica.

� Fugas de memoria.

� Otros.

[email protected] 235 Antonio Carrillo Ledesma, Et alii

Page 238: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El precio a pagar es una notable pérdida de rendimiento; los programas seejecutan entre cinco y veinte veces más lento al usar Valgrind, y su consumode memoria es mucho mayor. Por ello normalmente no siempre se ejecutaun programa en desarrollo usando Valgrind, sino que se usa en situacionesconcretas cuando se está buscando un error determinado se trata de veri�carque no haya errores ocultos como los que Memcheck puede detectar.Valgrind incluye además otras herramientas:

� Addrcheck, versión ligera de Memcheck que se ejecuta más rápido yrequiere menos memoria pero que detecta menos tipos de errores.

� Massif, mide el rendimiento del montículo (heap).

� Helgrind, herramienta de detección de condiciones de carrera (race con-ditions) en código multihilo.

� Cachegrind, mide el rendimiento de la caché durante la ejecución, deacuerdo a sus características (capacidad, tamaño del bloque de datos,grado de asociatividad, etc.).

Para el rastreo de problemas con la manipulación de memoria y punterosdesbordados usamos:

$ g++ -g -O0 *.cpp$ valgrind �tool=memcheck �leak-check=yes �show-reachable=yes

./a.out

o analizar la salida usando kCachegrind :

$ valgrind �tool=callgrind ./a.out$ kCachegrind pro�le.callgrind

Aprender a Usar VALGRIND en la red existen múltiples sitios es-pecializados y una amplia bibliografía para depurar código, nosotros hemosseleccionado diversos textos que ponemos a su disposición en:

VALGRIND

[email protected] 236 Antonio Carrillo Ledesma, Et alii

Page 239: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Existen varios paquetes de modo grá�co para valgrind, uno de ellos esalleyoop y se usa:

$ alleyoop ./a.out -v �arg1=foo

otro es kCachegrind, podemos ver más opciones en:

� http://valgrind.org/

� http://alleyoop.sourceforge.net/usage.html

� http://kCachegrind.sourceforge.net/html/Home.html

8.5.7 Mejora del Rendimiento en Python

Python es un lenguaje interpretado, pero es posible compilar el código paragenerar Byte Code para el interprete (no aumenta la velocidad de ejecución).Si se necesita crear un archivo .pyc para un módulo que no se importa, sepuede usar los módulos py_compile y compile_all desde el interprete dePython.El módulo py_compile puede compilar manualmente cualquier módulo.

Una forma de usar la función py_compile.compile en ese modulo de formainteractiva es:

>>> import py_compile>>> py_compile.compile(�modulo.py�)

esto escribirá el archivo modulo.pyc.

En la linea de comando de Linux es posible compilar todos los archivosen un directorio utilizando el módulo compileall, para ello usar:

$ python -m compileall *.py

y ejecutar mediante:

$ python modulo.pyc

También es posible hacer ligera optimización del código generado medi-ante:

[email protected] 237 Antonio Carrillo Ledesma, Et alii

Page 240: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ python �O -m compileall *.py

esto generará código Bytecode con extensión .pyo, y ejecutar mediante:

$ python modulo.pyo

Python es un lenguaje razonablemente rápido, pero no es tan rápidocomo los programas compilados de C o Fortran. Eso es porque se interpretaCPython, la implementación estándar. Para ser más precisos, su código dePython se compila en un código de Bytes que luego se interpreta. Eso esbueno para aprender, ya que puede ejecutar el código en el REPL de Pythony ver los resultados de inmediato en lugar de tener que compilar y ejecutar.Pero como los programas de Python no son tan rápidos, los desarrolladoreshan creado varios compiladores de Python59 a lo largo de los años, incluidos60

Numba, Nuitka, PyPy, Cython, cx_FreezeIron, Pythran, Jython entre otros.

Comparando Compiladores de Python Alguien ya ha hecho el trabajode crear un punto de referencia de Python. Opté por PyStone, una traduc-ción de un programa en C de Guido van Rossum, el creador de Python (elprograma en C era en sí mismo una traducción de un programa Ada). Encon-tré una versión convertida por el desarrollador Christopher Arndt en Githubque era capaz de probar Python 3. Para dar un sentido de perspectiva, aquíestá el rendimiento de CPython (es decir, Python estándar) con Pystone:

Python 2.7.15Rc1 2: 272.647 pystones / second.Python 3.6.5: 175,817

Como puede ver, hay una gran diferencia entre Python 2 y 3 (cuantomás Pystones por segundo, mejor). En los siguientes desgloses, todos loscompiladores de Python se compararon con Python 3.

59El rendimiento rápido no es la única razón para compilar; Posiblemente la mayordesventaja de los lenguajes de Scripting como Python es que se proporciona de maneraimplícita su código fuente a los usuarios �nales.60Si está interesado en los compiladores de Python en general, tenga en cuenta que hay

mucho debate y controversia sobre los "mejores" compiladores y la rapidez general dellenguaje.

[email protected] 238 Antonio Carrillo Ledesma, Et alii

Page 241: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Nuitka Aunque puede seguir las instrucciones en la página de descarga,lo siguiente en Debian funcionó bien para mí:

$ apt install nuitka

adicionalmente Nuitka también puede usar otro compilador de C (ademásdel gcc), así que descargué clang. Puedes instalarlo con esto:

$ apt install clang

De forma predeterminada, Nuitka usa gcc, pero un parámetro te permiteusar el clang, así que lo probé con ambos. El compilador clang es partede la familia llvm, y está pensado como un reemplazo moderno para gcc.Compilar pystone.py con gcc fue tan simple como esto (primera línea), o conclang (segunda línea), y con la optimización del tiempo de enlace para gcc(tercera línea):

$ nuitka pystone.py$ nuitka pystone.py �clang$ nuitka pystone.py �lto

Después de compilar, lo que tomó aproximadamente 10 segundos, ejecutéel pystone.exe desde la terminal con:

$ ./pystone.exe 500000

Hice 500,000 pases:

Tamaño Ejecución pystones / seg.

1. 223.176 Kb 597,000

2. 195,424 Kb 610,000

3. 194.2 kb 600,000

Estos fueron los promedios de más de 5 corridas. Había cerrado tantosprocesos como pude, pero tomo los tiempos con un poco de variación porquehabía un +/- 5% en los valores de tiempo.

[email protected] 239 Antonio Carrillo Ledesma, Et alii

Page 242: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

PyPy Guido van Rossum dijo una vez: "Si quieres que tu código seejecute más rápido, probablemente debas usar PyPy". Para instalarlo enDebian usar:

$ apt install pypy

Entonces lo corrí así:

$ pypy pystone.py

El resultado fue una asombrosa cantidad de 1,776,001 pystones por se-gundo, casi tres veces más rápido que Nuitka.PyPy usa un compilador justo a tiempo y hace algunas cosas muy in-

teligentes para alcanzar su velocidad. De acuerdo con los puntos de referen-cia reportados, es 7.6 veces más rápido que el CPython en promedio. Puedocreer eso fácilmente. La única (leve) desventaja es que siempre está un pocopor detrás de las versiones de Python (es decir, hasta 2.7.13 (no 2.7.15) y3.5.3 (no 3.6.5)). Producir un exe requiere un poco de trabajo. Tienes queescribir tu Python en un subconjunto llamado RPython.

Cython no es solo un compilador para Python; es para un supercon-junto de Python que admite la interoperabilidad con C / C ++. CPythonestá escrito en C, por lo que es un lenguaje que generalmente se combinabien con Python.Con�gurar las cosas con Cython es un poco complicado. No es como

Nuitka, que acaba de salir de la caja. Primero, debes comenzar con unarchivo de Python con una extensión .pyx; ejecuta Cython para crear unarchivo pystone.c a partir de eso:

$ cython pystone.pyx �embed

No omita el parámetro -embed. Se agrega en main y eso es necesario. Acontinuación, compila pystone.c con esta hermosa línea:

$ gcc $ (python3-con�g �includes) pystone.c -lpython3.6m -opystone.exe

Si recibe algún error, como "no se puede encontrar la versión -lpython",podría ser el resultado de su versión de Python. Para ver qué versión estáinstalada, ejecute este comando:

[email protected] 240 Antonio Carrillo Ledesma, Et alii

Page 243: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ pkg-con�g �c�ags python3

Después de todo eso, Cython solo dio 228,527 pystones / sec. Sin embargo,Cython necesita que hagas un poco de trabajo especi�cando los tipos devariables. Python es un lenguaje dinámico, por lo que no se especi�can lostipos; Cython utiliza la compilación estática y el uso de variables de tipo Cle permite producir un código mucho mejor optimizado. (La documentaciónes bastante extensa y requiere lectura).

Tamaño Ejecución pystones / seg.

1. 219.552 Kb 228.527

cx_freeze es un conjunto de Scripts y módulos para "congelar" Scriptsde Python en ejecutables, y se pueden encontrar en Github.Lo instalé y creé una carpeta congelada para administrar cosas en:

$ pip3 install cx_Freeze �upgrade

Un problema que encontré con el Script de instalación fue un error quefalta "lz". Necesitas tener instalado zlib; ejecuta esto para instalarlo:

$ apt install zlib1g-dev

Después de eso, el comando cx_Freeze tomó el Script pystone.py y creóuna carpeta dist que contenía una carpeta lib, un archivo lib de 5MB y elarchivo de aplicación pystone:

$ cxfreeze pystone.py �target-dir dist

Tamaño Ejecución pystones / seg.

1. 10,216 174,822

No es el rendimiento más rápido, porque es la misma velocidad queCPython. (La congelación de Python implica enviar su aplicación en unsolo archivo (o carpeta) con los elementos Python necesarios, en lugar decompilar; signi�ca que el destino no requiere Python).

[email protected] 241 Antonio Carrillo Ledesma, Et alii

Page 244: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Numba Este es un compilador "justo a tiempo" para Python que opti-miza el código que se usa en algoritmos numéricos como son en las matrices,bucles y funciones de NumPy (también da soporte a Threading, vectorizaciónSIMD y aceleración por GPUs: Nvidia CUDA, AMD ROC ). La forma máscomún de usar Numba es a través de su colección de decoradores que sepueden aplicar a sus funciones para indicar a Numba que las compile usandoel estándar LLVM. Cuando se realiza una llamada a una función decoradade Numba, de compila en el código de máquina "justo a tiempo" para suejecución y todo o parte de su código puede ejecutarse posteriormente a lavelocidad de código de máquina nativo. Numba también trabaja bien conJupiter notebook para computación interactiva y con ejecución distribuidacomo Dask y Spark.Se puede instalar en Debian GNU/Linux mediante:

$ apt install python3-numba

y se puede descargar mediante CONDA paquete de Anaconda, usando:

$ conda install numba

o mediante PIP usando:

$ pip install numba

Dando mejores resultados en la ejecución de múltiples pruebas que PyPy,pero no en todos los casos. Por ello, la recomendación es evaluar el rendimientomediante pruebas en cada caso particular.

Conclusión Una buena opción es PyPy por el rendimiento obtenido encódigo general (y dependiendo del código en cuestión Numba puede ser mejorque PyPy en aplicaciones de cómputo cientí�co), la compilación fue muyrápida y produjo los resultados en menos de un segundo después de presionarla tecla RETURN. Si requieres un ejecutable, sin embargo, te recomiendoNuitka; fue una compilación sin complicaciones y se ejecuta más rápido queCPython. Experimenta con estos compiladores de Python y vea cuál funcionamejor para tus necesidades particulares.

[email protected] 242 Antonio Carrillo Ledesma, Et alii

Page 245: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.8 Git

Git es un programa de control de versiones que sirve para la gestión de losdiversos cambios que se realizan sobre los elementos de algún proyecto deSoftware y sus respectivos programas fuente o con�guración del mismo. Fuediseñado por Linus Torvalds y es usado para controlar los cambios de diversosproyectos como los fuentes del Kernel de Linux (véase ??) que tiene decenasde millones de líneas de código (en la versión 4.12 cuenta con 24,170,860líneas de código repartidos en 59,806 archivos) y es trabajado por miles deprogramadores alrededor del mundo.

¿Qué es control de versiones? se de�ne como control de versionesa la gestión de los diversos cambios que se realizan sobre los elementos dealgún producto o una con�guración del mismo es decir a la gestión de losdiversos cambios que se realizan sobre los elementos de algún producto ouna con�guración, y para los que aún no les queda claro del todo, control deversiones es lo que se hace al momento de estar desarrollando un Software ouna página Web. Exactamente es eso que haces cuando subes y actualizastu código en la nube, o le añades alguna parte o simplemente editas cosasque no funcionan como deberían o al menos no como tú esperarías.

¿A que le llamamos sistema de control de versiones? son todaslas herramientas que nos permiten hacer todas esas modi�caciones antesmencionadas en nuestro código y hacen que sea más fácil la administraciónde las distintas versiones de cada producto desarrollado; es decir Git.

Git fue creado pensando en la e�ciencia y la con�abilidad del mante-nimiento de versiones de aplicaciones cuando estas tienen un gran númerode archivos de código fuente, es decir Git nos proporciona las herramientaspara desarrollar un trabajo en equipo de manera inteligente y rápida y portrabajo nos referimos a algún Software o página que implique código el cualnecesitemos hacerlo con un grupo de personas.Algunas de las características más importantes de Git son:

� Rapidez en la gestión de ramas, debido a que Git nos dice que uncambio será fusionado mucho más frecuentemente de lo que se escribeoriginalmente

[email protected] 243 Antonio Carrillo Ledesma, Et alii

Page 246: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Gestión distribuida: Los cambios se importan como ramas adicionalesy pueden ser fusionados de la misma manera como se hace en la ramalocal

� Gestión e�ciente de proyectos grandes

� Realmacenamiento periódico en paquetes

Para instalar Git completo en el servidor o en la máquina de trabajo:

# apt install git-all

Para instalar lo básico de Git, si no esta instalado:

# apt install git

Otras opciones para trabajar con Git son:

# apt install git git-all gitk gitg git-cola git-gui qgit tig lighttpdvim-fugitive# apt install mercurial# apt install subversion rapidsvn# apt install cvs

Con�guración: Si se quiere especi�car la identidad del que controla elrepositorio local en el equipo, debemos usar (por omisión toma la informaciónde la cuenta del usuario y máquina):

$ git con�g �global user.name "John Doe"$ git con�g �global user.email [email protected]

Si se desea con�gurar el editor de texto a usar por Git, usamos (poromisión es vim):

$ git con�g �global Core.editor scite

Si se desea con�gurar la herramienta de control de diferencias, usamos(por omisión vimdi¤ ):

[email protected] 244 Antonio Carrillo Ledesma, Et alii

Page 247: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ git con�g �global merge.tool meld

Si lo que requiero es un control personal sin necesidad de compartir losarchivos con ningún otro usuario, puedo usar Git de forma local en cualquierdirectorio mediante:

$ git init

Si se desea agregar la identidad del que controla el repositorio en estedirectorio, se debe usar:

$ git con�g user.name "John Doe"$ git con�g user.email [email protected]

Ahora para agregar los archivos (todos los de este directorio), usar:

$ git add .

Así podemos hacer la con�rmación de los cambios, mediante:

$ git commit -m "Primer lanzamiento"

Ahora cada que lo requiera al hacer modi�caciones, puedo checar loscambios:

$ git status

o en forma grá�ca con gitk, mediante:

$ gitk

Para actualizar los cambios, usar:

$ git commit -a -m �Actualizacion�

La otra alternativa es preparar un directorio para el repositorio ya sea enel servidor o de forma local, mediante:

$ mkdir example.git$ cd example.git

[email protected] 245 Antonio Carrillo Ledesma, Et alii

Page 248: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Para inicializar el repositorio:

$ git �bare init

Es buena opción limitar el acceso a la cuenta via ssh, por ello es mejorcambiar en /etc/passwd, la línea del usuario predeterminada:

tlahuiz:x:1005:1005:Tlahuizcalpan�,:/home/tlahuiz:/bin/bash

a esta otra:

tlahuiz:x:1005:1005:Tlahuizcalpan�,:/home/tlahuiz:/usr/bin/git-Shell

En la máquina de trabajo o en el servidor en cualquier carpeta se generala estructura del repositorio en un directorio temporal de trabajo para elrepositorio:

$ mkdir tmp$ cd tmp$ git init

Para generar la estructura de trabajo para el repositorio y los archivosnecesarios:

$ mkdir branches release trunk$ mkdir ...

Para adicionar todos y cada uno de los archivos y carpetas:

$ git add .

Para subir los cambios:

$ git commit -m "Texto"

Después debemos mandarlo al servidor:

$ git remote add origin ssh://usr@máquina/~/trayectoria

[email protected] 246 Antonio Carrillo Ledesma, Et alii

Page 249: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

o mandarlo a un directorio local:

$ git remote add origin ~/trayectoria$ git push origin +master:refs/heads/master

Para usar el repositorio en cualquier otra máquina hay que bajar el repo-sitorio por primera vez del servidor:

$ git clone ssh://usr@máquina/~/trayectoria

o de una carpeta local:

$ git clone ~/trayectoria

Ahora, podemos con�gurar algunos datos usados en el control de cambios:

$ git con�g �global usr.name "Nombre"$ git con�g �global usr.email usr@direccion

cuando se requiera actualizar del repositorio los cambios:

$ git pull

para subir los cambios al repositorio:

$ git commit -a -m "mensaje"$ git push

Comando usados para el trabajo cotidiano en GitPara ver el estado de los archivos locales:

$ git status

Para generar una nueva rama y trabajar en ella:

$ git branch MiIdea$ git checkout MiIdea

o en un solo paso:

[email protected] 247 Antonio Carrillo Ledesma, Et alii

Page 250: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ git checkout -b MiIdea

Para uni�car las ramas generadas en el punto anterior:

$ git checkout master$ git merge MiIdea

Para borrar una rama:

$ git branch -d MiIdea

Para listar ramas:

$ git branch

Para listar ramas fusionadas:

$ git branch �merged

Para listar ramas sin fusionar:

$ branch �no-merged

Para ver los cambios en el repositorio:

$ git log

o verlos en forma acortada:

$ git log �pretty=oneline

Para recuperar un archivo de una actualización anterior:

$ git show a30ab2ca64d81876c939e16e9dac57c8db6fb103:ruta/al/archivo> ruta/al/archivo.bak

Para volver a una versión anterior:

$ git reset �hard 56f8fb550282f8dfaa75cd204d22413fa6081a11:

[email protected] 248 Antonio Carrillo Ledesma, Et alii

Page 251: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

para regresar a la versión presente (cuidado con subir cambios en ramasanteriores):

$ git pull

Si en algún momento borramos algo o realizamos cambios en nuestramáquina y necesitamos regresar los archivos como estaban en nuestra últimaactualización, podemos usar:

$ git reset �hard HEAD

este trabaja con la información de nuestra copia local y no necesita cone-xión de red para la restitución. Eventualmente es necesario optimizar lacopia local de los archivos en Git, para ello podemos usar:

$ git gc

Visualizador grá�co para Git :

# apt install gitk

Git es un proyecto pujante, amplio y bien documentado, ejemplos y do-cumentación puede ser consultada en:

� https://git-scm.com/book/es/v1

� http://git-scm.com/documentation

� https://coderwall.com/p/kucyaw/protect-secret-data-in-git-repo

Git en Google Drive:

� http://www.iexplain.org/using-git-with-google-drive-a-tutorial/

� https://techstreams.github.io/2016/09/07/google-drive-as-simple-git-Host/

Aprender a Usar Git En la red existen múltiples sitios especializadosy una amplia bibliografía para aprender a usar Git, nosotros hemos sele-ccionado diversos textos que ponemos a su disposición en:

Git

[email protected] 249 Antonio Carrillo Ledesma, Et alii

Page 252: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Git-crypt El paquete git-crypt es una solución que usa GPG por debajode Git que permite encriptación y desencriptación transparente de archivosen un repositorio git.Los archivos que se requieran proteger serán encriptados al hacer commit

y desencriptados al hacer checkout y permite compartir libremente un repo-sitorio que contenga contenido tanto público como privado. De esta forma,permite trabajar de manera transparente con el contenido desencriptado, deforma que desarrolladores que no tengan la clave secreta podrán clonar yhacer commit en un repositorio con archivos encriptados.Esto te permite almacenar tu material secreto (como pueden ser claves)

en el mismo repositorio que tu código sin tener que bloquearlo. Solo unusuario autorizado puede dar permisos a otros usuarios.Para instalar el paquete git-crypt usamos:

# apt install git-crypt

Ya instalado debemos prepara el repositorio git, para crear la llave, en-tonces usar:

$ git-crypt keygen ~/crypt-key

Ahora podemos crear el repositorio:

$ cd repo$ git-crypt init

Especi�ca que carpetas/archivos deben ser encriptados, como git-�lters:

$ cat .gitattributes

keys �lter=git-crypt di¤=git-crypt

crear la lista de los archivos a encriptar

$ vi .gitattributes

Indicamos que se cifren, por ejemplo, los archivos .html, .org, directo-rio:secretdir/**secreto y archivo, con cualquier extensión o palabra que lepreceda.

[email protected] 250 Antonio Carrillo Ledesma, Et alii

Page 253: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

*.html �lter=git-crypt di¤=git-crypt�

*.org �lter=git-crypt di¤=git-crypt

directorio_secreto/** �lter=git-crypt di¤=git-crypt

*archivo* �lter=git-crypt di¤=git-crypt

ahora cada vez que hagamos un commit, los archivos .html y .org, subiráncifrados.

Ya podemos usar la llave para encriptar los archivos indicados por .gitat-tributes mediante:

$ git-crypt unlock ~/crypt-key

y agregar los archivos que deseamos encriptar, usando git add, revisandoel estado de los archivos encriptados mediante:

$ git-crypt status -f

y podemos hacer los commits necesarios.

Al clonar el repositoro, los archivos encriptados se mostraran como tal,hasta hacer en el repositorio:

$ git-crypt unlock ~/crypt-key

mostrando los archivos desencriptados a partir de ese momento

Si se desea respaldar el repositorio en un solo archivo se puede usar:

$ git bundle create /tmp/Respaldo �all

y para restaurar usar algo como:

$ git clone /tmp/Respaldo newFolder

También podemos añadir usuarios autorizados (identi�cados por su claveGPG), mediante:

$ git-crypt add-gpg-user USER_ID

[email protected] 251 Antonio Carrillo Ledesma, Et alii

Page 254: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Flujos de trabajo comunes

� En la máquina del desarrollador: Crea el vault, añádete como usuario�able. Pide las claves públicas a los miembros de tu equipo y añádelasal vault.

� En el entorno de Integración Continua (CI): Añade una clave GPGcomún para los ejecutores jenkins/CI. Autorízala en el repositorio.

Seguridad

� Git-crypt usa GPG internamente, así que el nivel de seguridad deberíaser el dado por GPG, a excepción de posibles errores en el propio pro-grama git-crypt.

� Git-crypt es más seguro que otros sistemas git de encriptación transpar-ente, git-crypt encripta archivos usando AES-256 en modo CTR conun synthetic IV derivado del SHA-1 HMAC del archivo. Este modode operar proporciona seguridad semántica ante CPAs (chosen-plainattacks) determinísticos. Esto signi�ca que pese a que la encriptaciónes determinística (lo cual es requerido para que git pueda distinguircuando un archivo ha cambiado y cuando no), no �ltra informaciónmás allá de mostrar si dos archivos son idénticos o no.

Limitaciones y Trucos

� Cualquier usuario no autorizado puede ver que estamos usando git-cryptbasándose en la evidencia dejada en el archivo .gitattributes.

� Git-crypt no encripta nombres de archivo, mensajes de commit, symlinktargets, gitlinks, u otros metadatos.

� Git-crypt se apoya en git �lters, los cuales no fueron diseñados con laencriptación en mente. Así pues, git-crypt no es la mejor herramientapara encriptar la mayoría o totalidad de los archivos de un repositorio.Donde git-crypt destaca es en aquellos casos en que la mayoría delrepositorio es público pero unos pocos archivos deben ser encriptados(por ejemplo, claves privadas o archivos con credenciales API). Paraencriptar un repositorio entero, mejor considerar usar un sistema comogit-remote-gcrypt.

[email protected] 252 Antonio Carrillo Ledesma, Et alii

Page 255: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Git-crypt no esconde cuando un archivo cambia o no, cuanto ocupa oel hecho de dos archivos sean idénticos.

� Los archivos encriptados con git-crypt no se pueden comprimir. Inclusoel más pequeño de los cambios en un archivo encriptado requiere quegit archive el archivo modi�cado en su totalidad y no solo un delta.

� A pesar de que git-crypt protege el contenido de los archivos individ-uales con SHA-1 HMAC, git-crypt no puede ser usado de forma seguraa menos que el repositorio entero esté protegido contra la alteraciónde datos (un atacante que pueda mutar tu repositorio podrá alterartu archivo .gitattributes para deshabilitar la encriptación). Si fueranecesario, usa características de git cómo signed tags en vez de contarúnicamente con git-crypt para la integridad.

� El di¤ del commit varía cuando el vault está abierto vs cuando está cer-rado. Cuando está abierto, los contenidos del archivo están en formatoplano, es decir, desencriptados. En consecuencia puedes ver el di¤ .Cuando el vault está cerrado, no se puede apreciar un di¤ efectivo yaque el texto cifrado cambia, pero el ojo humano no puede distinguir loscontenidos.

Además de Git usado de forma local, existen diversos servicios en lanube61 que permiten dar soporte a proyectos mediante Git, en los cuales esnecesario crear una cuenta y subir los datos usando Git, algunos de estosservicios son:

GitLab (https://about.gitlab.com/)Para con�gurar:

git con�g �global user.name "Antonio Carrillo Ledesma"git con�g �global user.email "[email protected]"

Para crear nuevo repositorio:

61Algunos de estos proyectos gratuitos son: Gitlab, Github, Bitbucket, Beanstalk,Launchpad, SourceForge, Phabricator, GitBucket, Gogs, Gitea, Apache Allura, entreotros.

[email protected] 253 Antonio Carrillo Ledesma, Et alii

Page 256: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

git clone https://gitlab.com/antoniocarrillo69/MDF.gitcd MDFtouch README.mdgit add README.mdgit commit -m "add README"git push -u origin master

Para usar una carpeta existente:

cd existing_foldergit initgit remote add origin https://gitlab.com/antoniocarrillo69/MDF.gitgit add .git commit -m "Initial commit"git push -u origin master

Para usar un repositorio existente:

cd existing_repogit remote rename origin old-origingit remote add origin https://gitlab.com/antoniocarrillo69/MDF.gitgit push -u origin �allgit push -u origin �tags

Github (https://github.com/)Para con�gurar:

git con�g �global user.name "Antonio Carrillo Ledesma"git con�g �global user.email "[email protected]"

Para con�gurar un nuevo repositorio:

$ touch README.md$ git init$ git add .$ git commit -m "mi primer commit"$ git remote add origin https://github.com/antoniocarrillo69/ejemploPruebas.git$ git push -u origin master

[email protected] 254 Antonio Carrillo Ledesma, Et alii

Page 257: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.5.9 Otras opciones

Herramientas para convertir código fuentes en HTML, usando:

$ code2html Fuente Salida.html

o

$ c2html Fuente

Para java, usamos:

$ java2html Fuentes

También podemos convertir código fuente en PDF, usando:

$ nl test.cpp j a2ps -1 -l100 -otest.ps ; ps2pdf test.ps

el primer comando numera las líneas del fuente, el segundo comandogenera del fuente numerado un .PS y el último comando convierte .PS a.PDF

Si se tiene que ejecutar múltiples programas que son independientes unode otro se puede usar el programa parallel para correr N (número de cores delequipo) de ellos al mismo tiempo, por ejemplo si tenemos un archivo Bashcon el nombre mi-Bash y cuyo contenido es:

./a.out 4 5 4 > a1.txt

./a.out 4 5 3 > a2.txt

./a.out 4 5 6 > a3.txt

./a.out 4 5 4 > a4.txt

./a.out 3 5 4 > a5.txt

./a.out 4 6 4 > a6.txt

entonces podemos ejecutarlo usando parallel, el programa usara el númeromáximo de cores disponibles:

$ parallel -v < mi-Bash

si solo se desea usar una determinada cantidad de cores (por ejemplo 3)entonces usamos:

$ parallel -v -j 3 < mi-Bash

[email protected] 255 Antonio Carrillo Ledesma, Et alii

Page 258: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

8.6 Programando Desde la Nube

Existen diferentes servicios Web62 que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso ared y un navegador puedan programar en los más diversos lenguajes, IDEs yterminales sin hacer instalación alguna en su equipo de cómputo, tableta oteléfono celular.Algunos ejemplos de estos servicios son:

� https://www.jdoodle.com/

� https://repl.it/

� http://browxy.com

� https://jupyter.org/try

� https://tio.run/

� https://www.compilejava.net/

� http://codepad.org/

� https://code.hackerearth.com/

� https://www.remoteinterview.io/online-c-compiler

� https://ideone.com/

� https://hackide.herokuapp.com/

� https://www.codechef.com/ide

� http://cpp.sh/62Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnito

para no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de Internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar al navegador.

[email protected] 256 Antonio Carrillo Ledesma, Et alii

Page 259: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� https://codebunk.com/

� https://rextester.com/

� https://www.tutorialspoint.com/codingground.htm

� https://www.compileonline.com

� http://python�ddle.com/

� https://trinket.io/python

� https://www.pythonanywhere.com/try-ipython/

� https://www.rollapp.com/

� https://godbolt.org/

� https://www.codiva.io/

� https://paiza.io/en

� https://wandbox.org/

� http://coliru.stacked-crooked.com/

� http://quick-bench.com/

� https://cppinsights.io/

� https://ideone.com/

� http://cpp.sh/

� https://ide.geeksforgeeks.org/

� https://www.codechef.com/ide

� https://visualstudio.microsoft.com/services/visual-studio-online/

Usando Editores Colaborativos

[email protected] 257 Antonio Carrillo Ledesma, Et alii

Page 260: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

La escritura colaborativa es una escritura de códigos de programación enla Web hecha por más de una persona simultáneamente.Algunos ejemplos de estos servicios son:

� http://collabedit.com (edita código, tiene chat, no compila)

� https://gitduck.com/

� https://codeshare.io/

� https://www.tutorialspoint.com/codingground.htm

� http://ideone.com

� https://codebunk.com

� https://visualstudio.microsoft.com/services/visual-studio-online/

� https://ace.c9.io/build/kitchen-sink.html

� https://coderpad.io/

� https://peerpad.net/

� https://aws.amazon.com/cloud9/

� https://codeanywhere.com/

� https://stekpad.com/home/

Algunas de las terminales soportados son:

CentOS, IPython, Lua, MemCached, Mongo DB, MySQL,Node.js, Numpy, Oracle, Octave, PowerShell, PHP, R Progra-mming, Redis, Ruby, SciPy, SymPy, etc.

Algunos de los IDEs soportados son:

[email protected] 258 Antonio Carrillo Ledesma, Et alii

Page 261: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ada (GNAT), Algol68, Angular JS, Assembly, AsciiDoc, AWK,Bash Shell, Befunge, Bootstrap, Brainf**k, C, CSS3, ChipmunkBASIC, Clojure, Cobol, Co¤eeScript, ColdFusion, C99 Strict,C++, C++ 0x, C++ 11, C#, Dart, D Programming Language,Embedded C, Erlang, Elixir, Factor, Fantom, Falcon, Fortran-95, Forth,F#, Free Basic, Groovy, GO, Haxe, Haskell, HTML,ilasm, Intercal, Icon, Java, Java 8, Java MySQL, JavaScript,JSP, JQuery, Julia, Korn Shell (ksh), Latex, Lisp, LOLCODE,Lua, Matlab/Octave, Malbolge, Markdown, MathML, Mozart-Oz, Nimrod, Node.JS, Objective-C, OCaml, Pascal, PARI/GP,Pawn, Perl, Perl MySQL, PHP, PHP MySQL, WebView, Pike,Processing.js, p5.js, Prolog, Python-2, Python-3, PythonMySQL,Jupyter Notebook, Rexx, reStructure, Ruby, Rust, Scala, R Pro-gramming, Scheme, Smalltalk,SML/NJ, Simula, SQLite SQL, Tcl,TeX, Unlambda, VB.NET, Verilog, Whitespace, Ya Basic, etc.

Google Colaboratory Integrante de la G Suite for Education de Googlepermite a los usuarios que pertenezcan a esta Suite (como gran parte de losestudiantes de la UNAM) tener acceso desde el navegador para escribir y eje-cutar código de Python (Jupyter), es posible elegir correr nuestro Notebooken una CPU, GPU o en una TPU de forma gratuita. Tiene algunas restric-ciones, como por ejemplo que una sesión dura 12 hrs, pasado ese tiempo selimpia nuestro ambiente y perdemos las variables y archivos que tengamosalmacenados allí.Es conveniente para principiantes que requieran experimentar conMachne

Learning y Deep Learning pero sin recurrir en costos de procesamiento Cloud.Además el ambiente de trabajo ya viene con muchas librerías instaladasy listas para utilizar (como por ejemplo Tensor�ow, Sclkit-learn, Pytorch,Keras y OpenCV ), ahorrándonos el trabajo de con�gurar nuestro ambientede trabajo. Podemos importar nuestros archivos y datos desde Google Drive,GitHub, etc.Más información sobre Google Colaboratory en:

https://colab.research.google.com/notebooks/intro.ipynb

[email protected] 259 Antonio Carrillo Ledesma, Et alii

Page 262: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

9 Bases de Datos

¿Qué son las bases de datos? una base de datos es un conjunto dedatos pertenecientes a un mismo contexto y almacenados sistemáticamentepara su uso posterior (véase [102] y [103]). En este sentido; una bibliotecapuede considerarse una base de datos compuesta en su mayoría por documen-tos y textos impresos en papel e indexados para su consulta. Actualmente lamayoría de las bases de datos están en formato digital, se han desarrollado yse ofrece un amplio rango de soluciones al problema del almacenamiento dedatos.

9.1 Clasi�cación

Las bases de datos se pueden clasi�car de diferentes formas: acuerdo a laubicación, de acuerdo a la forma de establecer relaciones entre los datos,según la orientación, entre otros.De acuerdo a la ubicación

� Base de datos centralizada: Se ubica, almacena y mantiene en una solaubicación. Eso no signi�ca que el usuario tenga que estar en el mismolugar para acceder.

� Base de datos distribuida: Se trata en realidad de diferentes bases dedatos en distintas locaciones físicas unidas por un gestor que las hacefuncionar como si fueran una sola.

De acuerdo a la forma de establecer relaciones entre los datos

� Relacionales: En este tipo de base de datos estos se organizan en formade �las y columnas.

� Orientadas a objetos: Aquí los datos se almacenan en forma de objetos.Estos objetos se guardan en la base de datos asignándoles atributos ymétodos que son los que de�nen qué hacer con los datos.

� Orientadas a grafos: Utiliza la teoría de grafos para almacenar, mapeary consultar las relaciones entre datos.

� NoSQL: Permite almacenar datos no estructurados o semiestructura-dos.

[email protected] 260 Antonio Carrillo Ledesma, Et alii

Page 263: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Orientada a documentos: Es un subtipo de la anterior. En lugar dealmacenar los datos en �las y columnas utiliza documentos para al-macenar y recuperar los datos. Estos documentos organizan los datosutilizando estándares como JSON o XML.

Según la orientación

� OLTP: Son bases de datos orientadas al procesamiento de transaccionese incluye funciones de introducción, modi�cación y borrado de datos.

� OLAP: Estas bases de datos están orientadas al análisis de los datospara permitir extraer conclusiones.

Otros tipos

� Autónomas: Están basadas en la nube y utilizan el aprendizaje au-tomático para automatizar el trabajo la base de datos, la seguridad,las copias de seguridad, las actualizaciones y otras tareas de gestiónrutinarias que en las bases de datos tradicionales realiza un admin-istrador.

� Almacén de datos: Es una base de datos enfocada en el sector cor-porativo que integra y depura información de varias fuentes distintaspara procesarla y analizarla desde diferentes puntos de vista a granvelocidad.

Hay programas denominados sistemas gestores de bases de datos SGBD(Database Management System o DBMS), que permiten almacenar y poste-riormente acceder a los datos de forma rápida y estructurada. Actualmentese tienen dos importantes tipos de bases de datos:

� Structured Query Language SQL (lenguaje de consulta estructurada)es un lenguaje de dominio especí�co, diseñado para administrar, y recu-perar información de sistemas de gestión de bases de datos relacionales.

� NoSQL "no solo SQL" es una amplia clase de sistemas de gestión debases de datos que di�eren del modelo clásico de SGBDR (Sistemade Gestión de Bases de Datos Relacionales) en aspectos importantes,siendo el más destacado que no usan SQL como lenguaje principal deconsultas. Los datos almacenados no requieren estructuras �jas comotablas.

[email protected] 261 Antonio Carrillo Ledesma, Et alii

Page 264: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

9.2 ¿Qué son las bases de datos SQL?

el lenguaje de consulta estructurada SQL (Structured Query Language), esun lenguaje de dominio especí�co, diseñado para administrar, y recuperarinformación de sistemas de gestión de bases de datos relacionales. Una desus principales características es el manejo del álgebra y el cálculo relacionalpara efectuar consultas con el �n de recuperar, de forma sencilla, informaciónde bases de datos, así como realizar cambios en ellas.Originalmente basado en el álgebra relacional y en el cálculo relacional,

SQL consiste en un lenguaje de de�nición de datos, un lenguaje de manipu-lación de datos y un lenguaje de control de datos. El alcance de SQL incluyela inserción de datos, consultas, actualizaciones y borrado, la creación y modi-�cación de esquemas y el control de acceso a los datos. También en SQL aveces se describe como un lenguaje declarativo, también incluye elementosprocesales.

Características generales de SQL SQL es un lenguaje de acceso a basesde datos que explota la �exibilidad y potencia de los sistemas relacionales ypermite así gran variedad de operaciones.Es un lenguaje declarativo de "alto nivel" o "de no procedimiento" que,

gracias a su fuerte base teórica y su orientación al manejo de conjuntos deregistros �y no a registros individuales�permite una alta productividad encodi�cación y la orientación a objetos. De esta forma, una sola sentenciapuede equivaler a uno o más programas que se utilizarían en un lenguaje debajo nivel orientado a registros. SQL también tiene las siguientes caracterís-ticas:

� Lenguaje de de�nición de datos: El LDD de SQL proporciona coman-dos para la de�nición de esquemas de relación, borrado de relaciones ymodi�caciones de los esquemas de relación.

� Lenguaje interactivo de manipulación de datos: El LMD de SQL in-cluye lenguajes de consultas basado tanto en álgebra relacional comoen cálculo relacional de tuplas.

� Integridad: El LDD de SQL incluye comandos para especi�car las res-tricciones de integridad que deben cumplir los datos almacenados en labase de datos.

[email protected] 262 Antonio Carrillo Ledesma, Et alii

Page 265: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� De�nición de vistas: El LDD incluye comandos para de�nir las vistas.

� Control de transacciones: SQL tiene comandos para especi�car el comien-zo y el �nal de una transacción.

� SQL incorporado y dinámico: Esto quiere decir que se pueden incorpo-rar instrucciones de SQL en lenguajes de programación como: C++,C, Java, Python, PHP, COBOL, Pascal y Fortran.

� Autorización: El LDD incluye comandos para especi�car los derechosde acceso a las relaciones y a las vistas.

Tipos de datos Algunos de los tipos de datos básicos de SQL�s son:

� Varchar: Recibe cadena de palabras compuestas de letras, números ycaracteres especiales.

� Int: es el principal tipo de datos de valores enteros de SQL Server. Connúmeros enteros con o sin signo

� Date: una fecha de calendario que contiene el año (de cuatro cifras), elmes y el día.

� Time: La hora del día en horas, minutos y segundos (el valor predeter-minado es 0).

Optimización Como ya se dijo antes, y suele ser común en los lenguajesde acceso a bases de datos de alto nivel, SQL es un lenguaje declarativo. Osea, que especi�ca qué es lo que se quiere y no cómo conseguirlo, por lo queuna sentencia no establece explícitamente un orden de ejecución.El orden de ejecución interno de una sentencia puede afectar seriamente a

la e�ciencia del SGBD, por lo que se hace necesario que este lleve a cabo unaoptimización antes de su ejecución. Muchas veces, el uso de índices acelerauna instrucción de consulta, pero ralentiza la actualización de los datos.Dependiendo del uso de la aplicación, se priorizará el acceso indexado o unarápida actualización de la información. La optimización di�ere sensiblementeen cada motor de base de datos y depende de muchos factores.Los sistemas de bases de datos modernos poseen un componente llamado

optimizador de consultas. Este realiza un análisis detallado de los posibles

[email protected] 263 Antonio Carrillo Ledesma, Et alii

Page 266: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

planes de ejecución de una consulta SQL y elige aquel que sea más e�cientepara llevar adelante la misma.Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL

difuso) que permite el acceso a bases de datos difusas, usando la lógica difusa.

9.2.1 Lenguaje de de�nición de datos (DDL)

El lenguaje de de�nición de datos (en inglés Data De�nition Language, oDDL), es el que se encarga de la modi�cación de la estructura de los objetosde la base de datos. Incluye órdenes para modi�car, borrar o de�nir lastablas en las que se almacenan los datos de la base de datos. Existen cuatrooperaciones básicas: CREATE, ALTER, DROP y TRUNCATE.

CREATE (Crear) este comando permite crear objetos de datos, comonuevas bases de datos, tablas, vistas y procedimientos almacenados.Ejemplo (crear una tabla):

CREATE TABLE clientes;

ALTER (Alterar) este comando permite modi�car la estructura deuna tabla u objeto. Se pueden agregar/quitar campos a una tabla, modi�carel tipo de un campo, agregar/quitar índices a una tabla, modi�car un trigger,etc.Ejemplo (agregar columna a una tabla):

ALTER TABLE alumnos ADD edad INT UNSIGNED;

DROP (Eliminar) este comando elimina un objeto de la base dedatos. Puede ser una tabla, vista, índice, trigger, función, procedimientoo cualquier objeto que el motor de la base de datos soporte. Se puede com-binar con la sentencia ALTER.Ejemplo (elimina la tabla alumnos):

DROP TABLE alumnos;

[email protected] 264 Antonio Carrillo Ledesma, Et alii

Page 267: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

TRUNCATE (Truncar) este comando solo aplica a tablas y su fun-ción es borrar el contenido completo de la tabla especi�cada. La ventajasobre el comando DELETE, es que si se quiere borrar todo el contenido dela tabla, es mucho más rápido, especialmente si la tabla es muy grande. Ladesventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolu-tamente todos los registros, ya que no se permite la cláusula WHERE. Sibien, en un principio, esta sentencia parecería ser DML (Lenguaje de Mani-pulación de Datos), es en realidad una DDL, ya que internamente, el co-mando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ningunatransacción.Ejemplo (borra el contenido de la tabla alumnos):

TRUNCATE TABLE alumnos;

9.2.2 Lenguaje de manipulación de datos DML

Un lenguaje de manipulación de datos (Data Manipulation Language, o DMLen inglés) es un lenguaje proporcionado por el sistema de gestión de basede datos que permite a los usuarios llevar a cabo las tareas de consulta omanipulación de los datos, organizados por el modelo de datos adecuado.El lenguaje de manipulación de datos más popular hoy en día es SQL, es

usado para recuperar y manipular datos en una base de datos relacional.

SELECT (Seleccionar) La sentencia SELECT nos permite consultarlos datos almacenados en una tabla de la base de datos.Forma básica:

SELECT [{ALLjDISTINCT}]<nombre_campo>[, <nombre_campo>...]FROM {<nombre_tabla>j<nombre_vista>}[,{<nombre_tabla>j<nombre_vista>}...][WHERE <condición> [{ANDjOR} <condición>...]][GROUP BY <nombre_campo>[, <nombre_campo>...]][HAVING <condición> [{ANDjOR} <condición>...]][ORDER BY {<nombre_campo>j<indice_campo>}[{ASCjDESC}][,{<nombre_campo>j<indice_campo>}[{ASCjDESC}]]];

[email protected] 265 Antonio Carrillo Ledesma, Et alii

Page 268: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

SELECT palabra clave que indica que la sentencia de SQL que que-remos ejecutar es de selección.

ALL indica que queremos seleccionar todos los valores. Es el valor pordefecto y no suele especi�carse casi nunca.

DISTINCT indica que queremos seleccionar solo los valores distintos.

FROM indica la tabla (o tablas) desde la que queremos recuperar losdatos. En el caso de que exista más de una tabla se denomina a la consulta"consulta combinada" o "join". En las consultas combinadas es necesarioaplicar una condición de combinación a través de una cláusula WHERE.

WHERE especi�ca una condición que debe cumplirse para que losdatos sean devueltos por la consulta. Admite los operadores lógicos ANDy OR.

GROUP BY especi�ca la agrupación que se da a los datos. Se usasiempre en combinación con funciones agregadas.

HAVING especi�ca una condición que debe cumplirse para que losdatos sean devueltos por la consulta. Su funcionamiento es similar al deWHERE pero aplicado al conjunto de resultados devueltos por la consulta.Debe aplicarse siempre junto a GROUP BY y la condición debe estar referidaa los campos contenidos en ella.

ORDER BY presenta el resultado ordenado por las columnas indi-cadas. El orden puede expresarse con ASC (orden ascendente) y DESC(orden descendente). El valor predeterminado es ASC.Ejemplo:Para formular una consulta a la tabla coches, usamos la palabra clave

FROM y con SELECT le indicamos que desamos recuperar los campos ma-trícula, marca, modelo, color, número_kilómetros, num_plazas, para ellodebemos ejecutar la siguiente consulta:

SELECTmatricula, marca, modelo, color, numero_kilometros, num_plazas

[email protected] 266 Antonio Carrillo Ledesma, Et alii

Page 269: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

FROMcoches

ORDER BYmarca, modelo;

los datos serán devueltos ordenados por marca y por modelo en ordenascendente, de menor a mayor.Ejemplo de consulta simpli�cada a través de un comodín de campos (*):

El uso del asterisco indica que queremos que la consulta devuelva todos loscampos que existen en la tabla y los datos serán devueltos ordenados pormarca y por modelo.

SELECT *FROM

cochesORDER BY

marca, modelo;

Cláusula WHERE (Donde) la cláusula WHERE es la instrucciónque nos permite �ltrar el resultado de una sentencia SELECT. Habitualmenteno deseamos obtener toda la información existente en la tabla, sino quequeremos obtener solo la información que nos resulte útil en ese momento.La cláusula WHERE �ltra los datos antes de ser devueltos por la consulta.Cuando en la cláusula WHERE queremos incluir un tipo texto, debemosincluir el valor entre comillas simples.Ejemplos:En nuestro ejemplo, se desea consultar un coche en concreto, para esto

se agregó una cláusula WHERE. Esta cláusula especi�ca una o varias condi-ciones que deben cumplirse para que la sentencia SELECT devuelva los datos.En este caso la consulta devolverá solo los datos del coche con matrícula paraque la consulta devuelva solo los datos del coche con matrícula MF-234-ZDo bien la matrícula FK-938-ZL . Se puede utilizar la cláusula WHERE sola-mente, ó en combinación con tantas condiciones como queramos.

SELECTmatricula, marca, modelo, color, numero_kilometros, num_plazas

FROMcoches

[email protected] 267 Antonio Carrillo Ledesma, Et alii

Page 270: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

WHEREmatricula = �MF-234-ZD�OR matricula = �FK-938-ZL�;

Una condición WHERE puede ser negada a través del Operador LógicoNOT. La Siguiente consulta devolverá todos los datos de la tabla coches,menos el que tenga la matrícula MF-234-ZD.

SELECTmatricula, marca, modelo, color, numero_kilometros, num_plazas

FROMcoches

WHERENOT matricula = �MF-234-ZD�;

La siguiente consulta utiliza la condicional DISTINCT, la cual nos de-volverá todos los valores distintos formados por los campos marca y modelode la tabla coches.

SELECT DISTINCT marca, modelo FROM coches;

Cláusula ORDER BY (Ordernar Por) la cláusula ORDER BY esla instrucción que nos permite especi�car el orden en el que serán devueltoslos datos. Podemos especi�car el orden de forma ascendente o descendentea través de las palabras clave ASC y DESC. El orden depende del tipo dedatos que estén de�nidos en la columna, de forma que un campo numéricoserá ordenado como tal, y un alfanumérico se ordenará de la A a la Z, aunquesu contenido sea numérico. El valor predeterminado es ASC si no se especi�caal hacer la consulta.Ejemplos:

SELECTmatricula, marca, modelo, color, numero_kilometros, num_plazas

FROMcoches

ORDER BYmarca ASC, modelo DESC;

[email protected] 268 Antonio Carrillo Ledesma, Et alii

Page 271: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Este ejemplo, selecciona todos los campos matricula, marca, modelo,color, numero_kilometros y num_plazas de la tabla coches, ordenándolospor los campos marca y modelo, marca en forma ascendente y modelo enforma descendente.

SELECTmatricula, marca, modelo, color, numero_kilometros, num_plazas

FROMcoches

ORDER BY 2;

Este ejemplo, selecciona todos los campos matrícula, marca, modelo,color, numero_kilometros y num_plazas de la tabla coches, ordenándolospor el campo marca, ya que aparece en segundo lugar dentro de la lista decampos que componen la cláusula SELECT.

Subconsultas una subconsulta es una sentencia SELECT que está em-bebida en una cláusula de otra sentencia SQL. También pueden utilizarsesubconsultas en los comandos INSERT, UPDATE, DELETE y en la cláusulaFROM.Las subconsultas pueden resultar útiles si necesitas seleccionar �las de

una tabla con una condición que depende de los datos de la propia tabla ode otra tabla.La subconsulta (consulta interna), se ejecuta antes de la consulta prin-

cipal; el resultado de la subconsulta es utilizado por la consulta principal(consulta externa).

SELECTc.matricula, c.modelo

FROMcoches AS c

WHERE c.matricula IN(

SELECT m.matriculaFROM multas AS mWHERE m.importe > 100

);

En este ejemplo, se seleccionan las matrículas y los modelos de los cochescuyas multas superan los USD 100.

[email protected] 269 Antonio Carrillo Ledesma, Et alii

Page 272: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

INSERT (Insertar) una sentencia INSERT de SQL agrega uno o másregistros a una (y solo una) tabla en una base de datos relacional.Forma básica:

INSERT INTOtablatura(columnaA, [columnaB, ...])VALUES(�valor1�, [�valor2�, ...]);

o también se puede utilizar como:

INSERT INTO tablatura VALUES (�valor1�, �valor2�);

Las cantidades de columnas y valores deben ser iguales. Si una columnano se especi�ca, le será asignado el valor por omisión. Los valores especi-�cados (o implícitos) por la sentencia INSERT deberán satisfacer todas lasrestricciones aplicables. Si ocurre un error de sintaxis o si alguna de lasrestricciones es violada, no se agrega la �la y se devuelve un error.Ejemplo:

INSERT INTO agenda_telefonica (nombre, numero)VALUES (�Roberto Jeldrez�, 4886850);

Cuando se especi�can todos los valores de una tabla, se puede utilizar lasentencia acortada:

INSERT INTO nombre_tabla VALUES (�valor1�, [�valor2�,...]);

Ejemplo (asumiendo que �nombre�y �número�son las únicas columnas dela tabla �agenda_telefonica�):

INSERT INTO agenda_telefonicaVALUES (�Jhonny Aguilar�, 080473968);

[email protected] 270 Antonio Carrillo Ledesma, Et alii

Page 273: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Formas avanzadas una característica de SQL (desde SQL-92) es eluso de constructores de �las para insertar múltiples �las a la vez, con unasola sentencia SQL:

INSERT INTOtabla(columna1[, columna2, ...])VALUES(�valor1A�, [�valor1B�, ...]),(�value2A�, [�value2B�, ...]), ...;

Esta característica es soportada por DB2, PostgreSQL (desde la versión8.2), MySQL, y H2.Ejemplo (asumiendo que nombre y número son las únicas columnas en la

tabla agenda_telefonica):

INSERT INTOagenda_telefonica

VALUES(�Roberto Fernández�, �4886850�),(�Alejandro Sosa�, �4556550�);

Que podía haber sido realizado por las sentencias:

INSERT INTO agenda_telefonica VALUES (�Roberto Fer-nández�, �4886850�);INSERT INTO agenda_telefonica VALUES (�Alejandro Sosa�,

�4556550�);

Notar que las sentencias separadas pueden tener semántica diferente (es-pecialmente con respecto a los triggers), y puede tener diferente rendimientoque la sentencia de inserción múltiple.Para insertar varias �las en MS SQL puede utilizar esta construcción:

INSERT INTO phone_bookSELECT �John Doe�, �555-1212�UNION ALLSELECT �Peter Doe�, �555-2323�;

[email protected] 271 Antonio Carrillo Ledesma, Et alii

Page 274: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdocon el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.Para hacer lo mismo en Oracle se usa la Tabla DUAL, siempre que se

trate de solo una �la simple:

INSERT INTO phone_bookSELECT �John Doe�, �555-1212�FROM DUALUNION ALLSELECT �Peter Doe�,�555-2323�FROM DUAL

Una implementación conforme al estándar de esta lógica se muestra en elsiguiente ejemplo, o como se muestra arriba (no aplica en Oracle):

INSERT INTO phone_bookSELECT �John Doe�, �555-1212�FROM LATERAL ( VAL-

UES (1) ) AS t(c)UNION ALLSELECT �Peter Doe�,�555-2323� FROM LATERAL ( VAL-

UES (1) ) AS t(c)

Copia de �las de otras tablas un INSERT también puede utilizarsepara recuperar datos de otros, modi�carla si es necesario e insertarla direc-tamente en la tabla. Todo esto se hace en una sola sentencia SQL que noimplica ningún procesamiento intermedio en la aplicación cliente. Un SUB-SELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puedecontener la sentencia JOIN, llamadas a funciones, y puede incluso consultaren la misma TABLA los datos que se inserta. Lógicamente, el SELECT seevalúa antes que la operación INSERT esté iniciada. Un ejemplo se da acontinuación:

INSERT INTO phone_book2SELECT *FROM phone_bookWHERE name IN (�John Doe�, �Peter Doe�);

Una variación es necesaria cuando algunos de los datos de la tabla fuentese está insertando en la nueva tabla, pero no todo el registro. (O cuando losesquemas de las tablas no son iguales.)

[email protected] 272 Antonio Carrillo Ledesma, Et alii

Page 275: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

INSERT INTO phone_book2 ([name], [phoneNumber])SELECT [name], [phoneNumber]FROM phone_bookWHERE name IN (�John Doe�, �Peter Doe�);

El SELECT produce una tabla (temporal), y el esquema de la tabla tem-poral debe coincidir con el esquema de la tabla donde los datos son insertados.

UPDATE (Actualizar) una sentencia UPDATE de SQL es utilizadapara modi�car los valores de un conjunto de registros existentes en una tabla.Ejemplo:

UPDATE My_table SET �eld1 = �updated value�WHERE�eld2 = �N�;

DELETE (Borrar) una sentencia DELETE de SQL borra uno o másregistros existentes en una tabla.Forma básica:DELETE FROM tabla WHERE columna1 = �valor1�;Ejemplo:

DELETE FROM mi_tabla WHERE columna2 = �N�;

Recuperación de clave los diseñadores de base de datos que usanuna clave suplente como la clave principal para cada tabla, se ejecutará enel escenario ocasional en el que es necesario recuperar automáticamente labase de datos, generando una clave primaria de una sentencia SQL INSERTpara su uso en otras sentencias SQL. La mayoría de los sistemas no permitensentencias SQL INSERT para retornar �la de datos. Por lo tanto, se hacenecesario aplicar una solución en tales escenarios.Implementaciones comunes incluyen:

� Utilizando un procedimiento almacenado especí�co de base de datosque genera la clave suplente, realice la operación INSERT y �nalmentedevuelve la clave generada.

� Utilizando una sentencia SELECT especi�ca de base de datos, sobreuna tabla temporal que contiene la última �la insertada. DB2 imple-menta esta característica de la siguiente manera:

[email protected] 273 Antonio Carrillo Ledesma, Et alii

Page 276: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

SELECT *FROM NEW TABLE (INSERT INTO phone_bookVALUES (�Cristobal Jeldrez�,�0426.817.10.30�)) AS t

� Utilizando una sentencia SELECT después de la sentencia INSERTcon función especí�ca de base de datos, que devuelve la clave primariagenerada por el registro insertado más recientemente.

� Utilizando una combinación única de elementos del original SQL IN-SERT en una sentencia posterior SELECT.

� Utilizando un GUID en la sentencia SQL INSERT y la recupera en unasentencia SELECT.

� Utilizando la función de PHP mysql_insert_id() de MySQL despuésde la sentencia INSERT.

� Utilizando un INSERT con la cláusula RETURNING para Oracle, quesolo se puede utilizar dentro de un bloque PL/SQL, en el caso de Post-greSQL se puede usar tanto con SQL como con PL/SQL.

INSERT INTO phone_book VALUES (�Cristobal Jeldrez�,�0426.817.10.30�)RETURNING phone_book_id INTO v_pb_id

� En el caso de MS SQL se puede utilizar la siguiente instrucción:

Set NoCount On;INSERT INTO phone_book VALUES (�Cristobal Jeldrez�,

�0426.817.10.30�);Select @@Identity as id

9.3 ¿Qué son las bases de datos NoSQL?

A veces llamado "no solo SQL" es una amplia clase de sistemas de gestiónde bases de datos que di�eren del modelo clásico de SGBDR (Sistema deGestión de Bases de Datos Relacionales) en aspectos importantes, siendo elmás destacado que no usan SQL como lenguaje principal de consultas. Los

[email protected] 274 Antonio Carrillo Ledesma, Et alii

Page 277: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

datos almacenados no requieren estructuras �jas como tablas, normalmenteno soportan operaciones JOIN, ni garantizan completamente ACID (atomi-cidad, consistencia, aislamiento y durabilidad) y habitualmente escalan bienhorizontalmente. Los sistemas NoSQL se denominan a veces "no solo SQL"para subrayar el hecho de que también pueden soportar lenguajes de consultade tipo SQL.Por lo general, los investigadores académicos se re�eren a este tipo de

bases de datos como almacenamiento estructurado, término que abarca tam-bién las bases de datos relacionales clásicas. A menudo, las bases de datosNoSQL se clasi�can según su forma de almacenar los datos, y compren-den categorías como clave-valor, las implementaciones de BigTable, bases dedatos documentales, y bases de datos orientadas a grafos.Las bases de datos NoSQL son ampliamente reconocidas porque son fá-

ciles de desarrollar, por su funcionalidad y el rendimiento a escala. Bas-tantes sistemas NoSQL emplean una arquitectura distribuida, manteniendolos datos de forma redundante en varios servidores, usando frecuentementeuna tabla Hash distribuida. De esta forma, el sistema puede realmente es-calar añadiendo más servidores, y el fallo en un servidor puede ser tolerado.

¿Cómo funciona una base de datos NoSQL (no relacionales)? Lasbases de datos NoSQL utilizan una variedad de modelos de datos para ac-ceder y administrar datos. Estos tipos de bases de datos están optimizadosespecí�camente para aplicaciones que requieren grandes volúmenes de datos,baja latencia y modelos de datos �exibles, lo que se logra mediante la �exibi-lización de algunas de las restricciones de coherencia de datos en otras basesde datos.Considere el ejemplo de modelado del esquema para una base de datos

simple de libros:

� En una base de datos relacional, un registro de libros a menudo seenmascara (o "normaliza") y se almacena en tablas separadas, y lasrelaciones se de�nen mediante restricciones de claves primarias y exter-nas. En este ejemplo, la tabla Libros tiene las columnas ISBN, Títulodel libro y Número de edición, la tabla Autores tiene las columnasIDAutor y Nombre de autor y, �nalmente, la tabla Autor-ISBN tienelas columnas IDAutor e ISBN. El modelo relacional está diseñado parapermitir que la base de datos aplique la integridad referencial entre

[email protected] 275 Antonio Carrillo Ledesma, Et alii

Page 278: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

tablas en la base de datos, normalizada para reducir la redundancia y,generalmente, está optimizada para el almacenamiento.

� En una base de datos NoSQL, el registro de un libro generalmentese almacena como un documento JSON. Para cada libro, el elementoISBN, Título del libro, Número de edición, Nombre autor y IDAutorse almacenan como atributos en un solo documento. En este modelo,los datos están optimizados para un desarrollo intuitivo y escalabilidadhorizontal.

¿Por qué debería usar una base de datos NoSQL? Las bases de datosNoSQL se adaptan perfectamente a muchas aplicaciones modernas, comodispositivos móviles, Web y juegos, que requieren bases de datos �exibles,escalables, de alto rendimiento y altamente funcionales para proporcionarexcelentes experiencias de usuario.

� Flexibilidad: las bases de datos NoSQL generalmente ofrecen esquemas�exibles que permiten un desarrollo más rápido y más iterativo. Elmodelo de datos �exible hace que las bases de datos NoSQL sean idealespara datos semiestructurados y no estructurados.

� Escalabilidad: las bases de datos NoSQL generalmente están diseñadaspara escalar usando clústeres distribuidos de Hardware en lugar deescalar añadiendo servidores caros y sólidos. Algunos proveedores dela nube manejan estas operaciones en segundo plano, como un serviciocompletamente administrado.

� Alto rendimiento: la base de datos NoSQL está optimizada para mo-delos de datos especí�cos y patrones de acceso que permiten un mayorrendimiento que el intento de lograr una funcionalidad similar con basesde datos relacionales.

� Altamente funcional: las bases de datos NoSQL proporcionan APIsaltamente funcionales y tipos de datos que están diseñados especí�ca-mente para cada uno de sus respectivos modelos de datos.

Tipos de bases de datos NoSQL

[email protected] 276 Antonio Carrillo Ledesma, Et alii

Page 279: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Clave-valor: las bases de datos clave-valor son altamente divisibles ypermiten escalado horizontal a escalas que otros tipos de bases de datosno pueden alcanzar. Los casos de uso como juegos, tecnología publi-citaria e IoT se prestan particularmente bien con el modelo de datosclave-valor. Amazon DynamoDB está diseñado para proporcionar unalatencia de milisegundos constate de un solo dígito para cualquier es-cala de cargas de trabajo. Este rendimiento sistemático es uno de losprincipales elementos que explican por qué la característica de historiasde Snapchat, que incluye la carga de trabajo de escritura de almace-namiento más grande de Snapchat, se trasladó a DynamoDB.

� Documentos: en el código de aplicación, los datos se representan amenudo como un objeto o un documento de tipo JSON porque esun modelo de datos e�ciente e intuitivo para los desarrolladores. Lasbases de datos de documentos facilitan a los desarrolladores el almace-namiento y la consulta de datos en una base de datos mediante el usodel mismo formato de modelo de documento que emplean en el códigode aplicación. La naturaleza �exible, semiestructurada y jerárquicade los documentos y las bases de datos de documentos permiten queevolucionen según las necesidades de las aplicaciones. El modelo dedocumentos funciona bien con catálogos, per�les de usuario y sistemasde administración de contenido en los que cada documento es único yevoluciona con el tiempo. Amazon DocumentDB (con compatibilidadpara MongoDB) y MongoDB son bases de datos de documentos cono-cidas que proporcionan APIs poderosas e intuitivas para un desarrollo�exible e iterativo.

� Grá�cos: el propósito de una base de datos de grá�cos es facilitar lacreación y la ejecución de aplicaciones que funcionan con conjuntos dedatos altamente conectados. Los casos de uso típicos para una base dedatos de grá�cos incluyen redes sociales, motores de recomendaciones,detección de fraude y grá�cos de conocimiento. Amazon Neptune esun servicio de base de datos de grá�cos completamente administrado.Neptune admite tanto el modelo de Property Graph como el ResourceDescription Framework (RDF), que ofrece la opción de dos API degrá�cos: TinkerPop y RDF/SPARQL. Las bases de datos de grá�cospopulares incluyen Neo4j y Giraph.

� En memoria: las aplicaciones de juegos y tecnología publicitaria tienen

[email protected] 277 Antonio Carrillo Ledesma, Et alii

Page 280: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

casos de uso como tablas de clasi�cación, tiendas de sesión y análisisen tiempo real que requieren tiempos de respuesta de microsegundos ypueden tener grandes picos de trá�co en cualquier momento. AmazonElastiCache ofrece Memcached y Redis, para servir cargas de trabajode baja latencia y alto rendimiento, como McDonald�s, en las que nose pueden servirse con almacenes de datos basados en disco. AmazonDynamoDB Accelerator (DAX) es otro ejemplo de un almacén de datosespecialmente diseñado. DAX hace que DynamoDB lea una orden demagnitud más rápida.

� Buscar: muchas aplicaciones generan registros para ayudar a los de-sarrolladores a solucionar problemas. Amazon Elasticsearch Service(Amazon ES) está diseñado para proporcionar visualizaciones en tiemporeal y análisis de datos generados por máquinas al indexar, agregar ybuscar registros y métricas semiestructuradas. Amazon ES también esun poderoso motor de búsqueda de alto rendimiento para casos de usode búsqueda de texto completo. Expedia está utilizando más de 150dominios de Amazon ES, 30 TB de datos y 30 mil millones de docu-mentos para una variedad de casos de uso críticos, que van desde elmonitoreo operativo y la resolución de problemas, hasta el seguimientode la pila de aplicaciones distribuidas y la optimización de precios.

9.3.1 SQL en comparación con NoSQL

Durante décadas, el modelo de datos predominante utilizado para el desa-rrollo de aplicaciones era el modelo de datos relacional empleado por basesde datos relacionales como Oracle, DB2, SQL Server, MySQL y PostgreSQL.No fue sino hasta mediados y �nales de la década del 2000 que otros modelosde datos comenzaron a adoptarse y aumentó su uso signi�cativamente. Paradiferenciar y categorizar estas nuevas clases de bases de datos y modelos dedatos, se acuñó el término "NoSQL". Con frecuencia, los términos "NoSQL"y "no relacional" se usan indistintamente.

Cargas de trabajo óptimas las bases de datos relacionales están di-señadas para aplicaciones de procesamiento de transacciones online (OLTP)altamente coherentes y transaccionales, y son buenas para el procesamientoanalítico online (OLAP), en cambio las bases de datos NoSQL están dise-ñadas para varios patrones de acceso a datos que incluyen aplicaciones de

[email protected] 278 Antonio Carrillo Ledesma, Et alii

Page 281: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

baja latencia. Las bases de datos de búsqueda NoSQL están diseñadas parahacer análisis sobre datos semiestructurados.

Modelo de datos el modelo relacional normaliza los datos en tablasconformadas por �las y columnas. Un esquema de�ne estrictamente lastablas, las �las, las columnas, los índices, las relaciones entre las tablas yotros elementos de las bases de datos. La base de datos impone la integri-dad referencial en las relaciones entre tablas, en cambio las bases de datosNoSQL proporcionan una variedad de modelos de datos, como clave-valor,documentos y grá�cos, que están optimizados para el rendimiento y la escala.

Propiedades ACID las bases de datos relacionales ofrecen propiedadesde atomicidad, coherencia, aislamiento y durabilidad (ACID):

� La atomicidad requiere que una transacción se ejecute por completo ono se ejecute en absoluto.

� La coherencia requiere que una vez con�rmada una transacción, losdatos deban acoplarse al esquema de la base de datos.

� El aislamiento requiere que las transacciones simultáneas se ejecutenpor separado.

� La durabilidad requiere la capacidad de recuperarse de un error ines-perado del sistema o de un corte de energía y volver al último estadoconocido.

Las bases de datos NoSQL a menudo hacen concesiones al �exibilizaralgunas de las propiedades ACID de las bases de datos relacionales para unmodelo de datos más �exible que puede escalar horizontalmente. Esto haceque las bases de datos NoSQL sean una excelente opción para casos de uso debaja latencia y alto rendimiento que necesitan escalar horizontalmente másallá de las limitaciones de una sola instancia.

Rendimiento en las bases de datos relacionales normalmente, el rendi-miento depende del subsistema de disco. Se necesita la optimización deconsultas, índices y estructura de tabla para lograr el máximo rendimiento,en cambio en las bases de datos NoSQL el rendimiento depende del tamañodel clúster de Hardware subyacente, la latencia de red y la aplicación queefectúa la llamada.

[email protected] 279 Antonio Carrillo Ledesma, Et alii

Page 282: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Escalado las bases de datos relacionales generalmente escalan en formaascendente las capacidades de computación del Hardware o la ampliaciónmediante la adición de réplicas para cargas de trabajo de solo lectura, encambio en las bases de datos NoSQL normalmente se pueden particionarporque los patrones de acceso son escalables mediante el uso de arquitecturadistribuida para aumentar el rendimiento que proporciona un rendimientoconstante a una escala casi ilimitada.

API en las bases de datos relacionales se solicita almacenar y recuperardatos que están comunicados mediante consultas que se ajustan a un lenguajede consulta estructurado (SQL). Estas consultas son analizadas y ejecutadaspor la base de datos relacional, en cambio en las bases de datos NoSQL lasAPIs basadas en objetos permiten a los desarrolladores almacenar y recu-perar fácilmente estructuras de datos. Las claves de partición permiten quelas aplicaciones busquen pares de clave-valor, conjuntos de columnas o do-cumentos semiestructurados que contengan atributos y objetos de aplicaciónserializados.

9.3.2 SQL en comparación con Terminología NoSQL

La siguiente tabla compara la terminología utilizada por las bases de datosNoSQL seleccionadas con la terminología utilizada por las bases de datosSQL.

SQL MongoDB DynamoDB Cassandra CouchbaseTabla Conjunto Tabla Tabla Bucketdedatos

F ila Documento E lem ento F ila Documento

Columna Campo Atributo Columna Campo

C laveprincipal Ob jectId C lave principal C lave principal ID del do cumento

Índ ice Índ ice Índ ice secundario Índ ice Índ ice

Ver Ver Índ ice secundario global V ista materia lizada Ver

Tabla u ob jeto

an idado

Documento

incrustadoMapa Mapa Mapa

Matriz M atriz L ista L ista L ista

Un conjunto de Campos formarán unDocumento, que en caso de asociarsecon otros formará una Colección. Las Bases se Datos estará formada porColecciones, y a su vez, cada Servidor puede tener tantas bases de datoscomo el equipo lo permita.

[email protected] 280 Antonio Carrillo Ledesma, Et alii

Page 283: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Los tipos de datos soportados son: Numericos:

� Double: punto �otante de 64 bist.

� Decimal: punto �otante de 128 bits.

� Int: enteros de hasta 32 bits.

� Long: enteros de hasta 64 bits.

Texto:

� String: Cadenas UTF-8.

� Regex: Almacena expresiones regulares.

Fecha:

� Date: entero de 64 bits representa en número de milisegundos desde elprimero de enero de 1970.

� Timestamp: entero de 64 bits, en el que los primeros 32 bits representanlos segundos pasados desde el primero de enero de 1970 y los otros 32bits son ordinales incrementales.

Especiales:

� Array: almacena un conjunto de elementos de cualquier tipo.

� Objectld: tipo de dato único, principalmente utilizados para da valoral campo _id de los documentos.

� Javascript: código de Javascript

� Null: valor nulo

� Boolean: valor booleano.

[email protected] 281 Antonio Carrillo Ledesma, Et alii

Page 284: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Consulta y modi�cación de datos Los datos pueden ser accedidos me-diante operaciones CRUD (Create, Read, Update, Delete), la ejecucuón decualquiera de estas instrucciones sigue el siguiente esquema:

db.<nombre_colección>.<nombre_Operación>(<condiciones_de_la_operación>)

Operaciones:

� Find: lectura (Read) de datos

� Insert: escritura (Create) de datos

� Update: actualización de valores de datos

� Remove: borrado (Delete) de datos

A modo de ejemplo utilizaremos un JSON como el que se usa enmongoDB. Supongamos que vamos a registrar diferentes personas en unacolección perteneciente a una BBDD NoSQL con algunos campos especiales.Estos no necesariamente tienen que seguir un patrón especí�co como veremosa continuación:

item1 = {Nombre: "Luís",Apellidos: "Martinez",Edad: 18,A�ciones: ["fútbol","senderismo","tenis"],Amigos: [

{Nombre:"Monica",Edad:20

},{

Nombre:"Andrés",Edad:24

}]

}db.hi.insert(item1)db.amigos.�nd().pretty()

[email protected] 282 Antonio Carrillo Ledesma, Et alii

Page 285: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ahora bien, si queremos añadir otros datos con algunas característicasdiferentes la podemos hacer sin mayor problema introduciendo lo siguiente:

item2 = {Nombre: "Luís",Apellidos: "Martinez",Edad: 18,

}db.hi.insert(item2)db.amigos.�nd().pretty()

En un modelo relacional o SQL clásico esto sería imposible de hacer. Estaes una de las tantas ventajas que hemos comentado

Operación Find ejemplo del comando Find, para encontrar a alguien denombre Luis:

db.amigos.�nd({Nombre:"Luís"}])

ejemplo del comando Find, para encontrar a alguien de nombre Luis yapellidos Martinez:

db.amigos.�nd({$and:[{Nombre:"Luís"},{Apellidos:"Martinez"}]}])

ejemplo del comando Find, para encontrar a alguien de nombre Luis yapellidos Martinez o edad mayor a 18:

db.amigos.�nd({$or:[

{$and:[{Nombre:"Luís"},{Apellidos:"Martinez"}]},{Edad:{gte:18}}

]})

ejemplo en el que el campo Amigos exista:

db.amigos.�nd({Amigos:{$exists:true}}])

[email protected] 283 Antonio Carrillo Ledesma, Et alii

Page 286: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Lista de comando ejecutables contra la base de datos:

db.adminCommand(nameOrDocument) - switches to �admin�db, and runs command [ just calls db.runCommand(...) ]db.auth(username, password)db.cloneDatabase(fromhost)db.commandHelp(name) returns the help for the commanddb.copyDatabase(fromdb, todb, fromhost)db.createCollection(name, { size : ..., capped : ..., max : ... }

)db.createUser(userDocument)db.currentOp() displays currently executing operations in the

dbdb.dropDatabase()db.fsyncLock() �ush data to disk and lock server for backupsdb.fsyncUnlock() unlocks server following a db.fsyncLock()db.getCollection(cname) same as db[�cname�] or db.cnamedb.getCollectionInfos([�lter]) - returns a list that contains the

names and options of the db�s collectionsdb.getCollectionNames()db.getLastError() - just returns the err msg stringdb.getLastErrorObj() - return full status objectdb.getLogComponents()db.getMongo() get the server connection objectdb.getMongo().setSlaveOk() allow queries on a replication slave

serverdb.getName()db.getPrevError()db.getPro�lingStatus() - returns if pro�ling is on and slow

thresholddb.getReplicationInfo()db.getSiblingDB(name) get the db at the same server as this

onedb.getWriteConcern() - returns the write concern used for any

operations on this db, inherited from server object if setdb.hostInfo() get details about the server�s hostdb.isMaster() check replica primary statusdb.killOp(opid) kills the current operation in the db

[email protected] 284 Antonio Carrillo Ledesma, Et alii

Page 287: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

db.listCommands() lists all the db commandsdb.loadServerScripts() loads all the scripts in db.system.jsdb.logout()db.printCollectionStats()db.printReplicationInfo()db.printShardingStatus()db.printSlaveReplicationInfo()db.dropUser(username)db.repairDatabase()db.resetError()db.runCommand(cmdObj) run a database command. if cm-

dObj is a string, turns it into { cmdObj : 1 }db.serverStatus()db.setLogLevel(level,<component>)db.setPro�lingLevel(level,<slowms>) 0=o¤ 1=slow 2=alldb.setWriteConcern( <write concern doc> ) - sets the write

concern for writes to the dbdb.unsetWriteConcern( <write concern doc> ) - unsets the

write concern for writes to the dbdb.setVerboseShell(�ag) display extra information in shell out-

putdb.shutdownServer()db.stats()db.version() current version of the server

9.4 Programando en Diferentes Manejadores de Basesde Datos

Existen diferentes paquetes para que permiten trabajar con bases de datos,en esta sección mostraremos como trabajar con algunos de ellos:

� MySQL/MariaDB

� PostgreSQL

� Sqlite

� MongoDB

[email protected] 285 Antonio Carrillo Ledesma, Et alii

Page 288: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

A continuación, mostraremos el mismo ejemplo en cada uno de estosmanejadores:

9.4.1 MySQL y MariaDB

MySQL/MariaDB es un sistema de administración de bases de datos (Data-base Management System, DBMS) para bases de datos relacionales. Así,estos manejadores de bases de datos, no son más que una aplicación quepermite gestionar archivos llamados de bases de datos.Existen muchos tipos de bases de datos, desde un simple archivo hasta

sistemas relacionales orientados a objetos. MySQL/mariaDB, como basede datos relacional, utiliza multiples tablas para almacenar y organizar lainformación. MySQL/MariaDB fue escrito en C y C++ y destaca por su granadaptación a diferentes entornos de desarrollo, permitiendo su interactuacióncon los lenguajes de programación más utilizados como PHP, Perl y Java ysu integración en distintos sistemas operativos.También es muy destacable, la condición de open source de MySQL/MariaDB,

que hace que su utilización sea gratuita e incluso se pueda modi�car con totallibertad, pudiendo descargar su código fuente. Esto ha favorecido muy posi-tivamente en su desarrollo y continuas actualizaciones, para hacer de MySQLuna de las herramientas más utilizadas por los programadores orientados aInternet.

MariaDB este sistema de gestión de base de datos es una bifurcación deMySQL, aunque parecidos, estos dos sistemas de gestión de bases de datossiguen siendo bastante diferentes:

� MariaDB tiene licencia GPL mientras que MySQL tiene un enfoquede doble licencia

� Cada mango se acumula de una manera diferente

� MariaDB soporta muchos motores de almacenamiento diferente

� En muchos escenarios, MariaDB ofrece un mejor rendimiento

Instalación en Debian GNU/Linux En este caso tenemos dos opciones,instalar MariaDB que ya es parte integral de multiples aplicaciones dentro deGNU/Linux o usar MySQL, en cada caso el uso es prácticamente el mismo.

[email protected] 286 Antonio Carrillo Ledesma, Et alii

Page 289: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Para instalar el paquete MariaDB usamos:

# apt install mariadb-server

y para con�gurarlo, usamos:

# mysql> use mysql> update user set plugin=�where user=�root�;> alter user root@localhost identi�ed by �XXXXXXX�;> �ush privilegies;> exit

y para usarlo

$ mysql -u root -p

Para instalar el paquete MySQL usamos:

# apt install mysql-common mysql-client mysql-server mytopmysql-admin

y para con�gurarlo, usamos:

# mysql_secure_installation

o

# mysql

en caso de no crear contraseña, podemos ingresar así:

$ mysql -u root -p

una vez en la consola del cliente de MySQL creamos un nuevo usuario

> create user nombre identi�ed by �XXXXX�;

y a continuación le damos privilegios totales

[email protected] 287 Antonio Carrillo Ledesma, Et alii

Page 290: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

> gran all privileges on *.* to nombre with grant option;> �ush privileges;> exit;

si requerimos las pruebas de e�ciencia, podemos instalar:

# apt install ferret mysql-workbench mysql-workbench-datamycli

además podemos instalar la interface para PHP, mediante:

# apt install php libapache2-mod-php php-mysql php-gd ph-pmyadmin

Ejemplo de uso Una vez que hemos ingresado al sistema de basede datos con nuestro usuario, entonces podemos pedirle al sistema que nosmuestre las bases de datos existentes:

show databases

si necesitamos crear una, por ejemplo prueba, usamos:

create databases prueba

ahora, le indicamos que usaremos dicha base de datos, mediante:

use prueba

y ahors podremos, por ejemplo ver las tablas creadas usando:

show tables

y estamos en posibilidad de crear nuestras tablas, por ejemplo:

create table Productos(id_prod int,descripcion text,precio �oat(9,2),precioVenta �oat(9,2)

);

[email protected] 288 Antonio Carrillo Ledesma, Et alii

Page 291: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

e ingresamos valores:

insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);

y los visualizamos:

select * from Productos;

ahora procedemos hacer lo pertinente para nuestra otra tabla, usando:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �2020/12/01 8:01:00�), (2, 5, �2020/12/01 10:15:00�),(2, 4, �2020/12/01 13:34:00�), (1, 3, �2020/12/01 21:56:00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

Select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)From VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

9.4.2 PostgreSQL

Las bases de datos relacionales son uno de los tipos más populares que existen,y su uso nos permite crear sitios web de toda clase. Entre los sistemas debases de datos relacionales más utilizados se encuentra uno que es conocidocomo PostgreSQL, que dicho sea de paso está entre los más usados a nivelmundial.PostgreSQL, o simplemente Postgres para darle un nombre más pin-

toresco, es un sistema de código abierto de administración de bases de datosdel tipo relacional, aunque también es posible ejecutar consultas que sean

[email protected] 289 Antonio Carrillo Ledesma, Et alii

Page 292: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

no relaciones. En este sistema, las consultas relacionales se basan en SQL,mientras que las no relacionales hacen uso de JSON.Como decíamos, se trata de un sistema de código abierto y además gra-

tuito, y su desarrollo es llevado adelante por una gran comunidad de colabo-radores de todo el mundo que día a día ponen su granito de arena para hacerde este sistema una de las opciones más sólidas a nivel de bases de datos.Dos detalles a destacar de PostgreSQL es que posee data types (tipos

de datos) avanzados y permite ejecutar optimizaciones de rendimiento avan-zadas, que son características que por lo general solo se ven en sistemas debases de datos comerciales, como por ejemplo SQL Server de Microsoft uOracle de la compañía homónima.

Instalación en Debian GNU/Linux Para instalar el paquete usamos:

# apt install postgresql postgresql-client postgresql-doc postgresql-contrib

y ya podemos conectarnos al servidor mediante:

# postgres psql

Ejemplo de uso Una vez que hemos ingresado al sistema de basede datos con nuestro usuario, entonces podemos pedirle al sistema que nosmuestre las bases de datos existentes:

nl

si necesitamos crear una, por ejemplo prueba, usamos:

create databases prueba

ahora, le indicamos que usaremos dicha base de datos, mediante:

nc prueba

y ahors podremos, por ejemplo ver las tablas creadas usando:

nd

[email protected] 290 Antonio Carrillo Ledesma, Et alii

Page 293: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y estamos en posibilidad de crear nuestras tablas, por ejemplo:

create table Productos(id_prod int,descripcion text not null,precio money,precioVenta money,primary key (id_prod)

);

e ingresamos valores:

insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);

y los visualizamos:

select * from Productos;

ahora procedemos hacer lo pertinente para nuestra otra tabla, usando:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �12/01/2020 8:01:00.00�), (2, 5, �12/01/2020 10:15:00.00�),(2, 4, �12/01/2020 13:34:00.00�), (1, 3, �12/01/2020 21:56:00.00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)from VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

[email protected] 291 Antonio Carrillo Ledesma, Et alii

Page 294: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

9.4.3 SQLite

es una herramienta de software libre, que permite almacenar información endispositivos empotrados de una forma sencilla, e�caz, potente, rápida y enequipos con pocas capacidades de hardware, como puede ser una PDA o unteléfono celular. SQLite implementa el estándar SQL92 y también agregaextensiones que facilitan su uso en cualquier ambiente de desarrollo. Estopermite que SQLite soporte desde las consultas más básicas hasta las máscomplejas del lenguaje SQL, y lo más importante es que se puede usar tantoen dispositivos móviles como en sistemas de escritorio, sin necesidad de re-alizar procesos complejos de importación y exportación de datos, ya queexiste compatibilidad al 100% entre las diversas plataformas disponibles, ha-ciendo que la portabilidad entre dispositivos y plataformas sea transparente.

Lenguajes de Programación de SQLite gracias a que SQLite essoftware libre, es posible encontrar una gran cantidad de componentes, li-brerías y drivers para interactuar con SQLite desde una gran diversidad delenguajes y plataformas de programación. Ya sea que estemos utilizandolenguajes modernos como Java, Perl, Python, PHP, Ruby, C#, lenguajesmás antiguos como Pascal, SmallTalk, Clipper, o lenguajes poco conocidoscomo Suneido, REXX, S-Lang, para todos podemos encontrar librerías yejemplos de código para SQLite.http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers ofrece más infor-

mación sobre "wrappers" para SQLite sobre diferentes plataformas y lengua-jes.

Instalación en Debian GNU/Linux Para instalar el paquete usamos:

# apt install pgcli sqlite3 sqlite3-doc sqlitebrowser

y ya podemos iniciar a trabajar, usando

# sqlite3

Ejemplo de uso Una vez que hemos ingresado al sistema de base dedatos con nuestro usuario, entonces podemos pedirle al sistema que cree oabra una base de datos:

sqlite3 prueba.db

[email protected] 292 Antonio Carrillo Ledesma, Et alii

Page 295: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y estamos en posibilidad de crear nuestras tablas, por ejemplo:

create table Productos(id_prod int,descripcion text,precio �oat(9,2),precioVenta �oat(9,2)

);

e ingresamos valores:

insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);

y los visualizamos:

select * from Productos;

ahora procedemos hacer lo pertinente para nuestra otra tabla, usando:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �2020/12/01 8:01:00�), (2, 5, �2020/12/01 10:15:00�),(2, 4, �2020/12/01 13:34:00�), (1, 3, �2020/12/01 21:56:00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)from VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

[email protected] 293 Antonio Carrillo Ledesma, Et alii

Page 296: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

9.4.4 MongoDB

MongoDB (del inglés humongous, "enorme") es un sistema de base de datosNoSQL orientado a documentos de código abierto y escrito en C++, que enlugar de guardar los datos en tablas lo hace en estructuras de datos BSON(similar a JSON) con un esquema dinámico. Al ser un proyecto de códigoabierto, sus binarios están disponibles para los sistemas operativos Windows,GNU/Linux, OS X y Solaris y es usado en múltiples proyectos o implementa-ciones en empresas como MTV Network, Craigslist, BCI o Foursquare.La razón de esto es que MongoDB, al estar escrito en C++, cuenta con

una más que notoria capacidad para aprovechar los recursos de la máquinay, al estar licenciado bajo una licencia GNU AGPL 3.0, es posible adaptarloa nuestras necesidades.Si no conocemos a MongoDB, al principio puede que nos sientamos un

poco perdidos. Al no tener tablas ni nada que se parezca a SQL comoreferencia, tendremos que estudiar un poco su �losofía y características paraentender cómo manejar los datos. Aun así, MongoDB es una seria candidatapara almacenar los datos de nuestras aplicaciones.

Características de MongoDB si tuviéramos que resumir a una laprincipal característica a destacar de MongoDB, sin duda esta sería la ve-locidad, que alcanza un balance perfecto entre rendimiento y funcionalidadgracias a su sistema de consulta de contenidos. Pero sus características prin-cipales no se limitan solo a esto, MongoDB cuenta, además, con otras que loposicionan como el preferido de muchos desarrolladores.Características principales:

� Consultas ad hoc. Con MongoDb podemos realizar todo tipo de con-sultas. Podemos hacer búsqueda por campos, consultas de rangos yexpresiones regulares. Además, estas consultas pueden devolver uncampo especí�co del documento, pero también puede ser una funciónJavaScript de�nida por el usuario.

� Indexación. El concepto de índices en MongoDB es similar al empleadoen bases de datos relacionales, con la diferencia de que cualquier campodocumentado puede ser indexado y añadir múltiples índices secundar-ios.

[email protected] 294 Antonio Carrillo Ledesma, Et alii

Page 297: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Replicación. Del mismo modo, la replicación es un proceso básico enla gestión de bases de datos. MongoDB soporta el tipo de replicaciónprimario-secundario. De este modo, mientras podemos realizar consul-tas con el primario, el secundario actúa como réplica de datos en sololectura a modo copia de seguridad con la particularidad de que los no-dos secundarios tienen la habilidad de poder elegir un nuevo primarioen caso de que el primario actual deje de responder.

� Balanceo de carga. Resulta muy interesante cómo MongoDB puedeescalar la carga de trabajo. MongoDB tiene la capacidad de ejecutarsede manera simultánea en múltiples servidores, ofreciendo un balanceode carga o servicio de replicación de datos, de modo que podemosmantener el sistema funcionando en caso de un fallo del hardware.

� Almacenamiento de archivos. Aprovechando la capacidad de MongoDBpara el balanceo de carga y la replicación de datos, Mongo puede serutilizado también como un sistema de archivos. Esta funcionalidad,llamada GridFS e incluida en la distribución o�cial, permite manipulararchivos y contenido.

� Ejecución de JavaScript del lado del servidor. MongoDB tiene la ca-pacidad de realizar consultas utilizando JavaScript, haciendo que estassean enviadas directamente a la base de datos para ser ejecutadas.

Instalación en Debian GNU/Linux Para instalar el paquete usamos:

# apt install mongodb mongodb-clients mongodb-server

y ya podemos iniciar su uso mediante:

$ mongo

Ejemplo de uso Una vez que hemos ingresado al sistema de base dedatos con nuestro usuario, entonces podemos pedirle al sistema nos muestrelas colecciones existentes (bases de datos), mediante:

db

podemos crear una usando:

[email protected] 295 Antonio Carrillo Ledesma, Et alii

Page 298: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

db.createCollection(prueba)

podemos ver las existentes mediante:

show collections

y le pedimos usar alguna, mediante:

use prueba

y estamos en posibilidad de crear nuestras documentos, por ejemplo:

var miProductos =[

{"_id" : 1, "descripcion" : "Cigarros", "precio" : 25.5,"precioVenta" : 30.0},

{"_id" : 2, "descripcion" : "Refresco", "precio" : 4.5,"precioVenta" : 6.0},];db.Productos.insert(miProductos);

y los visualizamos:

db.Productos.�nd()

ahora procedemos hacer lo pertinente para nuestra otro documento, us-ando:

var miVentas =[

{"_id" : 1, "id_prod" : 1, "Cantidad" : 2, "Fecha" :"2020/12/01 8:01:00"},

{"_id" : 2, "id_prod" : 2, "Cantidad" : 5, "Fecha" :"2020/12/01 10:15:00"},

{"_id" : 3, "id_prod" : 2, "Cantidad" : 4, "Fecha" :"2020/12/01 13:34:00"},

{"_id" : 4, "id_prod" : 1, "Cantidad" : 3, "Fecha" :"2020/12/01 21:56:00"},];db.Ventas.insert(miVentas);db.Ventas.�nd()

[email protected] 296 Antonio Carrillo Ledesma, Et alii

Page 299: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de esta forma, ahora podemos usar Find para hacer el equivalente a unJOIN como en los ejemplos anteriores y mostrar el resultado de la solicitud,mediante:

db.Ventas.�nd().forEach(function (object) {

var commonInBoth=db.Productos.�ndOne({ "_id":object.id_prod} );

if (commonInBoth != null) {print(object.Fecha, object.Cantidad, common-

InBoth.descripcion, commonInBoth.precioVenta, (commonInBoth.precioVenta* object.Cantidad));

}}

);

9.5 Programando desde la Web

Existen diferentes servicios WEB que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso ared y un navegador puedan programar en los más diversos lenguajes, IDEs yTerminales sin hacer instalación alguna en su equipo de cómputo, tableta oteléfono celular.Algunos ejemplos de estos servicios son:

9.5.1 MySQL y MariaDB

Se puede trabajar este manejador de bases de datos desde la red, ingresandoa la dirección: https://www.jdoodle.com/Por ser un servicio en red, no es necesario conocer que bases de datos

hay, ni seleccionar alguna de las existentes para inicar el trabajo en la basede datos. Por lo tanto, sólo creamos las tablas necesarias, agregamos valores yhacemos las operaciones requeridas con la base de datos creada, por ejemplo:Creamos la tabla de Productos e insertamos los valores mediante:

create table Productos(id_prod int,

[email protected] 297 Antonio Carrillo Ledesma, Et alii

Page 300: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

descripcion text,precio �oat(9,2),precioVenta �oat(9,2)

);insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);select * from Productos;

ahora, creamos la tabla de ventas e insertamos los valores mediante:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �2020/12/01 8:01:00�), (2, 5, �2020/12/01 10:15:00�),(2, 4, �2020/12/01 13:34:00�), (1, 3, �2020/12/01 21:56:00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)from VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

9.5.2 PostgreSQL

Se puede trabajar este manejador de bases de datos desde la red, ingresandoa la dirección: https://rextester.com/l/postgresql_online_compilerPor ser un servicio en red, no es necesario conocer que bases de datos

hay, ni seleccionar alguna de las existentes para inicar el trabajo en la basede datos. Por lo tanto, sólo creamos las tablas necesarias, agregamos valores yhacemos las operaciones requeridas con la base de datos creada, por ejemplo:Creamos la tabla de Productos e insertamos los valores mediante:

[email protected] 298 Antonio Carrillo Ledesma, Et alii

Page 301: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

create table Productos(id_prod int,descripcion text not null,precio money,precioVenta money,primary key (id_prod)

);insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);select * from Productos;

ahora, creamos la tabla de ventas e insertamos los valores mediante:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �12/01/2020 8:01:00.00�), (2, 5, �12/01/2020 10:15:00.00�),(2, 4, �12/01/2020 13:34:00.00�), (1, 3, �12/01/2020 21:56:00.00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)from VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

9.5.3 SQLite

Se puede trabajar este manejador de bases de datos desde la red, ingresandoa la dirección: https://www.codechef.com/idePor ser un servicio en red, no es necesario conocer que bases de datos

hay, ni seleccionar alguna de las existentes para inicar el trabajo en la basede datos. Por lo tanto, sólo creamos las tablas necesarias, agregamos valores yhacemos las operaciones requeridas con la base de datos creada, por ejemplo:Creamos la tabla de Productos e insertamos los valores mediante:

[email protected] 299 Antonio Carrillo Ledesma, Et alii

Page 302: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

create table Productos(id_prod int,descripcion text,precio �oat(9,2),precioVenta �oat(9,2)

);insert into Productosvalues (1, �Cigarros�, 25.5, 30.0), (2, �Refresco�, 4.5, 6.0);select * from Productos;

ahora, creamos la tabla de ventas e insertamos los valores mediante:

create table Ventas(id_prod int,cantidad int,fecha timestamp

);insert into Ventasvalues (1, 2, �2020/12/01 8:01:00�), (2, 5, �2020/12/01 10:15:00�),(2, 4, �2020/12/01 13:34:00�), (1, 3, �2020/12/01 21:56:00�);select * from Ventas;

de esta forma, ahora podemos usar SELECT para hacer un JOIN denuestras tablas y mostrar el resultado de la solicitud, mediante:

select Ventas.fecha, Ventas.cantidad, Productos.descripcion,Productos.precioVenta, (Ventas.cantidad * Productos.precioVenta)from VentasINNER JOIN Productos ONVentas.id_prod=Productos.id_prod;

9.5.4 MongoDB

Se puede trabajar este manejador de bases de datos desde la red, ingresandoa la dirección: https://www.jdoodle.com/online-mongodb-terminal/Por ser un servicio en red, no es necesario conocer que bases de datos

hay, ni seleccionar alguna de las existentes para inicar el trabajo en la basede datos. Por lo tanto, sólo creamos las colecciones necesarias, agregamosvalores y hacemos las operaciones requeridas con la base de datos creada, porejemplo:Creamos el document de Productos e insertamos los valores mediante:

[email protected] 300 Antonio Carrillo Ledesma, Et alii

Page 303: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

var miProductos =[

{"_id" : 1, "descripcion" : "Cigarros", "precio" : 25.5,"precioVenta" : 30.0},

{"_id" : 2, "descripcion" : "Refresco", "precio" : 4.5,"precioVenta" : 6.0},];db.Productos.insert(miProductos);db.Productos.�nd()

ahora, creamos documento de ventas e insertamos los valores mediante:

var miVentas =[

{"_id" : 1, "id_prod" : 1, "Cantidad" : 2, "Fecha" :"2020/12/01 8:01:00"},

{"_id" : 2, "id_prod" : 2, "Cantidad" : 5, "Fecha" :"2020/12/01 10:15:00"},

{"_id" : 3, "id_prod" : 2, "Cantidad" : 4, "Fecha" :"2020/12/01 13:34:00"},

{"_id" : 4, "id_prod" : 1, "Cantidad" : 3, "Fecha" :"2020/12/01 21:56:00"},];db.Ventas.insert(miVentas);db.Ventas.�nd()

de esta forma, ahora podemos usar Find para hacer el equivalente a unJOIN como en los ejemplos anteriores y mostrar el resultado de la solicitud,mediante:

db.Ventas.�nd().forEach(function (object) {

var commonInBoth=db.Productos.�ndOne({ "_id":object.id_prod} );

if (commonInBoth != null) {print(object.Fecha, object.Cantidad, common-

InBoth.descripcion, commonInBoth.precioVenta, (commonInBoth.precioVenta* object.Cantidad));

[email protected] 301 Antonio Carrillo Ledesma, Et alii

Page 304: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

}}

);

[email protected] 302 Antonio Carrillo Ledesma, Et alii

Page 305: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

10 Otros Programas de Cómputo

Existe una gran variedad de programas de cómputo que son usados en loscursos de la Facultad de Ciencias, algunos de ellos los podemos agrupar en:

� Otros Programas Matemáticos

� Programas de Visualización y Gra�cación

� Programas de Navegación en la Web

� Compresores y Descompresores de Archivos

� Virtualización

10.1 Otros Programas Matemáticos

Existe una gran variedad de programas matemáticos disponibles para usua-rios ocasionales y avanzados. Entre los que se destacan:

� Xabacus

� Euler

� Geogebra

� Gretl

� Lybniz

� Mathomatic

� Pari/GP

� qliss3d

� RKWard

� XaoS

� Yacas

� BLISS

[email protected] 303 Antonio Carrillo Ledesma, Et alii

Page 306: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Mumpstest test

� nauty

� Netgen

� Eukleides

� Genius

� PSPP

� Pdl

� Yorick

� Gnuplot

� FreeMat

� mathomatic-primes

� OpenAxiom

� Julia

� SageMath

10.2 Programas de Visualización y Gra�cación

Existe una gran variedad de programas de visualización y gra�cación disponi-bles para usuarios ocasionales y avanzados. Entre los que se destacan tene-mos:

� Cabri-Geometer

� GeoGebra

� Sketchpad

� Cindirella

� RyC

[email protected] 304 Antonio Carrillo Ledesma, Et alii

Page 307: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Geup

� GlassFish

� NetLogo

� Gpaint

� GIMP

� Inkscape

� Umbrello

� ImageMagick

� Dia

� X�g

� Scribus

� Blender

� Calibre

� Kdenlive

� Kazam

� Pinta

� Krita

� Pencil2D

� Graphviz

� TextDraw

� Calligra

� feh

[email protected] 305 Antonio Carrillo Ledesma, Et alii

Page 308: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

10.3 Navegadores Web

Existe una gran variedad de programas para navegar en la Web63, entre losque se destacan tenemos:

� Chromium

� Firefox

� Chimera

� Conkeror

� Dillo

� Edbrowse

� Epiphany-browser

� Iceweasel

� Konqueror

� Midori

� Netrik

� NetSurf

� netsurf-fb

� netsurf-gtk

� Surf

� Uzbl63Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnito

para no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.

[email protected] 306 Antonio Carrillo Ledesma, Et alii

Page 309: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Firefox-ESR

� QupZilla

� Arora

� Hv3

� Tor64

10.4 Compresores y Descompresores de Archivos

Existe una gran variedad de programas para comprimir y descomprimirarchivos, entre los que se destacan:

� gzip

� unzip

� zip

� pbzip2

� bzip2

� lbzip2

� arj

� zoo

� unrar

� lhasa

� ncompress64Tor es la sigla de The Onion Router (enrutador de cebolla), el cual es un proyecto

cuyo objetivo es el desarrollo de una red de comunicaciones distribuida de baja latencia ysobrepuesta a Internet, en la que el encaminamiento de los mensajes intercambiados entrelos usuarios no revele su identidad y que además, mantiene la integridad y el secreto de lainformación que vieja en ella. Se puede descargar el proyecto Tor listo para usar sin requeririnstalar nada en el equipo y este se puede descargar de: https://www.torproject.org

[email protected] 307 Antonio Carrillo Ledesma, Et alii

Page 310: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� p7zip

� p7zip-full

� p7zip-rar

� unace

� unace-nonfree

� zutils

� cpio

� pax

� unp

� lzma

� xz-utils pxz

� pixz kgb

� rar

� rarcrack

� zpaq

� bsdtar

� dtrx

� lzop

� tar

[email protected] 308 Antonio Carrillo Ledesma, Et alii

Page 311: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

10.5 Virtualización

Hoy en día tenemos a nuestra disposición varios manejadores de máquinasvirtuales (MV) que nos permiten crear, usar y optimizar máquinas virtuales(véase apéndice 16). Algunos manejadores son los siguientes:

� Virtualbox: Software desarrollado por Oracle. Se trata de un Softwaremultiplataforma capaz de virtualizar prácticamente la totalidad de sis-temas operativos con arquitectura x86/amd64. Es la máquina virtualmultiplataforma, la base de este Software dispone de una la licenciaGPL2 (véase apéndice 14.1.1), mientras que el pack de extensiones queañaden funcionalidades estan bajo licencia privativa. Virtualbox esgratuito para un uso no comercial.

� Vmware Workstation Player: Software privativo multiplataforma de-sarrollado por EMC corporation, es utilizado ampliamente en el entornoprofesional en las áreas del Cloud Computing entre muchas otras. Aligual que Virtualbox, esta máquina virtual nos permite virtualizar unagran diversidad de sistemas operativos. Vmware dispone de muchassoluciones de virtualización y prácticamente todas son de pago, no obs-tante Vmware Workstation Player es totalmente gratuita para un usono comercial.

� Parallels: Aunque se trata de una máquina virtual multiplataforma,es usada frecuentemente por los usuarios del sistema operativo OS Xde Apple que desean virtualizar el sistema operativo Windows. Estamáquina virtual es de pago y únicamente puede virtualizar los sistemasoperativos Windows y Mac OS.

� Windows Virtual PC: Software gratuito y privativo propiedad de Mi-crosoft que se puede usar tanto en Windows como en Mac OS. VirtualPC esta destinado únicamente a Virtualizar sistemas operativos Win-dows.

� QEMU/KVM: Software libre multiplataforma que dispone de licen-cia GPL (véase apéndice 14.1.1). QEMU permite virtualizar un grannúmero de sistemas operativos y además soporta varios tipos de arqui-tectura como por ejemplo X86, x86-64, MIPS, Arm, PowerPC, etc. Elrendimiento que ofrece QEMU es igual o superior a las opciones quehemos mencionado con anterioridad. Una gran ventaja de QEMU que

[email protected] 309 Antonio Carrillo Ledesma, Et alii

Page 312: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

permite usar una máquina virtual sin necesidad de tener privilegiosroot.

10.6 Desde la Nube

Existen diferentes servicios Web65 que permiten editar, compilar y ejecutarcódigo de diversos lenguajes y paquetes desde el navegador, esto en aras deque los estudiantes y profesores que cuenten con algún sistema de acceso a redy un navegador puedan programar en diversos lenguajes, IDEs y Terminalessin hacer instalación alguna en su equipo de cómputo, tableta o teléfonocelular.Algunos ejemplos de estos servicios son:

� https://www.rollapp.com/apps/data%20analysis

� https://www.rollapp.com/apps/development

� https://www.rollapp.com/apps/graphics

� https://www.rollapp.com/apps/o¢ ce

� https://www.rollapp.com/apps/utilities

� https://www.rollapp.com/apps/education

65Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de Internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.

[email protected] 310 Antonio Carrillo Ledesma, Et alii

Page 313: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

11 Seguridad, Privacidad y Vigilancia

Ante el constante aumento -explosivo- en el uso de dispositivos conectados ainternet como computadoras personales, Laptops, tabletas y teléfonos celu-lares, expertos en ciberseguridad advierten un entorno propicio para queprosperen los cibercriminales y que, tanto individuos como empresas, se en-cuentren expuestos a múltiples amenazas de ciberseguridad.En la actualidad, aproximadamente la mitad de la población mundial

accede de algún modo a internet. Con tantos accesos concurrentes a la redde redes, la posible amenaza de seguridad a los sistemas informáticos crecey se complejiza, a pesar de las diversas y especializadas maneras de contra-rrestarlas. Por su propia naturaleza, una conexión a internet hace que tuequipo de cómputo quede expuesto a ataques y pueda ser accesible por otroequipo, llegando a tener acceso a tu información.

¿Por qué?

� En muchas ocasiones, los usuarios no cuentan con la su�ciente sensibi-lización sobre su exposición al riesgo, o bien, no están familiarizados conlas herramientas y/o capacitación de sus organizaciones para preveniry enfrentar amenazas de ciberseguridad.

� Los usuarios de internet a menudo utilizan redes Wi-Fi no seguras yusan dispositivos que no están con�gurados con los controles de políti-cas de seguridad básicos, lo cual los vuelve excepcionalmente vulnera-bles a ataques cibernéticos.

� Es común que los usuarios compartan dispositivos (computadoras, table-tas, teléfonos) para educación, trabajo y esparcimiento aumentando conello su exposición a amenazas de ciberseguridad.

� Los piratas informáticos eligen como blanco la dependencia, cada vezmayor, de las personas con respecto a las herramientas digitales, ademásde que más tiempo en línea incrementa la potencial exposición de losusuarios a amenazas de ciberseguridad.

� Los piratas informáticos son extremadamente creativos al idear for-mas de aprovecharse de los usuarios y de la tecnología para acceder acontraseñas, redes y datos, a menudo sirviéndose de herramientas de

[email protected] 311 Antonio Carrillo Ledesma, Et alii

Page 314: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

ingeniería social y de temas y tendencias populares para tentar a losusuarios a tener comportamientos inseguros en línea.

Todo lo anterior, ha creado una enorme super�cie de exposición a ataquescibernéticos dirigidos a los usuarios, la red, la computadora portátil, el telé-fono inteligente, la tableta, etc. con la intención de cometer delitos informáti-cos. Por ello estos lineamientos generales de ciberseguridad son sugeridospara el uso seguro de redes y dispositivos de telecomunicaciones en apoyoal usuario, contiene recomendaciones sencillas y prácticas para fomentar unabuena salud cibernética de los dispositivos utilizados para el trabajo a distan-cia, educación y diversión; y promover la ciberseguridad entre las personas ysus organizaciones.La seguridad de la información en la red es más que un problema de

protección de datos, y debe estar básicamente orientada en asegurar la in-formación importante de las personas, de las organizaciones y la propiedadintelectual. Los riesgos de la información están presentes cuando con�uyenfundamentalmente dos elementos: las amenazas de ataques, y las vulnera-bilidades de la tecnología; conceptos íntimamente relacionados donde no esposible ninguna consecuencia sin la presencia conjunta de estos.

¿Qué es la privacidad y por qué es importante? Consideramosque la privacidad debería ser un derecho básico y una protección necesariaen la era digital para evitar la victimización y la manipulación. Una sociedadno puede tener libertad sin privacidad. Puede parecer un lujo, pero es im-portante para el bienestar de una sociedad libre y justa. Muchos gobiernosy empleadores hacen vigilancia66 activa a sus ciudadanos o empleados paramonitorear ideas, discusiones o disensiones no deseadas. Los infractores son66¿Qué es vigilancia? Vigilancia es el seguimiento de las comunicaciones, acciones o

movimientos de una persona por un gobierno, empresa, grupo o persona.¿Cuándo es legal la vigilancia? En general, cuando es selectiva, se basa en indicios

su�cientes de conducta delictiva y está autorizada por una autoridad estrictamente inde-pendiente, como un juez.¿Qué es la vigilancia masiva? La vigilancia masiva indiscriminada es el control de las

comunicaciones por internet y telefónicas de un gran número de personas -a veces de paísesenteros- sin que existan indicios su�cientes de conducta delictiva. Este tipo de vigilanciano es legal.¿Qué datos recogen? Algunos gobiernos almacenan y analizan historiales de navegación,

búsquedas en internet, mensajes de correo electrónico, mensajes instantáneos, conversa-ciones por Webcam y llamadas telefónicas. También reúnen metadatos -datos sobre datos-,como destinatarios de correo electrónico, horas de llamadas y registros de ubicación.

[email protected] 312 Antonio Carrillo Ledesma, Et alii

Page 315: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

luego procesados o reeducados para alinearse con lo que las autoridades con-sideran apropiado. Sin el bene�cio del anonimato, el deseo de los ciudadanosde expresar sus pensamientos se reprime efectivamente.En la era digital, la privacidad va más allá del anonimato, al protege a

las personas de la victimización y la manipulación. La sociedad ha adop-tado la tecnología para educarse, comunicarse, realizar negocios y formarrelaciones. Nuestros puntos de vista y opiniones están fuertemente in�uen-ciados por lo que aprendemos de las fuentes de noticias locales, nacionales einternacionales.Contribuimos en gran medida al panorama digital a través de nuestras

acciones y decisiones. Nuestras huellas digitales están en todas partes. Cuen-tan una historia de a dónde vamos, qué hacemos, quién nos gusta o no, yqué pensamos. Se crean con cada Clic que hacemos y con cada archivo,aplicación y dispositivo que usamos. Cuando esos datos se agregan, puedenproporcionar información tremendamente poderosa sobre una persona o co-munidad, lo su�ciente como para construir personas complejas y precisas.Esta información se usa comúnmente para manipular las creencias y com-

portamientos de las personas. Las compras en línea son un ejemplo perfecto:el Marketing dirigido y la publicidad basada en datos es un gran negocioporque logra que la gente gaste dinero. Todo se reduce a saber lo que laspersonas hacen, piensan, dicen, consumen y miran67. Tener acceso a grandescantidades de datos privados les brinda a los anunciantes la capacidad decrear mensajes oportunos y signi�cativos que atraigan a las personas a loscomportamientos deseados.Pero si los minoristas pueden hacer que las personas compren cosas que

no necesitan, ¿para qué más se pueden usar los datos privados? ¿Qué talcambiar lo que piensa la gente, a quiénes apoyan, sus opiniones políticas, qué

¿Qué hacen con mis datos? Se guardan en grandes centros de datos donde unos al-goritmos informáticos pueden hacer búsquedas en ellos y analizarlos. También están adisposición de las autoridades de las agencias de seguridad a través de potentes bases dedatos como XKeyscore.67Has notado que si buscas algo en un buscador comercial -como Google, Yahoo, Bing,

Ask, Baidu, etc.-, minutos después en tus distintas redes sociales aparecerán mensajes rela-cionados a tu búsqueda. Esto ocurre porque los buscadores comerciales en cada búsquedaque haces, vídeo o anuncios que ves o en los que haces Clic comparten tu ubicación, lossitios que visitas, los dispositivos, navegadores y aplicaciones que usas para acceder a losservicios del buscador con �nes comerciales.Una opción para nuestra privacidad es usar buscadores que no dejan rastro de nuestras

búsquedas como puede ser: DuckDuckGo.

[email protected] 313 Antonio Carrillo Ledesma, Et alii

Page 316: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

debería convertirse en ley y en qué creer? El uso de información privada se haaprovechado durante mucho tiempo para promover, vilipendiar o perseguira diversas religiones, partidos políticos y líderes.En las últimas décadas, ha cambiado la forma en que los ciudadanos del

mundo reciben sus noticias. Los segmentos de noticias y entretenimiento hancomenzado a mezclarse, a menudo informando hechos con adornos e historiasobstinadas para in�uir en las opiniones públicas. Cuanta más informaciónprivada se conozca, más fácil será in�uir, convencer, engatusar o amenazar alas personas.Según informes de Oxford Internet Institute, a pesar de los esfuerzos para

combatir la propaganda computacional, el problema ha crecido a gran escala.El mayor crecimiento proviene de propaganda política que es difundida juntocon desinformación y noticias basura alrededor de los períodos electorales. Seincrementa el número de campañas políticas a nivel mundial que usan Bots,noticias basura y desinformación para polarizar y manipular a los votantes.Un velo de privacidad puede proteger tanto los bene�cios como los abusos.

La tendencia actual es establecer y ampliar los derechos de privacidad enbene�cio de los ciudadanos. Esto reduce la victimización, manipulación yexplotación digitales al proteger los datos con�denciales y permite actividadesque promueven la libertad y la libertad de expresión.Sin leyes, los gobiernos y las empresas han desarrollado prácticas que

aprovechan el poder de recopilar información con�dencial y utilizarla ensu propio bene�cio. Las nuevas leyes de privacidad están cambiando elpanorama y muchas empresas éticas reducen sus esfuerzos de cobranza paraser más conservadoras y respetuosas. También muestran �exibilidad en laforma en que tratan, protegen y comparten dichos datos.Algunos gobiernos y agencias también están reduciendo la recolección,

limitando la retención o terminando los programas domésticos que los ciu-dadanos consideran invasivos. Al mismo tiempo, los organismos encargadosde hacer cumplir la ley quieren conservar la capacidad para detectar e inves-tigar delitos, para proteger la seguridad de los ciudadanos.También se hace un mal uso de la privacidad. Es la herramienta preferida

por quienes cometen delitos y permite que los actos atroces contra otrosno se detecten. Puede ocultar actos terribles y permitir una coordinacióngeneralizada entre el fraude, abuso y terror.Se argumenta que las puertas traseras digitales, las claves maestras y los

algoritmos de cifrado que obtienen acceso a los sistemas y la informaciónprivada ayudarían en la detección legal de actividades delictivas y en las

[email protected] 314 Antonio Carrillo Ledesma, Et alii

Page 317: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

investigaciones para identi�car a los terroristas. Aunque suena como unagran herramienta contra los delincuentes, es una caja de Pandora.Las puertas traseras y las llaves maestras no limitan el acceso para una

investigación especí�ca donde existe una causa probable, sino que permitenuna vigilancia generalizada68 y la recolección de datos de toda una población,incluidos los ciudadanos respetuosos de la ley. Esto viola el derecho de laspersonas a la privacidad y abre la puerta a la manipulación y el enjuiciamientopolítico. La capacidad de leer cada texto, correo electrónico, mensaje yconversación en línea para "monitorear" a la población crea un camino clarohacia el abuso. El riesgo de control y explotación es real.Incluso para aquellos que no tienen ninguna objeción a que su gobierno

tenga acceso, debemos considerar el hecho de que tales puertas traseras yclaves maestras serían buscadas por ciberdelincuentes y otros actores delestado-nación. Ningún sistema es infalible. Con el tiempo, los delincuentesencontrarían y utilizarían estas herramientas en detrimento de la comunidaddigital mundial. Algunas puertas traseras podrían valer decenas de miles demillones de dólares para el comprador adecuado, ya que podrían desbloquearun poder inimaginable para apoderarse de la riqueza, afectar a la gente,dañar naciones, socavar la independencia y reprimir el pensamiento libre.Proteger la privacidad no se trata de ocultar información. Se trata de la

capacidad de liberarse de in�uencias no deseadas, de la tiranía y de comu-

68El 5 de junio de 2013, el exanalista de la CIA y de la NSA Edward Snowden decidiórevelar la existencia de programas de vigilancia sobre las comunicaciones de millones deciudadanos de todo el mundo. A través de The Guardian y The Washington Post, supi-mos que, en nombre de la seguridad y sin ningún control judicial, la NSA y el gobiernobritánico habían rastreado e-mails, llamadas telefónicas y mensajes encriptados. Empresascomo Facebook, Google y Microsoft habían sido obligadas a entregar información de susclientes por órdenes secretas de la NSA. Esta misma agencia grabó, almacenó y analizólos �metadatos�de las llamadas y de los mensajes de texto enviados en México, Kenia yFilipinas. Incluso llegaron a espiar el móvil de la canciller alemana Angela Merkel.Snowden hizo las �ltraciones a la prensa desde Hong Kong y actualmente vive en Rusia,

donde se le concedió asilo. No puede volver a su país porque está acusado de revelarinformación clasi�cada a personas no autorizadas y de robo de propiedad del gobiernofederal. Para unos es un héroe y para otros un traidor, gracias a las revelaciones de Snow-den la opinión pública es más consciente de su derecho a la privacidad y ha reaccionadooponiéndose al espionaje masivo.Aunque queda un largo camino para asegurar que los Gobiernos no invadan la vida

privada de las personas, los tribunales han declarado ilegales algunos aspectos de estosprogramas y las empresas tecnológicas han tenido que posicionarse ante un escándalocapaz de dañar seriamente su reputación.

[email protected] 315 Antonio Carrillo Ledesma, Et alii

Page 318: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

nicarse con los demás de formas que desafíen el statu quo. La privacidadprotege a las personas, pero también los cimientos de una sociedad libre. Laprivacidad no es un tema fácil y no existe una solución perfecta. Es unasituación dinámica y seguirá cambiando con el sentimiento público.Todos quieren cierto nivel de discreción, con�dencialidad y espacio. Nadie

quiere que se expongan sus contraseñas, �nanzas familiares, detalles de rela-ciones personales, historial médico, ubicación, compras y discusiones pri-vadas. Las personas tampoco disfrutan de verse inundadas de Spam, Phi-shing y llamadas de ventas incesantes. La privacidad no se trata necesaria-mente de ocultar algo, sino de limitar la información a quienes tienen derechoa saber.Muy poca privacidad puede socavar la libertad de expresión, la libertad

y la denuncia de victimizaciones. También empodera a entidades poderosaspara manipular el mundo digital de las personas para coaccionarlas, mani-pularlas y victimizarlas. Demasiada privacidad puede permitir que los actorescriminales prosperen y se escondan de las autoridades. Debe lograrse unequilibrio69.Algunos gobiernos y empresas tecnológicas quieren que aceptemos que no

tenemos derechos cuando estamos en internet. Que cuando usamos el teléfonoo entramos en nuestra cuenta de correo electrónico, todo lo que hacemos odecimos les pertenece. No permitiríamos este grado de intrusión en nuestravida fuera de internet, así que no debemos permitirlo dentro.Cuando los gobiernos no protegen los derechos humanos, sólo la acción

de la gente común y corriente puede hacer que las cosas cambien y que losresponsables de los abusos rindan cuentas. Muchas organizaciones trabajanpara que los gobiernos prohíban la vigilancia masiva y el intercambio ilegal de

69Los gobiernos nos enfrentan a un dilema falso: seguridad o libertad. En un estado dederecho, donde las leyes equilibran ambos conceptos, las personas son inocentes hasta quese demuestra lo contrario y tienen derecho a que se respete su vida privada. Por tanto, antesde violar estos derechos, los gobiernos deben de tener indicios de que se está cometiendoun delito. No pueden buscar pruebas aleatoriamente en nuestras comunicaciones privadasantes de que se cometa ese delito.Varios países dan "carta blanca" a la vigilancia indiscriminada en sus leyes. En Francia

se permite interceptar masivamente comunicaciones, retener información durante largosperíodos de tiempo y se ha eliminado la autorización judicial previa. También ReinoUnido ha introducido en su legislación mayores poderes de espionaje. Polonia ha otorgadopoderes de vigilancia incompatibles con respecto a la privacidad a la policía y a otrasagencias. Otros países como China o Rusia también vigilan internet con total desprecio ala intimidad de las personas.

[email protected] 316 Antonio Carrillo Ledesma, Et alii

Page 319: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

información con�dencial. Esta será una larga lucha no exenta de di�cultades,pero cuyo impulso va creciendo con el tiempo.Las amenazas, en un entorno dinámico de interconectividad, pueden venir

de cualquier parte, sea interna o externa, e íntimamente relacionada con elentorno de las organizaciones. Las vulnerabilidades son una debilidad enla tecnología o en los procesos asociados con la información, y como tal, seconsideran características propias de los sistemas o de la infraestructura quelos soporta.Las personas o usuarios de internet que emplean las tecnologías para

vulnerar los sistemas en la red, robar información y/o infectarlos con com-portamientos dudosos, son comúnmente conocidos como Hackers. Su formade actuar, por lo general, determina su clasi�cación en:

� Hacker de Sombrero Blanco (White Hat): éticos, expertos en seguridadinformática, especializados en realizar test de intrusión y evaluacionesde seguridad.

� Hacker de Sombrero Negro (Black Hat): también conocidos como Crac-kers, vulneran los sistemas de información con �nes maliciosos.

� Hacker de Sombrero Gris (Grey Hat): en ocasiones vulneran la ley, yde forma general no atacan malintencionadamente o con intereses per-sonales, sino que sus motivaciones se relacionan a protestas o desafíospersonales.

� Hacker de Sombrero Verde (Green Hat): son novatos que pueden evolu-cionar y buscan convertirse en expertos.

� Hacker de Sombrero Azul (Blue Hat): son personas expertas que se lespaga para probar Software en busca de errores antes de que éste salgaal mercado.

Para una entidad, la fuga de información provocada por el actuar dealgunos de estos usuarios de la red, puede ocurrir deliberadamente comoresultado de una acción intencional de algún empleado descontento, comoconsecuencia de un ciberataque, o inadvertidamente, por un colaborador des-prevenido víctima de un Software malicioso.Una de las principales amenazas para los dispositivos tecnológicos utiliza-

dos para el trabajo y estudio a distancia es el Malware, también conocido

[email protected] 317 Antonio Carrillo Ledesma, Et alii

Page 320: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

como Software o código malicioso. Éste se de�ne como cualquier programainformático que se coloca de forma oculta en un dispositivo, con la intenciónde comprometer la con�dencialidad, integridad o disponibilidad de los datos,las aplicaciones o el sistema operativo.Los tipos más comunes de amenazas de Malware incluyen virus, gusanos,

troyanos, Rootkits y Spyware. Las amenazas de Malware pueden infectarcualquier dispositivo por medio del correo electrónico, los sitios Web, lasdescargas y el uso compartido de archivos, el Software punto a punto y lamensajería instantánea.Además, existen amenazas relacionadas con la ingeniería social como el

Phishing, Smishing y Vishing, por medio de los cuales los atacantes intentanengañar a las personas para que revelen información con�dencial o realicenciertas acciones, como descargar y ejecutar archivos que parecen ser benignos,pero que en realidad son maliciosos.

Seguridad TIC La seguridad TIC (Information Technology Security o ITSecurity) está de actualidad, ya que cualquier profesional o empresa que uselas Tecnologías de la Información y de la Comunicación, debe situarse en lavanguardia de la tecnología.Pero, ¿qué signi�ca seguridad TIC?, ¿qué es? La seguridad TIC es la

responsable de implantar las medidas de seguridad necesarias para procurarla protección de la información a través de diferentes tipos de tecnología.Así, es capaz de proteger los datos personales y de las empresas, tanto deformatos electrónicos o digitales, como en papel.Seguramente, más de una vez han oído hablar de la palabra ciberseguri-

dad como si fuera equivalente de seguridad TIC. Pero nada más lejos dela realidad: la ciberseguridad es un subtipo de la seguridad TIC. De estemodo, la ciberseguridad, es la encargada de la protección de los datos de laorganización respecto a los posibles ataques que tengan como origen internet.Pero, de todas formas, la información y todos los datos personales y de

las empresas, no sólo se enfrentan a problemas de seguridad en internet, sinoque también fuera de él. El modelo de defensa debe abarcar:

� Políticas, procedimientos y concientización

� Seguridad física

� Seguridad de perímetro

[email protected] 318 Antonio Carrillo Ledesma, Et alii

Page 321: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Seguridad de la red

� Seguridad del equipo

� Seguridad de las aplicaciones

� Seguridad de los datos

Amenazas Físicas y sus Repercusiones para la Seguridad TIC Es-tas, pueden darse por diversos motivos. Así, es posible encontrar las gene-radas por las radiaciones electromagnéticas debidas a un teclado inalámbricoo el mismo acceso libre a la red Wi-Fi.Dentro de estas redesWi-Fi están los Sni¤ers, que no son más que sistemas

que, por decirlo de alguna manera, recopilan cualquier dato que encuentrende los usuarios. Por lo tanto, son ideales para realizar auditorías en laspropias redes, para corroborar y veri�car el trá�co de una organización yademás, monitorizar el comportamiento que tiene dentro de la propia red ysus movimientos.No obstante, si un Hacker encuentra un acceso, con los Sni¤er, podría

apoderarse de todos los datos del usuario y contraseñas, por lo que el sistemano es demasiado adecuado ni �able. Es por ello, que no es recomendableutilizar este sistema en las empresas, ya que puede suponer un grave problemapara la seguridad de la información que se esté gestionando de esta manera.Es usual encontrarse Sni¤ers, por ejemplo, en las universidades, con ob-

jeto de evitar que se conecten a la red Wi-Fi personas que no sean del propiocentro y dañen el sistema.Otra de las amenazas físicas que podemos encontrar y que en realidad, no

puede evitarse, es la debida a los accidentes naturales. Como es evidente, setrata de que tenga lugar un accidente natural en el lugar donde se encuentreel Hardware, de manera que se dañe a consecuencia de un incendio, humedad,apagones, etc.

Amenazas Lógicas Este tipo de amenazas, son programas que han sidodiseñados explícitamente para dañar el sistema. Básicamente, se aprovechande cualquier vulnerabilidad, fallo o debilidad que exista en un sistema, parapoder atacarlo y, �nalmente, acceder a él.Así, se pueden encontrar dos tipos:

[email protected] 319 Antonio Carrillo Ledesma, Et alii

Page 322: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Intencionados: se trata de programas que tienen como objetivo hacerdaño, como por ejemplo los Malware o Software malicioso, los Spyware,Jokes, Virus, Backdoors, Dialers, etc. entre otros.

� No intencionados: este tipo, tiene lugar cuando un programador cometealguna clase de error o fallo en la programación, dando lugar, por ejem-plo a Bugs o Exploits.

Amenazas del Propio Usuario Este punto es el más sensible. Normal-mente, en cualquier empresa, los empleados, o usuarios en sí son los eslabonesmás débiles en lo que respecta a la seguridad TIC.Esto es, cualquier usuario de una empresa trabaja con datos, indepen-

dientemente del permiso que tenga para gestionarlos, editarlos o veri�carlos,pues se trata de una cadena. Así, encontramos usuarios que, por diversosmotivos, son la fuente de los principales fallos de seguridad TIC que tienenlugar en una empresa, y son a los que se les suele denominar eslabones débiles.Entonces, es fundamental que sepan la forma en la que hay que proceder,

con objeto de poder evitar cualquier tratamiento erróneo de los datos.Este tipo de usuarios suele actuar de dos formas:

� Activa: aquí, el usuario causa daño de manera consciente, bien seapor dañar o por sustraer información o datos especí�cos de la empresa.Como ejemplos, tenemos a los Hackers, antiguos empleados o piratasinformáticos.

� Pasiva: cuando daña al sistema sin intención de hacerlo, por falta deformación, conocimiento o por querer acceder a una información a laque no tiene acceso. Por ello, es preciso establecer niveles de permisopara los accesos a los sistemas de gestión documental.

Las Vulnerabilidades y Exposiciones Comunes De manera global,la última década ha sido testigo del cambio de paradigma en que los ata-cantes buscan explotar vulnerabilidades dentro de las organizaciones y lasinfraestructuras de redes. Con el �n de contrarrestar estos ataques, laspolíticas de seguridad persiguen constantemente aprender de ellos para estarpreparados lo mejor posible, y en este sentido, intentar garantizar con�anzay tranquilidad a los usuarios de la red, sobre el empleo de sus datos, �nanzasy propiedades intelectuales.

[email protected] 320 Antonio Carrillo Ledesma, Et alii

Page 323: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Los ataques de seguridad vienen en muchas formas y usan varios puntosde entrada. Cada tipo de ataque viene en varios tipos, ya que generalmentehay más de una forma en que se pueden con�gurar o camu�ar en función dela experiencia, los recursos y la determinación del pirata informático.Las Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities

and Exposures, CVE70) que tienen los distintos sistemas operativos (pro-ductos), es una lista de información registrada sobre vulnerabilidades deseguridad conocidas, en la que cada referencia tiene un número de identi-�cación llamada CVE-ID, descripción de la vulnerabilidad, que versiones delSoftware están afectadas, posible solución al fallo (si existe) o como con�-gurar para mitigar la vulnerabilidad y referencias a publicaciones o entradasde foros o Blogs donde se ha hecho pública la vulnerabilidad o se demues-tra su explotación. Además suele también mostrarse un enlace directo ala información de la base de datos de vulnerabilidades (https://nvd.nist.gov,https://openssf.org y https://docs.aws.amazon.com/security), en la que pue-den conseguirse más detalles de la vulnerabilidad y su valoración.El mundo está cada vez más interconectado y, como resultado de esto,

la exposición a las vulnerabilidades de seguridad también ha aumentadodramáticamente. Las complejidades de mantener las plataformas de cóm-puto actuales hacen que sea muy difícil para los desarrolladores cubrir cadapunto de entrada potencial. En 2019 hubo un promedio de más de 45 vul-nerabilidades y exposiciones comunes registradas por día y estas siguen enaumento año con año.El CVE-ID ofrece una nomenclatura estándar para identi�cación de la

vulnerabilidad de forma inequívoca que es usada en la mayoría de repositoriosde vulnerabilidades.Es de�nido y es mantenido por The MITRE Corporation (por eso a ve-

ces a la lista se la conoce por el nombre MITRE CVE List) con fondos dela National Cyber Security Division del gobierno de los Estados Unidos deAmérica. Forma parte del llamado Security Content Automation Protocol.

70https://www.cvedetails.com/https://www.cvedetails.com/top-50-products.phphttps://thebestvpn.com/vulnerability-alerts/Hay que notar que en la base de datos se diferencian distintos productos de Windows

(como Windows 7.0 u 8.1) pero no se hace lo mismo con los demás productos (por ejemplopara Debian GNU/Linux están los errores desde 1999 a la fecha) con lo que es engañosa lacomparación del número vulnerabilidades para un sistema operativo con tantas versionesgeneradas en dicho tiempo con otro con un tiempo de vida corto.

[email protected] 321 Antonio Carrillo Ledesma, Et alii

Page 324: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Por otro lado, como parte de las amplias revelaciones sobre vigilancia ma-siva �ltradas en 2013, 2014 y años posteriores, se descubrió que las agencias deinteligencia estadounidenses y británicas, la Agencia de Seguridad Nacional(NSA, por sus siglas en inglés) y el Cuartel General de Comunicaciones delGobierno (GCHQ, por sus siglas en inglés), respectivamente, tienen acceso alos datos de los usuarios de dispositivos Android. Estas agencias son capacesde leer casi toda la información del teléfono como los SMS, geolocalización,correos, notas o mensajes.Documentos �ltrados en enero de 2014, revelaron que las agencias inter-

ceptan información personal a través de internet, redes sociales y aplicacionespopulares, como Angry Birds, que recopilan información para temas comer-ciales y de publicidad. Además, según The Guardian, el GCHQ tiene unawiki con guías de las diferentes aplicaciones y redes de publicidad para saberlos diferentes datos que pueden ser interceptados. Una semana después desalir esta información a la luz, el desarrollador �nlandés Rovio, anunció queestaba reconsiderando sus relaciones con las distintas plataformas publici-tarias y exhortó a la industria en general a hacer lo mismo.Las informaciones revelaron que las agencias realizan un esfuerzo adi-

cional para interceptar búsquedas en Google Maps desde Android y otrosteléfonos inteligentes para recopilar ubicaciones de forma masiva. La NSAy el GCHQ insistieron en que estas actividades cumplen con las leyes na-cionales e internacionales, aunque The Guardian a�rmó que «las últimasrevelaciones podrían sumarse a la creciente preocupación pública acerca decómo se acumula y utiliza la información, especialmente para aquellos fuerade Estados Unidos de Norte América, que gozan de menos protección entemas de privacidad que los estadounidenses» .

Formación en Seguridad de la Información Finalmente, los cursos deformación respecto a la seguridad de la información se tornan fundamentalespara poder manejarse y recordar cualquier norma que sea imprescindible.Por ejemplo, la gestión segura de las contraseñas, del correo electrónico, lagestión de la documentación, etc.Pero, de todas formas, la información y todos los datos personales y de

las empresas, no sólo se enfrentan a problemas de seguridad en internet,sino que también fuera de él. Algunas de estas amenazas, son las que vana desarrollarse en este capítulo, pero si quiere conocer la norma ISO porexcelencia para procurar la seguridad de la información en las empresas, le

[email protected] 322 Antonio Carrillo Ledesma, Et alii

Page 325: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

recomendamos que visite por ejemplo la página sobre la norma ISO 27001 oCybersecurity Framework.

Alfabetismo Digital Según la organización Common Sense Media, el al-fabetismo digital es la capacidad de encontrar, identi�car, evaluar y usarla información encontrada en medios digitales de manera efectiva. Básica-mente, es la misma de�nición tradicional de alfabetismo, pero adaptada a laera digital y a fuentes no tradicionales de información.El anuario del 2016 de la UNESCO en "Alfabetización mediática e in-

formacional para los objetivos de desarrollo sostenible" hace referencia a las"Cinco leyes de la alfabetización mediática e informacional":

1. La información, la comunicación, las bibliotecas, los medios de comu-nicación, la tecnología, el internet y otras fuentes de información seencuentran en la misma categoría. Ninguna es más relevante que laotra ni debe ser tratada como tal.

2. Cada ciudadano es un creador de información o conocimiento y tieneun mensaje. Todas las personas deben estar facultadas para acceder anueva información y expresarse.

3. La información, el conocimiento y los mensajes no siempre están exen-tos de valores o prejuicios. Cualquier conceptualización, uso y apli-cación de alfabetismo digital debe presentar este hecho de maneratransparente y comprensible para todos los ciudadanos.

4. Todo ciudadano desea conocer y comprender información, conocimien-tos y mensajes nuevos, así como comunicarse; y sus derechos nuncadeben ser comprometidos.

5. El alfabetismo digital es un proceso dinámico de experiencias vividas.Se considera completa cuando incluye conocimientos, habilidades y ac-titudes, cuando abarca el acceso, la evaluación, el uso, la producción yla comunicación de información, de contenido mediático y tecnológico.

De igual manera, en el anuario de la UNESCO se exponen 10 habilidadesque deben desarrollarse para lograr la alfabetización digital, o como lo de�neel anuario, alfabetización mediática e informacional. Estas habilidades son:

� Interactuar con información referente a los medios y la tecnología.

[email protected] 323 Antonio Carrillo Ledesma, Et alii

Page 326: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Ser capaz de aplicar habilidades técnicas de comunicación de informa-ción para procesar la información y producir contenido mediático.

� Utilizar, de manera ética y responsable la información y comunicar sucomprensión o conocimiento adquirido a una audiencia o lectores enuna forma y medio apropiados.

� Extraer y organizar información y contenidos.

� Evaluar de forma crítica la información y el contenido presentado enlos medios y otras fuentes de información, incluyendo medios en línea,en términos de autoridad, credibilidad, propósito y posibles riesgos.

� Localizar y acceder a información de contenido relevante.

� Sintetizar las ideas extraídas del contenido.

� Comprender las condiciones bajo las cuales se pueden cumplir esas ideaso funciones.

� Comprender el papel y las funciones de los medios, incluyendo mediosen línea, en la sociedad y su desarrollo.

� Reconocer y articular la necesidad de información y de los medios.

Internet ha sido una herramienta que ha transformado y de�nido la co-municación en el siglo XXI. A través de sus múltiples interfaces, internetha tenido éxito, para que tanto individuos como organizaciones se conecten,se comuniquen e intercambien información. Las plataformas tecnológicas ylas redes sociales han acelerado la velocidad a través de la cual los usuariospueden acceder y recuperar información, simpli�cando el proceso en el quelas noticias se difunden, actualizan e incluso se comunican. Hoy en día, esprácticamente instantáneo darse cuenta de un evento de noticias sin que seanecesariamente comunicado por medios tradicionales como los periódicos ola radio.La facilidad a través de la cual las personas ahora pueden comunicarse ha

traído una sensación de democratización a la libertad de expresión. Trans-formar la libertad de expresión ha posibilitado nuevas capacidades para creary editar contenido, generando nuevas oportunidades para el periodismo al-ternativo; nuevas capacidades de organización y movilización (que apoyan en

[email protected] 324 Antonio Carrillo Ledesma, Et alii

Page 327: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

gran medida otros derechos, como la libertad de asociación); y nuevas posi-bilidades para innovar y generar desarrollo económico (apoyando los derechossociales y económicos).Sin embargo, esta facilidad en el intercambio y la creación de información

también presenta desafíos tanto para las organizaciones como para las per-sonas que son usuarias de dichas redes, tanto como fuente, como usuario �nal.Aunque estos desafíos varían en escala, todos son igualmente signi�cativos.Algunos de los más destacados incluyen el desafío a la calidad super�cial dela información, la susceptibilidad a la información errónea y la exposición aataques cibernéticos. Por lo tanto, la necesidad de mitigar y mantener la in-tegridad de esta información se ha convertido en un área de trabajo crecientepara muchas organizaciones públicas y privadas.En las siguientes secciones se ofrece una variedad de técnicas y mejores

prácticas para mitigar y contrarrestar los desafíos mencionados anterior-mente. Sin embargo, es importante tener en cuenta, al leer estas recomen-daciones, la posición que representas o con la que te asocias. Algunas de lasrecomendaciones pueden no ser aplicables a una �gura pública, como políti-cos, activistas u otros actores cuyas mejores prácticas en las redes socialesestán sujetas a un mayor escrutinio. En este sentido, el ejercicio de los dere-chos de expresión, reunión y protesta se debe respetar, y debe ser respetado,en el ámbito digital al tiempo que se garanticen prácticas más seguras deinternet.

11.1 Amenazas a la Ciberseguridad

La aparición de vulnerabilidades en los sistemas operativos y los métodos deencubrimiento de los atacantes, lo convierten en una práctica en aumento.Algunos de los principales ataques en la red, hacia donde dirigen su miradalos Hackers para vulnerar la seguridad, pueden de�nirse como:

� Malware: el término se re�ere de forma genérica a cualquier Softwaremalicioso que tiene por objetivo in�ltrarse en un sistema para dañarlo.Comúnmente se asocian como tipos de Malware a los virus, gusanos ytroyanos.

� Virus: es un código que infecta los archivos del sistema mediante unprograma maligno, pero para ello necesita que el usuario lo ejecute di-rectamente. Una vez activo, se disemina por todo el sistema a donde

[email protected] 325 Antonio Carrillo Ledesma, Et alii

Page 328: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

el equipo o cuenta de usuario tenga acceso, desde dispositivos de Hard-ware hasta unidades virtuales o ubicaciones remotas en una red.

� Gusanos: es un programa que, una vez infectado el equipo, realizacopias de sí mismo y las difunde por la red. A diferencia del virus,no necesita la intervención del usuario, ya que pueden transmitirseutilizando las redes o el correo electrónico. Son difíciles de detectar,pues su objetivo es difundirse e infectar a otros equipos, y no afectaninicialmente el funcionamiento normal del sistema. Su uso principales el de la creación de redes zombis (Botnets), utilizadas para ejecutaracciones de forma remota como ataque de denegación de servicio (DoS)a otro sistema.

� Troyanos: similares a los virus, sin embargo, mientras que este últimoes destructivo por sí mismo, el troyano lo que busca es abrir una puertatrasera (Backdoor) para favorecer la entrada de otros programas ma-liciosos. Su misión es precisamente pasar desapercibido e ingresar alos sistemas sin que sea detectado como una amenaza potencial. No sepropagan a sí mismos y suelen estar integrados en archivos ejecutablesaparentemente inofensivos.

� Spyware: es un programa espía, cuyo objetivo es recopilar informaciónde un equipo y transmitirla a una entidad externa sin el consentimientodel propietario. Su trabajo suele ser silencioso, sin dar muestras de sufuncionamiento, llegando incluso a instalar otros programas sin que seperciban. Las consecuencias de su infección incluyen, además, pérdidaconsiderable del rendimiento del sistema y di�cultad para conectarse ainternet.

� AdWare: su función principal es la de mostrar publicidad. Aunque suintención no es la de dañar equipos, es considerado por algunos unaclase de Spyware, ya que puede llegar a recopilar y transmitir datospara estudiar el comportamiento de los usuarios y orientar mejor eltipo de publicidad.

� Ransomware: Este es uno de los más so�sticados y modernos ataques,ya que lo que hace es secuestrar datos (encriptándolos) y pedir unrescate por ellos. Normalmente, se solicita una transferencia en dineroelectrónico (Bitcoins), para evitar el rastreo y localización. Este tipo deciberataque va en aumento y es uno de los más temidos en la actualidad.

[email protected] 326 Antonio Carrillo Ledesma, Et alii

Page 329: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Escaneo de Puertos: técnica empleada para auditar dispositivos y redescon el �n de conocer qué puertos están abiertos o cerrados, los serviciosque son ofrecidos, así como comprobar la existencia de algún cortafue-gos (Firewall), la arquitectura de la red, o el sistema operativo, entreotros aspectos. Su empleo permite al atacante realizar un análisis pre-liminar del sistema y sus vulnerabilidades, con miras a algún otro tipode ataque, pues cada puerto abierto en un dispositivo, es una potencialpuerta de entrada al mismo.

� Phishing: no es un Software, se trata más bien de diversas técnicas desuplantación de identidad para obtener datos privados de las víctimas,como contraseñas o datos bancarios. Los medios más utilizados son elcorreo electrónico, mensajería o llamadas telefónicas, y se hacen pasarpor alguna entidad u organización conocida, solicitando datos con�den-ciales, para posteriormente ser utilizado por terceros en su bene�cio.

� Whaling: es un método para simular ocupar cargos de nivel superior enuna organización con el objeto de conseguir información con�dencial uobtener acceso a sistemas informáticos con �nes delictivos.

� El Smishing: ocurre cuando se recibe un mensaje de texto corto (SMS)en el teléfono celular, por medio del cual se solicita al usuario llamar aun número de teléfono o ir a un sitio Web.

� El Vishing: es la estafa que se produce mediante una llamada telefónicaque busca engañar, suplantando la identidad de una persona o entidadpara solicitar información privada o realizar alguna acción en contra dela víctima.

� Juice-jacking o Video-jacking: son los nombres que se han puesto a losprocesos por los cuales, a través de un puerto (generalmente USB) nosconectamos a un puerto Hackeado, de esta forma el ciberdelincuentepuede instalar, grabar datos, tomar video o sacar datos de nuestrosdispositivos móviles. Esto se ha vuelto común en los puertos de recargade energía públicos a través del puerto USB. Si se hará uso de este tipode servicios, es recomendable adquirir un dispositivo del tipo PortaPowde carga rápida con adaptador USB que inhabilitan los pines de datospermitiendo sólo la carga del dispositivo.

[email protected] 327 Antonio Carrillo Ledesma, Et alii

Page 330: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Keylogger (registrador de teclas): es un Software malicioso o dispositivoen Hardware -generalmente conectado al teclado- que se encarga de re-gistrar las pulsaciones que se realizan en el teclado, para posteriormenteusarlas para robar información privada.

� Criptomining es unMalware diseñado para la extracción de Criptomone-das en nuestros dispositivos. Si el usuario accesa a un sitio Web queeste infectado, el Malware se puede descargar de forma inadvertida através de una descarga automática y nuestro dispositivo comenzará adesenterrar una moneda criptográ�ca seleccionada para los Hackers; lainfección será notoria por un uso intensivo de nuestro dispositivo.

� Botnets (Redes de robots): Son computadoras o dispositivos conecta-dos a la red (teléfonos inteligentes, tabletas, etc.) infectados y contro-lados remotamente, que se comportan como robots (Bots) o zombis,quedando incorporados a redes distribuidas, las cuales envían de formamasiva mensajes de correo Spam o código malicioso, con el objetivo deatacar otros sistemas o dejarlos fuera de servicio.

� Denegación de Servicios: tiene como objetivo inhabilitar el uso de unsistema o computadora, con el �n de bloquear el servicio para el queestá destinado. Los servidores Web poseen la capacidad de resolver unnúmero determinado de peticiones o conexiones de usuarios de formasimultánea, en caso de superar ese número, comienzan a ralentizarseo incluso bloquearse y desconectarse de la red. Existen dos técnicaspara este ataque: la denegación de servicio o DoS (Denial of Service)y la denegación de servicio distribuido o DDoS (Distributed Denial ofService); la diferencia entre ambos es el número de equipos de cómputoque realizan el ataque. En el primero, las peticiones masivas al servi-cio se realizan desde una misma máquina o dirección IP, consumiendoasí los recursos que ofrece el servicio hasta que no tiene capacidad derespuesta y comienza a rechazar peticiones (denegar el servicio); enel segundo, las peticiones o conexiones se realizan empleando un grannúmero de computadoras o direcciones IP, todas al mismo tiempo yhacia el mismo servicio objeto del ataque, de forma general, las com-putadoras que lo realizan se encuentran infestadas, formando parte deuna Botnet, y comportándose como zombis.

� Ataque MITM (Man In The Middle): conocido como "hombre en el

[email protected] 328 Antonio Carrillo Ledesma, Et alii

Page 331: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

medio", ocurre cuando una comunicación entre dos sistemas es inter-ceptada por una entidad externa simulando una falsa identidad. Eneste sentido, el atacante tiene control total de la información que seintercambia, pudiendo manipularla a voluntad, sin que el emisor y elreceptor lo perciban rápidamente. Es común que se realice empleandoredes WI-FI públicas y abiertas, y es muy peligroso ya que se puedeobtener información sensible de las víctimas, y es difícil identi�carlo sino se poseen los mínimos conocimientos sobre el tema.

� Rootkit: es un tipo de Malware diseñado para infectar una PC, elcual permite instalar diferentes herramientas que dan acceso remotoal equipo de cómputo. Este Malware se oculta en la máquina, dentrodel sistema operativo y sortea obstáculos como aplicaciones antimal-ware o algunos productos de seguridad. El Rootkit contiene diferentesherramientas maliciosas como un módulo para robar los números detarjeta o cuentas bancarias, un bot para ataques y otras funciones quepueden desactivar el Software de seguridad.

� SIM Swapping: es la duplicación del SIM de un número telefónico quepermite a un atacante usurpe nuestra identidad, pudiendo autenti�-carse por medio de SMS en diversos servicios que usen la autenti�caciónde dos pasos, incluyendo los servicios bancarios.

� SIM Jacker: es el envió de un mensaje malicioso al dispositivo destino,que si se abre el enlace adjunto, el dispositivo inteligente queda com-prometido y se puede extraer toda la información del mismo incluyendola ubicación.

� 0-Day (día cero): es una nueva vulnerabilidad para la cual no se hancreado parches o revisiones, y que se emplea para llevar a cabo unataque. El nombre se debe a que no existe ninguna revisión para mit-igar el aprovechamiento de la(s) vulnerabilidad(es), estas pueden serutilizadas para que troyanos, Rootkits, virus, gusanos y otros Malwaresse propaguen e infecten más equipos.

En general, para poder llevar a cabo alguno de estos ataques, los intrusosdeben disponer de los medios técnicos, los conocimientos y las herramientasadecuadas, deben contar con una determinada motivación o �nalidad, y setiene que dar además una oportunidad que facilite el desarrollo del ataque,como podría ser un fallo en la seguridad del sistema informático elegido.

[email protected] 329 Antonio Carrillo Ledesma, Et alii

Page 332: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

11.2 Recomendaciones de Ciberseguridad

Como usuarios de equipo de cómputo tenemos poca o nula capacitación encuanto a las normas básicas de ciberseguridad, las más importantes son:usar contraseñas fuertes y diferentes para cada caso, mantener actualizadoel sistema operativo, al navegar en internet hacerlo de forma segura, haceruso seguro de las herramientas de la Nube, generar respaldos de nuestrainformación, hacer correcto uso de redes Wi-Fi, conocer y no caer en ataquesde técnicas de inteligencia social, al hacer uso de videoconferencias conocerlas políticas de privacidad y las medidas de seguridad, entre otras tantas cosasque el usuario actual de las Tecnologías de la Información y la Comunicación(TIC) debe dominar.Algunas recomendaciones para reducir nuestra huella en internet:

� El uso de cuentas de correo alternativas nos permite registrarnos endiferentes sitios Web sin utilizar datos y/o cuentas personales.

� Usar cuentas de correo seguro, anónimo y bidireccional como el serviciode ProtonMail. O usar el modo con�dencial -en el cual podemos es-tablecer fecha de vencimiento y contraseña para cada correo- al enviarcorreos desde cuentas Google.

� Acceder a las opciones del navegador para eliminar cada cierto tiempola información almacenada en formas de Cookies, caché o el historialde navegación.

� El uso de modo privado o incógnito en el navegador nos permite noalmacenar información sobre las páginas Web visitadas ni se guardanlas Cookies, ya que se eliminarán al salir del navegador.

� Evitar revelar información sensible en redes sociales sobre nosotros,familia y conocidos, en medida de lo posible debemos vigilar lo quepublicamos, quién puede verlo y con�gurar las opciones de privacidad.

� El uso de Webs seguras (https y certi�cados digitales) aseguran quela información que intercambiamos con ellas, como datos bancarios ocontraseñas viajen de forma cifrada.

� Usar navegadores especializados (Tor) y lugares de búsqueda de infor-mación (DuckDuckGo) que nos permitan una navegación segura al noguardar lo que buscamos, ni los sitios donde accedemos.

[email protected] 330 Antonio Carrillo Ledesma, Et alii

Page 333: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� El uso del GPS en nuestros dispositivos móviles es una gran herramientaen nuestra vida digital, pero debemos tenerlo activado sólo cuando seanecesario, ya que muchas aplicaciones comparte nuestra ubicación entiempo real sin nuestro cononocimiento.

11.2.1 Contraseñas Robustas

Las contraseñas protegen la información que contienen los dispositivos ycuentas de los usuarios. No obstante, ante la cantidad de claves y com-binaciones que cotidianamente se deben utilizar, la mayoría de las personasopta por contraseñas fáciles de recordar por la comodidad que esto implica, obien, por la falta de conocimiento de lo fácil que puede ser para un ciberdelin-cuente obtenerlas. Para asegurar la efectividad de las contraseñas71 y evitarel robo de éstas, es recomendable poner en práctica las siguientes acciones:

� Al generar las contraseñas de los dispositivos y cuentas se deben utilizarclaves largas -mínimo 15 caracteres72- y únicas para cada caso, evitandoutilizar la misma contraseña para diferentes dispositivos o cuentas.

� Se deben evitar las combinaciones sencillas como fechas de nacimiento,secuencias consecutivas, repeticiones de un mismo dígito o palabrassimples como "password" o "contraseña".

� La mayor longitud de la contraseña, así como la incorporación demayúsculas, minúsculas, números y símbolos (#$,.-_%&*!?), contribu-yen a que ésta sea más segura y difícil de vulnerar73.

71Para conocer la seguridad de una clave, podemos revisarla en:https://howsecureismypassword.net/

72Solo para tener una idea del tiempo necesario para encontrar la clave de 13 caracteresaleatorios de símbolos, números, letras mayúsculas y minúsculas usando fuerza bruta enun solo core en el que se ejecuten más de mil millones de intentos por segundo se tar-daría 9.6 millones años. Si se aumentan el número de cores los tiempos se acortaran deforma drástica, por ejemplo si se usa una supercomputadora que intente 100 millones decontraseñas por segundo bajaría de 9.6 millones a 96 años.https://i.imgur.com/e3mGIFY.png73GnuPG y OpenSSl son herramientas en línea de comandos de seguridad en comunica-

ciones electrónicas en donde se utiliza criptografía de clave pública para que los usuariospuedan comunicarse de un modo seguro.Para instalar el paquete GnuPG, usamos:

# apt install gnupg

[email protected] 331 Antonio Carrillo Ledesma, Et alii

Page 334: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� No usar una contraseña única o similar para tus cuentas

� Se debe evitar escribir contraseñas en papeles o tener archivos con esainformación que sean fácilmente accesibles para otros.

� Habilitar el doble factor de autenticación o veri�cación en dos pasos.Esta medida es una capa adicional de seguridad disponible para cadavez más servicios en la que, además de la contraseña, durante el iniciode sesión se solicita información sobre otro medio al que sólo el usuarioautorizado tiene acceso (por ejemplo, veri�cación para entrar al correoelectrónico mediante la recepción de un código vía SMS, llamada omensaje de WhatsApp).

� Es importante no facilitar a nadie, aunque así lo solicite, por ningúnmedio, contraseñas y/o códigos para el inicio de sesión.

� Es recomendable cambiar con frecuencia las contraseñas a efecto deevitar accesos no autorizados.

� Es recomendable usar un gestor de contraseñas74 (como KeePassXC,KeePass, Bitwarden, Dashlane, NordPass, LastPass, Enpass, Keeper

para generar clave aleatoria de por ejemplo 32 caracteres, usamos:

$ gpg �gen-random �armor 1 32

Para instalar el paquete OpenSSL, usamos:

# apt install gnupg

para generar clave aleatoria de por ejemplo 32 caracteres, usamos:

$ openssl rand -base64 32

74Un administrador de contraseñas tiene dos funciones principales: (1) almacenar con-traseñas, y (2) generar contraseñas seguras y únicas. Esta aplicación es esencialmentecomo un libro digital que almacena todas sus contraseñas usando una "clave maestra".Al ingresar esta clave, se le otorga acceso al resto de las contraseñas. Por lo tanto, dichaclave o contraseña debe permanecer altamente protegida. Pero su segundo uso es muchomás práctico. El administrador de contraseñas genera automáticamente contraseñas quecontienen una combinación compleja de mayúsculas y minúsculas, números, símbolos ycaracteres especiales, que puede complicar el descifrado o la detección de la contraseñapor parte de piratas informáticos. Al utilizar un administrador de contraseñas, se evita elerror común de usar una sola contraseña en las diversas plataformas en línea, evitando asíataques de relleno de credenciales (credential stu¢ ng).

[email protected] 332 Antonio Carrillo Ledesma, Et alii

Page 335: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

PasswordManager, Password Safe, Password Gorilla, UPM, Buttercup,Myki, Pass, 1Password, etc) para generar y almacenar las claves deacceso estrictamente necesarias. Este es un programa de seguridad quealmacena de forma segura todas las contraseñas en una caja fuertevirtual cifrada, los hay locales a tu dispositivo o en línea.

11.2.2 Encriptar Discos o Archivos

La encriptación de datos o cifrado de archivos es un procedimiento medianteel cual los discos, archivos, o cualquier tipo de documento, se vuelven com-pletamente ilegibles gracias a un algoritmo que desordena sus componentes.Así, cualquier persona que no disponga de las claves correctas no podrá ac-ceder a la información que contiene. A menudo nos referimos a los datosencriptados como texto cifrado. El propósito de la encriptación es protegerla con�dencialidad de los datos digitales.En el mundo criptográ�co, cifrar es un procedimiento que utiliza un al-

goritmo matemático. Estos algoritmos modi�can los datos, de manera quesólo sabiendo el mismo algoritmo se puede descifrar para saber qué es lo quese dice.Como puede imaginarse, la protección de datos se ha convertido en una

preocupación importante para las personas y compañías con el signi�cativocrecimiento del volumen de datos y la so�sticación de la amenaza. A estoshechos, hay que añadir el riesgo que supone cada uno de nosotros lleva consigograndes cantidades de datos con�denciales en sus ordenadores portátiles ydispositivos móviles.

¿Qué es encriptar? a pesar de los complicados cálculos matemáticosinvolucrados, la acción de encriptar datos no es difícil de entender. Simple-mente, consiste en bloquear los datos mediante un código secreto que ocultasu verdadero signi�cado. De esta forma, si alguien accede a ellos, encontraráque la información carece de sentido. Y es que, para que los datos encriptadostengan sentido, se necesita la clave del código.Existen dos tipos de cifrado: simétrico y asimétrico. En términos simples,

el cifrado simétrico es la técnica más antigua y conocida. Utiliza una clavesecreta para cifrar y descifrar los datos. Tanto el remitente como el receptorconocen la clave.El cifrado asimétrico es un método más nuevo y también conocido como

criptografía de clave pública. Utiliza dos claves en lugar de una: una pública

[email protected] 333 Antonio Carrillo Ledesma, Et alii

Page 336: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y una privada. Las claves públicas permiten que cualquiera envíe informacióna otra persona, pero solo cada individuo conoce su clave privada.

Para qué sirve el cifrado de mensajes y otros datos sirve para hacerlas comunicaciones más seguras, y lo mismo se puede decir a la hora deaplicarlo a internet. La primera funcionalidad para conseguirlo es la de lacon�dencialidad de los mensajes, ya que al no ir al descubierto, cuando túle envías algo a otra persona, los algoritmos criptográ�cos de la aplicaciónayudan a que no se pueda leer fácilmente si alguien lo intercepta en el camino.Siendo la con�dencialidad la primera de las ventajas que ofrece el cifrado

de mensajes, la segunda podríamos decir que es la integridad. El encapsularun mensaje dentro de un sobre de cifrado, dicho así para hacerse una mejorimagen mental, ayuda que todo lo que haya cifrado se mantenga correcto ycompleto.También hay algoritmos criptográ�cos que proporcionan mecanismos para

veri�car la identidad de la persona que envía un mensaje. Además, hay méto-dos de cifrado que también ayudan a vincular un documento o transaccióna una persona o sistema de gestión concretas. Pero a nivel general, para loque más se suele utilizar es para proteger las comunicaciones. Si tú envíasun SMS se envía en texto plano, sin cifrar, y si un operador o alguna agenciainter�ere el mensaje, puede leer todo lo que hay escrito. Sin embargo, apli-caciones como WhatsApp, Gmail o Telegram aplican cifrados para que estono sea tan fácil.

¿Qué se debe encriptar? en términos generales, hay dos tipos de datosque se deben encriptar:

� Información de identi�cación personal. En este grupo se incluye cual-quier tipo de información que otra persona pueda usar para identi�cara un individuo de manera única. Esto incluye la licencia de conducir,número de seguridad social, etc. Los ladrones pueden usar esta infor-mación para robar una identidad, lo que les permite cometer delitosmayores, como solicitar tarjetas de crédito y préstamos a nombre deotra persona. Combatir esta clase de ataques requiere esfuerzos en mu-chos frentes. La información de identi�cación personal reside en losteléfonos, tabletas y computadoras portátiles , por lo que esos disposi-tivos y su almacenamiento se deben encriptar.

[email protected] 334 Antonio Carrillo Ledesma, Et alii

Page 337: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Información con�dencial de Negocios y Propiedad Intelectual. Losdatos a los que los empleados acceden cada día acerca de los clientes,los planes para un nuevo producto o los datos sobre la próxima cam-paña de marketing entrarían en este grupo. De toda esta informaciónpodrían sacar provecho los competidores y, por tanto, puede convertirseen objetivo de piratas informáticos.

Ante las di�cultades para decidir si se deben o no encriptar algunos datos,basta con preguntarse si se destruirían antes de tirarlos a la basura, caso deestar en formato papel o si, en el caso de que se �ltraran por accidentecausarían daño a los empleados o clientes. En ambos casos, si la respuestaes a�rmativa, hay que encriptar.

Encriptar Discos Los discos duros externos y los dispositivos USB son lamanera perfecta de poder llevarnos en nuestros viajes todos nuestros archivosimportantes. Pero cuando estos archivos son personales y privados es posibleque no quieras que nadie pueda acceder a ellos en caso de que se te pierda elUSB o te lo quiten de alguna manera.Por eso, todos los sistemas operativos suelen darte la opción de aplicarles

un cifrado y protegerlos con una contraseña de tu elección, un proceso dife-rente al de protegerlos contra escritura. Hoy te vamos a enseñar a hacerlopaso a paso con Windows con una de sus herramientas nativas, y también tediremos brevemente cómo hacer lo mismo en MacOS y GNU/Linux pero deuna forma aún más sencilla.

Cifrar Windows la manera de cifrar unidades externas en Windowstiene un nombre: BitLocker. Se trata de una herramienta desarrollada porMicrosoft que suele venir preinstalada en casi todas las versiones de su sistemaoperativo, pero que de no ser así puedes conseguir en su página de descarga,donde se pueden descargar sus versiones de 32 y 64 bits.

En GNU/Linux y MacOS en el caso de que tengas un Mac el procesoes aún más fácil, ya que lo único que tienes que hacer es tener la unidadformateada, conectarla al equipo y dar Click derecho sobre su icono cuandoaparezca en el escritorio. En el menú desplegable sólo tendrás que elegir laopción: "Encriptar" para introducir con qué contraseñas lo quieres bloquear.En las distribuciones GNU/Linux por su parte también basta con dar

Click derecho sobre la unidad, sólo que en este caso la opción a elegir es:

[email protected] 335 Antonio Carrillo Ledesma, Et alii

Page 338: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

"Formatear volumen". La clave aquí la tienes en el tipo de de formateo, yaque en él tendrás la opción Cifrado -LUKS o Cryptsetup-. De esta mane-ra, formatearás el disco duro aplicándole directamente un cifrado con unacontraseña que elijas.

En Android siguiendo estos pasos podemos encriptar el disco:

1.- Ve a: "Ajustes".

2.- Selecciona: "Seguridad".

3.- Pulsa en: "Cifrar teléfono" y con�gura una contraseña (véasesección 11.2.1).

4.- Espera tranquilamente a que el proceso acabe, puede tardarmás de media hora fácilmente.

Es importante destacar que la única forma de quitar el encriptado esreseteando de fábrica el dispositivo, lo que signi�ca el borrado total del con-tenido que en el haya almacenado. Si tienes una tarjeta microSD insertada,los datos dentro también serán encriptados y no podrás acceder a ellos enotro dispositivo.

Encriptar Archivos

EnWindows la herramienta que trae Windows preinstalada (edicionesEducation, Pro y Enterprise) es un buen comienzo para cifrar nuestros datos.Para ello, deberemos seguir los siguientes pasos:

1. Haz Clic con el botón derecho en un archivo o carpeta (omantenlo presionado) y selecciona: "Propiedades".

2. Selecciona el botón: "Avanzados" y haz Clic en la casilla deveri�cación: "Cifrar contenido" para proteger datos.

3. Pulsa el botón: "Aceptar" para cerrar la ventana: "Atributosavanzados" y a continuación, selecciona el botón: "Aplicar" ydespués: "Aceptar".

Una vez cifrada la información, solo podremos acceder si disponemos dela clave de cifrado correcta.

[email protected] 336 Antonio Carrillo Ledesma, Et alii

Page 339: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

EnGNU/Linux yMacOS es posible encriptar archivos usando GnuPG,esta es una herramienta en línea de comandos de seguridad en comunicacioneselectrónicas en donde se utiliza criptografía simétrica y de clave pública paraque los usuarios puedan comunicarse de un modo seguro75. Dentro de lasfunciones de GnuPG se incluyen generar un par de claves, intercambiar ycomprobar la autenticidad de claves, cifrar y descifrar documentos, etc. Parainstalar el paquete GnuPG, usamos:

# apt install gnupg

Es posible cifrar archivos usando sólo una clave (véase sección 11.2.1) -cifrado simétrico- para cifrar el archivo. La clave que se usa para el cifradosimétrico deriva de la contraseña dada en el momento de cifrar el documento.El cifrado simétrico es útil para asegurar archivos cuando no sea necesario darla contraseña a otros. Un archivo puede ser cifrado con una clave simétricausando la opción �symmetric, por ejemplo:

$ gpg �symmetric doc

o

$ gpg -c doc

y podemos descifrar usando:

$ gpg doc.gpg

11.2.3 Sistema Operativo

Mantener actualizados los sistemas operativos y las aplicaciones de los dispo-sitivos, incluidas las computadoras personales (PC), los teléfonos inteligentesy las tabletas76. Estas actualizaciones incluyen cambios importantes quemejoran el rendimiento y la seguridad de los equipos; muchos de estos pro-gramas, incluso, se actualizan de manera automática. Además de:75Otras opciones son: ccrypt y mcrypt.76En el caso del sistema operativo Android hay una gran fragmentación de versiones en

el mercado coexistiendo, esto debido a que los fabricantes y proveedores tienen un modelode mercado que prioriza la venta de equipo nuevo y no la seguridad del usuario. Forzandoa que las actualizaciones del sistema operativo dependan en gran medida del fabricante deldispositivo o del proveedor del servicio de telefonía, ya que ellos personalizan el sistemaoperativo, di�cultando la actualización de los dispositivos. Lo que ocasiona que la granmayoría de los dispositivos no reciban las actualizaciones de seguridad y nuevas versionesdel sistema operativo publicadas por Android.

[email protected] 337 Antonio Carrillo Ledesma, Et alii

Page 340: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Cifrar el disco (véase sección 11.2.2) donde reside el sistema operativoy nuestros datos, sin este cifrado cualquier persona con acceso físico anuestro equipo de cómputo, tableta, teléfono o dispositivo electrónicopuede copiar sus contenidos incluso si no tienen la clave de acceso aellos.

� Instalar solo aquellos programas y complementos que realmente uses,porque además de que pueden mermar la velocidad de tu equipo, esposible que estés cediendo más permisos de los que te imaginas.

� Activar funcionalidades de protección, como el cortafuegos77 (Firewall),incorporadas en los sistemas operativos más comunes. Un cortafuegoses la primera línea de defensa ante un ataque a tu red desde internety permite proteger el equipo de programas maliciosos o atacantes queintenten conectarse al equipo de forma remota. Además, permite es-tablecer reglas para indicar qué conexiones de red se deben aceptar ycuáles no. Al mismo tiempo, admite el normal intercambio de datosentre la computadora y servicios veri�cados de internet.

� En caso de usar el sistema operativo Windows o Android se debe ins-talar un antivirus78, estos programas ayudan a proteger los dispositivoscontra la mayoría de los virus, gusanos, troyanos y otros tipos de Mal-ware que pueden infectar a los dispositivos, por ello se recomienda:

77Un cortafuegos es un sistema tecnológico cuya misión es la de dar paso o prohibirconexiones entre dispositivos informáticos, en base a una serie de reglas que el usuariopuede establecer según las necesidades de cada dispositivo. Dichos sistemas puede serimplementados tanto en Hardware (físicos) como en Software (lógicos), o bien una com-binación de ambos. En ambos casos, la tarea del cortafuegos es permanecer a la escuchade qué paquetes de información tratan de salir o entrar de nuestro equipo para desecharaquellos que no deseados.78Debido a que el Internet es una red abierta, cualquier computadora o dispositivo puede

conectarse a este desde cualquier lugar. El uso de software antivirus sirve como un escánerinicial de cualquier actividad sospechosa o maliciosa a la que los usuarios están expuestosa través de las redes sociales. El software antivirus puede ayudar a supervisar la entrega denoticias y puede ofrecer un nivel adicional de protección en el evento que el usuario hagaclic erróneamente en enlaces sospechosos que pueden contener spam y diferentes tipos devirus, como gusanos . Pero tener instalado un software antivirus no es una proteccióngeneral ya que no puede atrapar todo el malware; el dispositivo aún puede estar infectado.Sin embargo, le agrega una capa de protección que puede ser bene�ciosa para el usuario.Por eso es tan importante usar el sentido común también y descon�ar de cualquier mensajeque parezca extraño o sospechoso.

[email protected] 338 Antonio Carrillo Ledesma, Et alii

Page 341: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Instalar y mantener actualizados los antivirus, pre�riendo aqué-llos que incorporan funcionalidades de protección contra Malwarey cortafuegos (Firewall), también conocidos como "suites de se-guridad".

� Evitar tener dos antivirus en un mismo dispositivo. Tener dosantivirus activos no signi�ca mayor protección; de hecho, puedeocasionar diferentes problemas en el sistema. Un antivirus queesté trabajando se convertirá en un "Software malicioso" a losojos del otro, el cual intentará bloquearlo y eliminarlo, y se correel riesgo de afectar el desempeño del sistema por el consumo extrade recursos.

� Todas las instalaciones y actualizaciones de programas y apli-caciones deben hacerse desde el sitio Web o�cial del fabricanteo desde las tiendas o�ciales de apps -veri�cando la identidad delautor de la aplicación-, evitando descargar e instalar aquéllas dedudosa procedencia.

� Deshabilitar la auto ejecución de memorias USB, para evitarque, por ese medio, se instalen programas maliciosos.

� En los sistemas operativos que lo soporten, habilitar la limpiezaremota del dispositivo en caso de perdida o robo.

Respaldos a veces, no importa cuan cuidadoso sea uno, existe la posi-bilidad de perder tus datos o que te puedan Hackear. Si ese es el caso, amenudo la única forma en la que puedes recuperar tu información personal esrestaurar desde un respaldo. Asegúrate de realizar respaldos periódicamente-preferentemente encriptados (véase sección 11.2.2)- de cualquier informaciónimportante y veri�ca que puedas restaurar tu información a partir de ellos.Es posible usar servicios en red como Google Drive y dispositivos USB paraguardar en ellos los respaldos.Una buena estrategia de respaldo es la siguiente:

� Mantener tres copias de cualquier �chero importante (una principal ydos respaldos).

� Mantener los �cheros en dos tipos distintos de almacenamiento paraprotegerlos ante distintos riesgos.

� Almacenar una copia de seguridad fuera de nuestra casa u o�cina.

[email protected] 339 Antonio Carrillo Ledesma, Et alii

Page 342: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

11.2.4 Máquinas Virtuales

Entendamos por una máquina virtual a un programa de cómputo que simulaa una computadora, en la cual se puede instalar y usar otros sistemas opera-tivos de forma simultánea como si fuese una computadora real sobre nuestrosistema operativo huésped79.Una característica esencial de las máquinas virtuales80 es que los procesos

que ejecutan están limitados por los recursos y abstracciones proporcionadospor ellas. Estos procesos no pueden escaparse de esta "computadora virtual".Uno de los usos más extendidos de las máquinas virtuales es ejecutar sistemasoperativos nuevos u obsoletos adicionales a nuestro sistema habitual.De esta forma podemos ejecutar uno o más sistemas operativos -Linux,

Mac OS, Windows- desde nuestro sistema operativo habitual sin necesidadde instalarlo directamente en nuestra computadora y sin la preocupación deque se descon�gure el sistema operativo huésped o a las vulnerabilidades delsistema virtualizado, ya que podemos aislarlo para evitar que se dañe.Las máquinas virtuales son una verdadera opción para coexistir simultá-

neamente diferentes versiones de sistemas operativos y en un mismo sistemamáquinas virtuales ejecutando las diversas versiones de un mismo programade cómputo, además se pueden con�gurar para que al momento de iniciarlassiempre se ejecuten a partir de una con�guración e instalación base, de talforma que al ser lanzadas, el usuario pueda instalar, con�gurar e inclusivedañar la máquina virtual, pero al reiniciarse la máquina virtual en una nuevasesión, se regresa a la con�guración de la versión base, de esta forma no hayposibilidad de infección de virus entre diversos lanzamientos de sesiones dela máquina virtual.El uso de las máquina virtual es variado, �exible y permite ser usado en

diversos ámbitos de la educación, del desarrollo y prueba de programas de

79Tal y como puede verse re�ejado en la de�nición de máquina virtual, en este texto nosestamos focalizando en las máquinas virtuales de sistema. Existen otro tipo de máquinasvirtuales, como por ejemplo las máquinas virtuales de proceso o los emuladores.80Una máquina virtual dispone de todos los elementos de un equipo de cómputo real,

de disco duro, memoria RAM, unidad de CD o DVD, tarjeta de red, tarjeta de vídeo, etc.,pero a diferencia de un equipo de cómputo real estos elementos en vez de ser físicos sonvirtuales. Así, una vez instalado un sistema operativo en la máquina virtual, podemosusar el sistema operativo virtualizado del mismo modo que lo usaríamos si lo hubiéramosinstalado en nuestro equipo de cómputo.Algunas opciones de manejadores de máquinas virtuales son: Virtualbox, Vmware Work-

station Player, Parallels, Windows Virtual PC, QEMU/KVM.

[email protected] 340 Antonio Carrillo Ledesma, Et alii

Page 343: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

cómputo y en general, en Ciencias e Ingeniería. Algunas de las utilidades ybene�cios que podemos sacar de una máquina virtual son los siguientes:

� Para aprender a instalar, probar diversas opciones de con�guracióny usar múltiples sistemas operativos. El proceso de instalación de lamáquina virtual no requiere crear particiones adicionales en nuestrodisco ni alterar la con�guración de la máquina an�triona.

� Para usar un Software que no esta disponible en nuestro sistema ope-rativo habitual. Por ejemplo, si somos usuarios de Linux y queremosusar Photoshop, lo podemos hacer a través de una máquina virtual.

� En ocasiones tenemos que usar Software que únicamente se puede eje-cutar en sistemas operativos obsoletos -Windows XP por ejemplo-,podemos crear una máquina virtual con dicho sistema y usar el Soft-ware de forma aislada sin preocuparnos de sus vulnerabilidades.

� Podemos experimentar en el sistema operativo que corre dentro de lamáquina virtual haciendo cosas que no nos atreveríamos a realizar connuestro sistema operativo habitual, como por ejemplo, instalar Softwareno seguro que consideramos sospechoso, etc.

� Si se hace el adecuado aislamiento de una máquina virtual en la que seinstale alguna versión de Windows, esta puede ser inmune a los virusy no requiere el uso de antivirus.

� Si eres un desarrollador de Software puedes revisar si el programa queestas desarrollando funciona correctamente en varios sistemas opera-tivos y/o navegadores de Web.

� Podemos usar las máquinas virtuales para hacer SandBox81 con el �nde ejecutar aplicaciones maliciosas o abrir correos sospechosos en unambiente controlado y seguro.

� Para probar versiones Alfa, Beta y Release Candidate de ciertos pro-gramas y sistemas operativos.

81Un sistema de aislamiento de procesos o entorno aislado, a menudo usando comomedida de seguridad para ejecutar programas con seguridad y de manera separada delsistema an�trión.

[email protected] 341 Antonio Carrillo Ledesma, Et alii

Page 344: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Para probar multitud de programas en Windows y evitar que se en-sucie el registro mediante las instalaciones y desinstalaciones de losprogramas.

� Podemos navegar en sitios Web maliciosos sin poner en peligro nuestroequipo, ya que podemos con�gurar la máquina virtual para que sepierdan los cambios al ser reiniciada.

11.2.5 Navegación Segura

Elegir un buen navegador es fundamental para garantizar que tus datos semantengan a salvo. A efecto de promover la navegación segura en internet,se sugiere adoptar las siguientes recomendaciones:

� No guardar contraseñas en el navegador, aunque sea muy cómodo queel navegador tenga tus contraseñas guardadas para entrar rápidamentea todas las páginas que visitas con regularidad, lo cierto es que permitirque los navegadores Web guarden estos datos tan delicados nos poneen una situación de debilidad, ya que cualquier persona que consigaacceder a nuestro ordenador tendría acceso a nuestra información82.

� Cuando se trabaja desde la Web es recomendable usar el modo Privadoo Incógnito para no guardar el historial de navegación, informaciónintroducida en los formularios y borrar al cerrar el navegador los datosde los sitios visitados. Pero recuerda que los sitios Web que visitamossí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, estono se borra al igual que el historial de descargas, además de las marcasde páginas o favoritos se conservarán al cerrar el navegador.

� Utilizar cifrado de principio a �n (End-toEnd) que utiliza una combi-nación de algoritmos para identi�car al usuario y otros algoritmos queidenti�can a una conversación para cifrar mensajes y evita que tercerosvean la conversación.

� También es posible usar el protocolo mensajería con�dencial (O¤-The-Record Messaging , OTR), es un protocolo criptográ�co que propor-ciona un cifrado fuerte para conversaciones de mensajería instantánea.

82Es recomendable usar un gestor de contraseñas para almacenar las claves de acceso.

[email protected] 342 Antonio Carrillo Ledesma, Et alii

Page 345: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

La principal motivación debajo de este protocolo es ocultar la identidadde los participantes en la conversación a la vez que se mantenía la con-�dencialidad de la propia conversación, como si fuera una conversaciónprivada de la vida real.

� No dejar a la vista de otras personas información relevante, comoaquélla sensible o claves de acceso, ni documentos o carpetas de trabajo.

� Mantener siempre la computadora, tableta, teléfono celular o cualquierotro dispositivo para el trabajo, en un lugar seguro y con contraseña(véase sección 11.2.1), a �n de restringir el acceso de personas no auto-rizadas.

� Al alejarse de los dispositivos de trabajo, es importante bloquear lasesión.

� Mantener cubierta la cámara Web cuando no la estas utilizando, paralimitar el acceso que pudieran llegar a tener a ésta aplicaciones o pro-gramas no autorizados.

� Sé selectivo con las extensiones y complementos que instalas y usas,a cuantas menos aplicaciones le des acceso a tus datos mejor, ya quepueden mermar el desempeño de tu navegador y es posible que estéscediendo más permisos de los que imaginas.

� Si tu organización facilita los recursos necesarios para el teletrabajo, esindispensable realizar un uso exclusivamente profesional de los mediosproporcionados. No se recomienda, en ninguna circunstancia, manipu-larlos, modi�car su con�guración, o prestarlos a otras personas.

� Realizar copias de seguridad periódicas -preferentemente encriptadas(véase sección 11.2.2)- de la información para garantizar el acceso a lainformación almacenada, ya sea personal o de la organización. Así, encaso de que ocurra cualquier incidente de seguridad (robo, pérdida deldispositivo, o avería, etc.), se podrá mantener el acceso a la misma.Proteger con contraseña los dispositivos donde se almacene informa-ción (memorias USB o discos externos) para proteger la informaciónde posibles accesos malintencionados y garantizar así su con�denciali-dad e integridad.

[email protected] 343 Antonio Carrillo Ledesma, Et alii

Page 346: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Ingresar sólo a sitios Web con�ables, escribiendo uno mismo la direc-ción de la página a la que se quiere acceder y evitando utilizar ligasproporcionadas por terceros.

� Conocer y aplicar las funcionalidades de "navegación privada" o "nave-gación segura", que impiden el almacenamiento del historial en el nave-gador, así como imágenes, nombres de usuario y contraseñas.

� Cuando se realicen transacciones o intercambio de información sensible,asegurarse de que la dirección de la página Web comience con: "https"(no "http"), lo que contribuye a mantener segura la información trans-mitida.

� Desactivar la compartición de tu ubicación geográ�ca, a menos que seaestrictamente necesario.

� Evitar el ingreso de información personal en formularios dudosos. Site encuentras ante un formulario que solicita información sensible (porejemplo, nombre de usuario y contraseña), es recomendable veri�car lalegitimidad del sitio antes de responder.

� Usar cuentas de correo seguro, anónimo y bidireccional como el serviciode ProtonMail. O usar el modo con�dencial -en el cual podemos es-tablecer fecha de vencimiento y contraseña para cada correo- al enviarcorreos desde cuentas Google.

� Usar buscadores que no dejan rastro de nuestras búsquedas en vez delbuscador de Google, como pueden ser: DuckDuckGo, Startpage, Yippy,Gibiru, Disconnect Search, Lukol, Metager, entre otros.

� Al terminar de navegar en internet, es importante cerrar la sesión ylimpiar el Cache, sobre todo si se utiliza un equipo compartido, paraevitar que otras personas tengan acceso a cuentas e información pri-vada.

� Usar el navegador Tor, este provee una red abierta y distribuida que teayuda a defenderte de una forma de vigilancia en la red que amenaza tulibertad y privacidad, tus actividades personales y relaciones, ademásde la seguridad gubernamental. También, te protege redirigiendo tus

[email protected] 344 Antonio Carrillo Ledesma, Et alii

Page 347: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

comunicaciones alrededor de una red distribuida de retransmisores rea-lizados por voluntarios alrededor del mundo: lo cual previene que al-guien observe tus comunicaciones a partir de los sitios que visitas, tam-bién evita que los sitios que navegas obtengan tu ubicación física.

11.2.6 Banca en Línea Segura

El uso de la banca en línea es una gran alternativa para todos los usuarios dedichos servicios, pero el acceso a las aplicaciones bancarias debe ser usandoun navegador Web seguro o por medio de las aplicaciones del banco desa-rrolladas para dispositivos móviles, en ambos casos es necesario usarlas enun dispositivo de con�anza, encriptado, con contraseña segura para el acceso(véase sección 11.2.1), el sistema operativo actualizado, usando las medidasbásicas de protección y con un mínimo de aplicaciones instaladas para evitarMalware, además se sugiere adoptar las siguientes recomendaciones:

� Solicitar al banco que nos envíe alertas de todas las transacciones denuestras cuentas y mantengamos estas monitoreadas de actividad noautorizada.

� Cuando se deba tener acceso a banca en línea es necesario conectarseusando redes seguras en las que uno con�é, nunca desde redes públicas

� Cuando se deba tener acceso a banca en línea desde la Web es recomen-dable usar el modo Privado o Incógnito y no guardar contraseñas en elnavegador.

� Ingresar sólo a sitios Web con�ables, escribiendo uno mismo la direcciónde la página a la que se quiere acceder y evitando utilizar ligas pro-porcionadas por terceros y asegurarse de que la dirección de la páginaWeb comience con: "https" (no "http").

� Usar en la medida de posible contraseñas seguras del mayor tamañopermitido por la aplicación bancaria.

� No dejar a la vista de otras personas información relevante, comoaquélla sensible o claves de acceso, ni documentos o carpetas de trabajo.

� Mantener siempre la computadora, tableta o teléfono inteligente usadopara acceder a la banca en línea en un lugar seguro y con contraseñasegura, a �n de restringir el acceso de personas no autorizadas.

[email protected] 345 Antonio Carrillo Ledesma, Et alii

Page 348: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Al alejarse de los dispositivos de trabajo, es importante cerrar la sesiónbancaria y bloquear la sesión del usuario.

� Ser selectivo con las extensiones y complementos que instalas y usas,a cuantas menos aplicaciones le des acceso a tus datos mejor, ya quepueden mermar el desempeño de tu navegador y es posible que estéscediendo más permisos de los que imaginas.

� Al terminar de navegar en internet, es importante cerrar la sesión ylimpiar el Cache, sobre todo si se utiliza un equipo compartido, paraevitar que otras personas tengan acceso a nuestras cuentas bancarias.

11.2.7 Uso Seguro de las Herramientas de la Nube

La nube permite almacenar y administrar datos, así como ejecutar apli-caciones en línea, entre muchas otras funciones. Con relación al almace-namiento, la nube permite acceder a archivos y datos desde cualquier dis-positivo conectado a internet; es decir, la información está disponible encualquier lugar en el que te encuentres y siempre que la necesites.Para hacer uso de los servicios de la nube de manera segura y evitar el

robo o mala utilización de la información almacenada, es conveniente teneren mente las siguientes recomendaciones:

� Tener conocimiento de las condiciones de uso y las políticas de privaci-dad antes de utilizar cualquier servicio en la nube.

� Utilizar servicios de almacenamiento que cuenten con cifrado "https"y certi�cado de seguridad. Esto lo puedes veri�car en la barra dedirecciones de tu navegador de internet.

� No subir a la nube información sensible con acceso público o abierto. Serecomienda utilizar herramientas de cifrado, como es el uso de carpetascon contraseña y acceso restringido.

� Veri�car periódicamente los archivos y carpetas que tenemos compar-tidos desde nuestra cuenta, a �n de deshabilitar los enlaces y acceso deterceros que ya no sean necesarios.

� Utilizar contraseñas robustas para acceder al servicio y, preferente-mente, activar el doble factor de autenticación o veri�cación en dospasos.

[email protected] 346 Antonio Carrillo Ledesma, Et alii

Page 349: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Realizar periódicamente un respaldo de la información almacenada enla nube en otro tipo de dispositivo, por ejemplo, en un disco duro ex-terno debidamente protegido por contraseña (véase sección 11.2.2). Deesa manera, se mantiene el acceso a la información en caso de cualquiercontratiempo, como una conexión limitada a internet.

� Cerrar la sesión de la nube al concluir las actividades que se esténrealizando.

11.2.8 Teléfonos Inteligentes y Tabletas

Estos dispositivos están omnipresentes en nuestra vida, además pueden alma-cenar mucha más información de la que nos imaginamos y muchos de nosotroslos usamos para acceder a casi toda nuestra información digital desde ellos.Por tanto, necesitan protegerse activamente para evitar que el contenido quealmacenan y al que tienen acceso termine en manos de terceras personas. Enellos se guarda todo tipo de datos personales, mensajes, imágenes y vídeosen los que aparecen los usuarios, amigos y otras personas. A veces incluso sepuede haber recibido o grabado contenido íntimo o de connotación sexual83.No olvidemos que cualquier método de almacenaje de información digital

puede sufrir �ltraciones o ataques informáticos, pero los dispositivos móvilesson aún más vulnerables. Pueden extraviarse, también pueden ser robadosen diversas situaciones o, simplemente, ser interceptados en un momento dedespiste. Por ello estos son algunos de los hábitos que debemos practicar adiario para mejorar la protección del dispositivo y nuestros datos:

� Todos los dispositivos móviles y tarjetas de respaldo extraíbles debenser cifrados y se debe usar una contraseña robusta para el acceso almismo (véase sección 11.2.1), es decir, utilizar una combinación com-pleja -de al menos 15 caracteres- de letras mayúsculas, minúsculas,números y símbolos es siempre la mejor opción. Además, es impre-scindible no con�arla a sus amistades y cambiarla siempre que tengandudas de su �abilidad.

83En el caso de los adolescentes no siempre son conscientes del riesgo que supone pro-ducirlo o guardarlo, Pero, en cualquier caso, requiere una protección especial, y comoadultos podemos mostrarles la importancia de proteger estos contenidos.Este tipo de contenido es extremadamente sensible y, de hecho, cuando se trata de

imágenes o vídeos en los que aparecen menores de edad ni siquiera es legal almacenarlo enningún tipo de formato.

[email protected] 347 Antonio Carrillo Ledesma, Et alii

Page 350: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Es fundamental que se comprenda que toda la información que guardanen el dispositivo es susceptible de caer en manos de terceras personas.Por eso, lo ideal es que no guarden imágenes, vídeos o datos de caráctersensible. Es preferible que revisen periódicamente sus archivos, elimi-nen de forma e�caz aquello de lo que puedan prescindir y, en el caso dequerer guardar algunos contenidos, los almacenen en otros dispositivosmás seguros, como un disco duro externo encriptado (véase sección11.2.2) que mantengan en casa. Cuanta menos información lleven ensu dispositivo, menor riesgo.

� Cualquier dispositivo ofrece un sistema de bloqueo para que nadie queno sea el usuario pueda acceder a él. En el caso de móviles y tabletas,tienen diferentes alternativas, como usar su huella dactilar, un sistemade reconocimiento facial, un código PIN, una contraseña o un patrón.Cualquier opción es buena, pero hay que tener en cuenta que un pa-trón o un código PIN siempre son más fáciles de observar y memorizarpor otras personas. Obviamente, esta función pierde su e�cacia si nose acostumbran a bloquear el dispositivo siempre que no lo estén uti-lizando.

� Algunos servicios de internet, como cuentas de correo o redes sociales,ofrecen un sistema combinado de autenticación. De esta forma, ademásde solicitar la contraseña para acceder, utilizan un segundo paso paracomprobar la identidad del usuario. Puede ser un código que llegue a suteléfono móvil, por ejemplo, y es muy útil contra el robo de contraseñas.Para ponernos en situación, si alguien averigua la clave de acceso asu cuenta de Instagram no podrá acceder porque también necesitarádisponer del dispositivo para ver el código de veri�cación.

� Siempre es una buena costumbre cerrar la sesión de cada servicio alconcluir su uso. Por ejemplo, si se entra en redes sociales o en sucuenta de correo en el ordenador público, es fundamental que cierren lasesión y limpiar el Cache antes de irse, comprobando que su contraseñano ha quedado guardada.

� Hoy en día todos los servicios digitales incorporan opciones de seguridady privacidad que se han diseñado para proteger nuestra información.Una buena práctica es revisar la con�guración de cada aplicación oservicio que se utilice, personalizando todas aquellas funciones que les

[email protected] 348 Antonio Carrillo Ledesma, Et alii

Page 351: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sean de utilidad. Así, se pueden establecer cuentas de redes socialescomo privadas o revisar los permisos que otorgan a cada aplicación.

� Existen muchas más funciones que pueden ser útiles para salvaguardartodas esos datos, imágenes y vídeos que se guardan en dispositivos.Todo es cuestión de investigar y buscar soluciones siempre que sien-tan que su información es vulnerable. Por ejemplo, pueden bloquearla galería de su móvil o el explorador de archivos, de forma que seanecesario utilizar su huella para acceder. También pueden crear listasde amistades en las redes sociales para que las publicaciones sean máspersonales y no lleguen a todos los seguidores.

� Activar la función de búsqueda y bloqueo de dispositivo frente a pérdi-das o robos. Cada vez hay más opciones de seguridad disponibles, solohay que motivar su uso en la prevención de riesgos.

� Activar el Wi-Fi y Bluetooth sólo cuando se usen, de esta forma se min-imiza la posibilidad que un usuario mal intencionado intente conectarsea nuestro dispositivo.

� Es posible poner un código de acceso en su tarjeta SIM, esto puedeprotegerla de la suplantación de SIM. La con�guración de este códigose puede hacer en un iPhone yendo a Con�guración > Celular > PIN deSIM. Ingrese su PIN existente para habilitar el bloqueo. Los usuarios deAndroid pueden ir a Con�guración > Seguridad > Bloqueo de tarjetaSIM. Aquí puede habilitar la opción para bloquear su SIM.

� Se debe evitar el uso de puertos de carga USB no con�ables, como los deenergía públicos, ya que ellos se pueden Hackear, y el ciberdelincuentepuede instalar, grabar datos, tomar video o sacar datos de nuestrosdispositivos móviles. Si se hará uso de este tipo de servicios, es re-comendable adquirir un dispositivo del tipo PortaPow de carga rápidacon adaptador USB que inhabilitan los pines de datos permitiendo sólola carga del dispositivo.

Escaneo de Códigos QR Los códigos QR cada vez están más presentes ennuestras vidas, sin embargo, éstos no están exentos de riesgos de seguridad,riesgos de los que muchos usuarios no son conscientes.

[email protected] 349 Antonio Carrillo Ledesma, Et alii

Page 352: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Los QR son Menos Transparentes que una URL comencemospor lo más obvio, es relativamente fácil distinguir una URL maliciosa de unalegítima, pero no ocurre lo mismo con los QR, lo que facilita que seamosremitidos a Webs de Phising o con Malware. Alex Mosher, vicepresidentede soluciones globales de MobileIron, a�rma que espera que "pronto veamosuna avalancha de ataques a través de códigos QR" dirigidos a robar datos denuestros dispositivos móviles o tomar nuestras credenciales y datos person-ales.

No Entendemos qué Puede Abrir un Código QR otro problemaes que los usuarios no terminan de comprender qué es lo que pueden hacer loscódigos QR, mientras que el 67% piensa (correctamente) que pueden abrirURLs, sólo una tercera parte de ellos es consciente de que eso permite tambiénrealizar toda una serie de acciones más allá de abrir una página Web, como:

� Escribir un correo electrónico o un mensaje SMS.

� Añadir un contacto a tu agenda.

� Añadir un evento a tu calendario.

� Añadir credenciales de acceso a un red WiFi.

� Realizar un pago online.

� Iniciar una llamada telefónica.

� Enviar información sobre tu localización a una app.

� Empezar a seguir a alguien en redes sociales.

Aunque todas éstas actividades son en cierto modo lícitas, pueden engen-drar una gran brecha de seguridad en nuestros dispositivos móviles.

11.2.9 Redes Sociales

El uso generalizado de las redes sociales entraña algunos riesgos que, sigu-iendo recomendaciones básicas, se pueden evitar. Como cualquier comunidadfrecuentada por miles de usuarios (o, como sucede a veces con las redes so-ciales, por millones), se deben conocer los mecanismos de control y de seguri-dad para poder utilizarlos con �abilidad para mantener nuestra privacidad

[email protected] 350 Antonio Carrillo Ledesma, Et alii

Page 353: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y es por eso que el usuario tiene que ser especialmente cuidadoso con el usoque hace de la red social, a continuación daremos algunas recomendaciones:

� La gente tiende a inundar de información mientras completa los per-�les en redes sociales. Hay que tener en cuenta que no estamos anteuna entrevista de trabajo o que sólo nuestros amigos lo van a leer. Nonecesitamos informar de todo y a todos, y menos con información sen-sible. Los expertos creen que revelar demasiada información personalcrea una grieta de seguridad. Los atacantes usan información personalcomo la fecha de nacimiento, el nombre de los miembros de la familia,los números de teléfono, la dirección física, etc. Todo ello para ejecutarmúltiples iteraciones para descifrar las contraseñas. Por ello, cuantamenos información pongamos, mejor.

� A menudo publicamos notas o mensajes en el muro de un amigo. Estotambién es visible para otros usuarios de Facebook o de la red socialque sea. No existe una fórmula para decidir qué es seguro publicar enpúblico y qué no, pero hay que usar el sentido común. Algunas cosasdeben mantenerse entre amigos o familiares. Publicar cierta informa-ción en muros públicos pone en riesgo no solo a nosotros mismos sinoa la privacidad de nuestros amigos.

� Se dice que una foto vale más que mil palabras. En el caso de las redessociales incluso más. Además si subimos imágenes con una leyendainformativa, nos pone aún más en riesgo. Estamos dando informaciónsobre nuestros hábitos, nuestros movimientos, a posibles atacantes. Esun aspecto importante para mantener la seguridad en redes sociales.

� Hay que asegurarse de que nuestro contenido en las redes sociales seavisible solo para amigos y familiares. Podemos crear listas de tipos deamigos y personalizar la visibilidad de cada publicación. No todo debeestar visible para esa persona que trabajó con nosotros durante unassemanas hace unos años, por poner un ejemplo. Puede que haya cosasque no queramos compartir con todos los contactos.

� El GPS es una característica común en todos los teléfonos inteligentesen la actualidad. Además de ayudarnos mientras pasamos por unaciudad desconocida, el GPS también se utiliza para el geoetiquetado.Signi�ca que podemos adjuntar información de ubicación a cualquier

[email protected] 351 Antonio Carrillo Ledesma, Et alii

Page 354: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

contenido multimedia que enviemos o recibamos. Twitter, Facebooke Instagram usan esta característica extensivamente para ayudar a losusuarios a marcar la ubicación donde se hizo una foto, y ayudar a que elper�l sea más «social» . Los atacantes cibernéticos pueden interpretarfácilmente información como nuestro estado económico, estilo de vida,lugares frecuentes y la rutina diaria a través de los medios con etiquetasgeográ�cas.

� Una de las maneras más elementales de fortalecer nuestra cuenta deredes sociales es crear una contraseña robusta (véase sección 11.2.1),es decir, utilizar una combinación compleja -de al menos 15 caracteres-de letras mayúsculas, minúsculas, números y símbolos es siempre lamejor opción. Además, es imprescindible no con�arla a sus amistadesy cambiarla siempre que tengan dudas de su �abilidad.

� Guardar contraseñas en el dispositivo es una práctica muy habitual.Simplemente la abrimos y ya está, sin necesidad de tener que poner laclave cada vez que la usamos. Sin embargo esto no es un buen método.Si alguien accede físicamente a nuestro teléfono o al ordenador, podríaentrar sin problemas a nuestras cuentas. Lo más recomendable es noguardar contraseñas.

� En las redes sociales debemos de tener cuidado con los Links que nosllegan. Incluso si éstos proceden de algún amigo. Hay que �jarse bienen el enlace. En lo que contiene. Muchas veces puede ser una trampa.Nuestro contacto lo hace de forma inconsciente, claro. Pero se tratarealmente de un Malware.

� Algo que no puede faltar es contar con programas y herramientas deseguridad. Pero esto no se extiende únicamente a la seguridad en redessociales, sino a cualquier acción que hagamos en internet. Siempretenemos que tener algún antivirus instalado. Así podremos hacer frentea posibles amenazas que pongan en riesgo el buen funcionamiento denuestro equipo.

� En una red social lo normal es que cada usuario se identi�que con sunombre y apellido real y que aporte datos personales, como si estudia otrabaja, con quién se relaciona o en qué ciudad vive. También es muyfrecuente subir fotografías personales donde el usuario es perfectamente

[email protected] 352 Antonio Carrillo Ledesma, Et alii

Page 355: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

identi�cable. Esto hace que su exposición pública sea mucho mayor queantes, esto implica la pérdida del anonimato algo que antes era comúny habitual en internet.

� En las redes sociales, una vez que se pulsa el botón de "publicar", esainformación es enviada a los contactos del usuario. Eso signi�ca que simás adelante el usuario se arrepiente de lo dicho, publicado o mostradoy trata de borrarlo, solo conseguirá eliminarlo de su propio per�l, perono de las cuentas de todos sus amigos.

� Es muy común que de forma periódica aparezcan solicitudes de amistaden el per�l de cada usuario, por parte de personas que en realidad nose conocen. Muchas veces el acto de aceptar una de esas solicitudeses tan automático que no se vigila si se está admitiendo a una per-sona conocida o no. Los amigos se pueden contar con los dedos de lasmanos (con una suele ser su�ciente) mientras que lo que encontramosen las redes sociales son conocidos con los que debemos mantener lacorrespondiente distancia.

� Una red social es un lugar muy atractivo para estar; mientras másamigos se tienen, más novedades aparecen de forma constante en lapágina de cada uno, creándose un ciclo de interacciones que no tiene un�nal concreto. Eso hace que algunas veces el usuario sienta la necesidadde estar siempre pendiente y atento a su red social, dándose casosesporádicos y extremos de dependencia total a su red.

� Quizás lo más importante de estos consejos para mantener la seguri-dad en redes sociales es el sentido común. La gran mayoría del Malwarenecesita la interacción del usuario para ejecutarse. Debemos estar siem-pre alerta y usar el sentido común.

Acuerdos de Privacidad La lectura de los acuerdos de privacidad orien-tará al usuario sobre qué datos se comparten o no, y también se ofrece laopción de seleccionar o anular las opciones de privacidad, seguridad o ad-ministrativas escogidas para proteger la cuenta y el dispositivo. Estas sonalgunas recomendaciones generales a tener en cuenta para administrar mejorla con�guración de privacidad en una cuenta de redes sociales:

� Selecciona quién tiene acceso de visualización a la actividad en redessociales pasada, presente y futura (por ejemplo, Tuits, Me gusta, etc.).

[email protected] 353 Antonio Carrillo Ledesma, Et alii

Page 356: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Revisa qué contenido se le puede agregar (es decir, etiquetar) a unacuenta cuando otras personas suban o publiquen contenido.

� Revisa, comprende y de�ne la audiencia con la que se puede compartircontenido.

� Revisa, comprende y determina los formularios a través de los cualesotros usuarios pueden encontrar y conectarse con tu cuenta.

� Revisa, comprende y determina la cantidad de información personalque se incluye al bloguear o publicar información en línea.

� Monitorea periódicamente la seguridad y la información de inicio desesión de las cuentas y revisa la probabilidad de que se esté realizan-doalguna actividad sospechosa.

� Selecciona una copia de seguridad con�able, que pueda detectar orecibir alertas de alguna actividad sospechosa.

� Monitorea si y qué aplicaciones pueden acceder a alguno de tus datosy/o información en redes sociales, especialmente en segundo plano.

� Ten en cuenta las implicaciones de incluir la ubicación al publicar con-tenido en línea.

� Con�gura una autenticación de dos factores para iniciar sesión.

� Revisa la política de privacidad de la plataforma para saber qué datosrecopilan los servicios, con quién se comparten y selecciona tus prefer-encias en estos dos temas.

Al registrarte en una cuenta de redes sociales, por defecto, toda la infor-mación anotada en un per�l se hace pública, lo que signi�ca que cualquierpersona puede acceder al contenido que hayas registrado en una cuenta. Sinembargo, las necesidades y preferencias de privacidad varían de persona apersona. Mientras que algunos usuarios pre�eren tener una mayor exposi-ción y así poder promocionar su contenido en redes sociales, otros pre�erenincluir muy poca o ninguna información.Para lograr una mayor protección del usuario y su información, es impor-

tante evaluar en qué medida la persona está dispuesta a incluir informaciónpersonal en su per�l. Por consiguiente, ten en cuenta lo siguiente al:

[email protected] 354 Antonio Carrillo Ledesma, Et alii

Page 357: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Seleccionar un nombre de usuario: el nombre de usuario es el "nombredigital" que una persona se asigna a sí misma o a su organización paraser identi�cada en línea. Si existe la preferencia de no ser fácilmenteidenti�cada en ninguna plataforma, pero poder continuar usando estasredes, la persona puede asignar y usar un seudónimo que puede estarrelacionado o no con esa persona. Además, la persona puede cambiarsu nombre de usuario en cualquier momento simplemente ingresandoa la con�guración de su (s) cuenta (s). El nombre de usuario no tieneque ser coherente en todas las redes sociales; estas pueden variar segúnlas preferencias en cada una.

� Incluir una imagen en la cuenta: el usuario tiene la opción de person-alizar una cuenta con la inclusión de una foto del per�l. Cuando unusuario pre�ere no ser identi�cado, se sugiere elegir una imagen en laque no pueda ser identi�cado y cambiarla cuando sea necesario. Ten encuenta que cuando se usa la misma imagen en todas las redes sociales,la simple búsqueda de imágenes puede llevar a otras cuentas.

� Incluir una ubicación: cuando se activan los servicios de ubicación en laplataforma de redes sociales, estos les permiten a los usuarios rastrearel origen de cualquier actividad de medios en línea. Es importante teneren cuenta que una vez que se activa esta función, permanecerá activahasta que se elija deshabilitarla en la con�guración de privacidad. Apesar de que se permitía que esta característica estuviera activa enel pasado, las plataformas tienen la funcionalidad de deshabilitar laubicación de cualquier contenido que se haya publicado en sus cuentas.

Sin embargo, aunque un usuario active o desactive la función de com-partir la ubicación, potencialmente, la ubicación de un usuario podrá serdescubierta por el contenido que comparta o las imágenes que haya elegidopara compartir.

11.2.10 Videoconferencias

También conocidas como teleconferencias o videollamadas84 se han conver-tido en una herramienta indispensable para el trabajo, estudio y placer de84Algunas opciones son: Google Meet, Microsoft Teams, Jitsi Meet, Jami, Nextcloud

Talk, Riot.im, BigBlueButton, Wire, Skype, Hangouts, WhatsApp, FaceTime, GoogleDuo, Discord, Gruveo, Instagram, Snapchat, Meet, Line, Blue Jeans, Teams, Webex,Facebook Messenger, ZooRoom, Zoom, Signal, Viber, WeChat, etc.

[email protected] 355 Antonio Carrillo Ledesma, Et alii

Page 358: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

muchas personas, e incluso, el medio para dar continuidad a asuntos la-borales, la vida cotidiana y la comunicación con familiares y amigos. Lonovedoso de estos servicios para muchos usuarios y la aparición de algunasvulnerabilidades en ciertas plataformas85, supone para los ciberdelincuentesla oportunidad para el acceso no autorizado a información, robo de cre-denciales y acceso a los distintos recursos del dispositivo (como micrófono,cámara, etc.).Por lo anterior, es necesario promover la adecuada protección de los usua-

rios para evitar incidentes al usar estos servicios tales como:

� Informarse sobre las políticas de privacidad y las medidas de seguridadque implementa el servicio que se desea utilizar.

� Descargar e instalar la aplicación correspondiente desde la página Webo�cial del desarrollador o desde las tiendas o�ciales de apps.

� Mantener actualizada la aplicación que se utilice, pues es a través deeste proceso que se puede asegurar que las vulnerabilidades detectadasy corregidas por el desarrollador se están implementando.

� Al organizar una videoconferencia se recomienda tener en cuenta:

� En el caso de reuniones privadas, compartir el enlace directa-mente con los participantes, haciendo uso de las funciones paracompartir de las propias aplicaciones, y evitando el uso de redes

Si bien el equipo mínimo necesario para participar en videoconferencias es un equipoAtom o Celeron con 2 GB de RAM, casi todas las plataformas de videoconferencia re-comiendan un equipo de cómputo como el i3 de Intel con 2GB de RAM -o su equivalenteen AMD- para ser partícipe, en el caso de ser el an�trión de la reunión se recomienda unequipo i5 con 4 GB de RAM -o su equivalente en AMD-. En cualquier caso, es común hacerun uso intenso de CPU, generando más calor que en su uso cotidiano. Esto ocasionará quelos ventiladores del equipo trabajen a toda su capacidad para disipar el calor generado.Por ello es recomendable que el equipo esté conectado a la corriente eléctrica, cerrar lasaplicaciones innecesarias y que el equipo esté bien ventilado, además de no maximizar laventana de visualización de la videoconferencia pues esto generará mayor uso de CPU.En el caso de usar dispositivos móviles como tabletas o teléfonos inteligentes para ser

partícipe en videoconferencias, es recomendable instalar las aplicaciones de videoconfe-rencia respectiva y tratar de no hacerlo mediante el navegador, para así optimizar el usode Hardware y batería.85Una de las aplicaciones más usadas es Zoom, la cual ha tenido múltiples problemas

de seguridad y privacidad.

[email protected] 356 Antonio Carrillo Ledesma, Et alii

Page 359: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sociales o canales de comunicación abiertos que podrían promoveraccesos no deseados.

� Proteger la conferencia con una contraseña robusta, para res-tringir el acceso a ésta a personas no autorizadas.

� Si la plataforma la incorpora, activar la funcionalidad que per-mite al organizador veri�car y, en su caso, aprobar el acceso delos participantes que deseen acceder a la videoconferencia.

� Los participantes en videoconferencia deben evitar compartir su es-critorio de forma predeterminada ya que esto podría provocar fugas deinformación.

� Se debe cuidar el encendido del micrófono y la cámara de video paraevitar situaciones incómodas o embarazosas.

� Si la videoconferencia es grabada, el organizador debe comunicarlo alos participantes.

11.2.11 Seguridad de la Red

Una parte importante del trabajo y estudio a distancia es la aplicación demedidas de seguridad de las redes. Es cada vez más común que los usuariostengan acceso a un Ruteador inalámbrico (Wi-Fi) para conectar sus disposi-tivos a internet sin necesidad de cables.

Redes Wi-Fi casi todas las redes domesticas comienzan con una redinalámbricas (Wi-Fi), la mayoría de las redes inalámbricas están controladaspor el Router de internet o punto de acceso inalámbrico separado y dedicado.Ambas trabajan de la misma manera: transmitiendo señales inalámbricas quepermiten que los dispositivos de tu casa se conecten a internet.Para evitar que usuarios no autorizados se conecten de forma inalámbrica

al Ruteador86 y tengan la posibilidad de acceder a la conexión, e incluso alresto de los dispositivos conectados y a la información que se transmite, esimportante mantenerlo actualizado y asegurar que la red Wi-Fi cuente con

86Si no se estas seguro de como con�gurar tu dispositivo de acceso a internet, consultael sitio Web de tu proveedor de servicios de internet o consulta el sitio Web del proveedorpara tu Router o punto de acceso inalámbrico.

[email protected] 357 Antonio Carrillo Ledesma, Et alii

Page 360: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

contraseña robusta (véase sección 11.2.1) que el usuario debe introducir alconectar por primera vez un dispositivo.Los Ruteadores ofrecen varios tipos de contraseñas y cifrados (que codi-

�can los datos del usuario, usando un valor o clave secreta y los hace incom-prensibles para terceros), como los siguientes:

� Las redes sin cifrado, o abiertas, son aquéllas que no tienen ningunacontraseña o cifrado y permiten a cualquier usuario conectarse. Unared con estas características no es recomendable su uso.

� El cifrado Wired Equivalent Privacy (WEP, por sus siglas en inglés) esconsiderado, hoy en día, un sistema poco seguro y no se aconseja suuso ya que, con las herramientas y conocimientos adecuados, se puedellegar a conseguir la clave de acceso a la red Wi-Fi en pocos minutos.

� El cifrado Wi-Fi Protected Access (WPA, por sus siglas en inglés),especí�camente en su versión 2 (WPA2) o más actualizada, es consi-derado seguro y se recomienda comprobar que esté habilitado comoparte de las medidas de seguridad de la red. Para comprobarlo, esnecesario entrar desde la computadora a las propiedades de la red, paraver el tipo de seguridad de la conexión. Se recomienda tener habilitadaalguna de las variantes de WPA2, al menos. Puedes solicitar apoyo atu proveedor de servicios de internet para más orientación.

� Se recomienda cambiar las contraseñas predeterminadas en el Ruteadorpor unas de elección del usuario y distinta a la utilizada para conectarsea la red inalámbrica, utilizando contraseñas robustas, se recomiendaque incluya mayúsculas, minúsculas, números y símbolos. Cuantomayor sea la longitud de la contraseña, más difícil será que un ata-cante pueda descubrirla.

� Es importante evitar compartir la clave de la red Wi-Fi con otras per-sonas, pues quien tenga acceso a tu red inalámbrica podría tener accesoa todos los dispositivos conectados a ella.

� Es importante evitar la conexión a redes Wi-Fi públicas abiertas (oHotspots Wi-Fi). Estas redes son totalmente inseguras ya que permitenque cualquier dispositivo se conecte al Ruteador sin ningún tipo deseguridad, por lo que cualquier usuario podría capturar la informaciónque se transmita a través de dicha conexión.

[email protected] 358 Antonio Carrillo Ledesma, Et alii

Page 361: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� De ser posible usar �ltrado por MAC para asegurar que cada dispositivoque acceda a la red sea el autorizado por el administrador de la misma.

VPN o red privada virtual (Virtual Private Network, VPN) es un ser-vicio mediante el cual se establece una conexión segura a través de internet,entre los usuarios y los servicios o páginas Web de internet a los que éstosacceden.Si imaginamos el internet como un río en el que �uye el agua (datos e

información), la VPN es un tubo, sumergido en el río, que impide ver todolo que pasa dentro de él, debido a que la conexión entre los dispositivos yel servidor VPN siempre está cifrada (protegida). De esa manera, si alguieninterceptara tus comunicaciones, sería incapaz de interpretar la informacióntransmitida.En algunas ocasiones, las empresas ponen a disposición de sus empleados

acceso a través de VPN; de no ser éste el caso o para añadir una capa extrade seguridad a tus comunicaciones personales, las VPN pueden contratarsecomo servicio (no se recomienda utilizar servicios de VPN gratuitos, pueséstos podrían tener el efecto contrario al deseado de proteger la información).En este sentido, es esencial utilizar un servidor VPN de con�anza para elteletrabajo.Como usuario de una conexión VPN, somos capaces de establecer comu-

nicación con servidores alojados en todo el mundo. ¿Esto qué quiere decir?entre otras cosas, la página Web que visitemos registrará la IP que ofrece elservidor VPN determinado, y pongamos que se encuentra alojado en EstadosUnidos. El sitio Web identi�cará la comunicación como proveniente de estepaís americano. Y esto ofrece una serie de ventajas como:

� Consumir contenido en Streaming de otros países -por una simple cues-tión de derechos de autor-, cada país cuenta con su propio catálogo decontenidos en Streaming, ya sea Net�ix o Amazon Prime Video. Inclusoexisten ciertos servicios exclusivos de un país, imposibles de accederdesde otros. Gracias a una conexión VPN, la orden del servidor paraconectarnos a una de estas plataformas llega desde un país extranjero,por lo que el servicio detectará que estamos en ese país y nos ofreceráel contenido correspondiente.

[email protected] 359 Antonio Carrillo Ledesma, Et alii

Page 362: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Seguridad en el teletrabajo, gracias a las redes VPN los distintos equiposde una compañía pueden establecer comunicación entre sí, sin necesi-dad de que estos se encuentren conectados a la misma red. Pueden,incluso, estar en diferentes sucursales de su empresa, situadas en dis-tintos puntos de la geografía mundial. Permitir el acceso a la red localde empresa desde un sitio externo supone un peligro para los datosalmacenados. Sin VPN se pueden establecer contraseñas para accedera esa red local, pero seguirá siendo susceptible de ataque. A través deuna red VPN el acceso y la seguridad de los datos están protegidos.

� Evitar la censura en internet, ciertos países mantienen un control férreode lo que lo que sus habitantes pueden consumir o no en internet. Porello, una manera sencilla y segura de saltarse la censura es habilitandoen su ordenador una conexión VPN. Por ejemplo, países como China,Corea del Norte o Emiratos Árabes Unidos captan ciertos contenidosque pueden ser accesibles gracias a la conexión VPN.

� Seguridad adicional en nuestra navegación, las conexiones VPN puedenvenir acompañadas de un cifrado de la información que se transmitecon ellas.

� Protección en descargas P2P, algunos proveedores bloquean la descargade Torrents a través de programas P2P. Y sin tener en cuenta quepodemos estar descargando material legítimo. Gracias a las conexionesVPN esto se podrá evitar.

Prevención de Ataques a una Red para mantener un cierto grado deprotección de la información conectada a la red, las organizaciones, entidadesy personas en general, deben comprender que su seguridad, y las formas enque esta se trata de vulnerar, mejoran constantemente; por tanto, lo principaly primero es entender cómo pueden sucederse estos ataques y en qué consistendichas amenazas, con el �n de poder remediarlas de la mejor forma posible.Existen diferentes formas efectivas para lidiar y mitigar los ataques que

pueden suceder en una red. En función del tipo de ataque, algunas de ellasson:

� Para prevenir Malware, Adware y Spyware: instalar en los dispositivosun Software antivirus como primera protección, mantenerlo actualizado

[email protected] 360 Antonio Carrillo Ledesma, Et alii

Page 363: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

como segunda, y realizar escaneos periódicos como tercera. Ejecutarparches de seguridad en los sistemas operativos que se empleen, realizarcopias de seguridad de los datos y emplear contraseñas diferentes y bienformadas para cada servicio al que se accede, con�gurar adecuadamentela seguridad de los navegadores y no descargar de la red aplicaciones oarchivos de procedencia desconocida.

� Para prevenir Ransomware: La primera recomendación es tener actua-lizado el sistema operativo y todas las soluciones de seguridad, así comoel antivirus y el cortafuegos personal habilitado (Firewall); evitar los ac-cesos administrativos desde fuera de la entidad, y en caso necesario, per-mitirlos sólo mediante protocolos seguros. Activar la visua-lización delas extensiones de los �cheros para evitar ejecución de código dañino ca-mu�ado como �cheros legítimos no ejecutables, deshabilitar las macrosen los documentos, educar a los usuarios de la red para reconocer ame-nazas antes de abrir archivos adjuntos enviados por correo electrónico,y realizar copias periódicas de respaldo de información para sistemascríticos.

� Para prevenir el Escaneo de Puertos: una forma efectiva es cerrar lospuertos o servicios que no se utilizan en los sistemas, siempre que seaposible, emplear puertos no conocidos para determinadas aplicaciones(y no los con�gurados por defecto), tener con�gurado un cortafuegos(Firewall), y silenciar o desinformar las respuestas a encuestas de puer-tos.

� Para prevenir el Phishing: se recomienda a los usuarios de la red irdespacio ante cada acción, sin importar la urgencia que se emplee en losmensajes que se reciben; investigar los hechos y sospechar de cualquiercomunicación no solicitada o desconocida. Rechazar y no responderninguna solicitud de información con�dencial como contraseñas o datosde tarjetas de crédito, así como nunca descargar ni ejecutar archivosadjuntos de personas desconocidas.

� Para prevenir ataques de Botnets: es necesario cambiar regularmentelas contraseñas de acceso, incluido el Router de conexión; manteneractualizado el sistema operativo y el antivirus instalado, evitar realizardescargas P2P o vía Torrent porque, en muchas ocasiones, es la prin-cipal vía de entrada para estas infecciones, así como limitar el acceso a

[email protected] 361 Antonio Carrillo Ledesma, Et alii

Page 364: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sitios cuya seguridad resulte sospechosa.

� Para prevenir la Denegación de Servicios (DoS): se deben bloquear di-recciones IP que no se empleen, así como deshabilitar puertos y serviciosde red innecesarios, aplicar �ltros de enrutamiento, permitiendo solo elacceso al trá�co deseado, realizar una efectiva política de contraseñas,así como establecer la cantidad de ancho de banda a emplear por losusuarios.

� Para prevenir ataques de intermediario (Man In The Middle, MITM):la variante más adecuada es encriptar el trá�co que se envía por redesabiertas. Para ello se utilizan las redes virtuales privadas (VPN) y seemplea para los documentos la Infraestructura de las Llaves Públicas(Public key Infrastructure, PKI), Certi�cados Digitales, y una EntidadCerti�cadora, lo que contribuye a proteger los documentos enviados ycon�rmar la identidad de los usuarios mediante el cifrado de los men-sajes. Una PKI establece un esquema de con�anza en el cual ambaspartes de una comunicación electrónica confían en un ente emisor paraque veri�que y con�rme la identidad de ambas.

11.2.12 Ataques con Técnicas de Inteligencia Social

Los ataques de ingeniería social buscan engañar a los usuarios para obtenernombres de usuario y contraseñas, así como otra información sensible. Lacapacidad de identi�car un ataque de ingeniería social minimiza, en granmedida, el riesgo de ser víctimas de los ciberdelincuentes y ver comprometidainformación personal o de la organización para la que trabajamos. Para ello,se recomienda:

� Estar alertas ante comunicaciones, como llamadas, correos electrónicos,mensajes cortos (SMS), enlaces de teleconferencias e invitaciones decalendario de remitentes desconocidos.

� Antes de abrir cualquier enlace, archivo anexo, mensaje de texto ollamada de un remitente desconocido, hay que preguntarse lo siguiente:

� ¿Espero esa información? Si el mensaje proviene de un remi-tente desconocido (persona u organización), analizar bien antesde responder o hacer clic y/o descargar cualquier archivo adjunto.

[email protected] 362 Antonio Carrillo Ledesma, Et alii

Page 365: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� ¿Reconozco al remitente? Comprobar si la dirección está bienescrita (veri�car que no haga falta ninguna letra, por ejemplo) y siel dominio (la terminación del correo electrónico) es de con�anzay corresponde al nombre de quien envía el mensaje.

� ¿Solicitan que haga algo? Los correos electrónicos fraudulentos(Phishing) o los mensajes de texto de este tipo (Smishing) suelenpedir que se realice alguna acción como: hacer Clic en un hiper-vínculo, descargar algún archivo, responder al mensaje proporcio-nando información personal, etc. Con frecuencia, buscan generaruna sensación de urgencia y provocar una reacción inmediata eirracional. Es necesario analizar con calma antes de proporcionarcualquier información que pudiera resultar comprometedora.

� Se debe descon�ar, particularmente, de los mensajes que pare-cerían genéricos (como "Estimados:", "A quien corresponda:",etc.).

� En el caso de comunicaciones referentes a instituciones banca-rias y �nancieras, se recomienda nunca dar Clic en los enlacescontenidos en un correo o mensaje y no proporcionar informaciónde acceso a tus cuentas. Si tienes alguna duda, debes contac-tar directamente a tu institución �nanciera (utilizando el númerotelefónico que vienen atrás de tu tarjeta, por ejemplo) para másorientación.

Siempre hemos de tener presente que garantizar la protección absolutade su información digital es difícil sino imposible, pero debemos aprovechartodas las herramientas y avances que están a nuestro alcance. De esta forma,estaremos mejorando la seguridad de nuestros datos personales y sus con-tenidos. Son pequeños gestos diarios que, en caso de problemas, marcaránuna gran diferencia.

11.3 Meltdown, Spectre y lo que se Acumule

El tres de enero del 2018 se dio a conocer al público, que 6 meses antesse habían detectado dos distintos fallos en los procesadores de los equiposde cómputo, comunicaciones y redes de internet que usamos. Esto paradar tiempo a los desarrolladores de procesadores y de sistemas operativosde implementar estrategias para mitigar el problema. Estos son problemas

[email protected] 363 Antonio Carrillo Ledesma, Et alii

Page 366: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de diseño de los procesadores de Intel, AMD, IBM POWER y ARM, estosigni�ca que procesos con privilegios bajos (aquellos que lanzan las aplica-ciones de usuarios convencionales) podían acceder a la memoria del Kerneldel sistema operativo.Un ataque que explotase dicho problema permitiría a un Software mali-

cioso espiar lo que están haciendo otros procesos y también espiar los datosque están en esa memoria en el equipo de cómputo (o dispositivo móvil) ata-cado. En máquinas y servidores multiusuario, un proceso en una máquinavirtual podría indagar en los datos de los procesos de otros procesos en eseservidor compartido.Ese primer problema, es en realidad solo parte del desastre. Los datos

actuales provienen especialmente de un grupo de investigadores de seguridadformados por expertos del llamado Project Zero87 de Google. Ellos hanpublicado los detalles de dos ataques (no son los únicos88) basados en estosfallos de diseño. Los nombres de esos ataques son Meltdown y Spectre. Yen un sitio Web dedicado a describir estas vulnerabilidades destacaban que"aunque los programas normalmente no tienen permiso para leer datos deotros programas, un programa malicioso podría explotar Meltdown, Spectrey apropiarse de secretos almacenados en la memoria de otros programas".Como revelan en su estudio, la diferencia fundamental entre ambos es queMeltdown permite acceder a la memoria del sistema, mientras que Spectrepermite acceder a la memoria de otras aplicaciones para robar esos datos.

En GNU/Linux, el Kernel (si usamos una versión actualizada) nos indicalas fallas del procesador a las que es vulnerable, usando:

$ cat /proc/cpuinfo

87https://googleprojectzero.blogspot.com/88Entre las distintas vulnerabilidades detectadas y sus variantes resaltan: Meltdown

(AC, DE, P, SM, SS, UD, GP, NM, RW, XD, BR, PK, BND), Spectre (PHT, BTB, RSB,STL, SSB, RSRE), PortSmash, Foreshadow, Spoiler, ZombieLoad (1 y 2), Kaiser, RIDL,Plundervolt, LVI, Take a Way, Collide+Probe, Load+Reload, LVI-LFB, MSD, CSME,RYZENFALL (1, 2, 3, 4), FALLOUT (1, 2, 3) , CHIMERA (FW, HW), MASTERKEY(1, 2, 3), SWAPGS, ITLB_Multihit, SRBDS, L1TF, etc. Más información en:

https://cve.mitre.orghttps://meltdownattack.com/

[email protected] 364 Antonio Carrillo Ledesma, Et alii

Page 367: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Ya que Meltdown y Spectre son problemas de diseño en los procesadores,no es posible encontrar solución por Hardware para los procesadores exis-tentes y dado que constantemente aparecen nuevas formas de explotar dichosfallos, la única manera de mantener el equipo de cómputo, comunicacionesy redes de internet a salvo es mediante Software que debe implementar lassoluciones en los sistemas operativos. En particular en el Kernel de Linux setrabaja en parchar en cada versión del Kernel todos los fallos reportados, poresto y por otra gama de fallos e inseguridades es necesario mantener siempreel sistema operativo y sus aplicaciones actualizadas.Como se había comentado anteriormente, estos problemas de diseño afec-

tan a todos los procesadores Intel, AMD, IBM POWER y ARM. Eso incluyebásicamente a todos los procesadores que están funcionando al día de hoyen nuestros equipos, ya que estos procesadores llevan produciéndose desde1995. Afecta a una amplia gama de sistemas.En el momento de hacerse pública su existencia se incluían todos los dis-

positivos que no utilizasen una versión convenientemente parcheada de IOS,GNU/Linux, MacOS, Android, Windows y Android. Por lo tanto, muchosservidores y servicios en la nube se han visto impactados, así como poten-cialmente la mayoría de dispositivos inteligentes y sistemas embebidos queutilizan procesadores con arquitectura ARM (dispositivos móviles, televisoresinteligentes y otros), incluyendo una amplia gama de equipo usado en redes.Se ha considerado que una solución basada únicamente en Software para es-tas fallas enlentecería los equipos de cómputo entre un 20 y un 40 por cientodependiendo de la tarea que realizasen y el procesador del equipo.

¿Qué es Meltdown? este fallo explota una condición de carrera inhe-rente al diseño de muchas CPU actuales. Esta condición se da entre losaccesos a la memoria y la comprobación de privilegios durante el proce-samiento de instrucciones. Además, en combinación con un ataque de canallateral a la memoria caché de la CPU, esta vulnerabilidad permite que unproceso se salte las comprobaciones habituales de nivel de privilegio que nor-malmente aislarían al proceso maligno e impedirían que accediese a datosque pertenecen al sistema operativo y otros procesos concurrentes.La vulnerabilidad permite que un proceso no autorizado lea información

de cualquier dirección mapeada al espacio de memoria del proceso actual.Dado que la segmentación de instrucciones reside en los procesadores afec-tados, la información de una dirección no autorizada casi siempre se cargará

[email protected] 365 Antonio Carrillo Ledesma, Et alii

Page 368: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

temporalmente en la memoria caché de la CPU durante la ejecución fuera deorden, pudiendo posteriormente leerse desde la memoria caché. Esto puedesuceder incluso cuando la instrucción de lectura original falla debido a unacomprobación de privilegios que da negativo, o cuando no produce un resul-tado legible.Dado que muchos sistemas operativos mapean la memoria física, los pro-

cesos del núcleo y otros procesos del espacio de usuario en el espacio de di-recciones de cada proceso, Meltdown permite que un proceso maligno puedaleer cualquier memoria mapeada física, del núcleo o de otro proceso, con in-dependencia de si debería o no poder hacerlo. Las defensas contra Meltdownexigirían evitar el uso del mapeo de memoria de un modo que resultase vul-nerable a tales amenazas (una solución basada en Software), o bien evitarla condición de carrera subyacente (una modi�cación del microcódigo de laCPU o la ruta de ejecución).El agujero es viable en cualquier sistema operativo en el que la información

privilegiada se mapea a memoria virtual para procesos no privilegiados, unacaracterística que incorporan muchos sistemas operativos actuales. Por lotanto, potencialmente Meltdown puede afectar a una gama de dispositivosmayor que la identi�cada actualmente, dado que apenas hay variaciones entrelas familias de microprocesadores utilizados por estos sistemas.

¿Qué es Spectre? es una vulnerabilidad que permite a los programasalojados en el sistema operativo del usuario acceder a una dirección arbitrariadel espacio de memoria de un programa. En lugar de una única vulnerabi-lidad de fácil corrección, el documento de Spectre describe una clase enterade vulnerabilidades potenciales. Todas esas vulnerabilidades se basan enexplotar los efectos secundarios de la ejecución especulativa, una técnicaempleada comúnmente para combatir la latencia de la memoria y acelerarasí la ejecución en los microprocesadores modernos.En particular, Spectre se centra en la predicción de saltos, un caso especial

de la ejecución especulativa. A diferencia de la vulnerabilidad Meltdownhecha pública la misma fecha, Spectre no depende de una característica enparticular de la gestión de memoria de un procesador en concreto o de cómoproteja el acceso a esa memoria, sino que tiene un enfoque más general.El punto de partida del documento de Spectre es un ataque sincronizado

de canal lateral aplicado al sistema de predicción de saltos de un micro-procesador moderno que utilice ejecución fuera de orden. Si bien al nivel

[email protected] 366 Antonio Carrillo Ledesma, Et alii

Page 369: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

arquitectónico documentado en las hojas técnicas de los procesadores losresultados de un fallo en la predicción se especi�can que quedarán anuladostras darse dicha circunstancia, la ejecución especulativa resultante puede aunasí dejar efectos colaterales, como líneas de caché cargadas con determinadainformación.Estos efectos colaterales pueden posteriormente afectar a los denominados

aspectos no funcionales del sistema informático. Si tales efectos colaterales-incluyendo, entre otros, los tiempos de acceso a la memoria- resultan visiblespara un programa malicioso, y puede hacerse que esos efectos dependan deinformación sensible en posesión del proceso que hace las veces de víctima,entonces estos efectos colatelares pueden hacer que la información sensibleresulte deducible. Esto puede ocurrir aunque los sistemas de seguridad for-males a nivel de arquitectura funcionen de forma correcta -lo que sucede esque las optimizaciones en los niveles más bajos a nivel de microarquitecturadirigidas a la aceleración la ejecución de código pueden revelar informaciónno esencial para la correcta ejecución de un programa-.

Falla en los Procesadores Snapdragon El día 8 de agosto del 2020se publico que los procesadores Qualcomm Snapdragon89 de más de 3 milmillones de dispositivos Android del mundo son vulnerables a ataques quepueden convertirlos en herramientas de espionaje al explotar más de cua-trocientas vulnerabilidades y no se sabe cuando Google y los fabricantes dedispositivos móviles incorporaraán la solución de Qualcomm.Las vulnerabilidades pueden explotarse cuando un objetivo descarga un

video u otro contenido que es procesado por el chip. Los objetivos tam-bién pueden ser atacados instalando aplicaciones maliciosas que no requierenningún permiso. Desde allí, los atacantes pueden monitorear ubicaciones yescuchar audio cercano en tiempo real y �ltrar fotos y videos. Las infec-ciones se pueden ocultar del sistema operativo de tal manera que di�culta ladesinfección.Snapdragon es lo que se conoce como un sistema en un chip que propor-

ciona una gran cantidad de componentes, como una CPU y un procesador degrá�cos. Una de las funciones conocida como procesamiento de señal digitalo DSP, aborda una variedad de tareas, incluidas las capacidades de cargay de las funciones de video, audio, realidad aumentada y otras funciones

89Representa a más del 40% de los teléfonos inteligentes del mercado incluyendo a losteléfonos de las compañías Google, Samsung, LG, Xiaomi, OnePlus, Motorola, etc.

[email protected] 367 Antonio Carrillo Ledesma, Et alii

Page 370: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

multimedia.Los investigadores de la �rma de seguridad Check Point en un breve in-

forme sobre las vulnerabilidades que descubrieron indican que estos Chipsintroducen una nueva super�cie de ataque y puntos débiles en estos dispos-itivos móviles por las múltiples vulnerabilidades de los DSP. Qualcomm halanzado una solución a las fallas, pero hasta el momento no se han incorpo-rado al sistema operativo Android.Por el momento Check Point está reteniendo detalles técnicos sobre las

vulnerabilidades y cómo se pueden explotar hasta que las soluciones lleguena los dispositivos del usuario �nal. Check Point ha denominado a las vulne-rabilidades Achilles. Los más de 400 errores distintos se rastrean como:

CVE-2020-11201, CVE-2020-11202, CVE-2020-11206, CVE-2020-11207, CVE-2020-11208 y CVE-2020-11209.

En un comunicado, los funcionarios de Qualcomm dijeron: "Con respectoa la vulnerabilidad de Qualcomm Compute DSP revelada por Check Point,trabajamos diligentemente para validar el problema y poner las mitigacionesadecuadas a disposición de los OEM. No tenemos evidencia de que esté siendoexplotado actualmente. Alentamos a los usuarios �nales a actualizar susdispositivos a medida que los parches estén disponibles y solo a instalaraplicaciones de ubicaciones con�ables como Google Play Store".No hay mucha orientación útil para proporcionar a los usuarios cómo

protegerse contra estos ataques. Descargar aplicaciones solo desde Play puedeayudar, pero el historial de veri�cación de aplicaciones de Google muestra quelos consejos tienen una e�cacia limitada. Tampoco hay forma de identi�care�cazmente el contenido multimedia explotable.

Falla en el Chip T2 de las Mac Expertos en ciberseguridad de la em-presa belga ironPeak han con�rmado los rumores de que los chips de se-guridad T2 pueden llegar a ser hackeados: una determinada combinación dedos �exploits�diferentes proporciona al atacante la oportunidad no sólo decambiar el comportamiento del chip, sino incluso de instalar Malware en elmismo (como keyloggers).Y hay tres factores que hacen que esta noticia resulte especialmente

chocante... y preocupante:

� Que el objetivo de estos Chips T2 es precisamente el de salvaguardarla seguridad de los datos: se trata de un procesador independiente

[email protected] 368 Antonio Carrillo Ledesma, Et alii

Page 371: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

que actúa de intermediario entre la CPU y el sistema operativo y quepermite supervisar que sólo se ejecute en el equipo Software aprobadopor Apple.

� Que el Chip T2 viene instalado en todos los iMac Pro, Macbook Proy Macbook Air vendidos desde 2018, en todos los Mac Pro desde 2019y en todos los iMac del 2020. Es decir, afecta a un número notable deusuarios.

� Pero lo peor de todo es que, aunque el atacante puede modi�car elcomportamiento del Chip T2, la vulnerabilidad no puede ser parcheadapreventivamente, porque ésta se basa precisamente en la escritura delapartado de sólo lectura del Chip.

¿Cómo Funciona este Ataque? los Exploits usados para esta clasede ataque son dos que ya se venían usando para aplicar el Jailbreak a dispos-itivos iOS (el T2 está basado en el chip A10, usado por los iPhones más an-tiguos). Según ironPeak, este método funciona porque: "Apple dejó abiertauna interfaz de depuración cuando envió los Chips T2 a los clientes, lo quepermite a cualquiera entrar en el modo de actualización de Firmware deldispositivo sin autenticación".Con este método, es posible crear un cable USB-C que puede explotar

automáticamente la vulnerabilidad de su dispositivo MacOS durante el ar-ranque. Esto permite a un atacante obtener acceso root sobre el Chip T2 ymodi�car o controlar cualquier cosa que se ejecute en el dispositivo atacado.El lado bueno de esto es que, como habrás deducido de leer lo anterior,

esta clase de ataque requiere de acceso físico para funcionar (idealmente, devarios accesos físicos). En principio, el riego para un usuario medio de Mac esbastante bajo (otra cosa son aquellos equipos integrados en redes de grandesempresas y organismos públicos).Ante la imposibilidad de parchearlo, desde ironPeak se muestran conven-

cidos de que Apple desarrollará una nueva versión del T2 para los próximosequipos que lance al mercado... la cual dejará de ser necesaria cuando desem-barque la próxima generación Apple Silicon, que traerá incluidas las funcionesde seguridad en el propio Chip ARM.

[email protected] 369 Antonio Carrillo Ledesma, Et alii

Page 372: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

11.4 Distribuciones de Linux «Seguras y para Pene-tración»

Para muchos, Linux y Mac OS son dos sistemas operativos más seguros queWindows de Microsoft, pero con todo, hay algunas distribuciones especia-lizadas de Linux que satisfacen las necesidades de temas relacionados con laseguridad, pruebas de penetración, análisis forense y auditorías de seguridad.Las distribuciones seguras intentan preservar la privacidad y el anoni-

mato, ayudan a utilizar internet de forma anónima y evitar la censura enprácticamente cualquier lugar y cualquier equipo de cómputo, pero sin dejarrastro a menos que lo solicites explícitamente.Las distribuciones para pruebas de penetración ofrecen herramientas para

penetración, análisis forense y auditorías de seguridad en donde se realizandistintos tipos de tareas que identi�can, en una infraestructura objetivo, lasvulnerabilidades que podrían explotarse y los daños que podría causar unatacante. En otras palabras, se realiza un proceso de Hacking ético paraidenti�car qué incidentes podrían ocurrir antes de que sucedan y, posterior-mente, reparar o mejorar el sistema, de tal forma que se eviten estos ataques.Las distribuciones anónimas ofrecen niveles adicionales de privacidad y

seguridad y se complementan con las distribuciones para pruebas de pe-netración que ofrecen herramientas para penetración y auditorías de seguri-dad (mediante el uso de tecnologías como TOR90, Sandbox91, Firewall92,

90Tor es una red abierta y distribuida que te ayuda a defenderte de una forma devigilancia en la red que amenaza tu libertad y privacidad, tus actividades comercialescon�denciales y relaciones, además de la seguridad gubernamental. Además, te protegeredirigiendo tus comunicaciones alrededor de una red distribuida de retransmisores rea-lizados por voluntarios alrededor del mundo: lo cual previene que alguien observe tuscomunicaciones a partir de los sitios que visitas, también evita que los sitios en que navegasobtengan tu ubicación física.91Sandbox es un mecanismo para ejecutar programas con seguridad y de manera sepa-

rada. A menudo se utiliza para ejecutar código nuevo, o Software de dudosa con�abilidadproveniente de terceros. Ese entorno aislado permite controlar de cerca los recursos pro-porcionados a los programas cliente a ejecutarse, tales como espacio temporal en discos ymemoria. Habitualmente se restringen las capacidades de acceso a redes, la habilidad deinspeccionar la máquina an�trión y dispositivos de entrada entre otros. En este sentido,el aislamiento de procesos es un ejemplo especí�co de virtualización.92Un cortafuegos es una parte de un sistema o una red que está diseñada para bloquear el

acceso no autorizado, permitiendo al mismo tiempo comunicaciones autorizadas. Se tratade un dispositivo o conjunto de dispositivos con�gurados para permitir, limitar, cifrar odescifrar el trá�co entre los diferentes ámbitos sobre la base de un conjunto de normas y

[email protected] 370 Antonio Carrillo Ledesma, Et alii

Page 373: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

herramientas criptográ�cas93, etc.). De ambos tipos de Softwares hay variasalternativas diferentes, tanto comerciales como de Software libre, por lo quedecidirse por una u otra, en ocasiones puede ser una tarea un tanto compli-cada. Es por ello que aquí listamos algunas de las distribuciones de Linuxmás usadas en la actualidad, apartados con los que cada vez debemos prestarmás atención.Las distribuciones seguras y para penetración son sistemas operativos

Live94 diseñados para ser usados desde un CD, DVD, memoria USB omáquinavirtual independientemente del sistema operativo original de la computadora.

Distribuciones de GNU/Linux «Seguras»

Tails (https://tails.boum.org/)Para muchos esta es la primera opción a la hora de buscar una solución

de seguridad en Linux. También conocida como «The Amnesic IncognitoLive System» , esta es una distribución basada en Debian. Es un proyecto decódigo abierto que se publicó por primera vez hace 8 años y que redirige todoel trá�co Web a través de Tor logrando la privacidad a través del anonimato.Además, almacena todo en la RAM y evita el uso del disco duro, por lo queborra todo una vez se apaga. La imagen tiene un tamaño menor de 1.2 GBy necesita al menos 2 GB de RAM en un equipo de 64 bits, se puede usar enformato Live, como máquina Virtual o bien instalarse en una USB, DVD oen el disco duro del equipo.

Whonix (https://www.whonix.org/)Es una distribución que se basa en Debian y consta de dos máquinas

virtuales, una es Tor Gateway que se ejecuta en Debian, mientras que la

otros criterios. Los cortafuegos se utilizan con frecuencia para evitar que los usuarios deinternet no autorizados tengan acceso a redes privadas, especialmente intranets.93El surgimiento de redes de comunicación, en particular de internet, ha abierto nuevas

posibilidades para el intercambio de información. Al mismo tiempo, son cada vez mayoreslas amenazas a la seguridad de la información que se transmite. Es necesario entonces,crear diferentes mecanismos, dirigidos a garantizar la con�dencialidad y autenticidad delos documentos electrónicos, todo ello es parte de la Criptografía.94Linux es uno de los sistemas operativos pioneros en ejecutar de forma autónoma o

sin instalar en la computadora, existen diferentes distribuciones Live -descargables paraformato CD, DVD, USB- de sistemas operativos y múltiples aplicaciones almacenados enun medio extraíble, que pueden ejecutarse directamente en una computadora, estos sedescargan de la Web generalmente en formato ISO.

[email protected] 371 Antonio Carrillo Ledesma, Et alii

Page 374: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

otra es una Workstation. Whonix se instala en un sistema operativo Hostproporcionado por el usuario que puede ser Linux, Windows, MacOS o QubesOS. Así al utilizar la red abierta y distribuida de transmisión de Tor, Whonixecha abajo las posibilidades de vigilancia de la Red. Además, y por motivosde seguridad, hace todo lo posible para ocultar nuestra dirección IP real.

Qubes OS (https://www.qubes-os.org/)Se conoce como uno de los sistemas operativos más seguros del mundo

y se basa en realizar la virtualización mediante el «hipervisor Xen» -unhipervisor imita el Hardware y permite ejecutar varias máquinas virtualessimultáneamente-. El entorno de usuario de Qubes OS podría ser Fedora,Debian, Whoix o Windows y, al igual que Tails. Así mismo utiliza diferentesdominios para separar los niveles de con�anza, por ejemplo, un dominio detrabajo, un dominio para el ocio, etc.; los cuales se ejecutan en diferentesmáquinas virtuales, esta versión requiere un mínimo de 16 GB de RAM.

Subgraph OS (https://subgraph.com/)Nos encontramos con un sistema operativo seguro basado en Debian que

promete proporcionar una experiencia digital anónima. Ha sido diseñadopara evitar diferentes ataques de Malware, es capaz de ser una plataformade comunicación segura además de proporcionar una interfaz de usuario muysencilla.

Discreete Linux (https://www.privacy-cd.org/)En este caso nos encontramos con un proyecto de Software libre que

puede ser utilizado por cualquier persona que desee llevar una vida digitalanónima también basado en Debian. Además, protege a sus usuarios contralos ataques de vigilancia accionados por troyanos y hoy en día esta en faseBeta. Es una de las alternativas más adecuadas para los usuarios que notienen un conocimiento muy profundo de estos sistemas pero que consideranla seguridad en internet como su principal preocupación. Hace uso de cifradosy entornos aislados para proporcionar un entorno de trabajo seguro. Asímismo no utiliza los discos duros internos del equipo, ya que almacena todossus datos en la memoria RAM o en una unidad de disco USB externa.

Kodachi (https://www.digi77.com/linux-kodachi/)

[email protected] 372 Antonio Carrillo Ledesma, Et alii

Page 375: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Es un sistema operativo centrado en la seguridad y basado en Debiancuyo objetivo es proporcionar una experiencia informática segura. Ponerloen marcha es muy sencillo y no necesita demasiado tiempo, ya que permitela opción de arrancar desde el Hardware del PC, o desde una unidad USBexterna para mayor seguridad. Hace uso de elementos tales como una cone-xión VPN activa, el servicio TOR y DNScrypt con el que garantiza un buennivel de privacidad. Además, todo el sistema operativo se ejecuta desde lamemoria RAM del equipo, por lo que después de apagado no queda ningúnrastro de actividad.

Tens (https://www.spi.dod.mil/lipose.htm)También conocido como Trusted End Node Security, este sistema es

distribuido y desarrollado por el Departamento de Defensa de los EstadosUnidos. Se basa en Arch Linux y puede ejecutarse en cualquier equipo contecnología Intel. Sólo arranca desde la RAM y viene cargado con un asis-tente de encriptación, un Software de encriptación simple y potente para laprotección de nuestra información con�dencial.

Tin Hat (https://sourceforge.net/projects/tinhat/)Esta propuesta es una derivación de Gentoo y es un sistema operativo

seguro que se ejecuta en su totalidad en la RAM del equipo, por lo que nomonta ningún sistema de archivos directamente en el dispositivo de arranque,evitando así la posibilidad de dejar expuesto cualquier dato. Como era deesperar, podremos arrancarlo desde un CD o desde una unidad �ash USB.Puede ejecutarse tanto en arquitecturas de Hardware de 32 como de 64 bitsy es recomendable tener conocimientos previos de Gentoo Linux.

IprediaOS (https://www.ipredia.org/os/)Para empezar diremos que I2P es una capa de comunicación P2P anónima

que se crea utilizando herramientas de código abierto, algo en lo que se basaIprediaOS, ya que orienta todo su trá�co a través de I2P y se asegura de quetoda su actividad Online no pueda ser interceptada por terceros. Así haceuso de múltiples capas de cifrado y cabe mencionar que la red I2P es una reddinámica y distribuida.

Alpine Linux (https://alpinelinux.org/)

[email protected] 373 Antonio Carrillo Ledesma, Et alii

Page 376: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Es una distribución diseñada principalmente para los usuarios avanzadosque valoran la seguridad, la e�ciencia de recursos y la simplicidad. En unprincipio parte como bifurcación del proyecto LEAF aunque, a diferencia deeste, Alpine mejora las características de seguridad y cuenta con un Kernelmás actual. Su funcionamiento se centra en la privacidad, por lo que utilizasu propio sistema de gestión de paquetes.

Openwall (https://www.openwall.com/Owl/)Es una pequeña distribución de Linux con seguridad mejorada (SELinux)

para servidores, dispositivos y dispositivos virtuales. A diferencia de otrasdistribuciones, el uso de SELinux por parte de Openwall evita que se incor-pore Software vulnerable a la distribución, en lugar de depender de parchespara remediar vulnerabilidades de seguridad conocidas o características dise-ñadas para disminuir el impacto de los errores de seguridad. Mediante el usodel marco SELinux, Openwall eclipsa a la mayoría de sus contrapartes másgrandes en este sentido.

Distribuciones de GNU/Linux «Para Penetración» Realizar prue-bas de penetración, análisis forense y auditorías de seguridad resulta ser unatarea compleja e involucra un proceso en donde se realizan distintos tiposde tareas que identi�can, en una infraestructura objetivo, las vulnerabili-dades que podrían explotarse y los daños que podría causar un atacante. Enotras palabras, se realiza un proceso de Hacking ético para identi�car quéincidentes podrían ocurrir antes de que sucedan y, posteriormente, reparar omejorar el sistema, de tal forma que se eviten estos ataques.Para realizar una prueba de penetración de forma profesional, es nece-

sario sumar a los conocimientos de Hacking ético, otros aspectos fundamen-tales como: programación, metodologías, documentación, entre otros. Noobstante, esos aprendizajes suelen venir una vez que se conocen y se sabenutilizar muchas herramientas que son parte del proceso de pruebas de pene-tración. Las siguientes herramientas se deben conocer, instalar y probar paradar los primeros pasos en este "arte".

Kali Linux (https://www.kali.org)Es una distribución para pruebas de penetración estándar de la indus-

tria. Es una de las distribuciones más populares entre Pentesters, Hackers

[email protected] 374 Antonio Carrillo Ledesma, Et alii

Page 377: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

éticos e investigadores de seguridad en todo el mundo y contiene cientos deherramientas para el trabajo forense, esta distribución es basada en Debian.

Parrot OS (https://parrotlinux.org)Puede verse como un laboratorio totalmente portátil para una amplia

gama de operaciones de seguridad cibernética, desde pruebas de penetraciónhasta ingeniería inversa y análisis forense digital, pero esta distribución basadaen Debian también incluye todo lo que necesita para proteger sus datos y de-sarrollar su propio Software.

BlackArch Linux (https://blackarch.org)Esta popular distribución de pruebas de penetración proviene de Arch

Linux y contiene más de 2,400 herramientas de penetración y análisis forensediferentes, lo que le permite usar lo que necesite sin tener que descargarnuevas herramientas.

BackBox (https://www.backbox.org/)Es una distribución de Linux basada en Ubuntu destinada a ayudar a

Hackers éticos y probadores de penetración en evaluaciones de seguridad.BackBox OS está diseñado con el objetivo de ser más rápido, fácil de operary tener un entorno de escritorio mínimo. La ventaja clave de BackBox es quesus propios repositorios de software se actualizan a intervalos regulares paramantener la distribución estable y popular para las operaciones del mundoreal.

DEFT Linux (http://www.linuxandubuntu.com/home/deft-linux-a-linux-distribution-for-computer-forensics)DEFT (Digital Evidence and Forensics Toolkit) se basa en GNU Linux

y DART (Digital Advanced Response Toolkit), un sistema forense que com-prende algunas de las mejores herramientas para la respuesta forense y deincidentes. DEFT Linux está especialmente diseñado para llevar a cabo ta-reas forenses y se ejecuta en vivo en los sistemas sin alterar el disco duroo cualquier otro medio de almacenamiento. Se compone de más de 100 he-rramientas forenses y de piratería de alta cali�cación.

Network Security Toolkit (https://www.networksecuritytoolkit.org)

[email protected] 375 Antonio Carrillo Ledesma, Et alii

Page 378: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

El Network Security Toolkit (NST), basado en Fedora, es una versiónLive que consta de las 125 principales herramientas de seguridad de códigoabierto proporcionadas por insecure.org para validar la seguridad de la red,pruebas de penetración, diagnósticos de red y monitoreo del día. El objetivoprincipal detrás del desarrollo de NST es proporcionar a los administradoresde red/sistemas un conjunto combinado de herramientas de seguridad decódigo abierto para llevar a cabo operaciones como análisis de trá�co de red,detección de intrusos, escaneo de red y parches de seguridad.

Otras Distribuciones Útiles Existe una gran variedad de distribucionesLive de Linux (The LiveCD List https://livecdlist.com/) que permiten haceruna gran cantidad de cosas útiles, a continuación damos una lista de algunasde ellas:

� KNOPPIX (http://www.knoppix.org/)

� GNOME Partition Editor (https://gparted.org/)

� System Rescue (https://www.system-rescue.org)

� Parted Magic (https://partedmagic.com/)

� Ultimate Boot (https://www.ultimatebootcd.com/)

� Super Grub2 (https://www.supergrubdisk.org/)

� Rescatux (https://www.supergrubdisk.org/rescatux/)

� Rescue (https://en.altlinux.org/Rescue)

� Ddrescue (https://www.gnu.org/software/ddrescue/)

� INSERT (http://www.inside-security.de/insert.html)

� Boot-repair (https://sourceforge.net/p/boot-repair/home/Home/)

� Rescuezilla (https://rescuezilla.com/)

� Clonezilla (https://clonezilla.org/)

� Redo Backup (ww12.redobackup.org)

[email protected] 376 Antonio Carrillo Ledesma, Et alii

Page 379: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Mondo Rescue (www.mondorescue.org)

� Live Wi�slax (https://www.wi�slax.com/)

� Puppy Linux (http://puppylinux.com/)

� Tiny Core Linux (http://tinycorelinux.net/)

� Debian Live (https://www.debian.org/CD/live/)

� Ubuntu (https://ubuntu.com/)

[email protected] 377 Antonio Carrillo Ledesma, Et alii

Page 380: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

12 Consideraciones y Comentarios Finales

Los paquetes comerciales � de Software propietario� en general proveen unambiente integrado de trabajo que puede ser usado en la preparación deestudiantes para aplicar sus conocimientos al egresar en las diversas áreasde las carreras que imparte la UNAM, esto les permite laborar en empre-sas pequeñas, medianas y grandes con un mínimo de capacitación técnicaadicional.Además, en un mercado tan competitivo como el actual, las organiza-

ciones actuales focalizan sus recursos en las estrategias más adecuadas paraconducir a la compañía hacia el éxito. Los paquetes propietarios y los inci-pientes paquetes de Software libre pueden ayudar a conseguir este objetivo,completando la inversión ya realizada en sistemas operacionales.Pero el hecho de que las organizaciones actuales, manejan una gran can-

tidad de información, la cual puede o no estar dispersa en sus múltiplessistemas operacionales, requiere usar paquetes propietarios que tengan inte-grado el manejo de las grandes bases de datos distribuidas o centralizadas,esta integración ofrece bene�cios adicionales.

Por otro lado, notemos que, una vez que un producto de Software libreha empezado a circular, rápidamente esta disponible a un costo muy bajo.Al mismo tiempo, su utilidad no decrece. El Software, en general, podríaser considerado un bien de uso inagotable, tomando en cuenta que su costomarginal es pequeño y que no es un bien sujeto a rivalidad (la posesión delbien por un agente económico no impide que otro lo posea).Puesto que el Software libre permite el libre uso, modi�cación y redis-

tribución, a menudo encuentra un hogar entre usuarios para los cuales elcoste del Software no libre es a veces prohibitivo, o como alternativa a lapiratería (véase 14.3). También es sencillo modi�carlo localmente, lo quepermite que sean posibles los esfuerzos de traducción a idiomas que no sonnecesariamente rentables comercialmente.La mayoría del Software libre se produce por equipos internacionales que

cooperan a través de la libre asociación. Los equipos estan típicamente com-puestos por individuos con una amplia variedad de motivaciones, y puedenprovenir tanto del sector privado, del sector voluntario o del sector público.En México el Software libre nació en las Universidades y los Centros de

Investigación. Es por eso que, desde hace tres décadas, los estudiantes y losprofesores usan Software libre para �nes didácticos y de investigación. Las

[email protected] 378 Antonio Carrillo Ledesma, Et alii

Page 381: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

universidades suelen optar por el uso de Software libre en vez de utilizarSoftware privativo porque satisface de una mejor manera sus necesidades decómputo, dada su naturaleza de apertura del código y la libertad de compartirlos resultados obtenidos. De forma colateral, no se tienen gastos adicionalesderivados del pago de licenciamientos.

12.1 Integración del Cómputo en las Carreras de Cien-cias

El uso de programas de cómputo esta integrado a las carreras de la Facul-tad de Ciencias desde hace mucho tiempo, pero la gran mayoría se realizacon productos propietarios, lo cual no representa ningún problema técnico,pero si un problema para la institución y estudiantes, ya que las versionesactualmente usadas, no son del todo compatibles entre sí, ello implica quese requiere o tener la última versión del producto o diferentes versiones delmismo para trabajos cotidianos en una misma computadora.El uso de programas de cómputo de Software libre esta cada día más

integrado al uso cotidiano que hacen profesores, ayudantes y estudiantes en laFacultad de Ciencias, pero todavía para el Sistema OperativoWindows (véase[3]), así como para paquetes de uso común, no ha sido posible encontrar unadecuado reemplazo, los más comunes son MATLAB, Mathematica, Maple,SPSS, SAS y Microsoft O¢ ce.Para la Facultad de Ciencias y para la Universidad, el contar con las

licencias necesarias para que cada máquina a la que los alumnos tienen acce-so cuente con una, es en extremo prohibitivo por el costo. Esto mismosucede en el caso de los estudiantes, pues el costo de una sola licencia parauso académicos es onerosa más si consideramos la diversidad de programasrequeridos para una sola meteria y esto pasa con cada uno de los cursos dela Facultad.Es por ello que el uso de herramientas de Software libre se visualiza como

un reemplazo natural a los paquetes propietarios, pero la realidad dista deser tan simple. Ya que, actualmente no es posible obtener las característicasmínimas en Software libre para que puedan ser un reemplazo real de lospaquetes de propietarios. Este hecho ha ocasionado que existe un uso cadavez más generalizado entre profesores y alumnos a usar Software sin la licenciarespectiva (véase 14.3).

En la UNAM, a través de la Dirección General de Cómputo y de Téc-

[email protected] 379 Antonio Carrillo Ledesma, Et alii

Page 382: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

nologías de la Información y Comunicación se dispone de un restringidonúmero de paquetes y versiones que son puestos a disposición de la comu-nidad universitaria para usar en los equipos personales sin aparente costopara el usuario �nal � pero el costo de dichos paquetes son deducidos por laempresa como una donación, lo cual sí implica un costo real que se deduceen el ejercicio �scal de la empresa donante y éste repercute en los ingresosque el gobierno no recaudará por motivo de impuestos� .

12.2 Ventajas, Desventajas y Carencias del SoftwareLibre

Notemos que la ventaja de tener múltiples herramientas para realizar opera-ciones elementales y avanzadas de paquetes de cálculo numérico, simbólico,estadístico y o�mático es en sí misma una gran ventaja. Para los centrosuniversitarios y usuarios ocasionales, las herramientas de Software libre sonuna herramienta invaluable, en el caso de empresas que requieren usar op-ciones avanzadas o generadas por terceros, los paquetes propietarios destacancomo herramientas de trabajo óptimas. Pero para todos los casos, hay quedestacar:

� Funcionalidades básicas: Todos los paquetes implementan las funciona-lidades básicas, ya que todos los paquetes llevan años desarrollándose.

� Funcionalidades avanzadas: Por mucho, los paquetes propietarios tienenimplementadas cientos de funciones avanzadas que pueden ser muyútiles para usuarios avanzados, pero rara vez son usados por los usua-rios noveles o cotidianos.

� Fiabilidad: En los paquetes en desarrollo son comunes las caídas delprograma, pero en los de Software propietario se destaca por ser más�able que los demás.

� Información: El Software propietario son paquetes con una abundantebibliografía y la propia ayuda del programa.

� Facilidad de Manejo: Ninguno de los programas presenta grandes di�-cultades a la hora de su uso. Pero en menor o mayor medida, todos lospaquetes del Software libre presentan entornos de desarrollo funcional,pero perfectible.

[email protected] 380 Antonio Carrillo Ledesma, Et alii

Page 383: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Costo: El costo de las diversas versiones de Software propietario sueleser prohibitivo para instituciones educativas y usuarios ocasionales, enel caso del Software libre, los paquetes se pueden descargar de la red sinmás costo que el acceso a Internet y los medios de instalación cuandoson requeridos.

El Software libre es aún joven, en los miles de proyectos actuales se estatrabajando a diario en mejorar la parte computacional de los algoritmosinvolucrados en el paquete, haciendo y puliendo interfaces grá�cas, generandoayuda en línea así como la documentación necesaria para que usuarios novelesy avanzados usen la mayor cantidad de opciones programadas en los paquetes.Para muestra de este maravilloso avance, tomemos el proyecto del Ker-

nel de Linux y su uso en los sistemas operativos Android, Ubuntu, DebianGNU/Linux, que actualmente se ejecuta en millones de equipos y contienemiles de aplicaciones y estan soportados por una gran cantidad de usuarios yempresas comerciales. Estos han logrado desplazar a muchos de sus competi-dores por sus múltiples bondades y bajo costo de desarrollo, al reusar milesde aplicaciones ya existentes que usan Software libre y permitir desarrollarotro tanto de aplicaciones bajo una plataforma que se ejecutan en los másdiversos procesadores.Así también, en los últimos años, muchos proyectos han pasados de ser

simples programas en línea de comandos a complejas aplicaciones multi-plataforma � ejecutan en distintos sistemas operativos como son Windows,Linux y Mac� con ambientes grá�cos multimedia que en muchos casos hansuperado a sus contrapartes comerciales, por ejemplo los navegadores Webtipo FireFox y la suite o�mática tipo Libre O¢ ce, entre muchos otros.

12.3 Comentarios Finales

A diferencia de otros paquetes, SPSS, SAS, Microsoft O¢ ce, etc. ofrecensoluciones en forma de una suite completa para la gestión de información paraencontrar el llamado poder del conocimiento, pero el costo de las versionescompletas y aún las educativas es prohibitivo para la gran mayoría de lasinstituciones educativas, en particular para la UNAM. Por ello, el resto de lospaquetes propietarios y libres ofrecen una ventaja competitiva, al permitirleal profesor y sus estudiantes contar con versiones completas y funcionalesen las que pueden ser aplicados los conocimientos adquiridos en los diversoscursos de la carrera.

[email protected] 381 Antonio Carrillo Ledesma, Et alii

Page 384: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Por otro lado, para reforzar la apropiación del Software libre por partede la comunidad de la Facultad de Ciencias de la UNAM, es necesario pro-porcionar a la comunidad demostraciones y cursos cortos de las herramientasde Software libre, iniciando con mostrar el uso de sistemas operativos libresbasados en Linux. Ello es posible haciendo uso de los sistemas llamados"Live", ya que cada alumno puede probar y usar el sistema operativo enconjunto con cientos de herramientas libres, sin la necesidad de instalar Soft-ware en la máquina que utilice para practicar. Cuando el alumno se sientacómodo con el sistema, es posible ayudarlo a instalar mediante tutoriales enlínea y/o presenciales el sistema en su equipo de cómputo.Lo mismo es posible hacer, al preparar demostraciones del Software que

puede reemplazar paquetes muy difundidos en la comunidad como son: MAT-LAB, Mathematica, Maple, SPSS, SAS y Microsoft O¢ ce. Estos cursos nonecesariamente se centrarían en las similitudes o diferencias entre paqueteslibres y propietarios, más bien, para cautivar a usuarios noveles y futurosayudantes a dar cursos completos de las herramientas libres mostrando suaplicabilidad en diferentes ramas de las matemáticas aplicadas.Para realizar dichos cursos, se cuenta con todos los recursos necesarios.

Por un lado, se dispone de laboratorios y talleres con Software libre instaladoen los equipos de cómputo, además, se pueden usar los sistemas "Live" quepueden ser proporcionados en DVDs o en unidades �ash USB. Estas últimas,proporcionan mejor rendimiento, pueden ser actualizadas y reutilizados tan-tas veces como sea necesario para conocer uno o más sistemas operativos.Estos sistemas "Live" pueden ser generados por el propio usuario, usando lasdecenas de paquetes disponibles en Windows o Linux que generan sistemas"Live" a partir de las imágenes ISO bajadas de la red � por ejemplo, desistemas operativos como Knoppix (véase [98])� .De esta forma, se puede coadyvar a que alumnos, ayudantes y profesores

conozcan el mundo del Software libre, para que con el tiempo se adoptesu uso, sin dejar de lado, el proporcionar cuando sea necesario, cursos deSoftware privativo pero siempre teniendo en cuenta que se puede � en medidade lo posible� trabajar con paquetes alternativos, como los que proporcionael Software libre.Además, el Software libre ofrece una ventaja competitiva, al permitirle

al profesor y sus estudiantes contar con versiones completas y funcionales enlas que pueden ser aplicados los conocimientos adquiridos en los diversos cur-sos de las carreras de Ciencias, dejando el manejo especializado de paquetesa cursos avanzados o para cuando el educando realice sus prácticas profe-

[email protected] 382 Antonio Carrillo Ledesma, Et alii

Page 385: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sionales. De esta forma se pueden preparar a los estudiantes para aplicarsus conocimientos al egresar en diversas áreas de la carreras de Ciencias ycon pocos conocimientos técnicos adicionales puedan laborar en pequeñas,medianas y grandes empresas.

[email protected] 383 Antonio Carrillo Ledesma, Et alii

Page 386: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

13 Apéndice A: Cómputo en Instituciones Ed-ucativas

Hace algunos años la disposición de un equipo de cómputo por cada estu-diante era algo difícil de satisfacer para las instituciones educativas. Ahora,las cosas son distintas, cada vez más estudiantes disponen y tienen acceso adispositivos de cómputo � computadoras de escritorio, portátiles, tabletas, yteléfonos inteligentes� que en principio pareciera que permitirían satisfacerla creciente demanda de recursos computacionales de los estudiantes.Pero una computadora requiere de un sistema operativo además de los

diversos paquetes de Software � que esten disponibles para esa versión delsistema operativo� que permitan resolver los problemas para los cuales usa elequipo de cómputo. Aquí es donde empiezan los problemas para los usuariosde equipos de cómputo, puesto que hay una gran cantidad de equipos decómputo con diversas tecnologías y recursos que soportan alguna versión desistema operativo acorde a los recursos computacionales del equipo adquiridoque no necesariamente soportan a todos y cada uno de los programas decómputo que el usuario requiere.Ante la creciente necesidad de programas de cómputo podríamos pensar

en que cada usuario que requiera hacer uso de ellos tenga acceso a un equipode cómputo adecuado, conjuntamente con el sistema operativo que lo soporte.Pero esto dista mucho de la realidad, puesto que la gran mayoría de losusuarios no pueden hacer esos gastos y menos una institución educativa.

¿Entonces que opciones tenemos para satisfacer la creciente de-manda de recursos computacionales?

� Por un lado, si ya disponemos de un equipo de cómputo con su respec-tivo sistema operativo, entonces hacer uso de sólo aquellos programasde cómputo que nuestro equipo soporte, teniendo cuidado de no instalarprogramas de cómputo antagonistas.

� Otra opción es, si ya disponemos de un equipo de cómputo, entoncestener dos o más versiones de sistema operativo que permitan instalaruna mayor diversidad de programas de cómputo y tener el cuidado deno instalar programas de cómputo incompatibles. Así, dependiendo denuestras necesidades podemos hacer uso de uno u otro sistema opera-tivo y sus respectivos programas.

[email protected] 384 Antonio Carrillo Ledesma, Et alii

Page 387: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� La opción más viable, es una que conjugue las dos anteriores. Peroademás, podríamos emular Hardware del que no disponemos medianteel uso de máquinas virtuales (véase 16) que nos permitirían en un sóloequipo de cómputo usar simultáneamente diversos sistemas operativospara distintas arquitecturas y sus respectivos programas que ahora esposible instalar en las máquinas virtuales programas de cómputo in-compatibles de forma aislada unos de otros.

Usando esta última opción es posible satisfacer en un sólo equipo de cóm-puto una gran variedad de necesidades computacionales. Esto permite quea nivel de usuario (estudiante, ayudante y profesor) o institución educativa,el equipo de cómputo usando Software de virtualización pueda proporcionarun marco que permita satisfacer las diversas y crecientes necesidades com-putacionales. Pero hay que notar que aún esta opción no esta exenta deproblemas legales y técnicos, pero en principio es una opción viable para lagran mayoría de los usuarios y la institución educativa.Tomando esto en cuenta, es viable tener una cantidad adecuada de paque-

tes de cómputo, que permitieran satisfacer las necesidades especializadas dela gran mayoría de los cursos y estos estar instalados en aquellos espacios enlos cuales se asignarían los cursos, además de las áreas comunes de cómputoen la que los estudiantes requiriesen hacer uso de dichos paquetes. Además,de proporcionar un mecanismo para que los profesores y ayudantes que re-quieran enseñar algo con alguna versión privativa que no se disponga, seaimplementada � en medida de lo posible� en los paquetes disponibles. Perohay que hacer notar, que no todas aquellas funciones que hace una versiónparticular de un paquete, es posible hacerlas con otras versiones o paquetesalternativos. Esto es muy común con ciertas actividades especia-lizadas �al hacer cálculo simbólico, cálculo numérico, manejo de datos y trabajar enentornos de desarrollo� . Ello implicaría, por un lado restringir el Softwareinstalado en los equipos de cómputo o por el otro instalar todas y cada unade las solicitudes de Software, aún cuando se requiera más de una versión deun paquete particular.El restringir el Software instalado, impediría al profesor � que así lo re-

quiera por la libertad de cátedra� enseñar aquello que considera que es nece-sario � en particular el manejo de uno o más paquetes especializados decómputo� para proporcionar las herramientas básicas a sus alumnos y queestos deben de dominar para aprobar su curso.

[email protected] 385 Antonio Carrillo Ledesma, Et alii

Page 388: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

En el caso de dar �exibilidad, para que cada profesor solicite la insta-lación del paquete o los paquetes que requiera para sus cursos, implica queel Software solicitado puede o no contar con licencia adecuada de uso. Así,se estaría permitiendo que se tenga instalado Software del que se viola lalicencia de uso (véase 14.3).En cuanto a tener la lista de�nitiva de Software que usaran todos y cada

uno de los profesores o ayudantes de los cursos asignados a un espacio es difíciltener antes del inicio del curso � por la costante evolución del Software y lascambiantes necesidades de la enseñanza� , además de depender de la formade asignación de estos en los laboratorios y talleres de cómputo. En cuantoa la solicitud para hacer la instalación correspondiente, se requiere tenercerteza de en que espacio serán asignados todos y cada uno de los cursos.

Por ello se han buscado opciones95 � no siempre las más adecuadas olícitas (véase 14.3)� para que sin importar en que espacio sea asignado elcurso � siempre y cuando el equipo de cómputo lo soporte� se tenga desdelos primeros días de uso del espacio el paquete solicitado y en casos excep-cionales el tiempo de espera sea menor a unos horas o días sin importar laplataforma �Windows o Linux� o el tipo de Software solicitado � libreo privativo� , se ha optado por la virtualización96, usando como sistemaoperativo base a Debian GNU/Linux Estable, instalando como paquete devitualización a KVM/QEMU. Aquí, se montan las múltiples máquinas vir-tuales que son ejecutadas según las necesidades del usuario. Para controlarla actualización de las máquinas virtuales sin que se requiera intervención delusuario, se usa RSYNC tunelizado mediante SSH que sincroniza las máquinasvirtuales y la con�guración del equipo base de forma remota.Para tener la �exibilidad anteriormente comentada, es necesario poder

contar con distintas versiones de sistemas operativos, de cada una de las ver-siones � en caso de Windows, tener independientemente los Service Pack� .

95En el caso que el equipo sólo tenga un sistema operativo sin virtualización, es necesarioesperar a que las asignaciones de los cursos y sus respectivas peticiones de uso de paquetesde cómputo estén completas, para entonces proceder a realizar instalación del Software queno sean antagónicos. Nótese que, por lo general, los cursos requieren el uso de los equiposde cómputo y el Software solicitado de forma inmediata, por lo cual esperar tiempo (días)para tener acceso al mismo no es una opción viable.96Una vez creada la máquina virtual, esta es un archivo que puede ser copiado o descar-

gado de la red, por ello el usuario � estudiante, ayudante o profesor� puede llevarse lamáquina virtual para hacer uso de ella en el equipo al que tenga acceso, teniendo comoúnico requisito tener instalado el programa de virtualización.

[email protected] 386 Antonio Carrillo Ledesma, Et alii

Page 389: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

De tal forma que sea posible instalar cada versión de Software solicitada en laplataforma adecuada, teniendo en cuenta que muchas versiones del Softwareson mutuamente excluyentes para ser instaladas en una misma versión delsistema operativo simultáneamente.

Por todo lo anterior, el uso de máquinas virtuales � que permiten tenermúltiples versiones de sistemas operativos independientemente, así como deuna versión particular tener por separado cada una de ellas con los respec-tivos Service Pack� es una opción viable para proporcionar el servicio deinstalación centralizada de los diversos paquetes de cómputo solicitados porlos profesores de las diversas carreras de la Facultad de Ciencias. Esta op-ción minimiza los tiempos de espera para la instalación de un paquete enparticular y agiliza las prestaciones a todos y cada uno de los grupos quese atienden semestralmente en los cientos de equipos en los laboratorios ytalleres de cómputo.

[email protected] 387 Antonio Carrillo Ledesma, Et alii

Page 390: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

14 Apéndice B: Software Libre y Propietario

Hoy en día los usuarios disponemos de dos grandes opciones para adquirir yusar el Software necesario para que nuestra computadora funcione, a saber:

� Por un lado, podemos emplear programas comerciales, de los cuales nosomos dueños del Software, sólo concesionarios al adquirir una licenciade uso del Software y nos proporcionan un instalable del programaadquirido. La licencia respectiva es en la gran mayoría de los casosmuy restrictiva, ya que restringe su uso a una sola máquina y/o usuariosimultáneamente.

� Por otro lado, existe el Software libre, desarrollados por usuarios y parausuarios que, entre otras cosas, comparten los códigos fuente, el pro-grama ejecutable y dan libertades para estudiar, adaptar y redistribuira quien así lo requiera el programa y todos sus derivados.

14.1 Software Libre

La de�nición de Software libre (véase [19], [20], [12], [13], [11] y [15]) estipulalos criterios que se tienen que cumplir para que un programa sea consideradolibre. De vez en cuando se modi�ca esta de�nición para clari�carla o pararesolver problemas sobre cuestiones delicadas. «Software libre» signi�ca queel Software respeta la libertad de los usuarios y la comunidad. En térmi-nos generales, los usuarios tienen la libertad de copiar, distribuir, estudiar,modi�car y mejorar el Software. Con estas libertades, los usuarios -tantoindividualmente como en forma colectiva- controlan el programa y lo quehace.Cuando los usuarios no controlan el programa, el programa controla a los

usuarios. Los programadores controlan el programa y, a través del programa,controlan a los usuarios. Un programa que no es libre, llamado «privativoo propietario» , y es considerado por muchos como un instrumento de poderinjusto.El Software libre es la denominación del Software que respeta la liber-

tad de todos los usuarios que adquirieron el producto y, por tanto, una vezobtenido el mismo puede ser usado, copiado, estudiado, modi�cado, y re-distribuido libremente de varias formas. Según la Free Software Foundation

[email protected] 388 Antonio Carrillo Ledesma, Et alii

Page 391: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

(véase [19]), el Software libre se re�ere a la libertad de los usuarios para eje-cutar, copiar, distribuir, y estudiar el mismo, e incluso modi�car el Softwarey distribuirlo modi�cado.Un programa es Software libre si los usuarios tienen las cuatro libertades

esenciales:

0. La libertad de usar el programa, con cualquier propósito.

1. La libertad de estudiar cómo funciona el programa y modi�carlo, adap-tándolo a tus necesidades.

2. La libertad de distribuir copias del programa, con lo cual puedes ayudara tu prójimo.

3. La libertad de mejorar el programa y hacer públicas esas mejoras a losdemás, de modo que toda la comunidad se bene�cie.

Un programa es Software libre si los usuarios tienen todas esas libertades.Por tanto, el usuario debe ser libre de redistribuir copias, tanto con, comosin modi�caciones, ya sea gratuitamente o cobrando una tarifa por la dis-tribución, a cualquiera en cualquier parte. El ser libre de hacer estas cosassigni�ca, entre otras cosas, que no tiene que pedir ni pagar el permiso.También debe tener la libertad de hacer modi�caciones y usarlas en pri-

vado para su propio trabajo o pasatiempo, sin siquiera mencionar que exis-ten. Si publica sus cambios, no debe estar obligado a noti�carlo a nadie enparticular, ni de ninguna manera en particular.La libertad de ejecutar el programa signi�ca que cualquier tipo de persona

u organización es libre de usarlo en cualquier tipo de sistema de computación,para cualquier tipo de trabajo y �nalidad, sin que exista obligación algunade comunicarlo al programador ni a ninguna otra entidad especí�ca. Enesta libertad, lo que importa es el propósito de los usuarios, no el de losprogramadores. El usuario es libre de ejecutar el programa para alcanzarsus propósitos, y si lo distribuye a otra persona, también esa persona serálibre de ejecutarlo para lo que necesite; nadie tiene derecho a imponerle suspropios objetivos.La libertad de redistribuir copias debe incluir las formas binarias o eje-

cutables del programa, así como el código fuente, tanto para las versionesmodi�cadas como para las que no lo esten. Distribuir programas en formade ejecutables es necesario para que los sistemas operativos libres se puedan

[email protected] 389 Antonio Carrillo Ledesma, Et alii

Page 392: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

instalar fácilmente. Resulta aceptable si no existe un modo de producir unformato binario o ejecutable para un programa especí�co, dado que algunoslenguajes no incorporan esa característica, pero debe tener la libertad de re-distribuir dichos formatos si encontrara o programara una forma de hacerlo.Para que la libertad 1 y 3 de realizar cambios y publicar las versiones

modi�cadas tenga sentido, el usuario debe tener acceso al código fuente delprograma. Por consiguiente, el acceso al código fuente es una condiciónnecesaria para el Software libre. El «código fuente» compilado no es códigofuente real, y no cuenta como código fuente.La libertad 1 incluye la libertad de usar su versión modi�cada en lugar

de la original. Si el programa se entrega con un producto diseñado para eje-cutar versiones modi�cadas de terceros, pero rechaza ejecutar las suyas, unapráctica conocida como «tivoización» o «arranque seguro» [«Lockdown» ]la libertad 1 se convierte más en una �cción teórica que en una libertad prác-tica. Esto no es su�ciente. En otras palabras, estos binarios no son Softwarelibre, incluso si se compilaron desde un código fuente que es libre.Una manera importante de modi�car el programa es agregándole subruti-

nas y módulos libres ya disponibles. Si la licencia del programa especi�ca queno se pueden añadir módulos que ya existen y que estan bajo una licenciaapropiada, por ejemplo si requiere que usted sea el titular de los derechos deautor del código que desea añadir, entonces se trata de una licencia demasia-do restrictiva como para considerarla libre.La libertad 3 incluye la libertad de publicar sus versiones modi�cadas

como Software libre. Una licencia libre también puede permitir otras formasde publicarlas; en otras palabras, no tiene que ser una licencia de Copyleft.No obstante, una licencia que requiera que las versiones modi�cadas no seanlibres, no se puede considerar libre.«Software libre» no signi�ca que «no es comercial» . Un programa libre

debe estar disponible para el uso comercial, la programación comercial y ladistribución comercial. La programación comercial de Software libre ya noes inusual; tal Software libre comercial es muy importante, ejemplo de elloes la empresa RedHat. Puede haber pagado dinero para obtener copias deSoftware libre, o puede haber obtenido copias sin costo. Pero sin tener encuenta cómo obtuvo sus copias, siempre tiene la libertad de copiar y modi�carel Software, incluso de vender copias.El término Software no libre se emplea para referirse al Software dis-

tribuido bajo una licencia de Software más restrictiva que no garantiza estascuatro libertades. Las leyes de la propiedad intelectual reservan la mayoría de

[email protected] 390 Antonio Carrillo Ledesma, Et alii

Page 393: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

los derechos de modi�cación, duplicación y redistribución para el dueño delCopyright; el Software dispuesto bajo una licencia de Software libre rescindeespecí�camente la mayoría de estos derechos reservados.Los manuales de Software deben ser libres por las mismas razones que

el Software debe ser libre, y porque de hecho los manuales son parte delSoftware. También tiene sentido aplicar los mismos argumentos a otros tiposde obras de uso práctico; es decir, obras que incorporen conocimiento útil, talcomo publicaciones educativas y de referencia. La Wikipedia es el ejemplomás conocido.Tanto la Open Source Initiative como la Free Software Foundation mantie-

nen en sus páginas Web (véase [19], [20], y [15]) o�ciales listados de laslicencias de Software libre que aprueban.

14.1.1 Tipos de Licencias

Una licencia es aquella autorización formal con carácter contractual que unautor de un Software da a un interesado para ejercer "actos de explotaciónlegales". Pueden existir tantas licencias como acuerdos concretos se den entreel autor y el licenciatario. Desde el punto de vista del Software libre, existendistintas variantes del concepto o grupos de licencias:

Licencias GPL Una de las más utilizadas es la Licencia Pública Generalde GNU ( GNU GPL). El autor conserva los derechos de autor (Copyright),y permite la redistribución y modi�cación bajo términos diseñados para ase-gurarse de que todas las versiones modi�cadas del Software permanecen bajolos términos más restrictivos de la propia GNU GPL. Esto hace que sea im-posible crear un producto con partes no licenciadas GPL, el conjunto tieneque ser GPL.En la práctica, esto hace que las licencias de Software libre se dividan en

dos grandes grupos, aquellas que pueden ser mezcladas con código licenciadobajo GNU GPL (y que inevitablemente desaparecerán en el proceso, al serel código resultante licenciado bajo GNU GPL) y las que no lo permiten alincluir mayores u otros requisitos que no contemplan ni admiten la GNUGPL y que por lo tanto no pueden ser enlazadas ni mezcladas con códigogobernado por la licencia GNU GPL.

Licencias estilo BSD Llamadas así porque se utilizan en gran cantidad deSoftware distribuido junto a los sistemas operativos BSD. El autor, bajo tales

[email protected] 391 Antonio Carrillo Ledesma, Et alii

Page 394: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

licencias, mantiene la protección de Copyright únicamente para la renunciade garantía y para requerir la adecuada atribución de la autoría en traba-jos derivados, pero permite la libre redistribución y modi�cación, incluso sidichos trabajos tienen propietario. Son muy permisivas, tanto que son fácil-mente absorbidas al ser mezcladas con la licencia GNU GPL con quienes soncompatibles. Puede argumentarse que esta licencia asegura "verdadero" Soft-ware libre, en el sentido que el usuario tiene libertad ilimitada con respectoal Software, y que puede decidir incluso redistribuirlo como no libre.

Licencia Copyleft Hay que hacer constar que el titular de los derechosde autor (Copyright) de un Software bajo licencia Copyleft puede tambiénrealizar una versión modi�cada bajo su Copyright original, y venderla bajocualquier licencia que desee, además de distribuir la versión original comoSoftware libre. Esta técnica ha sido usada como un modelo de negocio poruna serie de empresas que realizan Software libre (por ejemplo MySQL); estapráctica no restringe ninguno de los derechos otorgados a los usuarios de laversión Copyleft.

Licencia estilo MIT Las licencias MIT son de las más permisivas, casi seconsideran Software de dominio público. Lo único que requieren es incluir lalicencia MIT para indicar que el Software incluye código con licencia MIT.

Licencia Apache License La licencia Apache trata de preservar los dere-chos de autor, incluir la licencia en el Software distribuido y una lista de loscambios realizados. En modi�caciones extensivas del Software original per-mite licenciar el Software bajo otra licencia sin incluir el código fuente esasmodi�caciones.

Licencia Mozilla Public License MPL Esta licencia requiere que losarchivos al ser distribuido conserven la misma licencia original pero puedeser usado junto con archivos con otra licencia al contrario que la licencia GPLque requiere que todo el código usado junto con código GPL sea licenciadocomo código GPL. También en caso de hacer modi�caciones extensivas per-mite distribuirlas bajo diferentes términos y sin incluir el código fuente esasmodi�caciones

[email protected] 392 Antonio Carrillo Ledesma, Et alii

Page 395: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Licencia Código de dominio público Es un código que no está sujetoa derechos de autor que puede utilizarse sin restricciones.

Licencia Creative Commons Las licencias de Creative Commons másque para el Software se utilizan para cualquier creación artística digital, desdefotos, artículos en blogs, música, vídeos, este trabajo..., etc. Hay varios tiposde licencias de Creative Commons diferenciando entre permitir modi�ca-ciones a la obra original o permitiendo un uso comercial de la obra.

Licencias de Código Abierto Las licencias de código abierto son unintermedio entre las licencias privativas y las licencias de Software libre. Laslicencias de código abierto permiten el acceso al código fuente pero no todasse consideran licencias de Software libre al no otorgar otros derechos que serequieren para considerar un Software como Software libre como el derechoa la uso o con cualquier propósito, modi�cación y distribución.Dado el éxito del Software libre como modelo de desarrollo de Software al-

gunas empresas cuyo Software era privativo pueden decidir hacerlo de códigoabierto con la intención de suplir algunas carencias de Software privativopero sin perder ciertos derechos que son la fuente de sus ingresos como laventa de licencias.Las expresiones «Software libre» y «código abierto» se re�eren casi al

mismo conjunto de programas. No obstante, dicen cosas muy diferentesacerca de dichos programas, basándose en valores diferentes. El movimientodel Software libre de�ende la libertad de los usuarios de ordenadores, en unmovimiento en pro de la libertad y la justicia. Por contra, la idea del códigoabierto valora principalmente las ventajas prácticas y no de�ende principios.Esta es la razón por la que estamos en desacuerdo con el movimiento delcódigo abierto y no empleamos esa expresión.

Licencia Microsoft Public License La Microsoft Public License es unalicencia de código abierto que permite la distribución del Software bajo lamisma licencia y la modi�cación para un uso un uso privado. Tiene restric-ciones en cuanto a las marcas registradas.En caso de distribuir el Software de forma compiladas o en forma de objeto

binario no se exige proporcionar los derechos de acceso al código fuente delSoftware compilado o en forma de objeto binario. En este caso esta licenciano otorga más derechos de los que se reciben pero si permite otorgar menos

[email protected] 393 Antonio Carrillo Ledesma, Et alii

Page 396: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

derechos al distribuir el Software en el caso de distribuir Software compiladoo en forma de objeto binario.

Modelo de desarrollo de Software bazar y catedral El tipo de licenciano determina qué Software es mejor o peor, si el privativo o de Software libre,la diferencia entre las licencias está en sus características éticas y legales.Aunque el modelo de desarrollo con una licencia de código abierto a la largasuele tener un mejor desarrollo y éxito que el Software privativo, más aúncon un medio como internet que permite colaborar a cualesquiera personasen el mundo independiente donde estén ubicadas en el mundo.

Comparación con el Software de Código Abierto Aunque en la prác-tica el Software de código abierto y el Software libre comparten muchas de suslicencias, la Free Software Foundation opina que el movimiento del Softwarede código abierto es �losó�camente diferente del movimiento del Softwarelibre. Los defensores del término «código abierto (Open Source)» , a�rmanque éste evita la ambigüedad del término en ese idioma que es «Free» en«Free Software» .Mucha gente reconoce el bene�cio cualitativo del proceso de desarrollo de

Software cuando los desarrolladores pueden usar, modi�car y redistribuir elcódigo fuente de un programa. El movimiento del Software libre hace especialénfasis en los aspectos morales o éticos del Software, viendo la excelenciatécnica como un producto secundario de su estándar ético. El movimientode código abierto ve la excelencia técnica como el objetivo prioritario, siendoel compartir el código fuente un medio para dicho �n. Por dicho motivo, laFSF se distancia tanto del movimiento de código abierto como del término«código abierto (Open Source)» .Puesto que la «iniciativa de Software libre Open Source Initiative (OSI)»

sólo aprueba las licencias que se ajustan a la «de�nición de código abierto(Open Source De�nition)» , la mayoría de la gente lo interpreta como un es-quema de distribución, e intercambia libremente "código abierto" con "Soft-ware libre". Aún cuando existen importantes diferencias �losó�cas entreambos términos, especialmente en términos de las motivaciones para el de-sarrollo y el uso de tal Software, raramente suelen tener impacto en el procesode colaboración.Aunque el término "código abierto" elimina la ambigüedad de libertad

frente a precio (en el caso del inglés), introduce una nueva: entre los progra-

[email protected] 394 Antonio Carrillo Ledesma, Et alii

Page 397: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

mas que se ajustan a la de�nición de código abierto, que dan a los usuariosla libertad de mejorarlos, y los programas que simplemente tienen el códigofuente disponible, posiblemente con fuertes restricciones sobre el uso de dichocódigo fuente. Mucha gente cree que cualquier Software que tenga el códigofuente disponible es de código abierto, puesto que lo pueden manipular. Sinembargo, mucho de este Software no da a sus usuarios la libertad de dis-tribuir sus modi�caciones, restringe el uso comercial, o en general restringelos derechos de los usuarios.

14.2 Software Propietario

No existe consenso sobre el término a utilizar para referirse al opuesto delSoftware libre. La expresión «Software propietario (Proprietary Software)»(véase [14]), en la lengua anglosajona, "Proprietary" signi�ca «poseído ocontrolado privadamente (Privately Owned and Controlled)» , que destacala manutención de la reserva de derechos sobre el uso, modi�cación o redis-tribución del Software. Inicialmente utilizado, pero con el inconveniente quela acepción proviene de una traducción literal del inglés, no correspondiendosu uso como adjetivo en el español, de manera que puede ser consideradocomo un barbarismo.El término "propietario" en español resultaría inadecuado, pues signi�ca

que «tiene derecho de propiedad sobre una cosa» , por lo que no podría cali�-carse de "propietario" al Software, porque éste no tiene propiedad sobre nada(es decir, no es dueño de nada) y, además, no podría serlo (porque es una cosay no una persona). Así mismo, la expresión "Software propietario" podríaser interpretada como "Software sujeto a propiedad" (derechos o titularidad)y su opuesto, el Software libre, también esta sujeto al derecho de autor. Otrainterpretación es que contrariamente al uso popular del término, se puedea�rmar de que "todo Software es propietario", por lo que la forma correctade referirse al Software con restricciones de uso, estudio, copia o mejora esla de Software privativo, según esta interpretación el término "propietario"podría aplicarse tanto para Software libre como Software privativo, ya quela diferencia entre uno y otro esta en que el dueño del Software privativo lolicencia como propiedad privada y el de Software libre como propiedad social.Con la intención de corregir el defecto de la expresión "Software propie-

tario" aparece el llamado "Software con propietario", sin embargo se ar-gumenta contra del término "con propietario" justamente su similitud conProprietary en inglés, que sólo haría referencia a un aspecto del Software

[email protected] 395 Antonio Carrillo Ledesma, Et alii

Page 398: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

que no es libre, manteniendo una de las principales críticas a éste (de "Soft-ware sujeto a derechos" o "propiedad"). Adicionalmente, si "propietario"se re�ere al titular de los derechos de autor -y esta claro que no se puedereferir al usuario, en tanto éste es simplemente un cesionario-, no resuelve lacontradicción: todo el Software libre tiene también titulares de derechos deautor.La expresión Software no libre (en inglés Non-Free Software) es usado

por la FSF para agrupar todo el Software que no es libre, es decir, incluye alllamado en inglés "Semi-Free Software" (Software semilibre) y al "PropietarySoftware". Asimismo, es frecuentemente utilizado para referirse al Softwareque no cumple con las Directrices de Software libre de Debian GNU/Linux,las cuales siguen la misma idea básica de libertad en el Software, propugnadapor la FSF, y sobre las cuales esta basada la de�nición de código abierto dela Open Source Initiative.Adicionalmente el Software de código cerrado nace como antónimo de

Software de código abierto y por lo tanto se centra más en el aspecto deausencia de acceso al código que en los derechos sobre el mismo. éste sere�ere sólo a la ausencia de una sola libertad por lo que su uso debe enfocarsesólo a este tipo de Software y aunque siempre signi�que que es un Softwareque no es libre, no tiene que ser Software de código cerrado.La expresión Software privado es usada por la relación entre los conceptos

de tener y ser privado. Este término sería inadecuado debido a que, en una desus acepciones, la palabra "privado" se entiende como antónimo de "público",es decir, que «no es de propiedad pública o estatal, sino que pertenece a par-ticulares» , provocando que esta categoría se interpretará como no referenteal Estado, lo que produciría la exclusión del Software no libre generado porel aparato estatal. Además, el "Software público" se asocia generalmente conSoftware de dominio público.

14.3 Implicaciones Económico-Políticas

Una vez que un producto de Software libre ha empezado a circular, rápida-mente esta disponible a un costo muy bajo. Al mismo tiempo, su utilidadno decrece. El Software, en general, podría ser considerado un bien de usoinagotable, tomando en cuenta que su costo marginal es pequeñísimo y queno es un bien sujeto a rivalidad -la posesión del bien por un agente económicono impide que otro lo posea-.Puesto que el Software libre permite el libre uso, modi�cación y redis-

[email protected] 396 Antonio Carrillo Ledesma, Et alii

Page 399: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

tribución, a menudo encuentra un hogar entre usuarios para los cuales elcoste del Software no libre es a veces prohibitivo, o como alternativa a la pi-ratería. También es sencillo modi�carlo localmente, lo que permite que seanposibles los esfuerzos de traducción a idiomas que no son necesariamenterentables comercialmente, además:

� Porque así no se condiciona a los estudiantes a usar siempre lo mismo.

� Porque así no se fomenta la piratería en los estudiantes al no pagarlicencias.

� Porque así no se obliga a usar una solución concreta y se ofrece libertadde elección en los estudiantes.

� Porque es mucho más seguro ya que el Software libre es público y sepuede ver qué hace exactamente sin recelos.

La mayoría del Software libre se produce por equipos internacionales quecooperan a través de la libre asociación. Los equipos estan típicamente com-puestos por individuos con una amplia variedad de motivaciones, y puedenprovenir tanto del sector privado, del sector voluntario o del sector público.En México el Software libre nació en las Universidades y los Centros de

Investigación. Es por eso que, desde hace tres décadas, los estudiantes y losprofesores usan Software libre para �nes didácticos y de investigación. Lasuniversidades suelen optar por el uso de Software libre en vez de utilizarSoftware privativo porque satisface de una mejor manera sus necesidades decómputo, dada su naturaleza de apertura del código y la libertad de compartirlos resultados obtenidos. De forma colateral, no se tienen gastos adicionalesderivados del pago de licenciamientos.Computólogos, físicos, químicos, matemáticos y otros profesionistas y

cientí�cos utilizan Software libre como herramienta de investigación y creación.Un claro ejemplo de ello es la llamada Delta Metropolitana, que es una redde supercomputadoras que estan en varios puntos de la Ciudad de México,en el CINESTAV, el IPN, la UAM y la UNAM. Esa red de supercómputo uti-liza Software libre para consolidar sus recursos, hacer investigación y generarconocimiento.Por otro lado, dadas las características del Software de código cerrado, un

usuario común ignora absolutamente el contenido del mismo y por tanto siexiste dentro de las líneas del código alguna amenaza contra su equipo o su

[email protected] 397 Antonio Carrillo Ledesma, Et alii

Page 400: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

información, además el usuario no sólo tiene prohibido el intentar eliminar ocambiar esa parte del código sino que puede ser perseguido por la ley por elhecho de intentar conocer si existe tal amenaza en dicho Software.Además, en una sociedad de la información, el Software se ha convertido

en una herramienta importante de productividad, y una licencia de Softwareprivativo constituye un acuerdo o contrato entre dos sujetos jurídicos que vo-luntariamente acuerdan las condiciones de uso de un programa, pero el costoeconómico de dicha licencia es cada vez más alto y en el caso de institucioneseducativas, gubernamentales y sociedades civiles es en la mayoría de los casos-por decir lo menos�prohibitivo.

Ya hace un tiempo, se anunció en varios periódicos de circulación nacional(véase [100]) que:

El Instituto Mexicano de la Propiedad Industrial (IMPI) anuncióque en las próximas semanas dará inicio una serie de clausuras anegocios que utilicen Software licenciado de manera ilegal; estocomo parte del acuerdo que tiene la dependencia con The SoftwareAlliance (BSA) desde el 2002, el cual busca fomentar el uso deprogramas informáticos legales y disminuir el índice de pirateríaen el país.

De acuerdo a la BSA, el porcentaje de Software ilegal utilizadoen el territorio aún se ubica en un 56 por ciento, cifra considera-blemente menor a lo visto en el 2005, cuando el número ascendíaa más del 65 por ciento. Sin embargo, México continúa siendouno de los mayores compradores de piratería a nivel mundial, ylo que se busca con este tipo de acciones en el 2013 es disminuir,al menos, un punto porcentual.

"Si como consecuencia de una visita de inspección completa seencuentra la existencia de Software ilegal, se procede a la sanción.En el 2012 incrementaron hasta un 200% las sanciones por eluso ilegal de Software", dijo Kiyoshi Tsuru, director general enMéxico de la BSA.

Aquí es donde algunos se preguntarán, ¿y qué autoridad tieneThe Software Alliance para ejecutar estas determinaciones? Pesea que cuenta con el apoyo de empresas como Microsoft, Apple,Autodesk, Adobe, Aveva, AVG, CISCO, Dell, Hewlett Packard,

[email protected] 398 Antonio Carrillo Ledesma, Et alii

Page 401: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

IBM, SAP y Symntec, lo cierto es que la BSA no puede clausurarlegalmente ningún negocio. La verdadera autoridad llega en suacuerdo con el IMPI, el cual sí tiene las facultades para aplicarsanciones.

Además, la UNAM, desde junio 9 del 2009 �rmo un acuerdo (véase [101]):

Con el objetivo de fomentar la cultura de la legalidad en lo quese re�ere al uso del Software entre los estudiantes, la UniversidadNacional Autónoma de México y la Business Software Alliance(BSA) �rmaron un convenio general de colaboración.

Mediante este acuerdo, se promoverá el uso ético de las tec-nologías de la información y comunicación, y se compartirán cono-cimientos en materia de propiedad intelectual y Software, a �nde apoyar el desarrollo y explotación de bienes digitales en laUNAM, así como de�nir programas para contribuir al avance deun mundo digital seguro, informaron ambas organizaciones en uncomunicado.

El secretario general de la máxima casa de estudios, Sergio M.Alcocer Martínez de Castro, reconoció que la UNAM necesitahacer un esfuerzo en el ámbito institucional y en cada una delas entidades que la conforman, para brindar educación a susalumnos, profesores y trabajadores en este campo.

�Se pretende�, destacó, �que el convenio sea operativo y que sedesarrolle en cada una de las entidades con la impartición decursos y capacitación y en una rendición de cuentas para que elSoftware que se utilice sea legal�.

El funcionario reconoció a los miembros de Business SoftwareAllianceen Latinoamérica, y apuntó que la Universidad Nacionalhará lo necesario para facilitar el uso responsable, ético y segurodel Software.

Informó también que ambas partes se reunirán seis meses des-pués del inicio de este convenio de colaboración para analizar losavances.

En tanto, el director General de BSA-México, Kiyoshi Tsuru Al-berú, resaltó que con la �rma de este convenio podrán impulsar

[email protected] 399 Antonio Carrillo Ledesma, Et alii

Page 402: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

un plan conjunto relacionado con alta tecnología, ética y legalidad�Estamos seguros que en el mediano plazo se tendrán resultadosimportantes y se podrá hacer la diferencia�, señaló.

Por su parte, el abogado general, Luis Raúl González Pérez, co-mentó que la UNAM busca difundir estos valores entre su co-munidad, y llegar especialmente a los estudiantes que inician elbachillerato, porque desde edad temprana es importante fomentarla cultura de la legalidad.

Ante este escenario, una alternativa viable podría ser optar por el Soft-ware libre, aunque, pese a su incipiente desarrollo es seguro que en un futuropodría alcanzar a suplir todas las necesidades básicas de los usuarios, dejandola adquisición de paquetes especializados sólo para los cursos avanzados quejusti�que el uso de Software privativo.

[email protected] 400 Antonio Carrillo Ledesma, Et alii

Page 403: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

15 Apéndice C: El Sistema GNU/Linux

GNU/Linux se ve y se siente muy parecido a cualquier otro sistema UNIX,y de hecho la compatibilidad con UNIX ha sido una importante meta deldiseño del proyecto Linux. No obstante, Linux es mucho más joven que lamayor parte de los sistemas UNIX. Su desarrollo se inicio en 1991, cuandoun estudiante �nlandés, Linus Torvalds, escribió y bautizó un pequeño peroautosu�ciente núcleo para el procesador 80386, el primer procesador de 32bits verdadero en la gama de CPU compatibles con el PC de Intel.En los albores de su desarrollo, el código fuente de Linux se ofrecía gra-

tuitamente en internet. En consecuencia, su historia ha sido una colaboraciónde muchos usuarios de todo el mundo que se han comunicado casi exclusi-vamente a través de internet. Desde un núcleo inicial que implementabaparcialmente un subconjunto pequeño de los servicios de UNIX, Linux hacrecido para incluir cada vez más funcionalidades UNIX.En sus inicios, el desarrollo de Linux giraba en gran medida alrededor del

núcleo del sistema operativo central: el ejecutivo privilegiado que administratodos los recursos del sistema e interactúa directamente con el Hardware.Desde luego, se requiere mucho más que este núcleo para producir un sistemaoperativo completo. Resulta útil hacer la distinción entre el núcleo (Kernel)de Linux y un sistema Linux: el núcleo en Linux es una identidad de Softwaretotalmente original desarrollada desde cero por la comunidad Linux (sueleencontrarse en el directorio /boot en el sistema de archivos); el sistema Linux,tal como lo conocemos hoy, incluye una multitud de componentes, algunosescritos desde cero, otros tomados en préstamo de otros proyectos o creadosen colaboración con otros equipos como el proyecto GNU de la Free SoftwareFundation.El sistema Linux básico es un entorno estándar para aplicaciones y pro-

gramación de los usuarios, pero no obliga a adoptar mecanismos estándarpara controlar las funcionalidades disponibles como un todo. A medida queLinux ha madurado, se ha hecho necesaria otra capa de funcionalidad encimadel sistema Linux. Una distribución de GNU/Linux incluye todos los compo-nentes estándar del sistema Linux, más un conjunto de herramientas admi-nistrativas que simpli�can la instalación inicial y desinstalación de paquetesdel sistema.GNU/Linux puede funcionar tanto en entorno grá�co como en modo con-

sola (línea de comandos o Shell). La consola es común en distribuciones paraservidores, mientras que la interfaz grá�ca esta orientada al usuario �nal

[email protected] 401 Antonio Carrillo Ledesma, Et alii

Page 404: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

del hogar como empresarial. Así mismo, también existen los entornos deescritorio (GNOME, KDE, LXQt, LXDE, Xfce, Unity, MATE, Cinnamon,Pantheon, Deepin, Budgie, PIXEL, Enlightenment, Trinity, Moksha, Ukui,etc.), que son un conjunto de programas conformado por ventanas, íconos ymuchas aplicaciones que facilitan el uso de la computadora.

Hardware en GNU/Linux El soporte del Hardware en Linux es unasunto complicado, es lo que más problemas da. Linux soporta la mayorparte del Hardware, pero a veces pueden existir problemas97:

� si es Hardware muy antiguo, muy moderno o muy raro.

� si es un dispositivo exclusivo para Windows, como los Winmodems(linmodems.org).

Si el Hardware es "de verdad" (no Winmodems), de marca conocida yactual, casi con toda seguridad estará soportado por Linux.Los instaladores de Linux reconocen prácticamente todo el Hardware du-

rante la instalación, por lo que la mejor manera de evitar problemas con elHardware es instalarlo desde el principio. Si añadimos Software posterior-mente nos costará hacerlo funcionar. ¡Incluso puede ser más rápido instalarel sistema desde cero!

¿Cómo puedo saber si mi Hardware está soportado por Linux(antes de comprarlo y cometer un error de forma irreparable)?Fácil: consultando en internet.

97Mito: Linux se puede usar para revivir un ordenador viejo. La realidad es que si bien,hay múltiples distribuciones de Linux que corren en una gran cantidad de procesadoresantiguos y actuales, los Drivers necesarios para reconocer periféricos como tarjetas grá�cas,de red alámbrica e inalámbrica, entre muchos otros, no tienen soporte en Linux, lo cualhará imposible su uso en Linux. Esto es cierto en cualquier computadora no importa decual generación es el equipo de cómputo.La verdad de todo esto, es que los fabricantes están enfocados en producir Hardware

y Drivers que corran en los sistemas operativos con mayor cuota de mercado y por elmomento Linux no es uno de ellos.

[email protected] 402 Antonio Carrillo Ledesma, Et alii

Page 405: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

¿Qué sabe Linux de mi Hardware? El Kernel se encarga de lagestión del Hardware usando herramientas como Udev (sistema de nombradodel Hardware), Hotplug (mecanismo de avisos), Dbus (comunicaciones entreprocesos) o Hal (capa de abstracción de Hardware), y mapea todo el Hard-ware en archivos de dispositivos ubicados en los directorios /dev y /sys.Algunos comando usados para conocer el Hardware:

� lscpu - Información de procesador

� lshw - Lista de Hardware en Linux

� hwinfo - Información del Hardware en Linux

� lspci - Lista PCI

� lsscsi - Listar dispositivos SCSI

� lsusb - Lista de los buses usb y detalles del dispositivo

� inxi - Script mega Bash para usuarios no técnicos

� lsblk - Lista de dispositivos de bloque

� df - espacio en disco de los sistemas de archivos

� pydf - Python df

� fdisk - Informa y permite modi�car las particiones de disco

� mount - Permite montar y desmontar y ver sistema de archivo montados

� free - Da información de la memoria RAM y Swap

� hdparm - Información de disco duro

Archivos del directorio /proc, contienen información accesible usando elcomando cat:

� Información de CPU

� Información del Kernel de Linux

� Dispositivos Sata / SCSI

� Particiones

[email protected] 403 Antonio Carrillo Ledesma, Et alii

Page 406: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Componentes de un Sistema GNU/Linux El sistema GNU/Linux secompone de tres cuerpos principales de código, al igual que la mayor partede las implementaciones de UNIX.

� El núcleo se encarga de mantener todas las abstracciones importantesdel sistema operativo, incluidas cosas tales como memoria virtual yprocesos.

� Las bibliotecas del sistema de�nen un conjunto estándar de funciones através de las cuales las aplicaciones pueden interactuar con el núcleo yque implementan gran parte de la funcionalidad del sistema operativoque no necesita todos los privilegios del código del núcleo.

� Las utilerías del sistema que son programas que realizan tareas de ad-ministración especializadas individuales. Algunos programas utilitariospueden invocarse una sola vez para asignar valores iniciales y con�gu-rar algún aspecto del sistema; otros llamados demonios98 podrían eje-cutarse de forma permanente, realizando tareas tales como respondera conexiones de red entrantes, aceptar solicitudes de ingreso al sistemadesde terminales, o actualizar archivos de bitácora.

Principios de Diseño Unix y posteriormente Linux se diseñaron comosistemas de tiempo compartido. La interfaz estándar con el usuario (el Shell)es sencilla y puede ser sustituida por otra si se desea99. El sistema de archivoses un árbol invertido con múltiples niveles, que permite a los usuarios crearsus propios subdirectorios. Cada archivo de datos de usuario es tan solo unasecuencia de Bytes.El sistema UNIX/Linux fue diseñado por programadores para progra-

madores; por ello, siempre ha sido interactivo, y las funciones para desarro-llar programas siempre han tenido prioridad. Tales recursos incluyen a losprogramas make, gcc, git, etc.

98En sistemas UNIX/LINUX se conoce como demonio o Daemon (Disk And ExecutionMonitor) a un proceso que se ejecuta en segundo plano del sistema operativo, se ejecutaen todo momento y no posee interacción directa con el usuario, también se le conocegenéricamente como servicio o proceso, del cual no percibimos su ejecución. Un demoniorealiza una operación especí�ca en tiempos prede�nidos o en respuesta a ciertos eventosdel sistema.99Algunos de los distintos tipos de Shell son: Shell Bourne, Shell Zsh, Shell C, Shell

Korn, Shell Bourne-Again (mejor conocido como Bash, Bourne again shell), etc.

[email protected] 404 Antonio Carrillo Ledesma, Et alii

Page 407: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Los archivos de disco y los dispositivos de Entrada/Salida (E/S) se tratande la manera más similar posible. Así, la dependencia de dispositivos ylas peculiaridades se mantienen en el núcleo hasta donde es posible; aúnen el núcleo, la mayor parte de ellas están con�nadas a los Drivers de losdispositivos.Un archivo en Unix/Linux es una secuencia de Bytes. Los diferentes

programas esperan distintos niveles de estructura, pero el núcleo no im-pone ninguna estructura a los archivos. Por ejemplo, la convención paralos archivos de texto es líneas de caracteres ASCII separadas por un solocarácter de nueva línea (que es el carácter de salto de línea en ASCII ), peroel núcleo nada sabe de esta convención.Los archivos se organizan en directorios en estructura de árbol. Los direc-

torios también son archivos que contienen información sobre como encontrarotros archivos. Un nombre de camino, trayectoria o ruta de un archivo esuna cadena de texto que identi�ca un archivo especi�cando una ruta a travésde la estructura de directorios hasta el archivo. Sintácticamente, una trayec-toria consiste en nombres de archivos individuales separados por el carácterdiagonal. Por ejemplo /usr/local/fuente, la primera diagonal indica la raízdel árbol de directorios, llamado directorio raíz o root. El siguiente elemento,usr, es un subdirectorio de la raíz, local es un subdirectorio de usr y fuentees un archivo o directorio que está en el directorio local. No es posible deter-minar a partir de la sintaxis del nombre de una trayectoria si fuente es unarchivo ordinario o un directorio.Un archivo puede conocerse por más de un nombre en uno o más direc-

torios. Tales nombres múltiples se denominan enlaces, también se manejanenlaces simbólicos, que son archivos que contienen el nombre de una ruta deotro archivo o directorio. Las dos clases de enlaces también se conocen comoenlaces duros y enlaces blandos. Los enlaces blandos (simbólicos), a dife-rencia de los duros pueden apuntar a directorios y pueden cruzar fronterasde sistemas de archivos (apuntar a otros sistemas de archivos) y el sistemaoperativo trata igualmente todos los enlaces.El nombre de archivo "." en un directorio es un enlace duro al directorio

mismo. El nombre de archivo ".." es un enlace al directorio padre. Por tanto,si el directorio actual es /usr/jlp/programa, entonces ../bin/wdf se re�ere a/usr/jpl/bin/wdf.Los dispositivos de Hardware tienen nombres en el sistema de archivos. El

núcleo sabe que estos archivos especiales de dispositivos o archivos especialesson interfaces con dispositivos, pero de todos modos el usuario accede a ellos

[email protected] 405 Antonio Carrillo Ledesma, Et alii

Page 408: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

prácticamente con las mismas llamadas al sistema que otros archivos.

15.1 Sistema de Archivos y Estructura de Directorios

El Sistema de Archivos de Linux o cualquier sistema de archivos, general-mente es una capa bajo el sistema operativo la cual maneja el posicionamientode tus datos en el almacenamiento, sin este el sistema no puede saber dóndeempieza y termina un archivo.

Tipos de Sistema de Archivos de GNU/Linux Cuando intentas ins-talar Linux, ves que ofrece distintos sistemas de archivos como los siguientes:

Ext, Ext2, Ext3, Ext4, JFS, XFS, Btrfs y Swap

Así que, ¿qué son estos sistemas de archivos que ofrece Linux?

� Ext: Antiguo y descontinuado debido a sus limitaciones.

� Ext2: Primer sistema de archivos de Linux que permite 2 Terabytes dedatos.

� Ext3: Evolución del Ext2, con actualizaciones y retrocompatibilidad100.

� Ext4: Es más rápido y permite archivos mucho más grandes con unavelocidad signi�cativa101.

� JFS: Sistemas de archivos antiguos hechos por IBM. Funcionan biencon archivos grandes y pequeños, pero falla y los archivos se corrompendespués de un largo tiempo de utilización, según los reportes.

� XFS: Sistema de archivos antiguo que funciona lento con archivos pe-queños.

� Btrfs: Hecho por Oracle. No es estable como Ext en algunas distribu-ciones, pero se puedes decir que es buen reemplazo, si es necesario.Tiene buen rendimiento.

100El único problema que tiene es que los servidores no utilizan este tipo de sistema dearchivos debido a que no soporta recuperación de archivos o Snapshots del disco.101Es una muy buena opción para discos de estado sólido SSD, además puedes dartecuenta que cuando intentas instalar cualquier distribución de Linux este es el sistema dearchivo por defecto que sugiere Linux.

[email protected] 406 Antonio Carrillo Ledesma, Et alii

Page 409: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Swap: Es un espacio de intercambio que es utilizado para almacenardatos temporales, reduciendo así el uso de la RAM, normalmente esdel doble del tamaño de la RAM del equipo.

En el sistema de archivos de Linux, se tiene asociado un elemento en latabla que guarda a los archivos y directorios dentro del sistema de archivos,que contiene un número. Este número identi�ca la ubicación del archivodentro del área de datos llamado inodo.Cada inodo contiene información de un �chero o directorio. En concreto,

en un inodo se guarda la siguiente información:

� El identi�cador de dispositivo del dispositivo que alberga al sistema dearchivos.

� El número de inodo que identi�ca al archivo dentro del sistema dearchivos.

� La longitud del archivo en Bytes.

� El identi�cador de usuario del creador o un propietario del archivo conderechos diferenciados.

� El identi�cador de grupo de un grupo de usuarios con derechos dife-renciados.

� El modo de acceso: capacidad de leer, escribir, y ejecutar el archivopor parte del propietario, del grupo y de otros usuarios.

� Las marcas de tiempo con las fechas de última modi�cación (mtime),acceso (atime) y de alteración del propio inodo (ctime).

� El número de enlaces (Hard Links), esto es, el número de nombres(entradas de directorio) asociados con este inodo.

� El área de datos ocupa el resto del disco y es equivalente a la zona dedatos en FAT. En esta zona, como su nombre indica, están almacenadoslos �cheros y directorios de nuestro sistema.

[email protected] 407 Antonio Carrillo Ledesma, Et alii

Page 410: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Estructura de Directorios en GNU/Linux Además de los sistemas dearchivos que di�ere de la de Windows, la estructura de directorios en Linuxes distinta, y es necesario conocerla para encontrar �cheros de con�guración,instalar ciertos paquetes en el lugar adecuado, localizar las fuentes del Kernel,o la imagen de este, nuestros �cheros personales, entre otros.

Figura 1: Jerarquía del sistema de archivos de Linux.

De hecho, la Fundación Linux mantiene un estándar de jerarquía delsistema de archivos, este de�ne la estructura de directorios y el contenido delos directorios en las distribuciones Linux. Gracias a este estándar es posibleencontrar la misma estructura de directorios en (casi) todas las distribucionesde Linux102 que a continuación describiremos brevemente:

/ es el directorio principal, la raíz o root. Contiene el resto de directo-rios, es decir, todos los demás serían subdirectorios de este (incluso si estánen particiones o discos diferentes). Sin duda es el más importante.

/bin es el directorio donde se almacenan los binarios, es decir, los pro-gramas que emplea el sistema para labores administrativas como los coman-102Recordemos que Linux se basa en UNIX y, por tanto, toma prestada su jerarquía desistema de archivos de UNIX. Encontramos una estructura similar en sistemas operativossimilares a UNIX, como BSD y MacOS.

[email protected] 408 Antonio Carrillo Ledesma, Et alii

Page 411: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

dos cp, echo, grep, mv, rm, ls, kill, ps, su, tar, etc.

/sbin la S es de System, y como su nombre indica, aquí se almacenan losbinarios o programas que emplea el propio sistema operativo para tareas dearranque, restauración, etc. Por ejemplo, fsck, mount, mkfs, reboot, swapon.

/boot es el directorio de arranque, donde está la o las imágenes delKernel Linux que se cargarían durante el arranque, y también directorios ycon�guración del propio gestor de arranque.

/etc muy importante para el administrador, ya que aquí residen los�cheros de con�guración de los componentes del sistema y otros programasinstalados.

/dev es un directorio muy especial donde se encuentran los dispositivosde bloques o caracteres, es decir, �cheros que representan la memoria, par-ticiones, discos, dispositivos de Hardware, etc. Ya sabes que en LINUX yUNIX todo es un archivo, y no unidades como en Windows. Por ejemplo, eldisco duro o particiones serían /dev/sda1, /dev/sda2, /dev/sdb1, etc.

/proc es otro directorio muy especial, más que un directorio es unainterfaz por decirlo de un modo sencillo. Y aquí el sistema nos presentalos procesos103 como directorios numerados con el identi�cador de procesosPID (Process ID). Dentro de cada uno de ellos estaría toda la informaciónnecesaria para la ejecución de cada proceso en marcha. Además, encontrarías�cheros de los que extraer información importante, como cpuinfo, meminfo,etc. Es precisamente de estos �cheros de los que extraen información algunoscomandos que usamos habitualmente, como por ejemplo, cuando hacemosuso de free para consultar la memoria disponible, este comando realmenteestaría mostrando el contenido de /proc/meminfo de una forma ordenada.

103Existen procesos activos y dormidos, procesos huérfanos y procesos zombis.Los procesos activos son aquellos que están en ejecución en el sistema y los procesos

dormidos son aquellos que esperan algún recurso o señal para continuar con su ejecución.Los procesos huérfanos son aquellos que se siguen ejecutando a pesar que su proceso

padre concluyo su operación.Los procesos zombis es un proceso que ha concluido pero aún están presentes en la tabla

de procesos.

[email protected] 409 Antonio Carrillo Ledesma, Et alii

Page 412: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

/media o /mnt son los directorios donde se establecen generalmentelos puntos de montaje. Es decir, cuando insertamos algún medio extraíbleo recurso de red compartido, etc., que hayamos montado, estaría aquí si lohemos puesto como punto de montaje. El primero es más especí�co paramedios que se montan de una forma temporal.

/home es el directorio para los usuarios estándar. Por ejemplo, aquíse almacenan dentro de directorios separados (uno para cada usuario consu nombre), los �cheros personales. Por ejemplo, /home/antonio sería midirectorio personal.

/lib o /lib64 es donde se alojan las bibliotecas necesarias para losbinarios presentes en el sistema. En /lib64 estarían las de las aplicaciones de64 bits y en /lib estarían las aplicaciones de 32 bits.

/opt es un directorio que almacenarán los paquetes o programas ins-talados en el sistema que son de terceros. Por ejemplo, si instalamos algúnantivirus, Chrome, Arduino IDE o ciertos paquetes grandes, suelen instalarseaquí.

/root no hay que confundirlo con /, una cosa es el directorio raíz o rooty otra muy diferente /root. En este caso, se puede asemejar a un /home peroes exclusivo para el usuario root o usuario administrador.

/svr almacena �cheros y directorios relativos a servidores que tienesinstalados en el sistema, como Web, FTP, CVS, etc.

/sys junto con /dev y /proc, es otro de los especiales. Y como /proc,realmente no almacena nada, sino que es una interfaz también. En este caso,son �cheros virtuales con información del Kernel e incluso, se pueden emplearalgunos de sus �cheros para con�gurar ciertos parámetros del Kernel.

/tmp es el directorio para �cheros temporales de todo tipo. Es em-pleado por los usuarios para almacenar de forma temporal ciertos �cheroso incluso para almacenar Cache o ciertos �cheros volátiles de navegadoresWeb, etc. No obstante, hay otro directorio para lo mismo en /var/tmp.

[email protected] 410 Antonio Carrillo Ledesma, Et alii

Page 413: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

/var se trata de un directorio con directorios y �cheros que suelen cre-cer de tamaño, como bases de datos, logs, etc. Es precisamente los logs oregistros del sistema por lo que es más popular este directorio, y allí encon-trarás muchísima información de todo lo que ocurre en el sistema: /var/logs/.Dentro de dicho directorio encontrarás separados por directorios, los logs demultitud de Software, incluido el sistema.

/usr son las siglas de User System Resources, y actualmente almacena�cheros de solo lectura relativos a utilidades del usuario, como los paquetesque instalamos mediante el gestor de paquetes en nuestra distribución. Den-tro hay como una jerarquía de árbol de directorios vistos hasta ahora (casitodos) como si de un segundo nivel se tratase. Vas a encontrar /usr/bin,/usr/lib, /usr/sbin, /usr/src, etc., que por lo dicho anteriormente y susnombres, es intuitivo saber lo que almacenan que almacenan. Solo decirque /usr/src es donde permanecerán los �cheros de código fuente.Ten en cuenta que no todas las distribuciones de Linux siguen este es-

quema y puede haber pequeñas variaciones, pero si se adaptan al estándar,no tendrás problemas al navegar por la estructura de archivos.

Rutas Absolutas o Relativas cuando se empieza a manejar un intérpretede comandos, una de las cosas que más cuesta es acostumbrarte a encontrary hacer referencia a elementos del sistema de �cheros. Mientras que en un en-torno grá�co tenemos que hacer Click en carpetas y subcarpetas hasta llegaral elemento deseado, en el intérprete de comandos tendremos que conseguirlo mismo, pero indicando el lugar mediante una cadena de texto compuestapor los nombres de las carpetas que hay que recorrer hasta el lugar donde seencuentra el elemento deseado. Según el sistema cada nombre de carpeta sesepara por un carácter especial, que en Linux será la diagonal ( / ).Estas rutas serán usadas por los comandos para saber dónde encontrar

los elementos sobre los que tienen que realizar la acción correspondiente104.Hay dos formas de utilizar rutas, una es de forma absoluta y la otra de formarelativa. Vamos a explicar la diferencia a continuación:

104Por ejemplo, si quiero posicionarme en un directorio determinado, utilizaré el comandocd y para indicar el sitio adonde quiero ir usaré una ruta, por ejemplo cd /home/. Elcomando cp copia elementos, en este caso necesitaremos dos rutas una para el origen(elemento que quiero copias) y otra para el destino (elemento nuevo que voy a crear olugar donde voy a dejar las copias). Por lo tanto podría poner:cp /etc/passwd /home/copia_passwd.

[email protected] 411 Antonio Carrillo Ledesma, Et alii

Page 414: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Rutas Absolutas El sistema de �cheros es una estructura jerárquicaque en el caso de Linux tiene una raíz que se indica cuando se pone solamenteel carácter diagonal / . En la raíz estan los directorios principales del sistemaque a su vez tendrán subdirectorios en su interior. Cuando quiero indicardónde se encuentra un elemento usando una ruta absoluta, tendré que indi-carle todos los directorios por los que hay que pasar empezando desde la raízdel sistema. O lo que es lo mismo, siempre empezarán por /. Ejemplos:

/etc/apt/sources.list/var/log/syslog/home/alumno/.bashrc/usr/bin/

estas rutas suelen ser bastante largas, pero tiene como ventaja que funcio-nan siempre, independientemente del lugar desde el que ejecute la orden105.

Rutas Relativas Las rutas relativas indican el camino para encontrarun elemento, pero basándonos en el directorio desde el que se ejecuta la orden.Son mucho más cortas que las absolutas, pero para saber si son correctas ono, tenemos que saber siempre desde dónde se han utilizado.Un atajo fundamental para la construcción de rutas relativas es conocer

que al escribir .. en la ruta hace referencia al directorio padre. Por lo tantosi ejecuto:

$ cd ..

estoy dando la orden de cambiar de directorio al padre del actual, es decir,al que esta justo antes en la estructura jerárquica. El único elemento que notiene padre es la propia raíz del sistema ( / ).Las rutas relativas harán referencia a un elemento que se encuentre en

el directorio desde el que ejecutamos la orden, o usará los dos puntos paraascender a directorios superiores. Siempre que sean correctos, podemos com-binarlos de la forma que necesitemos separando cada directorio por una dia-gonal. Por ejemplo una ruta correcta podría ser: ../../fotos/personales/

105Es muy recomendable utilizar la facilidad que brinda el BASH de completar el nombrede un elemento del sistema de �cheros pulsando la tecla tabulador. Ahorrará mucho tiempoy errores.

[email protected] 412 Antonio Carrillo Ledesma, Et alii

Page 415: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Metacarácter o Shell Globbing los metacarácteres son caracteres quetienen un signi�cado especial en la línea de comandos, estos son comodinesque el sistema permite usar para especi�car los archivos que satisfacen el�ltro especi�cado a la hora de buscar, eliminar o �ltrar nombres de archivo,estos metacarácteres son: *, ?, [ ] y [^]106.

� * Se utiliza para reemplazar cero o más caracteres. Puede ser sustituidopor cualquier cadena de caracteres, ejemplo:

$ ls a*.pdf

� ? Sustituye un carácter cualquiera, ejemplo:

$ ls a?chivo.pdf

� [ ] Se usa para de�nir rangos o conjuntos de caracteres a localizar, parade�nir los rangos se debe usar el guión -, si son varios caracteres seseparan por coma, ejemplo:

$ ls [Aa]rchivo[0-9].pdf

� [^] o [!]Este caso es contrario al anterior, este representa que se busquealgo exceptuando lo que se encuentra entre los corchetes, también tra-baja con rangos, ejemplo:

$ls [^A]rchivo.pdf

Permisos de Archivos y Directorios GNU/Linux, al ser un sistema dis-eñado fundamentalmente para trabajo en red, la seguridad de la informaciónque almacenemos en nuestros equipos (y no se diga en los servidores) es fun-damental, ya que muchos usuarios tendrán o podrán tener acceso a parte delos recursos de Software (tanto aplicaciones como información) y Hardwareque están gestionados en estos equipos de cómputo. ¿Ahora podemos verporque la necesidad de un sistema de permisos?En GNU/Linux, los permisos o derechos que los usuarios pueden tener

sobre determinados archivos contenidos en él se establecen en tres nivelesclaramente diferenciados. Estos tres niveles son los siguientes:

106Vease también el uso de las secuencias (véase ??).

[email protected] 413 Antonio Carrillo Ledesma, Et alii

Page 416: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Permisos del propietario.

� Permisos del grupo.

� Permisos del resto de usuarios (o también llamados "los otros").

Para tener claros estos conceptos, en los sistemas en red siempre existela �gura del administrador, superusuario o root. Este administrador es elencargado de crear y dar de baja a usuarios, así como también, de establecerlos privilegios que cada uno de ellos tendrá en el sistema. Estos privilegios seestablecen tanto para el directorio de trabajo (Home) de cada usuario comopara los directorios y archivos a los que el administrador decida que el usuariopueda acceder.

Permisos del propietario el propietario es aquel usuario que generao crea un archivo/carpeta dentro de su directorio de trabajo, o en algún otrodirectorio sobre el que tenga derechos. Cada usuario tiene la potestad decrear, por defecto, los archivos que quiera dentro de su directorio de trabajo.En principio, él y solamente él será el que tenga acceso a la informacióncontenida en los archivos y directorios que hay en su directorio trabajo oHome -bueno, no es del todo cierto esto, ya que el usuario root siempre tieneacceso a todos los archivos y directorios del sistema-.

Permisos del grupo lo más normal es que cada usuario pertenezcaa un grupo de trabajo. De esta forma, cuando se gestiona un grupo, segestionan todos los usuarios que pertenecen a éste. Es decir, es más fácilintegrar varios usuarios en un grupo al que se le conceden determinadosprivilegios en el sistema, que asignar los privilegios de forma independientea cada usuario.

Permisos del resto de usuarios por último, también los privilegios delos archivos contenidos en cualquier directorio, pueden tenerlos otros usuariosque no pertenezcan al grupo de trabajo en el que está integrado el archivoen cuestión. Es decir, a los usuarios que no pertenecen al grupo de trabajoen el que está el archivo, pero que pertenecen a otros grupos de trabajo, seles denomina resto de usuarios del sistema.

[email protected] 414 Antonio Carrillo Ledesma, Et alii

Page 417: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

¿cómo puedo identi�car todo esto? sencillo, abre una terminal yrealiza lo siguiente:

$ ls -l

entregará una salida como esta:

Figura 2: Estructura de permisos en la salida de: ls -l

Veamos por partes: El primer carácter al extremo izquierdo, representael tipo de archivo, los posibles valores para esta posición son los siguientes:

� - Archivo

� d Directorio

Los siguientes 9 restantes, representan los permisos del archivo y debenverse en grupos de 3 y representan:

� - Sin permiso

� r Permiso de lectura

� w Permiso de escritura

� x Permiso de ejecución

Los tres primeros representan los permisos para el propietario del archivo,los tres siguientes son los permisos para el grupo del archivo y los tres últimosson los permisos para el resto del mundo o otros.Luego viene el contador de ligas simbólicas, el dueño del archivo, grupo

al que pertenece, el tamaño en Bytes, la fecha de última modi�cación y�nalmente el nombre.

[email protected] 415 Antonio Carrillo Ledesma, Et alii

Page 418: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Entrada y Salida Estándar los procesos pueden abrir archivos a discre-ción, pero la mayor parte de los procesos esperan a que estén abiertos tresdescriptores de archivos (nume-rados 0, 1 y 2) cuando inician. Estos de-scriptores se conocen como entrada estándar (0), salida estándar (1) y errorestándar (2). Es común que los tres estén abiertos en la terminal del usuario.Así, el programa puede leer lo que el usuario teclea leyendo la entrada están-dar, y puede enviar salidas a la pantalla del usuario escribiendo en la salidaestándar. El deScriptor de archivo de error estándar también esta abiertopara escritura, y se usa para los mensajes de error.

Standard input la Entrada estándar, en inglés standard input (mejorconocido como stdin) es el mecanismo por el cual un usuario le indica a losprogramas la información que estos deben procesar. Por omisión, el tecladoes la entrada estándar. La entrada estándar representa los datos que nece-sita una aplicación para funcionar, como por ejemplo un archivo de datoso información ingresada desde la terminal y es representado en la terminalcomo el tipo 0.

Standard output la Salida estándar, en inglés standard output (mejorconocido como stdout) es el método por el cual el programa puede comuni-carse con el usuario. Por omisión, la salida estándar es la pantalla dondese ejecutaron las instrucciones. La salida estándar es la vía que utilizanlas aplicaciones para mostrarte información, allí podemos ver el progresoo simplemente los mensajes que la aplicación quiera darte en determinadomomento y es representado en la terminal como el tipo 1.

Standard error por último existe un �ujo conocido como Error están-dar, en inglés standard error output (mejor conocido como stderr) que esutilizado por las instrucciones para desplegar mensajes de error que surjandurante el transcurso de su ejecución. Al igual que stdout, el error estándarserá la pantalla donde se procesaron las instrucciones. El error estándar esla forma en que los programas te informan sobre los problemas que puedenencontrarse al momento de la ejecución y es representado en la terminal comoel tipo 2.

Redirección mediante pipe las tuberías (pipe) unen la salida están-dar de un comando con la entrada estándar de otro, es decir, la salida de

[email protected] 416 Antonio Carrillo Ledesma, Et alii

Page 419: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

un comando se emplea como entrada del siguiente. Para ello se emplea elsímbolo pipe "j". La utilización de tuberías evita la generación constante dearchivos intermedios reduciendo el tiempo de procesamiento.

Redirección hacia el dispositivo nulo en GNU/Linux, /dev/nulles un archivo especial al que se envía cualquier información que quiera serdescartada. Aunque al principio no lo parezca, el uso del dispositivo nulo esmuy útil.

15.2 Interfaz de Usuario

Tanto el programador como el usuario de Linux manejan principalmente elconjunto de programas de sistemas que se ha escrito y están disponiblespara ejecutarse. Estos programas efectúan llamadas al sistema operativonecesarias para apoyar su función, pero las llamadas al sistema en sí estáncontenidas dentro del programa y no tienen que ser obvias para el usuario.GNU/Linux puede funcionar tanto en entorno grá�co107 (Graphical User

Interce, GUI) como en modo línea de comandos (Command-Line Interface,CLI) también conocida como consola o Shell. La consola es común en dis-tribuciones para servidores, mientras que la interfaz grá�ca esta orientada alusuario �nal del hogar como empresarial.Los entornos de escritorio pertenecen a la interfaz grá�ca, son un con-

junto de programas conformado por ventanas, íconos, imágenes y muchasaplicaciones que facilitan el uso de la computadora. Los entornos de escrito-rio más populares en GNU/Linux son: GNOME, KDE, LXQt, LXDE, Xfce,Unity, MATE, Cinnamon, Pantheon, Deepin, Budgie, PIXEL, Enlighten-ment, Trinity, Moksha, Ukui, etc. Dependiendo la distribución se puedentener uno o más escritorios instalados, por ejemplo en Debian GNU/Linuxestán disponibles los más usados y si el usuario los instala, puede decidir al

107Un servidor de pantalla en GNU/Linux es un programa que es responsable de la coor-dinación de entrada y salida de sus clientes, hacia y desde en resto del sistema operativo,y entre el Hardware y el sistema operativo. El servidor de visualización proporciona elmarco para un entorno grá�co para que se pueda utilizar el Mouse y el teclado para inter-actuar con las aplicaciones. El servidor de pantalla se comunica con sus clientes a travésdel protocolo del servidor de pantalla como: X11, Wayland o Mir. El servidor de visua-lización es un componente clave en cualquier interfaz grá�ca de usuario, especí�camenteel sistema de ventanas. No debemos confundir el servidor de visualización con el entornode escritorio. El entorno de escritorio utiliza un servidor de pantalla debajo.

[email protected] 417 Antonio Carrillo Ledesma, Et alii

Page 420: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

iniciar sesión cual usar.

15.2.1 Interfaz Grá�ca de Usuario

La interfaz grá�ca de usuario es un tipo de visualización que permite alusuario elegir comandos, iniciar programas y ver listas de archivos y otrasopciones utilizando las representaciones visuales (iconos) y las listas de ele-mentos del menú. Las selecciones pueden activarse bien a través del tecladoo con el ratón.Para los autores de aplicaciones, las interfaces grá�cas de usuario ofrecen

un entorno que se encarga de la comunicación con la computadora. Estohace que el programador pueda concentrarse en la funcionalidad, ya que noestá sujeto a los detalles de la visualización ni a la entrada a través delratón o del teclado. También permite a los programadores crear programasque realicen de la misma forma las tareas más frecuentes, como guardar unarchivo, porque la interfaz proporciona mecanismos estándar de control comoventanas y cuadros de diálogo. Otra ventaja es que las aplicaciones escritaspara una interfaz grá�ca de usuario son independientes de los dispositivos:a medida que la interfaz cambia para permitir el uso de nuevos dispositivosde entrada y salida, como un monitor de pantalla grande o un dispositivoóptico de almacenamiento, las aplicaciones pueden utilizarlos sin necesidadde cambios.

¿Qué es un entorno de escritorio? un entorno de escritorio es unconjunto de Software para ofrecer al usuario de una computadora una inte-racción amigable y cómoda. El Software es una solución completa de interfazgrá�ca de usuario, ofrece iconos, barras de herramientas, carpetas, fondos depantalla y Widgets de escritorio, e integración entre aplicaciones con habil-idades como, arrastrar y soltar. En general cada entorno de escritorio sedistingue por su aspecto y comportamiento particular, aunque algunos tien-den a imitar características de escritorios ya existentes. El primer entornomoderno de escritorio que se comercializó fue desarrollado por Xerox en losaños 80. Actualmente el entorno más conocido es el ofrecido por la familiaWindows aunque existen otros como los de: Macintosh (Classic y Cocoa) yde código abierto como: GNOME, KDE, LXQt, LXDE, Xfce, Unity, MATE,Cinnamon, Pantheon, Deepin, Budgie, PIXEL, Enlightenment, Trinity, Mok-sha, Ukui, etc.

[email protected] 418 Antonio Carrillo Ledesma, Et alii

Page 421: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

¿Qué son los gestores de ventanas? un gestor de ventanas o eninglés Windows Manager, es un programa que controla la ubicación y apari-encia de las aplicaciones bajo el sistema X Windows. Las computadorassuelen ofrecer una interfaz grá�ca de usuario que facilita la interacción con elsistema operativo. Las plataformas Windows y Macintosh ofrecen métodosde visualización y control de las ventanas e interacción con las aplicaciones,estandarizados por sus vendedores. En cambio el sistema grá�co XWindows,popular en el ámbito de sistemas Unix y similares, como GNU/Linux, permiteal usuario escoger entre varios gestores según sus gustos o necesidades. Losgestores de ventanas di�eren entre sí de muchas maneras, incluyendo aparien-cia, consumo de memoria, opciones de personalización, escritorios múltipleso virtuales y similitud con ciertos entornos de escritorio ya existentes. Estosse dividen en 3 tipos, que son los siguientes:

� Stacking: Aquellos que imitan las apariencias y funcionalidades deWin-dows y Mac OS X, poe ende, gestionan las ventanas como pedazos depapel en un escritorio, que pueden ser apiladas unas sobre otras.

� Tiling: Aquellos de tipo "mosaico" donde las ventanas no se superpo-nen, y donde suelen hacerse un uso muy extenso de atajos de teclado,y se obtienen una menor dependencia del uso del ratón.

� Dynamics: Aquellos que permiten alterar dinámicamente el diseño delas ventanas entre mosaicos o �otantes.

Las acciones asociadas al gestor de ventanas suelen ser, abrir, cerrar,minimizar, maximizar, mover, escalar y mantener un listado de las ventanasabiertas. Es también muy común que el gestor de ventanas integre elementoscomo: el decorador de ventanas, un panel, un visor de escritorios virtuales,iconos y un tapiz.

Entornos de Escritorios más Conocidos:

KDE (htps://kde.org)proyecto que fue iniciado en octubre de 1996 por el programador alemán

Matthias Ettrich, quien buscaba crear una interfaz grá�ca uni�cada parasistemas Unix. En sus inicios imitó a CDE (Common Desktop Environ-ment), un entorno de escritorio utilizado por varios Unix. Este es un entorno

[email protected] 419 Antonio Carrillo Ledesma, Et alii

Page 422: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de escritorio, multitud de aplicaciones e infraestructura de desarrollo paradiversos sistemas operativos como GNU/Linux, Mac OS X, Windows, etc.Los principales componentes de Software elaborados por KDE se agrupanbajo el nombre KDE Frameworks, KDE Plasma y KDE Applications. Lasaplicaciones KDE están traducidas a aproximadamente 88 idiomas y estánconstruidas con los principios de facilidad de uso y de accesibilidad modernaen mente y funcionan de forma completamente nativa en GNU/Linux, BSD,Solaris, Windows y Mac OS X.

GNOME (https://www.gnome.org)este proyecto fue iniciado por los programadores mexicanos Miguel de

Icaza y Federico Mena y forma parte o�cial del proyecto GNU. Nació comouna alternativa a KDE bajo el nombre de GNU Network Object ModelEnvironment (Entorno de Modelo de Objeto de Red GNU). Actualmente,GNOME se está traduciendo a 193 idiomas. Donde 38 de estos ya cuentancon al menos el 80% de cadena traducidas. Está disponible en las principalesdistribuciones GNU/Linux, incluyendo Fedora, Debian, Ubuntu, ManjaroLinux, Red Hat Enterprise Linux, SUSE Linux Enterprise, CentOS, OracleLinux, Arch Linux, Gentoo6, SteamOS, entre otras. También, se encuentradisponible en Solaris, un importante sistema operativo UNIX y en Sistemasoperativos Unix-like como FreeBSD.

Xfce (https://www.xfce.org)es un entorno de escritorio libre para sistemas tipo Unix como GNU/Linux,

BSD, Solaris y derivados. Su objetivo es ser rápido y ligero, sin dejar deser visualmente atractivo y fácil de usar. Consiste en varios componentesempaquetados por separado que en conjunto proporcionan la funcionalidadcompleta del entorno de escritorio, pero se pueden seleccionar por separadopara que el usuario pueda adaptar el ambiente de trabajo a sus necesidades.Puede ser instalado en varias plataformas como: Linux, NetBSD, FreeBSD,OpenBSD, Solaris, Cygwin and MacOS X, sobre x86, PPC, Sparc, Alpha.

LXDE (https://lxde.org)es un entorno de escritorio libre para Unix y otras plataformas POSIX,

como Linux o BSD. El nombre corresponde a "Lightweight X11 Desktop En-vironment", que en español signi�ca Entorno de escritorio X11 ligero. Esun proyecto que apunta a entregar un nuevo entorno de escritorio ligero y

[email protected] 420 Antonio Carrillo Ledesma, Et alii

Page 423: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

rápido. No está diseñado para ser tan complejo como KDE o GNOME, peroes bastante usable y ligero, y mantiene una baja utilización de recursos yenergía. A diferencia de otros ambientes de escritorio, los componentes nose integran �rmemente. Al contrario, los componentes son independientes, ycada uno de ellos se puede utilizar independientemente con muy pocas depen-dencias. Y usa Openbox como gestor de ventanas predeterminado y apuntaa ofrecer un escritorio ligero y rápido basado en componentes independientesque pueden ser utilizados en otros entornos.

LXQt (https://lxqt.github.io)es un entorno de escritorio libre y de código abierto para Linux, resultado

de la fusión entre los proyectos LXDE y Razor-qt. LXQt conjuga la �losofíade LXDE con las librerías QT, usa el gestor de ventanas del escritorio Razor-qt, un escritorio muy liviano y es considerado por muchos como el sucesor deLXDE.

Gestores de Ventanas más Conocidos:

Enlightenment (https://www.enlightenment.org)también conocido simplemente como E, es un gestor de ventanas X11

ligero para UNIX y GNU/Linux. Uno de sus objetivos es llegar a ser unentorno de escritorio completo. Es muy con�gurable y muy atractivo visual-mente. Durante un tiempo fue el gestor de ventanas de GNOME.

IceWM (https://ice-wm.org)es un gestor de ventanas para el XWindows System grá�co de infraestruc-

tura escrito por Marko Macek. Se ha codi�cado desde cero en C++ y esliberado bajo GNU. IceWM es ligero y personalizable. Se puede con�gurar apartir de archivos de texto almacenados en un directorio Home del usuario,haciendo fácil de personalizar y copia de con�guraciones. Posee soporte o�-cial para menús de GNOME y KDE previamente disponible como un paqueteseparado.

Windows Maker (https://www.windowsmaker.org)es un popular gestor de ventanas para X Windows System diseñado para

emular NeXT del GUI como OpenStep compatible, ha sido descrito como

[email protected] 421 Antonio Carrillo Ledesma, Et alii

Page 424: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

"uno de los más útiles y universales gestores de ventanas disponibles. Win-dows Maker tiene la reputación de ser rápido, e�ciente y altamente establey es muy popular entre las soluciones de código abierto para su uso tantoen nuevas como en viejas máquinas. Como con la mayoría de gestores deventanas, soporta un montón de temas disponibles.

Fluxbox (http://�uxbox.org)es un gestor de ventanas X basado en Blackbox 0.61.1.Su objetivo es ser

ligero y personalizable, y cuenta con un apoyo mínimo de iconos grá�cos.Su interfaz de usuario sólo tiene una barra de tareas y un menú que sepuede acceder pulsando con el botón derecho sobre el escritorio. Todas lascon�guraciones básicas están controladas por �cheros de texto. Fluxboxpuede mostrar algunos eye candys: colores, gradientes, bordes y una que otraapariencia básica. Las versiones recientes soportan esquinas redondeadas yelementos grá�cos. Fluxbox también tiene varias características de las cualesBlackbox carece, incluyendo ventanas con pestañas y un título con�gurable.

Openbox (http://openbox.org/new/)es un famoso gestor de ventanas libre para el sistema de ventanas X,

licenciado bajo la GNU General Public License. Openbox fue originalmentederivado de Blackbox 0.65.0, pero ha sido totalmente reescrito en el lenguajede programación C y desde la versión 3,0 no se basa en ningún código deBlackbox. Su sistema de menú tiene un método para utilizar los menúsdinámicos.

Otros existen muchos otros gestores de ventanas que pudiéramos men-cionar, tales como: 9wm, Awesome, AfterStep, Scwm, Blackbox, Bspwm,Byobu, Cinnamon, Cwm, Deepin, Dwm, Fvwm, Icewm, Jwm, Kahakai,Lumina, Qtile, Wmii, WindowLab, Ratpoison, Saw�sh, Sway, wm2, Wmx,StumpWM, Twm, Waimea, Xmonad, I3, E16.

15.2.2 Línea de Comandos y Órdenes

La mayoría de los usuarios de ordenadores de hoy sólo están familiarizadoscon la interfaz grá�ca de usuario o GUI y los vendedores y los expertos les hanenseñado que la interfaz de línea de comandos o CLI es una cosa espantosadel pasado. Es una pena, porque una buena interfaz de línea de comandos

[email protected] 422 Antonio Carrillo Ledesma, Et alii

Page 425: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

es una maravillosa y expresiva forma de comunicarse con el ordenador, muyparecida a lo que el lenguaje escrito es para los seres humanos. Se ha dichoque "las interfaces grá�cas de usuario hacen fáciles las tareas fáciles, mientrasque las interfaces de línea de comandos hacen posibles las tareas difíciles" yeso es muy cierto aún hoy.Dado que Linux fue desarrollado desde la familia de sistemas operativos

Unix, comparte la misma rica herencia de herramientas de línea de comandosque Unix. Unix saltó a la fama en los primeros años ochenta (aunque fuedesarrollado una década antes), antes de que se extendiera la adopción de lasinterfaces grá�cas de usuario, y por eso, se desarrolló una amplia interfaz delínea de comandos en su lugar. De hecho, una de las razones más potentespara que los primeros que utilizaron Linux lo eligieran sobre, digamos, Win-dows NT, era la poderosa interfaz de línea de comandos que hacía las "tareasdifíciles posibles".

Emuladores de Terminal Cuando utilizamos una interfaz grá�ca de usuario,necesitamos otro programa llamado emulador de terminal para interactuarcon el Shell. Si buscamos en nuestros menús de escritorio, probablemente en-contraremos uno. KDE usa Konsole y GNOME usa Gnome-terminal, aunquees probable que se llame simplemente "Terminal" en nuestro menú. Hay mu-chos otros emuladores de terminal disponibles para Linux, pero todos hacenbásicamente lo mismo; nos dan acceso al Shell.

El Shell Los programas, tanto los escritos por el usuario como los de sis-temas, normalmente se ejecutan con un intérprete de órdenes. El intérpretede órdenes en Linux es un proceso de usuario como cualquier otro y recibeel nombre de Shell (concha o cáscara) por que rodea al núcleo del sistemaoperativo.

El Interprete de Órdenes de Consola o Shell es un programa in-formático, cuya función consiste en interpretar órdenes, y un lenguaje deconsola. El más conocido es Bash108. Es una Shell de Unix compatible conPOSIX y el intérprete de comandos por defecto en la mayoría de las dis-tribuciones GNU/Linux, además de Mac OS. También se ha llevado a otros

108Su nombre es un acrónimo de Bourne-again Shell ("Shell Bourne otra vez"), haciendoun juego de palabras (born-again signi�ca "nacido de nuevo") sobre la Bourne Shell (sh),que fue uno de los primeros intérpretes importantes de Unix.

[email protected] 423 Antonio Carrillo Ledesma, Et alii

Page 426: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sistemas como Windows y Android.Algunas alternativas a Bash son: SH (Bourne Shell), CSH (C Shell),

KSH (Korn Shell), Fish (Friendly Interactive Shell), ZSH (Z Shell), TSCH(TS Shell), Dash (Debian Almquist Shell), DSH (Distributed Shell).

El Shell indica que está listo para aceptar otra orden exhibiendo una señalde espera (Prompt) y el usuario teclea una orden en una sola línea. En elBourne Shell y sus derivados como Bash el Prompt que nos permite escribirlos diferentes comandos, generalmente termina con el carácter:

� $ para usuario sin privilegios

� # para el administrador, conocido como root

Trabajando en Línea de Comandos Las órdenes se pueden agruparen varias categorías; la mayor parte de ellas están orientadas hacia archivoso directorios. Por ejemplo los programas que de sistema que manipulandirectorios son mkdir para crear directorio nuevo, rmdir para eliminar undirectorio, cd para cambiar el directorio actual a otro y pwd para visualizarel nombre de la ruta absoluta del directorio actual (de trabajo).El programa ls lista los nombres de los archivos del directorio actual.

Cualquiera de las más de 20 opciones de ls puede hacer que se exhibantambién las propiedades de los archivos, por ejemplo, la opción -l pide unlistado largo, que muestra el nombre de cada archivo, su dueño, la protección,la fecha y hora en que se creó, su tamaño. El programa cp crea un archivonuevo que es una copia de uno ya existente. El programa mv cambia de lugarun archivo dentro del árbol de directorios. En la mayor parte de los casos,este movimiento sólo requiere un cambio de nombre de archivo, pero si esnecesario el archivo se copia en su nueva posición y la copia vieja se elimina.Los archivos se eliminan con el programa rm.Para mostrar el contenido de un archivo en la terminal, un usuario puede

ejecutar cat. El programa cat toma una lista de archivos y los concatena,copiando el resultado en la salida estándar, que normalmente es la terminal.Claro que la terminal el archivo podría exhibirse con demasiada rapidez comopara leerse. El programa more exhibe el archivo pantalla por pantalla yhace una pausa hasta que el usuario teclea un carácter para continuar conla siguiente pantalla. El programa head exhibe sólo las primeras líneas delarchivo; tail muestra las últimas líneas.

[email protected] 424 Antonio Carrillo Ledesma, Et alii

Page 427: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Estos son algunos de los programas que usa Linux, además hay editoresde texto (ed, sed, emacs, nano, vi, etc.), compiladores (de C, C++, Java,Python, etc.), formateadores de texto (LaTeX, tro¤ , etc.), programas paraordenar (sort) y comparar (cmp, di¤ ) archivos, buscar patrones (grep, awk)y muchas otras actividades.

La ejecución de una orden se efectúa con una o más llamadas al sistemaoperativo. Por lo regular, el Shell ejecuta una pausa cuando se le pide ejecutaruna orden, queda en espera a que esta termine se de ejecutar. Existe unasintaxis sencilla (un signo & al �nal de la línea de órdenes) para indicar queel Shell no debe esperar hasta que termine de ejecutarse la orden. Una ordenque deja de ejecutándose de esta manera mientras el Shell sigue interpretandoórdenes subsecuentes es una orden en segundo plano, o que se ejecuta ensegundo plano. Los procesos para los cuales e Shell sí espera se ejecutan enprimer plano.El Shell del sistema GNU/Linux ofrece un recurso llamado control de

trabajos (y visualizarlos con los comandos ps o top) implementado espe-cialmente en el núcleo. El control de trabajos permite transferir procesosentre el primer y segundo plano. Los procesos pueden detenerse y reiniciarsesegún diversas condiciones, como que un trabajo en segundo plano requieraentradas desde la terminal del usuario. Este esquema hace posible la mayorparte del control de procesos que proporcionan las interfaces de ventanas,pero no requiere Hardware especial. Cada ventana se trata como una termi-nal, y permite a múltiples procesos estar en primer plano (uno por ventana)en cualquier momento. Desde luego pueden haber procesos de segundo planoen cualquiera de las ventanas.

Correr múltiples comandos en uno solo Supongamos que se tiene queejecutar varios comandos uno tras otro -sin conocer si el comando anteriorfue exitoso para ejecutar el nuevo-, para este propósito se usa el separador";", de esta manera se pueden ejecutar una serie de comando en una línea,ejemplo:

$ mkdir tmp ; ls ; cd tmp ; ls

en este ejemplo se crea en directorio, luego visualiza el contenido del di-rectorio, para luego cambiar de directorio y �nalmente visualiza el contenidodel directorio recién creado.

[email protected] 425 Antonio Carrillo Ledesma, Et alii

Page 428: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Si necesitamos ejecutar múltiples comandos en uno solo, sólo si el co-mando anterior fue exitoso, en este caso se usa el separador "&&", ejemplo:

$ mkdir tmp && ls && cd tmp && ls

Notemos que si ejecutamos:

$ mkdir tmp & ls & cd tmp & ls

el resultado obtenido en nada se parece a lo que esperamos, ya que loscomando pasarán a ser ejecutados en segundo plano y sin orden alguno, porlo que el resultado no será el deseado.

Ya vimos como usar un solo comando para ejecutar varios comandos.Pero, ¿qué debo hacer en caso que el primer comando no se ejecute correc-tamente?, ¿deseo ejecutar el comando siguiente?. Podemos usar jj para quesi el primer comando falla se ejecute el segundo, pero si no falla no ejecutaráel segundo comando, por ejemplo:

$ yu jj ls

También podemos combinar los comandos && y jj los cuales se compor-tarán como el operador ternario de C y C++ (condición? expresión_verdadera;expresión_falsa):

$ comando1 && comando2 jj comando3

por ejemplo:

$ [-f archivo.txt ] && echo "Archivo existe" jj echo "Archivono existe"

podemos combinar ;, && y jj para correr múltiples comandos en Scripts.

[email protected] 426 Antonio Carrillo Ledesma, Et alii

Page 429: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Cambiar de Usuario en Linux El comando su (Switch User) se utilizapara cambiar de usuario cuando estamos dentro de la consola de Linux,ejemplo:

$ su antonio

si delante del usuario ponemos - nos abrirá una nuevo Shell con las pre-ferencias del usuario al que cambiemos, por ejemplo:

$ su - administracion

Por otro lado, si usamos el comando su sin usuario, nos permitirá ingresarcomo el usuario administrador del sistema root (por defecto), pidiendo elclave o Password de dicho usuario, ejemplo:

$ su

Una de las funciones del usuario administrador es hacer la instalación,actualización y borrado de paquetes, el comando más usado actualmente esapt (Advanced Pakaging Tool, herramienta avanzada de empaquetado que esuna interfase del paquete apt-get), es un programa de gestión de paquetes .debcreado por el proyecto Debian, apt simpli�ca en gran medida la instalación,actualización y eliminación de programas en GNU/Linux. Existen tambiénprogramas que proporcionan estos mismos servicios como: apt-get, aptitude,tasksel y dpkg.Ya siendo el usuario root, podemos solicitar la descarga de las actualiza-

ciones disponibles, usando:

# apt update

para conocer los paquetes que se necesitan actualizar, usamos:

# apt list �upgradeable

para actualizar los paquetes instalados en el sistema109, usamos:

109Podemos hacer la actualización en un solo comando, usando:

# apt update && apt upgrade && apt clean

[email protected] 427 Antonio Carrillo Ledesma, Et alii

Page 430: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

# apt upgrade

algunas veces ciertos paquetes ya no se usarán al actualizar el sistema,para borrarlos usamos:

# apt autoremove

para buscar paquetes que son potencialmente instalables, usamos:

# apt search nombre

para conocer las características de un paquete a instalar, usamos:

# apt show nombre

para instalar uno o más paquetes, usamos:

# apt install paquete

para remover uno o más paquetes, usamos:

# apt purge paquete

al �nal, se solicita el borrado de los archivos .deb de los paquetes descar-gados (Cache de descarga), mediante:

# apt clean

podemos conocer todos los paquetes instalados en el sistema, usando:

$ apt list �installed

El usuario root en GNU/Linux es el usuario que tiene acceso admi-nistrativo al sistema. Los usuarios normales no tienen este acceso por ra-zones de seguridad. Sin embargo, en múltiples sistemas derivados de DebianGNU/Linux no incluye el usuario root (por ejemplo en todos los derivados deUbuntu). En su lugar, se da acceso administrativo a usuarios individuales,que pueden utilizar la aplicación sudo para realizar tareas administrativas.La primera cuenta de usuario que creó en su sistema durante la instalacióntendrá, de forma predeterminada, acceso a sudo.

[email protected] 428 Antonio Carrillo Ledesma, Et alii

Page 431: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Cuando se necesite ejecutar una aplicación que requiere privilegios de ad-ministrador, sudo le pedirá que escriba su contraseña de usuario normal. Estoasegura que aplicaciones incontroladas no puedan dañar su sistema, y sirvecomo recordatorio de que está a punto de realizar acciones administrativasque requieren que tenga cuidado.Para usar sudo en la línea de comandos, simplemente escriba sudo antes

del comando que desea ejecutar, sudo le pedirá su contraseña110:

$ sudo apt update

15.3 Trabajando en Línea de Comandos

Linux es un potente sistema operativo visual y de línea de comandos111. Enesta última se tiene una potente herramienta, en ella se encuentran desde loscomandos básicos hasta los más avanzados112, algunos de ellos son:Manipulación de archivos y directorios113

ls, pwd, cd, mkdir, rmdir, cp, mv, rename, rm, ln, unlink, cat,touch, cmp, di¤, wc, tail, head, more, less, paste, cut, tr, fold,nano

110Sudo recordará su contraseña durante un periodo de tiempo (predeterminado a 15minutos). Esta característica se diseñó para permitir a los usuarios realizar múltiplestareas administrativas sin tener que escribir su contraseña cada vez.111Android tiene la base de Linux, por ello en cualquier dispositivo que soporte dichosistema operativo es posible instalar una aplicación para acceder a la terminal de líneade comandos � por ejemplo ConnectBot� , y en ella podemos correr los comandos quemostramos en esta sección.112En la Web se puede obtener acceso a diversos proyectos que ponen a disposición delusuario la documentación de una gran variedad de comandos de Linux, algunos de estosproyectos son:http://man7.org/linux/man-pages/https://linux.die.net/man/https://www.kernel.org/doc/man-pages/113Existe la opción de gestionar �cheros comprimidos, gracias a los comandos zgrep,zegrep, zless, zmore, zdi¤, zcmp, zcat. Como te puedes dar cuenta la función de cadauno de estos comandos será la misma que su homónimos sin «z» (grep, egrep, less, more,di¤, cmp, cat) pero para �cheros comprimidos con gzip y extensión .gz. De forma análogapara archivos comprimidos usando bz2, están los comandos bzgrep, bzegrep, bzless, bzmore,bzdi¤, bzcmp, bzcat y para archivos comprimidos usando xz, están los comandos xzgrep,xzegrep, xzless, xzmore, xzdi¤, xzcmp, xzcat.

[email protected] 429 Antonio Carrillo Ledesma, Et alii

Page 432: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Comandos generales

man, help, info, whatis, which, whereis, clear, w, time,whoami, date, cal, uptime, uname, df, du, free, bc, history,echo

Administración y Permisos

chmod, chown, chgrp, su, useradd, usermod, deluser, passwd,lsattr, chattr, id

Búsqueda

�nd, grep, locate

Respaldo

tar, gzip, bzip2, zip, unp

Varios

�le, stat, type, ps, kill, killall, pgrep, pwdx, awk, sort,sed, md5sum, sleep, watch

Monitorear el desempeño

lscpu, free, top, whowatch, dstat, vmstat, iotop, iostst, lsof,lsusb, tcpdump, nmcli, ip

A continuación detallamos el uso de varios de estos comandos que seejecutan en la línea de comandos de GNU/Linux o Terminal114. Hay querecalcar que cada comando tiene una gran variedad de opciones, pero la des-cripción completa de cada comando y opciones de este, se escapa de nuestros�nes, por ello si se necesita conocer la referencia completa de dichos comandoshay varias maneras de obtenerla, entre otras haciendo uso de man, help, infoo whatis aplicado al comando de nuestro interés.114Existen varios atajos de teclado que facilitan el navegar en la terminal de comandos,entre los que destacan:CTRL L Limpia el contenido de la terminalCTRL C Concluye el programa que esta en ejecuciónCTRL D Concluye la sesión en la terminal cerrando estaSHIFT Page Up/Down Navega en la terminal una página arriba o abajoCTRL A Posiciona el cursor al inicio de la líneaCTRL E Posiciona el cursor al �nal de la línea

[email protected] 430 Antonio Carrillo Ledesma, Et alii

Page 433: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Manipulación de Archivos y Directorios

ls (de listar), permite listar el contenido de un directorio o �chero. Lasintaxis es:

$ ls /home/directorio

el comando ls tiene varias opciones que permiten organizar la salida, loque resulta particularmente útil cuando es muy grande. Por ejemplo, puedesusar -a para mostrar los archivos ocultos, -i para mostrar el inodo115, -l paramostrar los usuarios, permisos, tamaño en Bytes y la fecha de los archivos; -Sordena por tamaño, -R recursivo, -r en orden inverso, -t ordenados por fechade modi�cación, -h muestra el tamaño en unidades fáciles de leer -como KB,MB o GB-. Así como para todos los comandos Linux, estas opciones puedencombinarse, terminando en algo como:

$ ls -lha /home/directorio

por ejemplo para mostrar primero los archivos recientemente modi�cados,usamos:

$ ls -lt

o los más recientes al �nal, usamos:

$ ls -ltr

podemos pedir que sólo liste los directorios en la actual trayectoria:

$ ls -d */

CTRL U Borra lo que esta a la izquierda del cursorCTRL K Borra lo que esta a la derecha del cursorCTRL W Borra la palabra a derecha del cursorCTRL Y Pega lo que se quito con CTRL U, K, WTAB Autocompletar el nombre de archivo o comandoCTRL R Permite buscar dentro del historial de comandos!! Permite repetir el último comandoCTRL Z Detiene la ejecución del comando actual (permite continuar la ejecución con

fg en primer plano o bg en segundo plano)115El inodo es un registro en el disco que contiene la información del archivo como supropietario, tamaño, fecha de creación, ubicación, entre otros.

[email protected] 431 Antonio Carrillo Ledesma, Et alii

Page 434: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

pwd (de print working directory o imprimir directorio de trabajo), esun comando que imprime nuestra ruta o ubicación al momento de ejecutarlo,así evitamos perdernos si estamos trabajando con múltiples directorios ycarpetas. Su sintaxis sería:

$ pwd

cd (de change directory o cambiar directorio), es como su nombre loindica el comando que necesitarás para acceder a una ruta distinta de la quete encuentras. Por ejemplo, si estas en el directorio /home y deseas accedera /home/ejercicios, sería:

$ cd /home/ejercicios

teclear el comando cd solo regresa al directorio home del usuario (lo mismohace al teclear cd ~), teclear el comando cd - retorna al último directorio antesde hacer cambio de directorio, si estas en /home/ejercicios y deseas subir unnivel (es decir ir al directorio /home), ejecutas:

$ cd ..

mkdir (de make directory o crear directorio), crea un directorio nuevotomando en cuenta la ubicación actual. Por ejemplo, si estas en /home ydeseas crear el directorio ejercicios, sería:

$ mkdir /home/ejercicios

mkdir tiene una opción bastante útil que permite crear un árbol de di-rectorios completo que no existe. Para eso usamos la opción -p:

$ mkdir -p /home/ejercicios/prueba/uno/dos/tres

o podemos pedir que cree múltiples directorios simultáneamente:

$ mkdir {uno, dos, tres}

[email protected] 432 Antonio Carrillo Ledesma, Et alii

Page 435: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

rmdir (de remove directory o borrar directorio), borra un directoriovació:

$ rmdir /home/ejercicios

o podemos pedir que borre múltiples directorios vacios simultáneamente:

$ rmdir {uno, dos, tres}

cp (de copy o copiar), copia un archivo o directorio origen a un archivoo directorio destino. Por ejemplo, para copiar el archivo prueba.txt ubicadoen /home a un directorio de respaldo, podemos usar:

$ cp /home/prueba.txt /home/respaldo/prueba.txt

en la sintaxis siempre se especi�ca primero el origen y luego el destino. Siindicamos un nombre de destino diferente, cp copiará el archivo o directoriocon el nuevo nombre. El comando también cuenta con la opción -r quecopia no sólo el directorio especi�cado sino todos sus directorios internos deforma recursiva. Suponiendo que deseamos hacer una copia del directorio/home/ejercicios que a su vez tiene las carpetas ejercicio1 y ejercicio2 ensu interior, en lugar de ejecutar un comando para cada carpeta, ejecutamos:

$ cp -r /home/ejercicios /home/respaldos/

también podemos usar -u para copiar aquellos archivos que no existen oson nuevos en el directorio destino:

$ cp -u /home/ejercicios/*.dat /home/respaldos/

mv (de move o mover), mueve un archivo a una ruta especí�ca, y adiferencia de cp, lo elimina del origen �nalizada la operación. Por ejemplo:

$ mv /home/prueba.txt /home/respaldos/prueba2.txt

al igual que cp, en la sintaxis se especi�ca primero el origen y luego eldestino. Si indicamos un nombre de destino diferente, mv moverá el archivoo directorio con el nuevo nombre.Si queremos solo cambiar la extensión de un archivo podemos usar:

$ mv archivo.{old,new}

[email protected] 433 Antonio Carrillo Ledesma, Et alii

Page 436: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

rename este comando permite renombrar116 un grupo de archivos, porejemplo deseamos renombrar todos los archivos con extensión .htm y rem-plazarlos con la extensión .html, entonces usamos:

$ rename .htm .html *.htm

si tenemos directorios dir1, dir2, dir3 y los queremos renombrar comodir001, etc., usamos:

$ rename -v dir dir00 dir?

rm (de remove o remover), es el comando necesario para borrar unarchivo o directorio. Para borrar el archivo prueba.txt ubicado en /home,ejecutamos:

$ rm /home/prueba.txt

este comando también presenta varias opciones. La opción -r borra todoslos archivos y directorios de forma recursiva. Por otra parte, -f borra todo sinpedir con�rmación. Estas opciones pueden combinarse causando un borradorecursivo y sin con�rmación del directorio que se especi�que. Para realizaresto en el directorio respaldos ubicado en el /home, usamos:

$ rm -rf /home/respaldos

Este comando es muy peligroso, por lo tanto es importante que nos docu-mentemos bien acerca de los efectos de estas opciones en nuestro sistemapara así evitar consecuencias nefastas.

116El comando mmv permite copiar, mover, hacer ligas simbólicas de múltiples archivos,se instala usando:

# apt install mmv

[email protected] 434 Antonio Carrillo Ledesma, Et alii

Page 437: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

ln permite crear enlaces a los archivos, tanto duros (Hard Links) comosimbólicos -s (Soft Links). En pocas palabras, un enlace simbólico es como unacceso directo en Windows o un alias en Mac OS X mientras que un enlaceduro es un nombre diferente para la misma información en disco. Todoslos archivos que apuntan a un mismo enlace duro, comparten el inodo -estees un registro en el disco que contiene la información del archivo como supropietario, tamaño, fecha de creación, ubicación, entre otros-.Para crear un enlace duro usamos:

$ ln archivo_origen nombre_enlace

para conocer el inodo de un archivo, usamos:

$ ls -li archivo

para conocer todos los archivos que apuntan a un mismo enlace duro cuyoinodo conozcamos, usamos:.

$ �nd / -inum <inodo>

y para conocer a todos los archivos que comparten inodo, usamos:

$ �nd . -type f -printf �%10i %pnn�j sort j uniq -w 11 -d -D jless

En caso de necesitar actualizar un enlace duro con otro archivo podemosusar:

$ ln -f nuevo enlace

Para crear un enlace simbólico, hacemos:

$ ln -s archivo_origen nombre_enlace

si bien para conocer a donde apunta un enlace simbólico podemos usar ls-l, también podemos usar:

$ readlink nombre_enlace

en caso de necesitar actualizar un enlace simbólico existente con otroarchivo podemos usar:

[email protected] 435 Antonio Carrillo Ledesma, Et alii

Page 438: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ ln -fs nuevo ligaexistente

Si por alguna razón el archivo al que apunta la liga simbólica se borra,esto genera una liga rota, para encontrar las ligas rotas en nuestro árbol dearchivos, usamos:

$ �nd . -xtype l

y si queremos conocer todas las ligas y a quien apuntan, usamos:

$ �nd . -type l -print j xargs ls -ld j awk �{print $9 $10 $11}�

unlink sirve para remover un archivo, en caso de que el archivo sea unenlace creado por ln, solo borra al archivo no a su enlace, por ejemplo:

$ unlik nombre_enlace

cat (de concatenar), Nos permite visualizar el contenido de un archivode texto sin la necesidad de un editor. Para utilizarlo solo debemos men-cionarlo junto al archivo que deseamos visualizar:

$ cat prueba.txt

touch crea un archivo vacío, si el archivo existe actualiza la hora demodi�cación. Para crear el archivo prueba1.txt en /home, sería:

$ touch /home/prueba1.txt

cmp compara el contenido de dos archivos y devuelve 0 si los archivosson idénticos ó 1 si los archivos tienen diferencias. En caso de error devuelve-1.

$ cmp -s archivo1 archivo2

también puede mostrar algo de información sobre las diferencias pero paraun reporte más detallado tenemos el siguiente comando:

[email protected] 436 Antonio Carrillo Ledesma, Et alii

Page 439: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

di¤ al igual que cmp, compara el contenido de dos archivos pero enlugar de devolver un valor imprime en pantalla un resumen detallado línea alínea de las diferencias. Ejecutarlo es tan simple como:

$ di¤ archivo1.txt archivo2.txt

también puede usarse con directorios. En este caso comparará los nombresde los archivos correspondientes en cada directorio por orden alfabético eimprimirá en pantalla los archivos que estén en un directorio pero no esténen el otro (otra opción es sdi¤ que permite mostrar las diferencias entre dosarchivos y combinarlos de forma interactiva).

wc imprime en pantalla la cantidad de saltos de línea, palabras y Bytestotales que contenga un archivo. Para usarlo con un archivo cualquiera eje-cutamos:

$ wc archivo.txt

podemos solo pedir que cuente el número de líneas usamos -l, para elnúmero de caracteres usamos -c o para el número de palabras usamos -w.

tail muestra en pantalla las últimas 10 líneas de un archivo:

$ tail archivo.txt

pero podemos indicarle un número diferente de líneas a visualizar usandoel parámetro -n:

$ tail -n 30 archivo.txt

si el archivo solo tiene 43 líneas, podemos pedir que solo visualice la 42 y43, mediante:

$ tail -n +42 archivo.txt

por último, si el archivo es generado por el sistema de mensajes deLinux(un archivo Log), podemos ver como se va generando sus entradas entiempo real, usando:

$ tail -f /var/log/archivo.log

[email protected] 437 Antonio Carrillo Ledesma, Et alii

Page 440: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

head es el comando opuesto a tail, muestra las primeras líneas de unarchivo.

$ head archivo.txt

al igual que tail, muestra por defecto las 10 primeras líneas pero podemosindicarle un número diferente usando el parámetro -n:

$ head -n 50 archivo.txt

o que muestre todo excepto las últimas N líneas, usando:

$ head -n -15 archivo.txt

también es posible visualizar las primeras líneas de múltiples archivosusando:

$ head -n 2 archivo1.txt archivo2.txt

a la salida de este último comando le podemos quitare el indicador delarchivo, mediante:

$ head �q n 2 archivo1.txt archivo2.txt

Podemos combinarlo con tail para mostrar sólo una determinada línea deun archivo (digamos la 13), usamos:

$ head -n 13 archivo.txt j tail +13

y para mostrar un rango de líneas (digamos de la 10 a 15), usamos:

$ head -n 15 archivo.txt j tail -n +10

por último, podemos indicarle que solo nos muestre los primeros carac-teres, mediante -C<número>, ejemplo:

$ head -C5 archivo.txt

[email protected] 438 Antonio Carrillo Ledesma, Et alii

Page 441: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

more es un �ltro que permite paginar el contenido de un archivo paraque se vea a razón de una pantalla a la vez. Para utilizarlo simplementeejecutamos:

$ more archivo.txt

permite navegar a través del contenido del archivo usando las �echasdireccionales Arriba y Abajo, Espacio o la tecla Enter y para buscar unacadena usamos /. Para salir de more usamos la tecla q. Además, podemosindicar que salte hasta donde se encuentra una determinada cadena usando+/cadena, o iniciar a partir de la línea +n del texto, por ejemplo:

$ more +/cadena archivo.txt$ more +30 archivo.txt

less Aunque su nombre es lo opuesto de more es realmente una versiónmejorada de éste último. Es otro �ltro que permite paginar el contenido deun archivo pero que además de permitir la navegación hacia adelante y haciaatrás, esta optimizado para trabajar con archivos muy grandes. Ejecutarloes tan simple como escribir:

$ less archivo.txt

permite navegar a través del contenido del archivo usando las �echasdireccionales arriba y abajo, Espacio o la tecla Enter. Para salir de lesstambién usamos la tecla Q.

paste uni�ca (en salida estándar) dos o más archivos de texto, fusio-nando líneas de manera que las entradas en la primera columna pertenecenal primer archivo, las de la segunda columna son para el segundo archivo(separadas por TABs), y así sucesivamente, ejemplo:

$ paste uno.txt dos.txt tres.txt

se puede de�nir delimitadores entre las entradas de cada �la resultante,usando -d <separador>, ejemplo:

$ paste -d : uno.txt dos.txt tres.txt

[email protected] 439 Antonio Carrillo Ledesma, Et alii

Page 442: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

además, se puede cambiarla operación de fusión se realice por �las, demanera que el primer renglón son las entradas del primer archivo (separadaspor TABs), el segundo renglón son las entradas del segundo archivo, y asísucesivamente, para ello se emplea la opción -s, ejemplo:

$ paste -s uno.txt dos.txt tres.txt

cut se encarga de cortar columnas o campos seleccionados de uno omás �cheros (o entrada estándar), por ejemplo para conocer los usuarios delsistema y sus directorio de trabajo, usamos:

$ cut -d ":" -f 1,6 /etc/passwd

para indicar el delimitador usamos -d y para indicarle las columnas avisualizar usamos -f.

tr se encarga de sustituir un delimitador por otro de uno o más �cheros(o entrada estándar), por ejemplo:Se sustituye el delimitador ":" por un tabulador:

$ cut -d ":" -f 1,6 /etc/passwd j tr -s ":" "nt"

o elimina las nuevas lineas (nn) de un archivo, usando:

$ tr -d nn < entrada.txt > salida.txt

entre otras opciones podemos pedir que cambie de mayúsculas a minús-culas o viceversa, usando:

$ echo "Esto es una prueba" j tr �[:lower:]� �[:upper:]�$ echo "Esto es una prueba" j tr �[:upper:]� �[:lower:]�

también podemos transformar un conjunto de caracteres en otro, ejemplo:

$ echo "Esto es una prueba" j tr �[aeiout]���

o hacer el opuesto, es decir, transformar cualquier carácter que no esteen conjunto, ejemplo:

$ echo "Esto es una prueba" j tr -c �[aeiout]���

[email protected] 440 Antonio Carrillo Ledesma, Et alii

Page 443: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

podemos borrar los caracteres indicados, ejemplo:

$ echo "Esto Es Una Prueba" j tr -d �[:lower:]�

o cambiar las vocales de mayúsculas a minúsculas, ejemplo:

$ echo "Esto Es Una Prueba" j tr �aeiou��AEIOU�

es posible el reemplazo de rango de caracteres o números:

$ echo "Esto es una prueba" j tr �a-e��x�$ echo "5uch l337 5p34k" j tr �1-4��x�

y podemos indicar que reemplace una o múltiples ocurrencias por unasola, ejemplo:

$ echo "Esto es una prueba" j tr -s ��

fold se usa para que todas las líneas de un archivo se dividan a un anchoespeci�cado, ejemplo:

$ cat /etc/services j fold -w 20

se puede usar -s para solicitar que si puede corte sobre un espacio, ejemplo:

$ cat /etc/services j fold -sw 20

nano Es un pequeño editor de texto que esta disponible en casi todaslas distribuciones actuales de Linux, funciona con un menú en la parte deinferior que se activa con la tecla Ctrl.

$ nano archivo.txt

Comandos Generales

man muestra la documentación completa de todos los comandos. Porejemplo, para clear :

$ man clear

[email protected] 441 Antonio Carrillo Ledesma, Et alii

Page 444: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

help proporciona ayuda de los comandos, con frecuencia puede sustituiral comandoman. Por ejemplo, para conocer la lista de comandos que soporta:

$ help

info proporciona ayuda de los comandos al igual que man y help, suuso es similar:

$ info mkdir

whatis proporciona una ayuda breve de lo que hacen los comandos, sinmostrar opciones del comando, ejemplo:

$ whatis ls

clear (de limpiar), es un sencillo comando que limpiará nuestra terminalpor completo dejándola como recién abierta. Para ello ejecutamos:

$ clear

w nos proporciona la lista de los usuarios activos en la computadora-recordemos que Linux es un sistema multiusuario-, su uso es:

$ w

time proporciona el tiempo de ejecución, que es dividido en real, usuarioy del sistema, muestra de su uso es la siguiente:

$ time ls

whoami (del inglés Who Am I o Quien Soy Yo en español) muestra elidenti�cador del usuario actual. Para ejecutarlo solo basta con invocarlo:

$ whoami

[email protected] 442 Antonio Carrillo Ledesma, Et alii

Page 445: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

date nos muestra la fecha y hora que tiene actualmente la computadora,ejemplo:

$ date

pero podemos formatear la salida del comando mediante:

$ date + "Weekday: %A Month: %B"117

$ date + "Week: %V Year: %y"$ date -d last-week118

cal muestra el calendario del mes actual, con -y nos muestra el calen-dario del año completo, con -jy nos muestra el calendario con el número dedía del año y con -A n y -B m nos muestra el calendario de m meses antesde la fecha actual y n meses después, ejemplo:

$ cal -A 3 -B 2

uptime muestra el tiempo que el equipo de cómputo ha pasado encen-dido sin ser reiniciado, así como el load average o carga promedio del sistemaque es el número de trabajos que se han realizado en los últimos 1, 5 y 15minutos. Para ver su salida, solo escribimos en la terminal:

$ uptime

uname es un programa de sistemas operativos de tipo Unix que im-prime detalles de la máquina y del sistema operativo que se esta ejecutando.Su salida es diferente dependiendo de las opciones, por ejemplo, uname solomuestra el nombre del sistema operativo pero cuando le pasamos la opción-r muestra la versión del Kernel y con -a de all, su salida es mucho mascompleta. Se ejecuta de la siguiente forma:

$ uname -a117Para conocer las diferentes banderas de date, usar:

$ date - -help

118podemos usar: tomorrow, last-year, next-year, next-month, entre otras.

[email protected] 443 Antonio Carrillo Ledesma, Et alii

Page 446: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

df nos muestra información de los discos y particiones en ellos, ademásde cuanto esta usado y libre en Bytes en cada una de las particiones, para verla salida usando información en unidades Gb, Mb y Kb usamos la opción -h,para conocer el numero de inodos disponibles usamos la opción -i, podemostambién conocer la información de todos los sistemas de �cheros usando -a ypara conocer la información de los sistemas de archivos usamos -T, ejemplo:

$ df -hT

du nos muestra en Bytes cuanto ocupan los directorios de nuestra actualtrayectoria de archivos, usamos la opción -h para que muestra el tamaño enunidades fáciles de leer -como KB, MB o GB-, -a para conocer el tamaño dearchivos y directorios y -s para el total de la trayectoria, ejemplo:

$ du -sh

free nos muestra la cantidad de memoria y Swap usada y libre del sis-tema, ejemplo:

$ free

bc es un lenguaje que soporta números de precisión arbitraria con eje-cución interactiva, ejemplo:

$ bc -l

escribir, por ejemplo:

scale = 1001/3quit

mostrará el resultado con 100 dígitos de precisión.

history muestra el historial de comandos ejecutados en la terminal,ejemplo:

$ history

para borrar dicho historial usar la opción -c, ejemplo:

$ history -c

[email protected] 444 Antonio Carrillo Ledesma, Et alii

Page 447: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

echo sirve para mostar texto en la pantalla, su uso es el siguiente

$ echo "Esto es un texto"

permite con la opción -e la interpretación de caracteres de escape comoretroceso nb, nueva línea nn, tabulador nt, tabulador vertical nv, retorno decarro nr y diagonal invertida nn, ejemplo:

$ echo "Esto nves un nttexto"

Permisos

chmod (del inglés change mode) es un comando que permite cambiarlos permisos de acceso de un directorio o archivo. Su sintaxis es:

$ chmod [opciones] <modo> <archivo>

donde opciones nos permite entre otras cosas, cambiar los permisos re-cursivamente para un directorio con -R, modo son los permisos de lectura,escritura y ejecución representados en notación octal119 y archivo es el nom-bre del directorio o archivo que queremos modi�car.Por ejemplo, para asignar permisos de lectura, escritura y ejecución para

el dueño, el grupo y remover los permisos para el resto de los usuarios alarchivo prueba.txt, sería:

$ chmod 770 prueba.txt

119Octal Binario Modo Archivo

0 000 - - -1 001 - - x2 010 - w -3 011 - w x4 100 r - -5 101 r w -6 110 r w -7 111 r w x

[email protected] 445 Antonio Carrillo Ledesma, Et alii

Page 448: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

chown (del inglés change owner) nos permite cambiar el propietario deun archivo o directorio. Su sintaxis es:

$ chown [opciones] <nuevo-propietario> <archivo>

donde opciones son las opciones del comando, como -R para cambiarrecursivamente el propietario de un directorio y todo su contenido, nuevo-propietario será el nuevo propietario y archivo es el nombre del directorio oarchivo que queremos modi�car.Por ejemplo, para cambiarle el propietario del directorio /home/ejercicios

y todo su contenido y asignarlo al usuario pedro, hacemos:

$ chown -R pedro /home/ejercicios

chgrp (del inglés change group) nos permite cambiar el grupo de unarchivo o directorio. Su sintaxis es:

$ chgrp [opciones] <nuevo-grupo> <archivo>

donde opciones son las opciones del comando, como -R para cambiar re-cursivamente el grupo de un directorio y todo su contenido, nuevo-grupo seráel nuevo grupo y archivo es el nombre del directorio o archivo que queremosmodi�car.Por ejemplo, para cambiarle el grupo del directorio /home/ejercicios y

todo su contenido y asignarlo al usuario pedro, hacemos:

$ chgrp -R pedro /home/ejercicios

su permite cambiar las credenciales del usuario, es decir ser otro usuario,el usuario del que comúnmente se desea adquirir sus credenciales es el de root,ejemplo:

$ su

[email protected] 446 Antonio Carrillo Ledesma, Et alii

Page 449: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

useradd (de agregar usuario) se utiliza para crear nuevos usuarios entu sistema Linux. Su sintaxis es:

$ useradd [opciones] <nombre-usuario>

donde opciones nos permite asignar un grupo al usuario con -g, asignar eldirectorio /home con -d, crearlo con -m si no existía previamente y -s paraasignarle un intérprete de comandos o Shell, entre otras.Así, para crear el usuario andrea cuyo grupo principal será editores, eje-

cutamos:

$ useradd -g editores -d /home/andrea -m -s /bin/Bash andrea

usermod (de modi�car usuario) modi�ca algunos parámetros de unusuario existente, como el nombre, su directorio /home y los grupos a losque pertenece, entre otros. Su sintaxis es:

$ usermod [opciones] <nombre-usuario>

donde opciones cambia el directorio home con -d, mueve todo el contenidodel directorio anterior con -m y cambia el nombre de usuario con -l, entreotras. Para cambiar el nombre al usuario andrea por violeta, sería:

$ usermod -l violeta andrea

deluser (del inglés delete user) es un sencillo comando para borrarusuarios. Tiene la opción -r que adicionalmente borra su directorio /home.Para borrar el usuario violeta con su /home, ejecutamos:

$ deluser -r violeta

passwd (del inglés password) es una utilidad que se usa para cambiaro generar la contraseña de un usuario existente. Al invocarlo, pedirá lacontraseña actual (si existe) y luego que la contraseña nueva sea introducidados veces para veri�car que fue escrita correctamente. Por ejemplo paraasignar una contraseña al usuario antonio, sería:

$ passwd antonio

para conocer el estado del Password de mi cuenta puedo usar:

$ passwd -S antonio

[email protected] 447 Antonio Carrillo Ledesma, Et alii

Page 450: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

lsattr permite listar los atributos asignados a los �cheros y directorios,para ver los atributos del actual directorio usamos:

$ lsattr -a

o de forma recursiva

$ lsattr -Ra

chattr permite cambiar los atributos asignados a los �cheros y direc-torios, las opciones se agregan con + y se quitan con - y podemos hacerlode forma recursiva R, por ejemplo podemos poner el permiso de bloquear lamodi�cación o borrado del archivo, mediante:

# chattr +i archivo

o quitar el permiso:

# chattr -i archivo

Podemos deshabilitar la modi�cación de la fecha de acceso al �chero(atime), mediante:

# chattr +A archivo

esto permite que cuando se acceda al �chero no se modi�que el registrode atime. De este modo no quedarán registrada la fecha de último acceso.Es posible comprimir automáticamente el �chero en disco por el Kernel

y cuando se lea el archivo se verá descomprimido, ejemplo

# chattr +c archivo

Además se puede permitir la recuperación de un archivo aunque sea elim-inado, usando:

# chattr +u archivo

y el caso opuesto, al eliminar un archivo, sobrescribir con ceros todos susbloques, mediante:

# chattr +e archivo

[email protected] 448 Antonio Carrillo Ledesma, Et alii

Page 451: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

id es un programa que muestra el identi�cador del usuario (UID) queejecuta el programa, el identi�cador de su grupo (GID), así como todos losgrupos a los cuales pertenece el usuario, ejemplo:

$ id usuario

Búsqueda

�nd permite buscar dentro del sistema de archivos un directorio o archivosque concuerden con el patrón dado, por ejemplo:

$ �nd /home -name *.pdf

busca desde la trayectoria /home, todos los archivos que concluyan con.pdf y nos muestra las trayectorias a los archivos que concuerdan con losolicitado. También podemos pasar la salida de �nd a otro comando comopor ejemplo:

$ �nd . -name Portada.pdf j xargs ls -l

que nos mostrará la salida larga del comando ls de todos los archivos queencuentre �nd.Además, podemos hacer uso de expresiones regulares como:

$ �nd . -regex "[a-f0-9n-]n{36n}n.jpg"

grep permite buscar120 en archivos un determinado patrón121, mostrandola línea que lo contiene, por ejemplo:busca en todos los archivos *.txt la cadena chmod:

120El comando grep comparte funcionalidad con egrep y fgrep. ¿Cuál es la diferenciaentre grep, egrep y fgrep?, la e en egrep signi�ca extendido (grep -E) y la f en fgrepsigni�ca �jo (grep -F). egrep permite el uso de expresiones regulares extendidas y fgrep nopermite la expresión regular en absoluto.121Grep es una herramienta muy poderosa, pero existe otra: ripgrep, que es e�cienteen búsquedas recursivas, combinando con opciones avanzadas como el �ltrado, uso deexpresiones regulares, colores, soporte Unicode. Se instala usando:

# apt install ripgrep

y lo usamos, por ejemplo buscando foobar en los archivos *.py:

$ rg -tpy foobar

[email protected] 449 Antonio Carrillo Ledesma, Et alii

Page 452: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ grep chmod *.txt

indica el nombre de archivo en los cuales se encontró la cadena:

$ grep -l main *.java

busca en todos los archivos *.log la cadena error, ignorando si esta enmayúsculas o minúsculas:

$ grep -i error *.log

busca en todos los archivos *.log aquellas que no tengan la cadena error:

$ grep -v error *.log

busca en todos los archivos *.log aquellos que tengan a la cadena erroro fatal:

$ grep �errornjfatal�*.log

busca en todos los archivos *.log aquellos que tengan a la cadena erroro fatal:

$ grep -E �errornjfatal�*.log

busca en todos los archivos *.log aquellos que tengan a la cadena erroro fatal e indica cuantas coincidencias encontró:

$ grep -c �errornjfatal�*.log

busca en todos los archivos *.log aquellos que tengan a la cadena erroro fatal, marcando en color las cadenas encontradas:

$ grep �color -E "errorjfatal" *.log

regresa las líneas que no tengan la cadena indicada:

$ grep -v // Ejemplo.java

regresa las líneas que no contienen la cadena indicada y no son vacías:

[email protected] 450 Antonio Carrillo Ledesma, Et alii

Page 453: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ grep -Ev "^//j^$" Ejmplo.java

Podemos usar ^ y $ para forzar a que se encuentre solo al inicio o al �nalde la línea respectivamente, por ejemplo:

$ grep ^antonio /etc/passwd$ grep sh$ /etc/passwd

o buscar una línea que solo contenga una palabra, por ejemplo:

$ grep �̂ texto$�archivo

o líneas en blanco usando:

$ grep �̂ $�archivo

También podemos indicar que busque usando rango de caracteres medi-ante122:

$ grep �[Aa]ntonio�archivo$ grep �[Aa][Nn]tonio[0-9]�archivo$ grep �[A-Z][a-z]�archivo$ grep [[:upper:]] archivo

locate permite buscar archivos o directorios cuyo nombre coincida conel patrón dado, por ejemplo:

$ locate *dir2*

si necesitamos que la búsqueda sea insensible a mayúsculas y minúsculasusamos:122Podemos usar[[:alnum:]] - Caracteres alfanuméricos[[:alpha:]] - Caracteres alfabéticos[[:blank:]] - Espacio o tabulador[[:digit:]] - Dígitos[[:lower:]] - Letras minúsculas[[:space:]] - Espacio, tabulador[[:upper:]] - Letras mayúsculas

[email protected] 451 Antonio Carrillo Ledesma, Et alii

Page 454: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ locate -i desktop.iso

podemos limitar la búsqueda a un determinado número de ocurrencias,por ejemplo:

$ locate "*.html" -n 20

o solo visualizar el número de ocurrencias encontradas, ejemplo:

$ locate -c "*.html"

Respaldo

tar permite respaldar en un solo archivo un grupo de archivos y/o di-rectorios sin compactarlos, para ello usar:

$ tar -cvf nombre.tar directorio

para restaurar usar:

$ tar -xvf nombre.tar

gzip permite respaldar en un solo archivo un grupo de archivos y/odirectorios compactandolos usando gzip, para ello usar:

$ tar -cvf nombre.tar directorio$ gzip �best nombre.tar

o usar:

$ tar -zcvf nombre.tar.gz directorio

para restaurar usar:

$ gunzip nombre.tar.gz$ tar -xvf nombre.tar

o usar:

$ tar -zxvf nombre.tar.gz

con GZIP comprimir y descomprimir respectivamente:

$ gzip �chero$ gzip -d �chero.gz

[email protected] 452 Antonio Carrillo Ledesma, Et alii

Page 455: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

bzip2 permite respaldar en un solo archivo un grupo de archivos y/odirectorios compactándolos usando bzip2, para ello usar:

$ bzip �chero$ bzip -d �chero.bz2

zip permite respaldar en un solo archivo un grupo de archivos y/o di-rectorios compactándolos usando zip, para ello usar:

$ zip archivo.zip �cheros$ zip -r archivo.zip directorio/

y descomprimir usando:

$ unzip archivo.zip

también podemos indicar el directorio en en cual descomprimir, usando:

$ unzip archivo.zip -d /home/usuario/temp/

si al descompactar existe algún error, es posible recuperar parte de losarchivos mediante:

$ zip -F archive.zip -O archive-�xed.zip

o usar -FF, después usar:

$ jar xvf archive-�xed.zip

otra alternativa es usar:

$ bsdtar xf archivo.zip

Si se requiere descomprimir múltiples archivos empaquetados podemosusar:

$ for z in *.zip; do unzip "$z"; done

[email protected] 453 Antonio Carrillo Ledesma, Et alii

Page 456: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

unp permite descomprimir de casi cualquier formato de respaldo, suuso es de lo más sencillo, a saber:

$ unp archivo.compactado

Varios

�le determina el tipo de un archivo y te imprime en pantalla el resul-tado. No hace falta que el archivo tenga una extensión para que �le determinesu tipo, pues la aplicación ejecuta una serie de pruebas sobre el mismo paratratar de clasi�carlo.

$ �le un_archivo_de_texto.txt

stat nos da información de un archivo, datos como: tamaño, blocksusados para almacenarlo, número de ligas, datos del dueño y grupo; fechasde acceso, modi�cación y cambio.

$ stat archivo

type permite identi�car el comando pasado como parámetro indicandola trayectoria si es comando externo o si es comando interno al Shell, ejemplo:

$ type ls

ps nos muestra los procesos activos del sistema junto con información dela ejecución de los mismos, para ver todos los procesos en el sistema usar -ef,para conocer los procesos de un usuario usamos -U <usuario>, para conocerlos procesos de un determinado grupo usamos -G <grupo>, para conocertodos los procesos de un determinado programa usamos -C <programa>,para ver todos los procesos en forma de árbol y saber que proceso dependede que otros, usamos -ejH, ejemplo:

$ ps -ejH

Podemos pedirle al comando que nos muestre algunos datos informativosde los comandos en ejecución y mandar a un archivo los procesos que másconsumen memoria, ejemplo:

[email protected] 454 Antonio Carrillo Ledesma, Et alii

Page 457: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

ps -eo cmd,pid,ppid,%mem,%cpu �sort=-%mem j head j teetopprocs.txt

si queremos adicionar datos al archivo previamente creado usamos:

$ ps -eo cmd,pid,ppid,%mem,%cpu �sort=-%mem j head j tee-a topprocs.txt

kill es un comando utilizado para enviar mensajes sencillos a los proce-sos ejecutándose en segundo plano en el sistema. Por defecto el mensaje quese envía es la señal de terminación. Su sintaxis más sencilla es:

$ kill [-s] <pid>

donde -s es la señal a enviar, de no ser especi�cada ninguna se manda laseñal por defecto (SIGTRM ) y pid es el identi�cador del proceso. Otra desus opciones es -9 (SIGKILL) que fuerza la terminación de un proceso, paraconocer los posibles mensajes de kill usar:$ kill -l.En Linux cada comando, proceso o ventana grá�ca tiene un número de

proceso (PID), este se puede obtener mediante el comando ps o top, y elcomando kill puede concluir con la ejecución del PID indicado y todos sussubprocesos -el usuario sólo puede matar sus propios procesos, root puede�nanizar (matar) los procesos de cualquier usuario-, ejemplo:Por ejemplo, para terminar un proceso cuyo PID es 3477, ejecutamos:

$ kill 3477

Otra señal importante es 1 (SIGHUP) que permite parar y reinicializarel proceso indicado, por ejemplo para detener el proceso 2434, usamos:

$ kill -1 2434

y lo reiniciamos usando:

$ kill -1 2434

killall permite �nalizar (matar) todas las instancias de ejecución de uncomando, por ejemplo:

$ killall �refox-esr

[email protected] 455 Antonio Carrillo Ledesma, Et alii

Page 458: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

pgrep permite conocer los identi�cadores de proceso de una determi-nada aplicación corriendo en el sistema, por ejemplo:

$ pgrep �refox

pwdx permite conocer el directorio de trabajo de una aplicación a travésde su identi�cador de proceso pasado como parámetro a pwdx, ejemplo:

$ pwdx 4534

o

$ pwdx $(pgrep �refox)

awk permite procesar, analizar archivos de texto que estén organizadospor �las y columnas, ejemplo:$ awk -F�:��{ print $1 }�/etc/passwdnos mostrarán todos los usuarios que tiene el sistema, los cuales están

dados de alta en el archivo del sistema /etc/passwd.Si necesitamos visualizar una determinada línea de un archivo (digamos

la 5), podemos usar:

$ awk �NR==5�archivo.txt

en el caso de necesitar visualizar un rango de líneas de un archivo (digamosde la 20 a 25), usamos:

$ awk �NR>=20 && NR<=25�archivo.txt

sort imprime en pantalla las líneas de un archivo ordenadas alfabética-mente. Para ejecutarlo basta con:

$ sort archivo.txt

podemos solicitar que lo haga en orden inverso usando -r, que haga elordenamiento numérico usando -n, podemos omitir los duplicados usando -u,ordenar ignorando mayúscula y minúsculas con -f, ordenamiento tomando encuenta valores alfanuméricos -h, ordenamiento aleatorio con -R, que ordenepor meses -M, que haga el ordenamiento de los renglones tomando comoíndice cierto renglón, por ejemplo:$ ls -al j sort -k 4 -n

[email protected] 456 Antonio Carrillo Ledesma, Et alii

Page 459: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sed es considerado un editor de texto orientado a "�ujo" -en contraposi-ción a los clásicos editores «interactivos» - el cual acepta como entrada unarchivo o entrada estándar; cada línea es procesada y el resultado es enviadoa la salida estándar. Por ejemplo, borrar las líneas tres a cinco de archivoarchivo.txt:

$ sed �3,5d�archivo.txt

otro ejemplo, borrar todas las líneas en blanco (no las que sólo tengantabuladores y/o espacios) del archivo �chero.txt

$ sed �/^$/d�archivo.txt

para quitar las líneas en blanco y las que sólo tengan tabuladores y/oespacios, usamos:

$ sed sed �/^[ nt]*$/d�archivo.txt

si deseamos visualizar una determinada línea de un archivo (digamos la13), usamos:

$ sed -n �13p�archivo.txt

si queremos visualizar un rango de líneas de un archivo (digamos de la 20a 25), usamos:

$ sed -n �20,25p�archivo.txt

si necesitamos cambiar las vocales de un archivo de minúsculas a mayús-culas, podemos usar:

$ sed �y/aeiou/AEIOU/�archivo.txt$ sed �s/[aeiou]/nU&/g�archivo.txt

md5sum genera la suma de veri�cación md5 (Compute and CheckMD5Message Digest) o Hash usada para veri�car la integridad de los archivos,esta puede haber cambiado como resultado de una transferencia de archivosdefectuosa, un error en disco o una interferencia maliciosa, ejemplo123:

$ md5sum debian.testing-amd64-netinst.iso123Otras opciones son:

$ shasum debian.testing-amd64-netinst.iso$ shasum -a256 debian.testing-amd64-netinst.iso

[email protected] 457 Antonio Carrillo Ledesma, Et alii

Page 460: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

sleep se utiliza para temporalizar un intervalo de tiempo determinado,la unidad por defecto es el segundo (s), pero se puede usar minutos (m),horas (h) o días (d), por ejemplo:

$ sleep 3m && ls -al

watch permite correr un comando de forma repetitiva y a intervalosregulares (2 segundos por omisión) mostrando su salida, por ejemplo:

$ watch free

de ser necesario, podemos quitarle el título, usando:

$ watch -t free

podemos indicar el intervalo de ejecución usando:

$ watch -n 5 free

Podemos solicitarle que nos muestre los cambios sobre la última salida,usando:

$ watch -n 5 -d free

y podemos indicarle que concluya la ejecución si la salida actual es distintaa la anterior, usando:

$ watch -n 5 -g free

Monitorear el Desempeño Existen múltiples herramientas para ser us-adas en línea de comandos y ambiente grá�co que permiten monitorear eldesempeño y uso de una computadora con GNU/Linux, estas se pueden usarpara administrar el sistema y las comunicaciones por red, estos comandos124

están disponibles en todas las distribuciones de GNU/Linux y son normal-mente usados para determinar problemas de desempeño en nuestro sistemade cómputo.

124Algunos comandos son utilizados por cualquier usuario y otros solo por el admin-istrador.

[email protected] 458 Antonio Carrillo Ledesma, Et alii

Page 461: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

lscpu para conocer el tipo de CPU y sus características usamos:

$ lscpu

podemos usar también cat /proc/cpuinfo, si deseamos un análisis másdetallado están los comandos:

lscpi, cpuid, dmidecode, inxi, hardinfo, lshw, hwinfo, nproc

free despliega la memoria total, usada, compartida, en Cache y libredel sistema:

$ free

podemos usar también cat /proc/meminfo, si deseamos un análisis másdetallado están los comandos:

top, vmstat, dstat

top muestra el desempeño de nuestro equipo actualizando cada segundoel uso del CPU, Memoria, Swap, Cache, Bu¤er y los procesos que estáncorriendo en el sistema actualmente y en cada proceso que corre, se muestrael identi�cador, el porcentaje de CPU y memoria usada:

$ top

para salir del programa se debe presionar la tecla q. Otras variantes son:

bashtop, htop, glances, conky, nmon, atop, atop, vtop, gtop,ps, mpstat, collectl, sar, pstree, pmap, pgrep, pkill, kill, killall,Linux Process Viewer, etc.

whowatch es una utilidad simple que muestra de forma interactiva yen tiempo real los usuarios y procesos activos en el sistema:

$ whowatch

Otras opciones son:

bashtop, htop, glances, conky, nmon, atop, gtop, ps, mpstat,collectl, sar, pstree, pmap, pgrep, pkill, kill, killall, Linux ProcessViewer, etc.

[email protected] 459 Antonio Carrillo Ledesma, Et alii

Page 462: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

dstat muestra las estadísticas de recursos de todo el sistema de formaversátil en tiempo real:

$ dstat -c �top-cpu -dn �top-mem �mem

combina la capacidad de comandos como iostat, vmstat, netstat e ifstat.Otras opciones son:

nload, collectl, iptraf, iftop, mtr, bmon, slurn, tcptrack, nethogs,monitorix, nmon, glances

vmstat muestra las estadísticas de la memoria virtual, hilos del Kernel,uso de discos, procesos del sistema, entradas y salidas de bloque, interruptoresy actividad del CPU, entre otras opciones, este comando esta contenido enel paquete systat:$ vmstat 1otras opciones son:

dstat, sar, vnstat, vnstati, mpstat, iostat, iotop, top, collectl,nmon, glances

netstat permite monitorizar los paquetes de red que entran y salen,genera estadísticas de su uso, es un paquete que permite encontrar problemasde desempeño en las comunicaciones de red:

$ netstat

podemos solicitar que sólo nos muestre lo referente a un solo puerto,usando:

netstat -ltnp j grep -w �:80�

otras opciones son:

dstat, collectl, iptraf, iftop, ifstat, mtr, nethogs, monitorix,nmon, bwm-ng, cbm, speedometer, pkstat, netwatch, trafshow,netload, glances

[email protected] 460 Antonio Carrillo Ledesma, Et alii

Page 463: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

iotop permite conocer qué procesos están generando actividades de lec-tura y grabación en los discos del sistema, así es posible conocer qué procesosestán sobrecargando el sistema:

$ iotop

otras opciones son:

iostat, vmstat, htop, glances, netdata, netstat, nmon, collectl,glances

iostat este permite conocer estadísticas de uso del sistema de entrada/salidaincluyendo dispositivos, discos locales, discos remotos tales como NFS ySAMBA:

$ iostat

Otras opciones son:

iotop, dstat, nfsstat, ifstat, atop, nmon, collectl, glances

lsof permite conocer la lista de archivos abiertos además de SocketsNetwork, Pipes, dispositivos y procesos:

$ lsof

Lista todos los procesos que tiene abierto el archivo:

$ lsof /trayectoria/archivo

Lista todos los archivos abiertos por el usuario:

$ lsof -u usuario

también se pueden indicar múltiples usuarios:

$ lsof -u usuario1, usuario2

o bién por todos los usuarios menos uno, por ejemplo root:

[email protected] 461 Antonio Carrillo Ledesma, Et alii

Page 464: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ lsof -u ^root

Lista todos los archivos abiertos en un directorio:

$ lsof +D /trayectoria/directorio/

Lista todos los archivos abiertos por un identi�cador de proceso:

$ lsof -p <pid>

también podemos especi�car múltiples identi�cadores de proceso:

$ lsof -p pid1, pid2, pid3

Lista todos los archivos abiertos por un comando:

$ lsof -c <comando>

Busca archivos abiertos por un usuario, comando o proceso:

$ lsof -a -u usuario -c comando

Lista las conexiones y puertos de red abiertos:

$ lsof -i

podemos pedirle que nos muestre puertos tcp o udp:

$ lsof -i tcp

podemos conocer los procesos que usan el puerto TCP:80, mediante:

$ lsof -i TCP:80

o para el puerto TCP:22, mediante:

$ lsof -i TCP:22

Uno de sus principales usos es conocer qué proceso tiene acceso a un discoo partición que no se puede desmontar y manda un error de que un archivoesta siendo usado, pare ello usamos:

$ lsof /dev/sda2

[email protected] 462 Antonio Carrillo Ledesma, Et alii

Page 465: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

lsusb lista los dispositivos USB del sistema además información delfabricante del mismo, ejemplo:

$ lsusb

tcpdump es uno de los comando más usados para analizar paquetes dered y es usado para capturar o �ltrar paquetes TCP/IP que se reciben o setrans�eren en una interfaz de red especi�ca:# tcpdump -i eth0también permite grabar los paquetes capturados para un análisis poste-

rior. Otras opciones son:

arpwatch, suricata, wireshark, vnstat, vnstati, negios, collectl,glances, ss, iptraf, nethogs, iftop, mtr

ip muestra información y permite manipular los dispositivos de red (in-terfaces y tuneles), uso:

$ ip address

nmcli información sobre los dispositivos de red y su con�guración, uso:

$ nmcli

Aprender a Trabajar con Linux En la red existen múltiples sitios espe-cializados y una amplia bibliografía para aprender a trabajar en cada uno delos distintos aspectos de Linux, nosotros hemos seleccionado diversos textosque ponemos a su disposición en:

Sistemas Operativos

[email protected] 463 Antonio Carrillo Ledesma, Et alii

Page 466: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

15.4 Desde la Nube

Existen diferentes servicios Web125 que permiten instalar, con�gurar y usarcientos de sistemas operativos Linux y Unix -máquinas virtuales usando ser-vicios Web en Debian GNU/Linux y QEMU (véase sección 17)- desde elnavegador, esto en aras de que los usuarios que cuenten con algún sistemade acceso a red y un navegador puedan usar, con�gurar e instalar algún sis-tema operativo y su respectiva paquetería sin hacer instalación alguna en suequipo de cómputo, tableta o teléfono celular126.Una muestra de estos proyectos son: Distrotest (https://distrotest.net) y

JSLinux (https://bellard.org/jslinux).

Algunas versiones listas para usar son:4mLinux, AbsoluteL inux, Academ ix, A lp ineL inux, Antergos, antiX Linux, Aptosid , A rchBang, A rchLabs, A rchL inux,

A rchman, ArchStrike, A rcoL inux, A rtixL inux, A ryaL inux, AV Linux, BackBoxLinux, B igL inux, B io-L inux, B lackArch ,

B lackLab, B lackPantherOS, B lackSlash , b lag, B lankOn, B luestar, Bodhi, BunsenLabs, ByzantineOS, Caine, Calcu late

L inux Desktop , CentOS, Chakra, ChaletOS, C learOS, C lonezilla , ConnochaetOS, Cucumber, Damn Small L inux, Damn

Small L inux Not, Debian , DebianEdu, deep in , DEFT , Devil-L inux, Devuan, D ragonF ly BSD , Dragora, DuZeru , Dyne:b olic ,

Edubuntu , elem entaryOS, E live L inux, Emmabuntüs, Emm i OS, Endless OS, EnsoOS, Exe GNU/Linux, ExT iX , Fat-

dog64, Fedora Atom ic, Fedora Server, Fedora Workstation , FerenOS, FreeBSD , FreeDOS, Frugalware, G4L, G eckoL inux,

G entoo, GNewSense, GoboL inux, Gparted , G reen ieL inux, GRML, GuixSD , Haiku , Heads, Kali L inux, Kanotix , KaOS,

Knoppix , Kodach i, KolibriOS, Korora, Kubuntu , Kwort, L inux L ite, L inux M int, L iveRaizo, LMDE, Lubuntu , LXLE

OS, Macpup, M ageia , M akuluL inux, M anjaro, M atriux, M auiL inux, M enuetOS, M inerOS, M in iNo, M odicia , Musix , MX

Linux, Nas4Free, Neptune, NetBSD , Netrunner, N ixO s, NST , NuTyX , OpenInd iana, Op enMandriva, op enSUSE , O ra-

cleL inux, OSGeo live, OviOS, Parab ola CLI, Parab ola LXDE, Pardus, Parrot Home, Parrot Security, Parrot Studio , Par-

six , PCLinuxOS, PeachOSI, Pentoo, Pepp erm int, Pepp erm intOS, P inguy, P inguyOS, p lopL inux, PointL inux, Pop!_OS,

PORTEUS, Puppy Linux, PureOS, Q4OS, Qub esOS, Quirky, Raspb erry P i Desktop , ReactOS, Redcore, Rescatux, Reven-

geOS, RoboL inux, Rockstor, ROSA FRESH , Runtu , Sabayon, SalentOS, Salix , Scienti�cL inux, S iduction , S lackware, S lax ,

S liTaz, Solus, SolydK , SolydX , SparkyL inux, Springdale, StressL inux, SubgraphOS, SwagArch , Tails, Tanglu , T iny Core,

Trisquel, TrueOS, TurnKey Linux, Ubuntu , Ubuntu Budgie, Ubuntu Studio , UbuntuKylin , U ruk, VectorL inux, V ineL inux,

VoidL inux, Voyager, VyOS, WattO s, Xubuntu , Zentyal, Zenwalk , Zevenet, Zorin OS

125Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.126Estos servicios son conocidos como computación en la nube (Cloud Computing).

[email protected] 464 Antonio Carrillo Ledesma, Et alii

Page 467: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Terminales de Linux en la Web

� https://www.tutorialspoint.com/execute_bash_online.php

� http://www.webminal.org/

� https://bellard.org/jslinux/

� https://codeanywhere.com/

� https://copy.sh/v86/

� https://www.masswerk.at/jsuix/

� https://linuxcontainers.org/lxd/try-it/

� http://cb.vu/

Editores BAHS en la Web

� https://www.shellcheck.net/

� https://www.learnshell.org/

� https://www.tutorialspoint.com/execute_bash_online.php

� https://paiza.io/en/projects/new?language=bash

� https://www.jdoodle.com/test-bash-shell-script-online

� http://rextester.com/l/bash_online_compiler

Usar Linux en Dispositivos Android En los dispositivos Android esposible usar un simulador de la línea de comandos del Shell usado en Linux, deforma que podremos introducir todos los comandos habituales para trabajardesde ahí en la comunidad de nuestra terminal Android. Uno de los paquetesmás completo es:

https://termux.com

El paquete cuenta con una página Wiki en:

https://wiki.termux.com

[email protected] 465 Antonio Carrillo Ledesma, Et alii

Page 468: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Usando este paquete, las aplicaciones instaladas disponen de varias mejo-ras respecto al clásico Android Terminal Emulator, como el hecho de teneracceso a una gran biblioteca de paquetes de Linux para instalar desde la ter-minal -usando el comando apt (véase sección ??)-, así como algunos atajos deteclado transformados en combinaciones con los botones físicos de volumen yapagado de la terminal. Igualmente, es compatible con todo tipo de tecladosfísicos externos. Siendo posible trabajar con lenguajes como NodeJ, Rubi,Python, C y paquetes como Nano, Vi, SSH, Git, Subversion, zsh Shell, etc.

Usar Linux en Formato Live Linux es uno de los sistemas operativospioneros en ejecutar de forma autónoma o sin instalar en la computadora,existen diferentes distribuciones Live -descargables para formato CD, DVD,USB- de sistemas operativos y múltiples aplicaciones almacenados en unmedio extraíble, que pueden ejecutarse directamente en una computadora,estos se descargan de la Web generalmente en formato ISO127, una de laslistas más completas de versiones Live esta en:

https://livecdlist.com

En el caso de tener un archivo ISO de algún sistema operativo (por ejem-plo ubuntu-11.10-desktop-i386.iso) y se quiere ejecutar su contenido desdeuna máquina virtual con QEMU/KVM sólo es necesario usar:

$ kvm -m 512 -cdrom ubuntu-11.10-desktop-i386.iso

en este ejemplo usamos en KVM la arquitectura por omisión y memoriade 512 MB (-m 512).

Knoppix es una versión Live ampliamente conocida y completa, esta sepuede descargar de:

http://mmc.geo�sica.unam.mx/Replicas/knoppix/

y usar mediante:

$ kvm -m 1024 -cdrom KNOPPIX_V8.2-2018-05-10-EN.iso

aquí se usa la arquitectura por omisión y memoria de 1024 MB.127Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB.

[email protected] 466 Antonio Carrillo Ledesma, Et alii

Page 469: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Usar Máquinas Virtuales de Linux Existen diversos proyectos que per-miten descargar decenas de máquinas virtuales listas para ser usadas, paralos proyectos VirtualBox y VMWare (y por ende para KVM/QEMU), estasse pueden descargar de múltiples ligas, algunas de ellas son:

https://www.osboxes.orghttps://virtualboxes.org/images/

Si desargamos y descomprimimos el archivo lubuntu1210.7z (véase sec-ción 17.9), esto dejará la imagen de VirtualBox de LUBUNTU cuyo nom-bre es lubuntu1210.vdi. Entonces esta imagen la usaremos directamente enKVM/QEMU, mediante:

$ kvm -m 2000 -hda lubuntu1210.vdi

Nota: esta imagen usa como usuario y clave de acceso: lubuntu/lubuntu

Distribuciones de Sistemas Operativos Existen diversos sitios Webque están enfocados a explorar detalladamente cada distribución actual oantigua, a un nivel técnico acompañado de grandes y útiles análisis técnicossobre los mismos, lo que facilita el aprendizaje puntual sobre que distribuciónusar o empezar a usar sin tanta incertidumbre.

� ArchiveOS https://archiveos.org

� Distro Chooser https://distrochooser.de/es/

� Distro Watch https://distrowatch.com

� Linux Distribution List https://lwn.net/Distributions/

[email protected] 467 Antonio Carrillo Ledesma, Et alii

Page 470: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

16 Apéndice D: Máquinas Virtuales

Entendamos por una máquina virtual a un programa de cómputo (véase[48], [54], [47] y [46]) que simula a una computadora, en la cual se puedeinstalar y usar otros sistemas operativos de forma simultánea como si fueseuna computadora real sobre nuestro sistema operativo huésped128.

Figura 3: Sobre un equipo AMD de gama baja y 4 GB de RAM, usando comosistema operativo huésped un Linux Debian estable, se ejecutan 4 máquinasvirtuales (mediante KVM) de Windows XP con diferentes aplicaciones ydentro de cada una de ellas se muestra la RAM asignada, la usada en esemomento, el uso de CPU de cada máquina virtual, entre otros datos.

Una característica esencial de las máquinas virtuales es que los procesosque ejecutan estan limitados por los recursos y abstracciones proporcionadospor ellas. Estos procesos no pueden escaparse de esta "computadora virtual".Uno de los usos más extendidos de las máquinas virtuales es ejecutar sistemasoperativos nuevos u obsoletos adicionales a nuestro sistema habitual.

128Tal y como puede verse re�ejado en la de�nición de máquina virtual, en este texto nosestamos focalizando en las máquinas virtuales de sistema. Existen otro tipo de máquinasvirtuales, como por ejemplo las máquinas virtuales de proceso o los emuladores.

[email protected] 468 Antonio Carrillo Ledesma, Et alii

Page 471: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

De esta forma podemos ejecutar uno o más sistemas operativos -Linux,Mac OS, Windows XP, 7 ó 8- desde nuestro sistema operativo habitual -GNU/Linux o Windows- sin necesidad de instalarlo directamente en nuestracomputadora y sin la preocupación de que se descon�gure el sistema operativohuésped o a las vulnerabilidades del sistema virtualizado, ya que podemosaislarlo para evitar que se dañe.

16.1 Tipos de Máquinas Virtuales

Las máquinas virtuales se pueden clasi�car en dos grandes categorías segúnsu funcionalidad y su grado de equivalencia a una verdadera máquina:

� Máquinas virtuales de sistema (en inglés System Virtual Machine).También llamadas máquinas virtuales de Hardware, permiten a la má-quina física subyacente multiplicarse entre varias máquinas virtuales,cada una ejecutando su propio sistema operativo. A la capa de Softwareque permite la virtualización se le llama monitor de máquina virtual oHypervisor. Un monitor de máquina virtual puede ejecutarse o bien di-rectamente sobre el Hardware o bien sobre un sistema operativo ("HostOperating System").

� Máquinas virtuales de proceso (en inglés Process Virtual Machine).A veces llamada "máquina virtual de aplicación", se ejecuta como unproceso normal dentro de un sistema operativo y soporta un solo pro-ceso. La máquina se inicia automáticamente cuando se lanza el procesoque se desea ejecutar y se detiene para cuando éste �naliza. Su obje-tivo es el de proporcionar un entorno de ejecución independiente dela plataforma de Hardware y del sistema operativo, que oculte los de-talles de la plataforma subyacente y permita que un programa se ejecutesiempre de la misma forma sobre cualquier plataforma.

16.2 Técnicas de Virtualización

Básicamente se reconocen tres tipos de virtualización, algunas de las cualesson usadas actualmente en la gran mayoría de los sistemas operativos, ge-neralmente sin que el usuario este consciente de que usa virtualización129,estos son:129El ejemplo más común y omnipresente es la máquina virtual del lenguaje de progra-mación de JAVA.

[email protected] 469 Antonio Carrillo Ledesma, Et alii

Page 472: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Emulación del Hardware Subyacente (ejecución nativa) Esta téc-nica se suele llamar virtualización completa -Full Virtualization- del Hard-ware, y se puede implementar usando un Hipervisor de Tipo I o de TipoII:

1. Monitor de tipo I, se ejecuta directamente sobre el Hardware.

2. Monitor de tipo II, se ejecuta sobre otro sistema operativo.

Cada máquina virtual puede ejecutar cualquier sistema operativo sopor-tado por el Hardware subyacente. Así los usuarios pueden ejecutar dos o mássistemas operativos distintos simultáneamente en computadoras "privadas"virtuales. Actualmente tanto Intel como AMD han introducido prestacionesa sus procesadores x86_64 para permitir la virtualización de Hardware.

Emulación de un Sistema no Nativo Las máquinas virtuales tambiénpueden actuar como emuladores de Hardware, permitiendo que aplicacionesy sistemas operativos concebidos para otras arquitecturas de procesador sepuedan ejecutar sobre un Hardware que en teoría no soportan. Esta técnicapermite que cualquier computadora pueda ejecutar Software escrito para lamáquina virtual. Sólo la máquina virtual en sí misma debe ser portada acada una de las plataformas de Hardware.

Virtualización a Nivel de Sistema Operativo Esta técnica consisteen dividir una computadora en varios compartimientos independientes demanera que en cada compartimento podamos instalar un servidor. A estoscompartimentos se les llama "entornos virtuales". Desde el punto de vista delusuario, el sistema en su conjunto actúa como si realmente existiesen variosservidores ejecutándose en varias máquinas distintas.

16.3 ¿Qué Necesito para Crear y Usar una MáquinaVirtual?

Actualmente la virtualización de un sistema operativo se puede implementarpor Software o por Hardware, lo único que precisamos para poder usar unamáquina virtual es un equipo de cómputo e instalar y con�gurar el programamanejador de la máquina virtual. Cuanto más potente y actual sea el equipo

[email protected] 470 Antonio Carrillo Ledesma, Et alii

Page 473: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de cómputo del que dispongamos, mejor experiencia obtendremos trabajandocon sistemas operativos virtualizados.Algunos de los puntos importantes para obtener un rendimiento óptimo

del sistema operativo virtualizado son los siguientes:

� Preferentemente disponer de un procesador que disponga de capacidadde virtualización por Hardware (Intel VTx/AMD-V). Casi cualquierequipo de cómputo actual dispone de un procesador apto para virtu-alizar sistemas operativos por Hardware.

� Disponer de espacio su�ciente en el disco duro130, es preferible disponerde un disco de estado sólido (SSD) por sus velocidades de lectura-escritura.

� Necesitamos disponer de memoria RAM su�ciente y adecuada131. Cuantamás memoria RAM y cuanto más rápida sea, mejores resultados de vir-tualización obtendremos.

� Sin duda el hecho de tener una buena tarjeta grá�ca también ayudaráa disponer de una mejor experiencia de virtualización.

16.4 ¿Cómo Funciona una Máquina Virtual?

Explicar el funcionamiento a detalle de una máquina virtual es engorroso yesta fuera del alcance del propósito de este texto. No obstante a grandesrasgos podemos decir que una máquina virtual es un Software que median-te una capa de virtualización132 se comunica con el Hardware que tenemosdisponible en nuestro equipo de cómputo consiguiendo de este modo emularla totalidad de componentes de un equipo de cómputo real. De este modo

130Una máquina virtual con Windows XP ocupa por lo menos 2 GB en disco y una conWindows 7 ocupa por lo menos 4 GB en disco.131La cantidad de memoria RAM ideal dependerá del sistema operativo que queremosvirtualizar y del número de sistemas operativos que queramos virtualizar de forma si-multánea. Si tan solo queremos virtualizar un sistema operativo con 2 o 3 GB de RAMdebería ser su�ciente.132La capa de virtualización es un sistema de archivos propietario y una capa de abstrac-ción de servicio del Kernel que garantiza el aislamiento y seguridad de los recursos entredistintos contenedores. La capa de virtualización hace que cada uno de los contenedoresaparezca como servidor autónomo. Finalmente, el contenedor aloja la aplicación o cargade trabajo.

[email protected] 471 Antonio Carrillo Ledesma, Et alii

Page 474: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

la máquina virtual será capaz de emular un disco duro, una memoria RAM,una tarjeta de red, un procesador, etc.Una vez que sabemos esto, cuando abrimos una máquina virtual, como

por ejemplo Virtualbox (véase [49]), nos encontramos con un entorno grá�coque nos permitirá con�gurar y asignar recursos a cada uno de los compo-nentes físicos que emula la máquina virtual. En prácticamente la totalidadde máquinas virtuales debemos de�nir detalles del siguiente tipo:

� Tipo de procesador a usar

� Espacio que queramos asignar al disco duro.

� Memoria RAM que queremos asignar a la máquina virtual.

� La memoria de nuestra tarjeta grá�ca.

� La con�guración de red.

� etc.

Una vez con�gurados estos parámetros habremos creado una máquinavirtual para instalar un sistema operativo, de este modo tan solo tendremosque abrir la máquina virtual que se acaba de crear e instalar el sistemaoperativo tal y como si se tratará de un equipo de cómputo real.

Máquinas Virtuales de Sistemas Operativos Desde la Nube Existendiferentes servicios Web133 que permiten instalar, con�gurar y usar cientosde sistemas operativos Linux, Unix y Windows -máquinas virtuales usandoservicios Web en Linux y QEMU (véase sección 17)- desde el navegador, estoen aras de que los usuarios que cuenten con algún sistema de acceso a red yun navegador, puedan usar, con�gurar e instalar algún sistema operativo y surespectiva paquetería sin hacer instalación alguna en su equipo de cómputo,

133Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de la navegación, información introducida en los formulariosy borrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que lossitios Web que visitamos sí guardan información de nuestra visita, nuestro proveedor deInternet también guarda constancia de nuestra visita y si descargamos algo, esto no seborra al igual que el historial de descargas, además de las marcas de páginas o favoritosse conservarán al cerrar el navegador.

[email protected] 472 Antonio Carrillo Ledesma, Et alii

Page 475: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

tableta o teléfono celular134. Una muestra de estos proyectos los encontramosen:Distrotest (https://distrotest.net) y JSLinux (https://bellard.org/jsLinux).

Algunas versiones listas para usar son:4mLinux, AbsoluteLinux, Academix, AlpineLinux, Antergos, antiX Linux, Ap-

tosid, ArchBang, ArchLabs, ArchLinux, Archman, ArchStrike, ArcoLinux, Ar-tixLinux, AryaLinux, AV Linux, BackBoxLinux, BigLinux, Bio-Linux, BlackArch,BlackLab, BlackPantherOS, BlackSlash, blag, BlankOn, Bluestar, Bodhi, Bunsen-Labs, ByzantineOS, Caine, Calculate Linux Desktop, CentOS, Chakra, ChaletOS,ClearOS, Clonezilla, ConnochaetOS, Cucumber, Damn Small Linux, Damn SmallLinux Not, Debian, DebianEdu, deepin, DEFT, Devil-Linux, Devuan, DragonFlyBSD, Dragora, DuZeru, Dyne:bolic, Edubuntu, elementaryOS, Elive Linux, Em-mabuntüs, Emmi OS, Endless OS, EnsoOS, Exe GNU/Linux, ExTiX, Fatdog64,Fedora Atomic, Fedora Server, Fedora Workstation, FerenOS, FreeBSD, FreeDOS,Frugalware, G4L, GeckoLinux, Gentoo, GNewSense, GoboLinux, Gparted, Gree-nieLinux, GRML, GuixSD, Haiku, Heads, Kali Linux, Kanotix, KaOS, Knoppix,Kodachi, KolibriOS, Korora, Kubuntu, Kwort, Linux Lite, Linux Mint, LiveRaizo,LMDE, Lubuntu, LXLE OS, Macpup, Mageia, MakuluLinux, Manjaro, Matriux,MauiLinux, MenuetOS, MinerOS, MiniNo, Modicia, Musix, MX Linux, Nas4Free,Neptune, NetBSD, Netrunner, NixOs, NST, NuTyX, OpenIndiana, OpenMan-driva, openSUSE, OracleLinux, OSGeo live, OviOS, Parabola CLI, Parabola LXDE,Pardus, Parrot Home, Parrot Security, Parrot Studio, Parsix, PCLinuxOS, Pea-chOSI, Pentoo, Peppermint, PeppermintOS, Pinguy, PinguyOS, plopLinux, Point-Linux, Pop!_OS, PORTEUS, Puppy Linux, PureOS, Q4OS, QubesOS, Quirky,Raspberry Pi Desktop, ReactOS, RedCore, Rescatux, RevengeOS, RoboLinux,Rockstor, ROSA FRESH, Runtu, Sabayon, SalentOS, Salix, Scienti�cLinux, Siduc-tion, Slackware, Slax, SliTaz, Solus, SolydK, SolydX, SparkyLinux, Springdale,StressLinux, SubgraphOS, SwagArch, Tails, Tanglu, Tiny Core, Trisquel, TrueOS,TurnKey Linux, Ubuntu, Ubuntu Budgie, Ubuntu Studio, UbuntuKylin, Uruk,VectorLinux, VineLinux, VoidLinux, Voyager, VyOS, WattOs, Xubuntu, Zentyal,Zenwalk, Zevenet, Zorin OS

Descarga de Máquinas Virtuales de Sistemas Operativos Existendiversos proyectos que permiten descargar decenas de máquinas virtuales

134Estos servicios son conocidos como computación en la nube (Cloud Computing).

[email protected] 473 Antonio Carrillo Ledesma, Et alii

Page 476: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

listas para ser usadas, para los proyectos VirtualBox y VMWare (y por endepara KVM/QEMU), estas se pueden descargar de múltiples ligas, algunas deellas son:

� https://www.osboxes.org

� https://virtualboxes.org/images/

Si descargamos y descomprimimos el archivo lubuntu1210.7z (véase sec-ción 17.9), esto dejará la imagen de VirtualBox de LUBUNTU cuyo nom-bre es lubuntu1210.vdi. Entonces esta imagen la usaremos directamente enKVM/QEMU, mediante:

$ kvm -m 2000 -hda lubuntu1210.vdi

Nota: esta imagen usa como usuario y clave de acceso: lubuntu/lubuntu

Máquinas Virtuales en Formato Live Linux es uno de los sistemas ope-rativos pioneros en ejecutar de forma autónoma o sin instalar en la computa-dora, existen diferentes distribuciones Live -descargables para formato CD,DVD, USB135- de sistemas operativos y múltiples aplicaciones almacenadosen un medio extraíble, que pueden ejecutarse directamente en una computa-dora, estos se descargan de la Web generalmente en formato ISO136, una delas listas más completas de versiones Live esta en: https://livecdlist.com.

En el caso de tener un archivo ISO de algún sistema operativo (por ejem-plo ubuntu-11.10-desktop-i386.iso) y se quiere ejecutar su contenido desdeuna máquina virtual con QEMU/KVM sólo es necesario usar:

$ kvm -m 512 -cdrom ubuntu-11.10-desktop-i386.iso

135Para generar un dispositivo USB con la imagen contenida en un archivo ISOpodemos usar el Software ETCHER, descargable para Linux, Windows y Mac OS desdehttps://etcher.io/.136Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB

[email protected] 474 Antonio Carrillo Ledesma, Et alii

Page 477: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

en este ejemplo usamos el virtualizador con la arquitectura por omisióny memoria de 512 MB.

Knoppix es una versión Live ampliamente conocida y completa, esta sepuede descargar el ISO de http://132.248.182.159/Replicas/knoppix/y usar mediante:

$ kvm -m 1024 -cdrom KNOPPIX_V8.2-2018-05-10-EN.iso

aquí se usa la arquitectura por omisión y memoria de 1024 MB.

16.5 Aplicaciones de las Máquinas Virtuales de Sis-tema

Cada uno de los sistemas operativos que virtualizamos -con su propio sistemaoperativo llamado sistema operativo «invitado (Guest)» - es independientede los otros sistemas operativos. De este modo, en caso que una de lasmáquinas virtuales deje de funcionar, el resto seguirá funcionando. Unamáquina virtual dispone de todos los elementos de un equipo de cómputo real,de disco duro, memoria RAM, unidad de CD o DVD, tarjeta de red, tarjeta devídeo, etc., pero a diferencia de un equipo de cómputo real estos elementos envez de ser físicos son virtuales. Así, una vez instalado un sistema operativoen la máquina virtual, podemos usar el sistema operativo virtualizado delmismo modo que lo usaríamos si lo hubiéramos instalado en nuestro equipode cómputo.Varios sistemas operativos distintos pueden coexistir sobre la misma com-

putadora trabajando simultáneamente, en sólido aislamiento el uno del otro,por ejemplo para probar un sistema operativo nuevo sin necesidad de insta-larlo directamente. La máquina virtual puede proporcionar una arquitecturade instrucciones que sea algo distinta de la verdadera máquina, es decir,podemos simular Hardware. Además, todos los elementos de una máquinavirtual se encapsulan en un conjunto pequeño de archivos -en KVM/QEMUes solo un archivo-, esto permite que podamos pasar un sistema operativovirtual de un equipo de cómputo a otro y realizar copias de seguridad deforma fácil y rápida.La gran mayoría de los manejadores de máquinas virtuales -KVM, Vir-

tualBox o VMWare- permiten instalar prácticamente cualquier sistema ope-rativo -por ejemplo Linux, Android, Mac OS X, Windows, Chrome OS, etc.-. Sin embargo existen otros manejadores de máquinas virtuales -Virtual

[email protected] 475 Antonio Carrillo Ledesma, Et alii

Page 478: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Figura 4: Al poder correr diferentes sistemas operativos y/o versiones delmismo en donde podemos instalar diversas aplicaciones antagónicas que nopodrían coexistir en un sólo sistema operativo, nos permite ampliar el uso denuestro equipo de cómputo.

PC, Hiper-V o Parallels- que estan principalmente destinados a virtualizarWindows.La virtualización es una excelente opción hoy en día, ya que las máquinas

actuales -Laptops, Desktops y servidores- en la mayoría de los casos estansiendo "subutilizados" -estos cuentan con una gran capacidad de cómputo,disco duro y memoria RAM- ya que no se utilizan todos los recursos todoel tiempo, teniendo un uso promedio que oscila entre 30% a 60% de su ca-pacidad total. Permitiendo así, ejecutar varias máquinas virtuales en un sóloequipo físico aumentando el porcentaje de uso de los recursos de cómputodisponibles -en el caso de virtualizar servidores, a este proceso se le conocecomo consolidación de servidores-. Así, la consolidación de servidores con-tribuye a reducir el coste total de las instalaciones necesarias para mantenerlos servicios, permitiendo un ahorro considerable de los costos asociados -energía, mantenimiento, espacio, administración, etc.-, esto se hace patenteen la «computación en la nube (Cloud Computing)» muy en boga actual-mente.

[email protected] 476 Antonio Carrillo Ledesma, Et alii

Page 479: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

16.6 Ventajas y Desventajas

Como toda tecnología, la virtualización tiene ventajas y desventajas, lascuales deben de ser sopesadas en cada ámbito de implementación. Lo que esun hecho que permite en un mismo equipo de cómputo ejecutar más de unsistema operativo o distintas versiones del mismo.Pero queda claro que uno de los inconvenientes de las máquinas virtuales,

es que agregan gran complejidad al sistema en tiempo de ejecución. Estotiene como efecto la ralentización del sistema, es decir, el programa no alcan-zará la misma velocidad de ejecución que si se instalase directamente en elsistema operativo «an�trión (Host)» o directamente sobre la plataforma deHardware, sin embargo, a menudo la �exibilidad que ofrecen compensa estapérdida de e�ciencia.Si la virtualización es por Hardware, la velocidad de ejecución es más

que aceptable para la mayoría de los casos, por ejemplo, en el caso de usarKVM/QEMU soporta máquinas virtuales de hasta 255 CPUs y 4 TB deRAM, y el rendimiento de aplicaciones como Oracle, SAP, LAMP, MS Ex-change sobre máquinas virtuales puede oscilar entre el 95% y el 135% com-parado con su ejecución en servidores físicos. Además, se ha conseguidoejecutar hasta 600 máquinas virtuales en un solo servidor físico.

16.6.1 Ventajas

Además de permitir ejecutar múltiples sistemas operativos, diferentes ver-siones de un mismo sistema pero con diferente Software que en principiopuede ser incompatible entre sí. Para usuarios de Windows, el hecho en sí,de no tener porque lidiar con problemas derivados de virus y antivirus le con-�ere una gran ventaja desde el punto de vista administrativo y del usuario�nal. Además, permite una administración centralizada, ya que todas lasmáquinas virtuales tendrían la misma con�guración y paquetes sin importarel Hardware subyacente en las que se ejecute el sistema operativo huésped.En el caso de instituciones educativas de cualquier nivel académico, es

común que en un mismo equipo de cómputo sea necesario ejecutar por un ladodiferentes versiones de sistemas operativos -por ejemplo Linux, Windows XP,Windows 7, etc.- y por otro lado, en un sistema operativo, ejecutar diferentesversiones de un mismo paquete -generalmente no se pueden tener instaladossimultáneamente más de una versión-.Las máquinas virtuales son una verdadera opción para coexistir simultá-

[email protected] 477 Antonio Carrillo Ledesma, Et alii

Page 480: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

neamente diferentes versiones de sistemas operativos y en un mismo sistemamáquinas virtuales ejecutando las diversas versiones de un mismo programade cómputo, además se pueden con�gurar para que al momento de iniciarlassiempre se ejecuten a partir de una con�guración e instalación base, de talforma que al ser lanzadas, el usuario pueda instalar, con�gurar e inclusivedañar la máquina virtual, pero al reiniciarse la máquina virtual en una nuevasesión, se regresa a la con�guración de la versión base, de esta forma no hayposibilidad de infección de virus entre diversos lanzamientos de sesiones dela máquina virtual, la actualización es centralizada y se puede hacer por red,sin intervención del usuario.Por ello, es una opción viable y común tener en una máquina un sis-

tema huésped como Debian GNU/Linux Estable y dentro de el, un grupode máquinas virtuales de Windows -Windows XP, Windows 7, etc.-, en losque cada máquina virtual tenga instalado Software agrupado por las ca-racterísticas del sistema operativo necesario para ejecutar a todas las aplica-ciones seleccionadas -por ejemplo agrupados por la versión de Service Pack-.Por otro lado, si se descon�gura un sistema operativo virtualizado es

sumamente fácil de restaurar si lo comparamos con un máquina real. Sitomamos las precauciones necesarias podemos restaurar el estado que teníaun sistema operativo virtualizado, de forma fácil y rápida. Si hablamosdel entorno empresarial, la virtualización de sistemas operativos supone unahorro económico y de espacio considerable. Ya que mediante el uso de la vir-tualización evitamos la inversión en multitud de equipos físicos, esto suponeun ahorro importante en mantenimiento, en consumo energético, espacio yprocesos administrativos.Por otro lado, mediante la virtualización y el balanceo dinámico podemos

incrementar las tasas de prestación de servicios de un servidor del siguientemodo. Si disponemos de un servidor Web podemos asignar recursos adi-cionales al servidor, como por ejemplo memoria RAM y CPU en los picosde carga para evitar que el servidor se caiga y de este modo incrementar latasa de e�ciencia. Una vez �nalizado el pico de carga podemos desviar losrecursos aplicados al servidor Web a otra necesidad que tengamos. Por lotanto, aparte de mejorar la tasa de servicio se pueden optimizar los recursos.Si estamos usando una máquina virtual en un entorno de producción,

podemos ampliar los recursos de un sistema operativo o servidor de unaforma muy sencilla, tan solo tenemos que acceder al Software de virtualiza-ción y asignar más recursos. Además, es fácil crear un entorno para realizarpruebas de todo tipo aislado del resto de sistema. Así, las máquinas virtuales

[email protected] 478 Antonio Carrillo Ledesma, Et alii

Page 481: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y la virtualización permiten usar un solo servicio por servidor virtualizadode forma sencilla, de este modo aunque se caiga uno de los servidores virtua-lizado los otros seguirán funcionando.En resumen, la virtualización permite ofrecer un servicio más rápido,

sencillo a usuarios (académicos, estudiantes, clientes, etc.) y es un pilar quedebe ser considerado en una escuela, universidad o compañía en su procesode transformación o consolidación, permitiendo escalonar y ser creativos ala hora de atender las necesidades crecientes y cambiantes de los usuarios; ycontar con servicios agregados, ágiles y adaptables a los constantes cambiosde tecnología de Hardware y Software permitiendo escalar a la hiperconver-gencia hacia la nube.

16.6.2 Desventajas

Entre las principales desventajas de virtualizar sistemas propietarios137 comoWindows (véase 14.2)-no así los sistemas libres como Debian GNU/Linux(véase 14.1)- es que se puede violar el sistema de licenciamiento (véase 14.3)del Software instalado en las máquinas virtuales, esto es especialmente im-portante cuando se usa en más de una máquina, pues la licencia usada parala instalación es violada cuando se tiene más de una copia de la máquinavirtual o se ejecutan múltiples instancias de la máquina virtual.En el caso de Windows XP Home, no se infringe la licencia mientras se

cuente con número de licencias igual al máximo número de máquinas vir-tuales lanzadas simultáneamente. Para otras versiones del sistema operativoWindows como es Windows XP Profesional, la virtualización se maneja conlicencias adicionales a la del sistema operativo original y se debe de contar contantas licencias como el máximo número de máquinas virtuales lanzadas si-multáneamente. Además, es necesario contar con el tipo de licencia adecuadapara virtualizar a todos y cada uno de los paquetes de cómputo instaladosen cada máquina virtual y en las instancias para el número de máquinasvirtuales lanzadas simultáneamente en uno o más equipos.Para usar una máquina virtual en condiciones favorables, necesitamos un

equipo de cómputo potente. Debemos que tener en cuenta que si usamos dossistemas operativos de forma simultánea estamos empleando hasta el doble

137Según la Free Software Foundation (véase [19]), el «Software libre» se re�ere a lalibertad de los usuarios para ejecutar, copiar, distribuir, y estudiar el mismo, e inclusomodi�car el Software y distribuirlo modi�cado. Así, un Software que no es libre, esllamado «Software privativo o propietario» .

[email protected] 479 Antonio Carrillo Ledesma, Et alii

Page 482: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

de recursos. No obstante cualquier equipo de cómputo doméstico de gamabaja actual dispone de los recursos su�cientes para usar una o más máquinasvirtuales.Los sistemas operativos y los programas se ejecutaran con mayor lentitud

en las máquinas virtuales. Esto es debido a que las máquinas virtuales nopueden sacar un rendimiento ideal del Hardware que tenemos en nues-troequipo. Cuanto más potente sea nuestro equipo de cómputo menos se notarála pérdida de rendimiento.Si tenemos un problema -de Hardware o Software- en el equipo de cóm-

puto que aloja el sistema operativo an�trión puede caerse el servicio en latotalidad de máquinas virtuales. Por lo tanto el equipo de cómputo que hacefuncionar la máquina virtual es una parte crítica del proceso de virtualización.A pesar de los inconvenientes que se citan en este apartado, bajo nuestro

punto de vista, la virtualización y las máquinas virtuales proporcionan unasventajas y una �exibilidad que compensan claramente los inconvenientes queacabamos de citar.

16.6.3 Consideraciones Técnicas y Legales de la Virtualización

Como se mostrará en la siguiente sección, virtualizar sistemas operativos -Linux, Unix, Windows entre otros- no representa ningún problema técnico,pero no es el caso en cuanto a las implicaciones legales de hacer la vir-tualización que involucra el almacenamiento, distribución y el número deveces que se ejecuta simultáneamente una máquina virtual en uno o múlti-ples equipos, ya que en general, la máquina virtual esta contenida en unsólo archivo que facilita su distribución y almacenamiento, violando de estaforma la licencia de algunos sistemas operativos y/o programas instalados enel mismo.En el caso de virtualizar cualquier sistema operativo libre como Debian

GNU/Linux (véase 14.1), el tipo de licencia que tiene, permite y alienta suuso para cualquier fín que uno desee, por ello no hay ningún problema envirtualizarlo, no así el caso de hacerlo en sistemas operativos propietarios tipoWindows, la licencia (véase 14.2) restringe su uso a un sólo equipo de cómputoy en muchos casos prohíbe expresamente su virtualización. Además hay quetomar en cuenta el resto del Software instalado en el sistema operativo, yaque estos también tienen sus propias restricciones legales a su uso y númerode veces que se puede ejecutar simultáneamente un paquete dado.Esto es especialmente importante cuando se usa en más de una máquina

[email protected] 480 Antonio Carrillo Ledesma, Et alii

Page 483: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

física, la misma máquina virtual, pues la licencia usada para la instalaciónes violada cuando se tiene más de una copia de la máquina virtual o seejecutan múltiples instancias de la máquina virtual, esta violación de licenciaes su�ciente para ser sujeto a multas o incluso cárcel por dicho ilícito (véase14.3).Por otro lado, cada vez que se adquiere una licencia de uso de algún

Software que no caduque -la cual implica un alto costo monetario-, estapueda seguir siendo usada en una máquina virtual con una versión tal vezobsoleta del sistema operativo que la soporte, pero corriendo en un sistemahuésped moderno y protegido en Hardware de última generación de formalícita y con el consiguiente ahorro económico.

16.7 Máquinas Virtuales en la Educación, Ciencias eIngeniería

Como hemos visto en las secciones anteriores, el uso de las máquinas virtualeses variado, �exible y permite ser usado en diversos ámbitos de la educación,del desarrollo y prueba de programas de cómputo y en general, en Ciencias eIngeniería. Algunas de las utilidades y bene�cios que podemos sacar de unamáquina virtual son los siguientes:

� Para aprender a instalar, probar diversas opciones de con�guracióny usar múltiples sistemas operativos. El proceso de instalación de lamáquina virtual no requiere crear particiones adicionales en nuestrodisco ni alterar la con�guración de la máquina an�triona.

� Para usar un Software que no esta disponible en nuestro sistema ope-rativo habitual. Por ejemplo, si somos usuarios de Linux y queremosusar Photoshop, lo podemos hacer a través de una máquina virtual.

� En ocasiones tenemos que usar Software que únicamente se puedeejecutar en sistemas operativos obsoletos -Windows 98 por ejemplo-,podemos crear una máquina virtual con dicho sistema y usar el Soft-ware de forma aislada sin preocuparnos de sus vulnerabilidades.

� Podemos experimentar en el sistema operativo que corre dentro de lamáquina virtual haciendo cosas que no nos atreveríamos a realizar connuestro sistema operativo habitual, como por ejemplo, instalar Softwareno seguro que consideramos sospechoso, etc.

[email protected] 481 Antonio Carrillo Ledesma, Et alii

Page 484: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� En muchos casos se quiere aprender a instalar, administrar y usarequipo al que no tenemos acceso como un equipo multiCore, con tarjetaCUDA instalada o un Cluster de múltiples nodos multiCore. Esto esposible hacer mediante el uso de máquinas virtuales en un equipo degama media.

� Si se hace el adecuado aislamiento de una máquina virtual en la que seinstale alguna versión de Windows, esta puede ser inmune a los virusy no requiere el uso de antivirus.

� En el caso de instituciones educativas de cualquier nivel académico, escomún que en un mismo equipo de cómputo sea necesario ejecutar porun lado diferentes versiones de sistemas operativos -Linux, WindowsXP, Windows 7, etc.- y por otro lado, en un sistema operativo, ejecutardiferentes versiones de un mismo paquete -generalmente no se puedetener instalada simultáneamente más de una versión- esto se logra conmáquinas virtualizadas ad hoc coexistiendo en una misma máquinafísica.

� Podemos crear/simular una red de equipos de cómputo con tan soloun equipo de cómputo. Esta red de equipos de cómputo virtualizadosla podemos usar con �nes formativos y de este modo adquirir periciasobre administración de redes.

� Si eres un desarrollador de Software puedes revisar si el programa queestas desarrollando funciona correctamente en varios sistemas opera-tivos y/o navegadores de Web.

� Podemos usar las máquinas virtuales para hacer SandBox138 con el �nde ejecutar aplicaciones maliciosas o abrir correos sospechosos en unambiente controlado y seguro.

� Para probar versiones Alfa, Beta y Release Candidate de ciertos pro-gramas y sistemas operativos.

� Para montar un servidor Web, un servidor VPN, un servidor de correoo cualquier otro tipo de servidor.

138Un sistema de aislamiento de procesos o entorno aislado, a menudo usando comomedida de seguridad para ejecutar programas con seguridad y de manera separada delsistema an�trión.

[email protected] 482 Antonio Carrillo Ledesma, Et alii

Page 485: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� Para probar multitud de programas en Windows y evitar que se en-sucie el registro mediante las instalaciones y desinstalaciones de losprogramas

� Consolidar servidores, i.e. lo que ahora hacen varias máquinas, sepueden poner en un solo equipo físico dentro de varias máquinas vir-tuales independientes o interactuando entre ellas según se requiera.

� Mantenimiento y pruebas de aplicaciones sin necesidad de adaptarnuevas versiones del sistema operativo.

� Aumentar la disponibilidad al reducir tiempo de parada y manteni-miento. Ya que la máquina virtual esta hecha, se pueden poner atrabajar una o más copias en un equipo o en múltiples máquinas físicasen cuestión de segundos, permitiendo la continuidad de un negocio oservicio y de recuperación ante desastres.

� Reducir costos de administración ya que se reducen y agilizan laspolíticas de respaldo y recuperación, además de optimizar los recur-sos disponibles permitiendo escalabilidad al crecer con contención decostos, mejorando la e�ciencia energética al usar un menor número deequipos de cómputo.

� Permite incursionar en la estrategia de nube híbrida proactiva creandoun conjunto de marcos de decisión en la nube y procesos para evaluar lasoportunidades de computación en la nube en función de las necesidadesy cargas de trabajo de los usuarios, por ejemplo el uso de supercómputorentado.

� Establecer las habilidades, herramientas y procesos para un entornodinámico e híbrido al asociarse los educadores y los especialistas entecnologías de información para realizar un inventario de habilidadesy competencias, e identi�car oportunidades de capacitación y áreas devulnerabilidad potencial.

16.8 Acceso a Datos Desde una Máquina Virtual

Para acceder a los datos almacenados en máquinas virtuales, disponemos delas siguientes opciones:

[email protected] 483 Antonio Carrillo Ledesma, Et alii

Page 486: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

a) Mediante el uso de algún navegador Web, se puede acceder asu cuenta de correo electrónico y al almacenamiento en la nubecomo Google Drive, Dropbox, HubiC, pCloud, MediaFire, Flip-Drive, Mega, entre otros.

b) En el sistema operativo Linux, se puede acceder a cualquierservidor de internet mediante los protocolos SSH, SAMBA o mon-tar un sistema de archivos mediante NFS o SSHFS, entre otros.

c) En cualquier sistema operativo podemos usar algún navega-dor grá�co de FTP, FTPS o SFTP como FileZilla, WinSCP,PSCP, PSFTP, FireFTP, CoreFTP, entre muchos otros, paratransportar archivos y carpetas.

d) En las máquinas virtuales de Windows usamos el protocoloSAMBA, para tener acceso a este, hay que conectarse a unaunidad de red dentro del explorador de archivos de Windows.

e) En Linux, por ejemplo con PCManFM, Dolphin, Nautilus,Thunar, Konqueror, entre otros, podemos acceder a una máquinaque tenga un servidor de la siguiente forma:

1) Para acceder a un servidor SAMBA, escribir la ruta dearchivos en el manejador de archivos:$ smb://[email protected]/estud/2) Para acceder a un servidor SSH, escribir la ruta de archivos

en el manejador de archivos:$ sftp://[email protected]/home/usuario/

En línea de comandos, podemos:

3) Montar con SSHFS un directorio de otra máquina conservidor SSH :$ sshfs [email protected]:/home/usuario/ /home/algun/lugar4) Montar con mount un directorio de otra máquina con servi-

dor NFS :# mount 10.0.2.2:/directorio ./punto_montaje5) Usar SCP y SFTP de SSH para transferir archivos, para

copiar un archivo, usamos:$ scp archivo.dat [email protected]:~/Datos/para copiar un subdirectorio, usamos:

[email protected] 484 Antonio Carrillo Ledesma, Et alii

Page 487: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ scp -r Directorio [email protected]:.para copiar un archivo de una máquina remota a nuestra

máquina, usamos:$ scp [email protected]:/home/usuario/archivo .6) Montar con CURLFTPFS un directorio de otra máquina

con servidor FTP :# curlftpfs -o allow_other usuario:[email protected]:puerto

/home/algun/lugar

16.9 Aplicaciones y Paquetes Disponibles

A continuación mencionaremos algunas de las aplicaciones más conocidasy universalmente disponibles y/o usadas en los Sistemas Operativos GNULinux/BSD, tanto en el ámbito personal, es decir, distribuciones usadas para�nes particulares (hogar), como en el ámbito profesional, es decir, en el áreade servidores de organizaciones y empresas.Es importante destacar que, en este listado no se incluirán aquellas tec-

nologías de virtualización que vienen como una solución integrada, todo enuno o llave en mano, tales como Promox.

VirtualBox es un Hipervisor de Tipo 2 multiplataforma, es decir, solodebe y puede ser ejecutado (instalado) en cualquier Host (Ordenador) conalguna de las versiones vigentes o antiguas de Sistemas Operativos Windows,Linux, Macintosh, Solaris, OpenSolaris, OS/2 y OpenBSD.Posee un continuo y progresivo ciclo de desarrollo con lanzamientos fre-

cuentes, que la convierten en una excelente alternativa a otras solucionesparecidas, pero con una muy apreciable cantidad de características y fun-ciones, Sistemas Operativos invitados compatibles y plataformas en las quese puede ejecutar.En la mayoría de las distribuciones GNU Linux/BSD se encuentra dicha

aplicación incluida en los repositorios, por lo que, con la siguiente orden decomando suele instalarse en todas ellas:

# apt install virtualbox

Vale destacar para VirtualBox que, al usar esta aplicación siempre es idealla instalación de las «Guest Additions» y el «Extension Pack» . Por ende,para esto y otras formas de instalación lo ideal es visitar el enlace o�cial deVirtualBox.

[email protected] 485 Antonio Carrillo Ledesma, Et alii

Page 488: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Virtualización: GNOME Boxes es es una aplicación nativa del en-torno de Escritorio GNOME, que se utiliza para acceder a sistemas remotos ovirtuales. Boxes o Cajas, utiliza las tecnologías de virtualización de QEMU,KVM y Libvirt.Además, requiere que la CPU sea compatible con algún tipo de virtual-

ización asistida por Hardware (Intel VT-x o AMD-V, por ejemplo); por lotanto, GNOME Boxes no funciona en las CPUs con procesador Intel Pen-tium/Celeron, ya que, carecen de esta característica.En la mayoría de las distribuciones GNU Linux/BSD se encuentra dicha

aplicación incluida en los repositorios, por lo que, con la siguiente orden decomando suele instalarse en todas ellas:

# apt install gnome-boxes

Vale destacar para GNOME Boxes que, es una herramienta muy sencilladirigida a usuarios novatos, permite descargar desde la aplicación diversasimágenes y no incorpora demasiadas opciones de con�guración que suelenser muy conocidas y usadas en otras, tales como VirtualBox.

Virt-Manager es una interfaz de usuario de escritorio para la adminis-tración de un Gestor de Máquinas Virtuales a través de Libvirt. Está dirigidaprincipalmente a las máquinas virtuales gestionadas por KVM, pero tambiénmaneja las gestionadas por Xen y LXC.Virt-Manager presenta una vista resumida de los dominios en ejecución,

su rendimiento en vivo y estadísticas de utilización de recursos. Los asistentespermiten la creación de nuevos dominios, y la con�guración y ajuste de laasignación de recursos de un dominio y el Hardware virtual. Un visor decliente VNC y SPICE integrado presenta una consola grá�ca completa parael dominio invitado.En la mayoría de las distribuciones GNU Linux/BSD se encuentra dicha

aplicación incluida en los repositorios, por lo que, con la siguiente orden decomando suele instalarse en todas ellas:

# apt install virt-manager

Vale destacar para Virt-Manager que, es también es una herramientasencilla, aunque mucho más completa que GNOME Boxes, por lo que sepuede considerar para usuarios medios o avanzados de primer nivel, dadoque, fácilmente es capaz de permitir la gestión de todo el ciclo de vida de lasmáquinas virtuales existentes.

[email protected] 486 Antonio Carrillo Ledesma, Et alii

Page 489: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

QEMU / KVM es un emulador y virtualizador de máquinas genéricoy de código abierto, capaz de ejecutar sistemas operativos y programas hechospara una máquina en una máquina diferente con muy buen rendimiento, ycapaz de lograr un rendimiento casi nativo ejecutando el código del huéspeddirectamente en la CPU del host.KVM es una solución de virtualización completa para Linux en Hardware

x86 que contiene extensiones de virtualización (Intel VT o AMD-V) que con-siste en un módulo de Kernel cargable, que proporciona la infraestructura devirtualización del núcleo y un módulo especí�co del procesador. Y actual-mente funciona inmerso dentro de QEMU.En la mayoría de las distribuciones GNU Linux/BSD se encuentra dicha

aplicación incluida en los repositorios, por lo que, con la siguiente orden decomando suele instalarse en todas ellas:

# apt install qemu-kvm

además, en caso necesario podemos hacer uso de una interfaz grá�ca paratrabajar con QEMU/KVM, tenemos varias opciones, algunas de ellas son:

# apt install qemu-system-gui# apt install aqemu# apt install qemuctl# apt install virt-manager# apt install gnome-boxes

Vale destacar que QEMU/KVM es también es una herramienta muycompleta, ya que no solo emula (x86, x86-AMD64, MIPS, Arm, PowerPC,SPARC, etc.) sino que virtualiza, a diferencias de otros iguales de avanzadascomo WMWare, que solo permite virtualizar. Para conocer las opciones deemulación usamos:

# apt search qemu-system-

Librerías y Paquetes relacionados Estos últimos 3 paquetes men-cionados suelen instalar otros conexos (relacionados) como dependencias, porlo que, en caso de ser necesario, pueden instalar los mismos, junto a sus de-pendencias y otros paquetes útiles necesarios, como:

[email protected] 487 Antonio Carrillo Ledesma, Et alii

Page 490: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

gnome-boxes virt-manager virt-goodies virt-sandbox virt-topvirt-viewer virtinst libvirt-clients libvirt-daemon libvirt-daemon-system qemu qemu-kvm qemu-utils qemu-system qemu-system-gui qemu-block-extra freerdp2-x11 bridge-utils ovirt-guest-agentsystemd-container

Otros en caso de querer instalar otras tecnologías de virtualización disponiblessobre Linux/BSD se puede optar por:

Xen instalándolo con la orden de comando siguiente:

# apt install xen-system-amd64 xen-utils-4.11 xen-tools

LXC instalándolo con la orden de comando siguiente:

# apt install lxc

Docker instalándolo con la orden de comando siguiente:

# apt install docker-ce docker-ce-cli containerd.io

16.10 Desde la Nube

Existen diferentes servicios Web139 que permiten instalar, con�gurar y usarcientos de sistemas operativos Linux y Unix -máquinas virtuales usando ser-vicios Web en Debian GNU/Linux y QEMU (véase sección 17)- desde elnavegador, esto en aras de que los usuarios que cuenten con algún sistemade acceso a red y un navegador puedan usar, con�gurar e instalar algún sis-tema operativo y su respectiva paquetería sin hacer instalación alguna en suequipo de cómputo, tableta o teléfono celular140.

139Cuando se trabaja desde la Web es recomendable usar el modo Privado o Incógnitopara no guardar el historial de navegación, información introducida en los formularios yborrar al cerrar el navegador los datos de los sitios visitados. Pero recuerda que los sitiosWeb que visitamos sí guardan información de nuestra visita, nuestro proveedor de internettambién guarda constancia de nuestra visita y si descargamos algo, esto no se borra al igualque el historial de descargas, además de las marcas de páginas o favoritos se conservaránal cerrar el navegador.140Estos servicios son conocidos como computación en la nube (Cloud Computing).

[email protected] 488 Antonio Carrillo Ledesma, Et alii

Page 491: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Una muestra de estos proyectos son: Distrotest (https://distrotest.net) yJSLinux (https://bellard.org/jslinux).

Algunas versiones listas para usar son:4mLinux, AbsoluteL inux, Academ ix, A lp ineL inux, Antergos, antiX Linux, Aptosid , A rchBang, A rchLabs, A rchL inux,

A rchman, ArchStrike, A rcoL inux, A rtixL inux, A ryaL inux, AV Linux, BackBoxLinux, B igL inux, B io-L inux, B lackArch ,

B lackLab, B lackPantherOS, B lackSlash , b lag, B lankOn, B luestar, Bodhi, BunsenLabs, ByzantineOS, Caine, Calcu late

L inux Desktop , CentOS, Chakra, ChaletOS, C learOS, C lonezilla , ConnochaetOS, Cucumber, Damn Small L inux, Damn

Small L inux Not, Debian , DebianEdu, deep in , DEFT , Devil-L inux, Devuan, D ragonF ly BSD , Dragora, DuZeru , Dyne:b olic ,

Edubuntu , elem entaryOS, E live L inux, Emmabuntüs, Emm i OS, Endless OS, EnsoOS, Exe GNU/Linux, ExT iX , Fat-

dog64, Fedora Atom ic, Fedora Server, Fedora Workstation , FerenOS, FreeBSD , FreeDOS, Frugalware, G4L, G eckoL inux,

G entoo, GNewSense, GoboL inux, Gparted , G reen ieL inux, GRML, GuixSD , Haiku , Heads, Kali L inux, Kanotix , KaOS,

Knoppix , Kodach i, KolibriOS, Korora, Kubuntu , Kwort, L inux L ite, L inux M int, L iveRaizo, LMDE, Lubuntu , LXLE

OS, Macpup, M ageia , M akuluL inux, M anjaro, M atriux, M auiL inux, M enuetOS, M inerOS, M in iNo, M odicia , Musix , MX

Linux, Nas4Free, Neptune, NetBSD , Netrunner, N ixO s, NST , NuTyX , OpenInd iana, Op enMandriva, op enSUSE , O ra-

cleL inux, OSGeo live, OviOS, Parab ola CLI, Parab ola LXDE, Pardus, Parrot Home, Parrot Security, Parrot Studio , Par-

six , PCLinuxOS, PeachOSI, Pentoo, Pepp erm int, Pepp erm intOS, P inguy, P inguyOS, p lopL inux, PointL inux, Pop!_OS,

PORTEUS, Puppy Linux, PureOS, Q4OS, Qub esOS, Quirky, Raspb erry P i Desktop , ReactOS, Redcore, Rescatux, Reven-

geOS, RoboL inux, Rockstor, ROSA FRESH , Runtu , Sabayon, SalentOS, Salix , Scienti�cL inux, S iduction , S lackware, S lax ,

S liTaz, Solus, SolydK , SolydX , SparkyL inux, Springdale, StressL inux, SubgraphOS, SwagArch , Tails, Tanglu , T iny Core,

Trisquel, TrueOS, TurnKey Linux, Ubuntu , Ubuntu Budgie, Ubuntu Studio , UbuntuKylin , U ruk, VectorL inux, V ineL inux,

VoidL inux, Voyager, VyOS, WattO s, Xubuntu , Zentyal, Zenwalk , Zevenet, Zorin OS

Terminales de Linux en la Web

� https://www.tutorialspoint.com/execute_bash_online.php

� http://www.webminal.org/

� https://bellard.org/jsLinux/

� https://codeanywhere.com/

� https://copy.sh/v86/

� https://www.masswerk.at/jsuix/

� https://linuxcontainers.org/lxd/try-it/

� http://cb.vu/

[email protected] 489 Antonio Carrillo Ledesma, Et alii

Page 492: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Editores BAHS en la Web

� https://www.shellcheck.net/

� https://www.learnshell.org/

� https://www.tutorialspoint.com/execute_bash_online.php

� https://paiza.io/en/projects/new?language=bash

� https://www.jdoodle.com/test-bash-shell-script-online

� http://rextester.com/l/bash_online_compiler

Usar Linux en Formato Live Linux es uno de los sistemas operativospioneros en ejecutar de forma autónoma o sin instalar en la computadora,existen diferentes distribuciones Live -descargables para formato CD, DVD,USB- de sistemas operativos y múltiples aplicaciones almacenados en unmedio extraíble, que pueden ejecutarse directamente en una computadora,estos se descargan de la Web generalmente en formato ISO141, una de laslistas más completas de versiones Live esta en:

https://livecdlist.com

En el caso de tener un archivo ISO de algún sistema operativo (por ejem-plo ubuntu-11.10-desktop-i386.iso) y se quiere ejecutar su contenido desdeuna máquina virtual con QEMU/KVM sólo es necesario usar:

$ kvm -m 512 -cdrom ubuntu-11.10-desktop-i386.iso

en este ejemplo usamos en KVM la arquitectura por omisión y memoriade 512 MB (-m 512).

Knoppix es una versión Live ampliamente conocida y completa, esta sepuede descargar de:

http://mmc.geo�sica.unam.mx/Replicas/knoppix/

y usar mediante:

$ kvm -m 1024 -cdrom KNOPPIX_V8.2-2018-05-10-EN.iso

aquí se usa la arquitectura por omisión y memoria de 1024 MB.141Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB.

[email protected] 490 Antonio Carrillo Ledesma, Et alii

Page 493: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Usar Máquinas Virtuales de Linux Existen diversos proyectos que per-miten descargar decenas de máquinas virtuales listas para ser usadas, paralos proyectos VirtualBox y VMWare (y por ende para KVM/QEMU), estasse pueden descargar de múltiples ligas, algunas de ellas son:

https://www.osboxes.orghttps://virtualboxes.org/images/

Si desargamos y descomprimimos el archivo lubuntu1210.7z (véase sec-ción 17.9), esto dejará la imagen de VirtualBox de LUBUNTU cuyo nom-bre es lubuntu1210.vdi. Entonces esta imagen la usaremos directamente enKVM/QEMU, mediante:

$ kvm -m 2000 -hda lubuntu1210.vdi

Nota: esta imagen usa como usuario y clave de acceso: lubuntu/lubuntu

[email protected] 491 Antonio Carrillo Ledesma, Et alii

Page 494: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

17 Apéndice E: Creación, Uso y OptimizacióndeMáquinas Virtuales Usando QEMU/KVM

Entendamos por una máquina virtual (véase sección 16) a un programa decómputo que simula a una computadora, en la cual se puede instalar y usarotros sistemas operativos de forma simultánea como si fuese una computadorareal sobre nuestro sistema operativo huésped. Hoy en día, tenemos a nuestradisposición varios manejadores de máquinas virtuales (MV), algunos de ellosson los siguientes:

� Virtualbox (véase [49]) es un Software desarrollado por Oracle, se tratade un Software multiplataforma capaz de virtualizar prácticamente latotalidad de sistemas operativos con arquitectura x86/AMD64. Labase de este Software dispone de una licencia GPL2 (véase 14.1.1),mientras que el Pack de extensiones que añaden funcionalidades estánbajo licencia privativa. Virtualbox es gratuito para un uso no comercial.

� Vmware Workstation Player (véase [50]) es un Software privativo mul-tiplataforma desarrollado por EMC corporation y es ampliamente usa-do en el entorno profesional en las áreas del Cloud Computing entremuchas otras. Al igual que Virtualbox, esta máquina virtual nos per-mite virtualizar una gran diversidad de sistemas operativos. Vmwaredispone de muchas soluciones de virtualización y prácticamente todasson de pago, no obstante Vmware Workstation Player es gratuita paraun uso no comercial.

� Parallels (véase [53]) es un Software multiplataforma, es usado fre-cuentemente por los usuarios del sistema operativo OS X de Apple quedesean virtualizar el sistema operativo Windows. Esta máquina vir-tual es de pago y únicamente puede virtualizar los sistemas operativosWindows y Mac OS.

� Windows Virtual PC (véase [51]) es un Software gratuito y privativopropiedad de Microsoft que se puede usar tanto en Windows como enMac OS. Virtual PC esta destinado únicamente a virtualizar sistemasoperativos Windows.

� QEMU/KVM (véase [46]) es un Software libre multiplataforma quedispone de licencia GPL (véase 14.1.1). Además de virtualizar un gran

[email protected] 492 Antonio Carrillo Ledesma, Et alii

Page 495: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

número de sistemas operativos, permite emular diversas arquitecturascomo por ejemplo X86, x86-AMD64, MIPS, Arm, PowerPC, etc.

¿Qué Manejadores Libres de Máquinas Virtuales Podemos Insta-lar?

QEMU Es un emulador de procesadores basado en la traducción diná-mica de binarios -conversión del código binario de la arquitectura fuente encódigo entendible por la arquitectura huésped-. QEMU también tiene capaci-dades de virtualización dentro de un sistema operativo, ya sea GNU/Linux,Windows, o cualquiera de los sistemas operativos admitidos; de hecho esla forma más común de uso. Esta máquina virtual puede ejecutarse encualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC,MIPS, SPARC, etc.). esta licenciado en parte con la LGPL y la GPL deGNU (véase 14.1.1).El objetivo principal es emular un sistema operativo dentro de otro, sin

tener que reparticionar el disco duro, empleando para su ubicación cualquierdirectorio dentro de éste. El programa no dispone de GUI142, pero existe otroprograma llamado QEMU Manager que puede hacer de interfaz grá�ca si seutiliza QEMU desde Windows. También existe una versión para GNU/Linuxllamada Qemu-Launcher. En Mac OS X puede utilizarse el programa Qque dispone de una interfaz grá�ca para crear y administrar las máquinasvirtuales.

Kernel-based Virtual Machine (KVM) Máquina virtual basadaen el núcleo es una solución para implementar virtualización completa conLinux. esta formada por un módulo del núcleo (con el nombre kvm.ko) yherramientas en el espacio de usuario, siendo en su totalidad Software libre(véase 14.1.1). El componente KVM para el núcleo esta incluido en Linuxdesde la versión 2.6.20. El proyecto KVM esta incluido en el proyecto QEMU.

Las características principales de KVM/QEMU son:

� Cada máquina virtual se implementa como un proceso

� KVM/QEMU aprovecha el modelo de seguridad estándar de Linux:SELinux/AppArmor143. Estos modelos proporcionan el aislamiento y

142Graphical User Interface (Interfaz grá�ca del usuario).143AppArmor fue creado en parte como alternativa a SELinux.

[email protected] 493 Antonio Carrillo Ledesma, Et alii

Page 496: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

el control de recursos necesarios

� Hereda las características de gestión de memoria de Linux. La memoriautilizada por una MV se gestionará de la misma forma que la de otroproceso, podrá ser guardada en disco, utilizada en páginas grandes ysoporte NUMA144 de Linux permitiendo el uso de MVs de grandescantidades de memoria

� Soporta las últimas características de virtualización de memoria pro-porcionada por los fabricantes como EPT (Extended Page Table de In-tel) ó RVI (Rapid Virtualization Indexing de AMD). Estas tecnologíaspersiguen reducir el uso de CPU y aumentar el rendimiento de losHipervisores

� El compartir páginas de memoria se consigue a través de la carac-terística añadida a Linux llamada Kernel Same-page Merging (KSM).Escaneando las páginas de memoria de cada MV, si dos páginas coin-ciden, KSM las une en una sola página que se comparte entre las dosmáquinas, almacenando únicamente una copia y si en cualquier mo-mento, una de las MV modi�ca la página, le da una copia privada

� Permite utilizar cualquier tipo de almacenamiento soportado por Linuxpara las imágenes de las MVs

� Soporta el almacenamiento de �cheros distribuidos como GFS2145, OCFS146o GlusterFS147. De esta forma las imágenes de las MV pueden ser com-partidas por varios Hipervisores

� Las imágenes de disco soportan aprovisionamiento bajo demanda evi-tando tener que reservar todo el espacio inicialmente asignado. El for-mato nativo de KVM es QCOW2148, el cual permite la realización de

144Non-Uniform Memory Access (acceso a memoria no uniforme).145Global File System 2 es un sistema de archivos compartidos para clusters en Linux.146Oracle Cluster File System es un sistema de archivos de discos compartidos o sistemade archivos distribuidos para clústers de servidores de sistemas GNU/Linux desarrolladopor Oracle Corporation distribuidos bajo los términos de la GNU General Public License.147Gluster File System es un sistema multiescalable de archivos NAS desarrollado ini-cialmente por Gluster Inc.148QEMU Copy-On-Write el formato de imagen para máquinas virtuales segunda versiónde QCOW.

[email protected] 494 Antonio Carrillo Ledesma, Et alii

Page 497: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Snapshots149, compresión y cifrado

� Permite migraciones en vivo (Live Migrations), estas característicaspermite mover una MV en ejecución entre servidores físicos (Hipervi-sores) sin interrupción del servicio. Estas migraciones son transparentespara el usuario, ya que la MV permanece encendida, las conexiones dered activas y las aplicaciones en ejecución mientras la máquina se rea-comoda en un nuevo servidor

� KVM/QEMU soporta MV de hasta 255 CPUs y 4 TB de RAM. Y elrendimiento de aplicaciones como Oracle, SAP, LAMP, MS Exchangesobre MV puede oscilar entre el 95% y el 135% comparado con su ejecu-ción en servidores físicos, se ha conseguido ejecutar hasta 600 máquinasvirtuales en un sólo servidor físico

� Soporte de sistemas operativos invitados como Windows, Linux, An-droid, Familia BDS (OpenBSD, FreeBSD, NetBSD), Solaris, etc.

� Es ampliamente usado en varios proyectos sobre Cloud Computingcomo OpenStack, CloudStack, OpenNebula, etc.

En esta sección mostraremos como crear, con�gurar, optimizar y trabajarcon las máquinas virtuales mediante KVM/QEMU en Debian GNU/Linuxpara probar imágenes ISO150 descargadas de la red, instalar y usar máquinasvirtuales para Windows y Linux entre otros.

17.1 Tipo de Virtualización Soportado por la MáquinaHuésped

Primero es necesario saber si nuestro equipo soporta la virtualización porHardware o debemos usar la virtualización por Software, suponiendo quetenemos acceso a una máquina con Linux o ha sido inicializada usando unaversión «viva (Live)» 151 de CD, DVD o USB de Linux para iniciar la com-putadora.

149Es una copia instantánea del sistema de archivos que contiene a la máquina virtual.150Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB.151Una opción es KNOPPIX, es una distribución de Linux basada en Debian y usa LXDEcomo entorno de escritorio, pude ser descargada de http://www.knopper.net/knoppix/

[email protected] 495 Antonio Carrillo Ledesma, Et alii

Page 498: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Entonces, para revisar si hay soporte en Hardware para la virtualización,podemos usar cualquiera de estas cuatro opciones:1) Buscar información en: /proc/cpuinfo, mediante:

$ egrep "vmxjsvm" /proc/cpuinfo

si se soporta la virtualización por Hardware aparecerá -entreotras152- la bandera

Procesadores INTEL: vmxProcesadores AMD: svm

2) Podemos usar lscpu que nos indicará las características de nuestroequipo, en particular en el apartado Virtualization nos indicará si es sopor-tada o no, para ello usamos:

$ lscpu j grep Virtualization

3) Podemos usar cpu-checker, instalando:

# apt install cpu-checker

y para conocer si es soportado, usamos:

$ kvm-ok

4) Podemos usar libvirt-client, instalando:

# apt installlibvirt-clients

y para conocer si es soportado, usamos:

$ virt-Host-validate152El signi�cado de las banderas de /proc/cpuinfo esta descrita en la sección 17.12.

[email protected] 496 Antonio Carrillo Ledesma, Et alii

Page 499: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Instalar y Usar Máquinas Virtuales Por omisión, los equipos de tec-nología de bajo desempeño no soportan la virtualización a nivel Hardware,pero siempre es posible su emulación mediante QEMU.Si la computadora soporta virtualización a nivel Hardware es posible usar

KVM (o en QEMU la bandera -enable-kvm). Según la versión de Linux,KVM puede existir como un paquete real o como uno virtual, si es virtual,al instalar KVM lo que realmente se instala es QEMU y al ejecutar KVMpor ejemplo

$ kvm ...

es remplazado por

$ qemu-system-x86_64 -enable-kvm ...

Estos tienen la misma sintaxis de uso, y para nuestros ejemplos sólo esnecesario remplazar qemu-system-x86_64 por kvm y en ambos siempre seusará qemu-img para manipular las imágenes.Instalación de KVM en Debian GNU/Linux (recomendado para virtua-

lización por Hardware) es mediante:

# apt install qemu-kvm

Instalación de QEMU en Debian GNU/Linux (permite emular diversasarquitecturas de Hardware) es mediante:

# apt install qemu

Observación 1 El desempeño de la emulación versus virtualización por Hard-ware es de varios ordenes de magnitud menor, pero una imagen creada concualquiera de ellos se puede usar con los otros virtualizadores. KVM sólosoporta virtualizar arquitecturas X86 y 64 de INTEL y AMD, QEMU emu-la diversas arquitecturas, como son ARM, CRIS, i386, M68k, MicroBlaze,MIPS, PowerPC, SH4, SPARC y x86-64.

[email protected] 497 Antonio Carrillo Ledesma, Et alii

Page 500: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Problemas Comunes al Virtualizar Si se detecta la bandera para vir-tualización por Hardware y al tratar de usar KVM marca:

> open /dev/kvm: Permission denied> Could not initialize KVM, will disable KVM support

sólo hay que agregar, el login del usuario al grupo kvm en el archivo/etc/group.

Si marca:

> open /dev/kvm: No such �le or directory> Could not initialize KVM, will disable KVM support

sólo hay que activar en el BiOS la virtualización por Hardware

En KVM, al usar un procesador y solicitar la emulación de otro, es comúnque marque que ciertas banderas no son soportadas, por ejemplo al usar unprocesador AMD y solicitar la emulación de un procesador Nehalem IntelCore i7 9xx (Nehalem Class Core i7) mediante:

$ kvm -cpu Nehalem -cdrom TinyCore-current.iso153

ó

$ qemu-system-x86_64 -enable-kvm -cpu Nehalem -cdrom nTinyCore-current.iso

es común que marque:

warning: Host doesn�t support requested feature:

CPUID.01H:ECX.ssse3 [bit 9]

warning: Host doesn�t support requested feature:

CPUID.01H:ECX.sse4.1.sse4_1 [bit 19]

153TinyCoreLinux es un sistema operativo minimalista centrado en proveer un sistemabase con núcleo Linux � es de tamaño de 11,16 MB y 106 Mb� , puede ser descargado dehttps://distro.ibiblio.org/tinyCorelinux

[email protected] 498 Antonio Carrillo Ledesma, Et alii

Page 501: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

warning: Host doesn�t support requested feature:

CPUID.01H:ECX.sse4.2.sse4_2 [bit 20]si es necesario usar dichas banderas en el CPU, entonces usar:

$ qemu-system-x86_64 -cpu Nehalem -cdromTinyCore-current.iso

en este caso avisará que:

warning: TCG doesn�t support requested feature:

CPUID.01H:EDX.vme [bit 1]

i.e. soporta el chip, pero no la virtualización (vme: Virtual Mode Exten-sions [8086 mode]), se sacri�ca velocidad en aras de tener las prestacionesdel chip emulado.

17.2 Salida Grá�ca de la Virtualización Usando VNC

Si se usa el protocolo de Computación Virtual en Red (Virtual NetworkComputing VNC154) como visualizador de la salida grá�ca de KVM/QEMU,debemos agregar -vnc :n a la línea de comandos, donde n es el número depantalla a usar, esto se hace mediante:

$ kvm -m 128 -cdrom TinyCore-current.iso -cpu kvm64 n-vnc :0 &

154Virtual Network Computing (VNC) es un programa de Software libre basado en unaestructura cliente-servidor que permite observar las acciones del ordenador servidor re-motamente a través de un ordenador cliente. VNC no impone restricciones en el sistemaoperativo del ordenador servidor con respecto al cliente, es posible compartir la pantallade una máquina con cualquier sistema operativo que admita VNC conectándose desde otroordenador o dispositivo que disponga de un cliente VNC portado, además permite usarInternet de baja velocidad en la visualización.Para visualizar la salida grá�ca usando VNC se debe instalar algún cliente de VNC, en

Debian Linux existen una gran variedad de clientes, uno de ellos es tigervnc-viewer, y seinstala mediante:

# apt install tigervnc-viewer

Otras opciones son vncviewer y xtightvncviewer. Ninguno de ellos requieren con�gu-ración adicional al ser instalados.

[email protected] 499 Antonio Carrillo Ledesma, Et alii

Page 502: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

y para ver la salida grá�ca155 en la misma máquina, usamos:

$ vncviewer 0

Si se desea ver la salida grá�ca en otro equipo conectado en red (puedeser con sistema operativo Windows, Linux o MAC OS que tenga instaladovncviewer156), es recomendable hacer ajustes en la calidad de la salida grá�caa mostrar y que no se vea afectada por la velocidad del internet, si suponemosque el servidor de la máquina virtual es 192.168.13.230, entonces lanzamosla máquina virtual mediante:

$ kvm -m 128 -cdrom TinyCore-current.iso -cpu kvm64 n-vnc :0,lossy &

y para ver la salida grá�ca en cualquier otro equipo interconectado porred, usamos:

$ vncviewer 192.168.13.230:0 QualityLevel=3

donde la calidad del video QualityLevel=n157, es de 0 a 9, donde 0 es lamás pobre y 9 la más alta calidad de la salida grá�ca.

Nota: En caso que el cursor del Mouse de la máquina virtual no coincidacon el del equipo an�trión es necesario agregar: -usb -device usb-tablet, allanzar la máquina virtual:

$ kvm -m 128 -cdrom TinyCore-current.iso -cpu kvm64 n-usb -device usb-tablet -vnc :0 &

y para ver la salida grá�ca (como se comento antes) usamos:

$ vncviewer 0155Después de que es ejecutado el comando vncviewer, aparecerá la ventana de la máquinavirtual (optimizada para ser usada en conexiones de red de baja velocidad), en ella sepuede usar la máquina virtual como si estuviese instalada en su equipo. Se puede cerrar laventana de visualización de VNC y la máquina virtual seguirá trabajando en el servidor;de ser necesario se puede abrir el cliente de VNC tantas veces como requiera. Para apagarla máquina virtual en el servidor, se debe de solicitar a esta que se apague mediante elmenú de inicio de la virtualización.156Otros proyectos multiplataforma son: Zoho Assist, TigerVNC, RealVNC,TeamViewer, Remmina, NoMachine, Apache Guacamole, XRDP, FreeNX, X2Go, Xpra,entre otros.157El valor por omisión es de 3 para una para una conexión de Internet de baja velocidadcomún en los hogares, en caso necesario usar un valor de 0, que permite usar VNC enconexiones de muy baja velocidad.

[email protected] 500 Antonio Carrillo Ledesma, Et alii

Page 503: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Uso de SSH para Interactuar con una Máquina Virtual de FormaRemota Si se tiene acceso a un servidor mediante SSH 158 en el cual esteactivo X11 Forwarding159 e instalado KVM/QEMU, entonces es posible eje-cutar una máquina remota en el servidor y visualizar la salida grá�ca en lamáquina donde se ejecuta el comando SSH160.Primero, al hacer la conexión mediante SSH, es necesario solicitar en la

conexión se habilite X11 Forwarding mediante:

$ ssh -X -l usr 192.168.13.230

donde <usr> es el nombre del usuario en el equipo <192.168.13.230>.Después de hacer la conexión, ya podemos ejecutar la máquina virtual comose indico antes:

$ kvm -m 128 -cdrom TinyCore-current.iso &

y la salida grá�ca de la máquina virtual se trasmitirá por red de formasegura usando la tunelización de SSH.

17.3 Usando un Sistema Operativo Live como unaMáquinaVirtual

Linux es uno de los sistemas operativos pioneros en ejecutar de forma autóno-ma o sin instalar en la computadora, existen diferentes distribuciones Live -descargables para formato CD, DVD, USB161- de sistemas operativos y múlti-ples aplicaciones almacenados en un medio extraíble, que pueden ejecutarse158SSH (o Secure SHell) es un protocolo que facilita las comunicaciones seguras entre dossistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarsea un host remotamente. A diferencia de otros protocolos de comunicación remota talescomo FTP o Telnet, SSH encripta la sesión de conexión, haciendo imposible que alguienpueda obtener contraseñas no encriptadas.159Es el servidor grá�co que usan casi todas las distribuciones Linux. Este servidorpermite, entre otras cosas, Forwarding a través de SSH. Esto signi�ca que es posibleejecutar aplicaciones grá�cas de una máquina remota exportando el Display a nuestroescritorio. Es decir, la aplicación se ejecuta en el servidor remoto, pero la interfaz grá�cala visualizamos en nuestro escritorio local.160Es recomendable usar VNC en conjunción con SSH, de lugar de SSH puro, ya queel consumo de red en la salida grá�ca sin VNC en la conexión SSH es excesivo para lamayoría de las infraestructuras de Internet.161Para generar un dispositivo USB con la imagen contenida en un archivo ISOpodemos usar el Software ETCHER, descargable para Linux, Windows y Mac OS desdehttps://etcher.io/

[email protected] 501 Antonio Carrillo Ledesma, Et alii

Page 504: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

directamente en una computadora, estos se descargan de la Web general-mente en formato ISO162, una de las listas más completas de versiones Liveesta en https://livecdlist.com

En el caso de tener un CD, DVD o USB Live y se quiera ejecutar su con-tenido desde una máquina virtual con QEMU/KVM solo es necesario montarel dispositivo. Para ello, primero es necesario conocer donde es montado porel sistema operativo, mediante:

$ df

suponiendo que el dispositivo es /dev/sddx, entonces usar ese dispositivoen KVM mediante:

$ kvm -m 512 -usb /dev/sddx

en este ejemplo usamos el virtualizador con la arquitectura por omisióny memoria de 512 MB (-m 512).

17.4 Usando un Archivo ISO como una Máquina Vir-tual

En el caso de tener un archivo ISO163 de algún sistema operativo (ubuntu-11.10-desktop-i386.iso) y se quiera ejecutar su contenido desde una máquinavirtual con QEMU/KVM solo es necesario usar:

$ kvm -m 512 -cdrom ubuntu-11.10-desktop-i386.iso

en este ejemplo usamos al virtualizador con la arquitectura por omisióny memoria de 512 MB (-m 512).

162Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB.163Una imagen ISO es un archivo informático donde se almacena una copia exacta de unsistema de archivos y de esta se puede generar una imagen para CDROM, DVD o USB.

[email protected] 502 Antonio Carrillo Ledesma, Et alii

Page 505: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

17.5 Creación de Máquinas Virtuales

En esta sección mostraremos varios ejemplos completos para crear máquinasvirtuales de Linux y Windows mediante el uso de KVM/QEMU.

Ejemplo 1 Instalación y uso de una máquina virtual para Debian GNU/Linuxestable a partir del archivo ISO164, para ello, primero necesitamos:Generar el disco virtual que la contendra, por ejemplo de 10 GB con el

nombre debianStable.img mediante:$ qemu-img create -f qcow2 debianStable.img 10G

Después, instalar la imagen de Debian estable165 en el disco virtual genera-do en el paso anterior, solicitando a KVM que una vez terminada la insta-lación no haga el reinicio de la máquina virtual, esto mediante:

$ kvm -no-reboot -boot d -cdrom debian-802-i386-netinst.iso n-hda debianStable.img -m 400

Después de la instalación, es conveniente compactar y desfragmentar laimagen usando:

$ qemu-img convert -c debianStable.img -O qcow2 debian.imgAhora podemos usar la máquina virtual con la imagen desfragmentada

y compactada de Debian estable solicitando que tenga 800 MB de RAM,mediante:

$ kvm -hda debian.img -m 800

Observación 2 La de�nición de la toda la máquina virtual -el disco vir-tual que contiene el sistema operativo instalado y su respectiva paquetería-esta contenida en un único archivo que puede ser copiado, almacenado o dis-tribuido. En esto radica el poder de las máquinas virtuales, una vez hecha ycon�gurada, se pude usar en donde se requiera y la cantidad de veces que lonecesitemos.Al ser un solo archivo la máquina virtual, es común tener múltiples archivos

que conserven los distintos estados conforme se instalen o con�guren paque-tes de la misma. De esta forma se agiliza la recuperación tras algún fallo y

164Diversas imágenes ISO del proyecto Linux Debian se pueden descargar de:https://www.debian.org/CD/165Instrucciones paso a paso de como instalar, con�gurar y optimizar Linux De-bian están disponibles en múltiples lugares de la red, pero se pueden descargar de:http://132.248.182.159/Replicas/debianInstall/

[email protected] 503 Antonio Carrillo Ledesma, Et alii

Page 506: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

el poder hacer modi�caciones de la máquina base o restaurar una máquina aalgún punto de con�guración anterior, con tan solo usar la respectiva copiaalmacenada.Además, al usar KVM/QEMU se tiene la certeza de que la máquina vir-

tual creada en una distribución de Linux puede ser usada en cualquier otradistribución bajo cualquier arquitectura de Hardware soportada por Linux -que tenga instalada una versión igual o superior de KVM/QEMU- sin cambioalguno.

Ejemplo 2 Instalación y uso de una máquina virtual para Windows XP, eneste caso necesitamos:Crear el disco virtual, por ejemplo de 10 GB mediante:$ qemu-img create -f qcow2 WindowsXP.img 10G

Hacer la instalación básica de Windows XP a partir, por ejemplo del ISO,mediante:

$ kvm -no-reboot -boot d -hda WindowsXP.img -m 400 n-localtime -cdrom es_winxp_pro_with_sp2.iso

Y concluir la instalación de Windows XP mediante:$ kvm -no-reboot -boot c -hda WindowsXP.img -m 400 n-localtime -cdrom es_winxp_pro_with_sp2.iso

Después de la instalación, es conveniente compactar y desfragmentar laimagen usando:

$ qemu-img convert -c WindowsXP.img -O qcow2 Windows.imgAhora podemos usar la máquina virtual con la imagen desfragmentada y

compactada de Windows XP usando:$ kvm -boot c -hda Windows.img -m 400 -localtime

Ejemplo 3 Una vez que se cuenta con una imagen de Windows, podemosinstalar por ejemplo Windows O¢ ce, donde tenemos dos opciones a saber:1) Instalar Windows O¢ ce 2003 a partir del ISO de O¢ ce mediante:$ kvm -localtime -m 300 -boot c -hda Windows.img n-cdrom O¢ ce-2003.iso

2) Si se tiene el CD o DVD, entonces podemos usar:$ kvm -localtime -m 300 -boot c -hda Windows.img n-cdrom /dev/cdrom/

[email protected] 504 Antonio Carrillo Ledesma, Et alii

Page 507: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Observación 3 En el caso de Windows hay que usar el mismo Hardwaresiempre, en caso contrario marca que es necesario registrar el sistema opera-tivo nuevamente al ejecutarlo en otra arquitectura, para evitar este problema,es necesario usar la bandera -cpu al momento de crearlo y usarlo, por ejem-plo:Usar máquina virtual de Windows en QEMU y KVM usando el mismo

Hardware mediante alguna de estas opciones:$ kvm -localtime -m 400 -boot c -hda Windows.img -cpu qemu32$ qemu-system-x86_64 -localtime -m 400 -boot c -hda nWindows.img -cpu qemu32$ qemu-system-x86_64 -enable-kvm -localtime -m 400 -boot c n-hda Windows.img -cpu qemu32

Para conocer los CPUs soportados usar:$ kvm -cpu ?

Para conocer las máquinas soportadas usar:$ kvm -machines ?

Ejemplo 4 Otro ejemplo completo de instalación y uso de una máquina vir-tual para Windows 7, en este caso necesitamos:Crear el disco virtual, por ejemplo de 15 GB mediante:$ qemu-img create -f qcow2 Windows7.img 15G

Hacer la instalación básica de Windows 7 a partir, por ejemplo del DVDmediante:

$ kvm -no-reboot -cdrom /dev/cdrom -boot d -hda Windows7.img n-m 500 -localtime

Concluir la instalación de Windows 7 mediante:$ kvm -no-reboot -boot c -hda Windows7.img -cdrom /dev/cdrom n-m 500 -localtime

Después de la instalación, es conveniente compactar y desfragmentar laimagen usando:

$ qemu-img convert -c Windows7.img -O qcow2 Windows.imgAhora podemos usar la máquina virtual con la imagen desfragmentada y

compactada de Windows 7 mediante:$ kvm -boot c -hda Windows.img -m 500 -localtime

[email protected] 505 Antonio Carrillo Ledesma, Et alii

Page 508: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

17.6 Uso de Virtualización Dentro de Otra Virtual-ización

Esta operación parece muy exótica y que rara vez se necesitará. Pero por lasconstantes vulnerabilidades descubiertas en los sistemas operativos, es muycomún tener la última versión estable del sistema operativo para obtener elmejor desempeño posible del Hardware y la máxima seguridad posible en elsistema an�trión y dentro de el, ejecutar una o más versiones de sistemas ope-rativos huésped -no necesariamente actualizados- para dentro de ellos correrotras versiones de sistemas operativos obsoletos o vulnerables, permitiendola estabilidad en entornos de producción, así como migraciones en vivo entreservidores. Esto se logra por ejemplo, para un procesador AMD al usar:

$ kvm -m 128 -hda Linux.img -cpu phenom,+svm

Figura 5: Sobre un equipo AMD de gama baja y 4 GB de RAM, se muestrael uso de una virtualización sobre otra virtualización y corriendo dentro deella, una máquina virtual con Windows XP en la cual se muestra el uso deRAM y CPU dentro de la misma.

De esta forma, los sistemas virtualizados huésped heredan la capacidad devirtualizar por Hardware del an�trión, acelerando los procesos anidados de

[email protected] 506 Antonio Carrillo Ledesma, Et alii

Page 509: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

las virtualizaciones, aumentando las posibilidades de uso de la virtualizaciónal permitir explotar de forma e�ciente el gran poder computacional que díaa día se desarrolla166.

17.7 Manipulación del Estado de la Máquina Virtual

La virtualización permite manipular el estado de una máquina en ejecución,por ejemplo, una vez que se esta corriendo una máquina virtual:

$ kvm -boot c -hda Windows.img -m 400 -localtime

es posible manipular el estado de la misma en algún punto de su ejecuciónal usar la combinación de teclas:

[Ctrl] + [Alt] + [2]

ya en ella, podemos detener y grabar el estado de la máquina virtual:

(qemu) savevm test.vm(qemu) quit

para que en otro momento, podamos restaurar la máquina virtual talcomo estaba cuando esta se detuvo mediante:

$ kvm -boot c -hda Windows.img -m 400 -localtime n-loadvm test.vm

17.8 Optimización de Imágenes

Las imágenes de disco de KVM/QEMU después de ser generadas -al instalaralgún sistema operativo o paquetes-, tienen muchos archivos internos dis-persos, para optimizar su rendimiento es recomendable convertir la imagendispersa en una que no tenga esta propiedad, mediante:

$ qemu-img convert disk-sparse.img -O qcow2 disk.img

166Es común que un sólo equipo de cómputo cuente con hasta 3 TB de RAM y variosprocesadores por tarjeta madre, donde cada procesador tiene decenas de Cores.

[email protected] 507 Antonio Carrillo Ledesma, Et alii

Page 510: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

o puede ser compactada y optimizada mediante:

$ qemu-img convert -c disk-sparse.img -O qcow2 disk.img

Para descompactar una imagen se hace mediante:

$ qemu-img convert disk-compact.img -O qcow2 disk.img

17.8.1 Trabajar con una Imagen Virtual sin que se Altere

En algunos casos, es deseable que al trabajar con una máquina virtual, dejarla información de la máquina virtual base intacta y guardar los cambios quese requieran en otro archivo, una forma es hacer una copia y trabajar con lacopia de esta o crear un archivo que almacene por separado los cambios a laimagen, para esto último usar:

$ qemu-img create -b debianStable.img -f qcow2 debian.img

y trabajar con la imagen resultante (para este ejemplo debian.img) comocon cualquier otra imagen, de esta forma, todos los cambios al trabajar seránalmacenados en debian.img dejando intacta la imagen base debianStable.img.

17.8.2 Aumento de Desempeño

La virtualización normalmente es rápida, pero en algunas circunstancias sehace lenta, esto es ajeno a KVM/QEMU y generalmente es por la constantegrabación de pequeños paquetes de datos al disco por parte de la máquinavirtual.Para optimizar el desempeño de la máquina virtual es posible pedirle a

KVM/QEMU que trate de usar un Cache y baje lo menos posible a discola información, esto aumentará notablemente el desempeño de la máquinavirtual.Para aumentar el desempeño, en lugar de usar:

$ kvm -boot c -hda Win.img -m 400

Usar:

[email protected] 508 Antonio Carrillo Ledesma, Et alii

Page 511: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ kvm -drive �le=Win.img,Cache=writeback,media=disk n-m 400

En el caso de usar un archivo ISO, usar:

$ kvm -drive �le=fedora.iso,Cache=writeback,media=cdromn-m 512

Ejemplo 5 Instalación y uso de una máquina virtual (por ejemplo paraUBUNTU 11.10) usando el Cache, en este caso necesitamos:Generar un disco virtual, por ejemplo de 10 GB mediante:$ qemu-img create -f qcow2 disco.img 10G

Instalar la imagen de UBUNTU en un disco virtual:$ kvm -no-reboot -boot d -drive �le=ubuntu-11.10-desktop- ni386.iso,Cache=writeback,media=cdrom -drive �le=disco.img, nCache=writeback,media=disk -m 500

Después de la instalación, es conveniente compactar y desfragmentar laimagen usando:

$ qemu-img convert -c disco.img -O qcow2 Ubuntu.imgAhora ya podemos utilizar la imagen y hacer uso del Cache para acelerar

el desempeño mediante:$ kvm -drive �le=Ubuntu.img,Cache=writeback,media=disk -m 500

Mejorando el Desempeño del Vídeo de la Máquina Virtual Poromisión se tiene un tarjeta grá�ca de pobre desempeño en la máquina virtual,si se necesita mayor resolución en la salida grá�ca, una opción es usar laopción -VGA, donde dos de sus posibilidades es STD o VMWARE usándosecomo:

$ kvm -drive �le=fedora.iso,Cache=writeback,media=cdromn-m 512 -vga std

o

[email protected] 509 Antonio Carrillo Ledesma, Et alii

Page 512: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ kvm -drive �le=fedora.iso,Cache=writeback,media=cdromn-m 512 -vga vmware

hay otras opciones que permiten inclusive el uso de GPUs reales o vir-tuales. Para ver detalles, favor de revisar el manual del usuario del proyectoQEMU.

Uso de Tarjeta de Sonido Dentro de KVM/QEMU Por omisión eluso de la tarjeta de audio no esta habilitada, para habilitarla usar en la líneade comandos: -soundhw sb16, es1370, adlib, por ejemplo:

$ kvm -boot c -hda Windows.img -m 400 -localtime n-soundhw sb16,es1370,adlib

hay otras opciones, para ver estas, favor de revisar el manual del usuariodel proyecto QEMU.

Algunas Otras Opciones Lanzar KVM con dos procesadores, 1536 MBde RAM, dispositivo de red e1000, MAC addres167 52:54:00:12:34:50, ini-ciando el DHCP168 en la dirección 10.0.2.40 y reenviando la salida del puerto22 de la máquina virtual al 5555 del equipo huésped, mediante:

$ kvm -smp 2 -drive �le=debianStableTmp.img,Cache=writeback,media=disk -m 1536 -device e1000,netdev=user.0,mac=52:54:00:12:34:50 -netdev user,id=user.0,dhcpstart=10.0.2.40,Hostfwd=tcp::5555-:22 &

167En las redes de computadoras, la dirección MAC (siglas en inglés de Media AccessControl) es un identi�cador de 48 bits (6 bloques de dos caracteres hexadecimales (4 bits))que corresponde de forma única a una tarjeta o dispositivo de red. Se la conoce tambiéncomo dirección física, y es única para cada dispositivo.168Protocolo de con�guración dinámica de Host (en inglés: Dynamic Host Con�gurationProtocol, también conocido por sus siglas de DHCP) es un protocolo de red de tipocliente/servidor mediante el cual un servidor DHCP asigna dinámicamente una direcciónIP y otros parámetros de con�guración de red a cada dispositivo en una red para quepuedan comunicarse con otras redes IP.

[email protected] 510 Antonio Carrillo Ledesma, Et alii

Page 513: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

o lanzar kvm con dos procesadores, 1536 MB de RAM, dispositivo de rede1000 y reenviando la salida del puerto 22 de la máquina virtual al 5555 delequipo huésped de la siguiente forma:

$ kvm -smp 2 -drive �le=debianStableTmp.img,Cache=writeback,media=disk -m 1536 -device e1000,netdev=user.0 -netdev user,id=user.0,Hostfwd=tcp::5555-:22 &

el redireccionamiento de puerto puede ser hecho también con:

$ kvm -m 512 -cpu phenom,+svm -hda b.qcow2 -redir tcp:5555:10.0.2.15:22 &

Si se desea usar ssh y scp en la máquina virtual usar:

# apt install openssh-server

acceder usando:

$ ssh -p 5555 root@localHost

hacer copia del equipo huésped a la máquina virtual mediante:

$ scp -P 5555 �le.txt usr@localHost:/tmp

Algunos Problemas Comunes con la Red Por lo general las máquinasvirtuales detectan correctamente la red, pero en el caso de Windows esto nosiempre pasa, por ello es común emular una tarjeta de red lo más genéricaposible, esta puede ser RTl8139, para ello es necesario que al lanzar lamáquina virtual que se indique:

�net nic;model = rtl8139 � net user

por ejemplo mediante:

$ kvm -boot c -hda WindowsXP.img -m 400 -localtime n-net nic,model=rtl8139 -net user

algunas de las otras opciones para la red son: NE2000 PCI, RTL8139,PCNET y NE2000 ISA.

[email protected] 511 Antonio Carrillo Ledesma, Et alii

Page 514: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Direcciones de Red Usadas en QEMU/KVM

Gateway/DHCP/TFTP Server: 10:0:2:2DNS Server: 10:0:2:3Samba Server: 10:0:2:4Netmask: 255:255:255:0Guest IP: cualquier dirección superior a 10:0:2:15

17.9 Uso deMáquinas Virtuales de VirtualBox en KVM/QEMU

Virtualbox es un programa desarrollado por Oracle ampliamente usado sobretodo para la plataforma Windows. Se trata de un Software multiplataformacapaz de virtualizar prácticamente la totalidad de sistemas operativos conarquitectura x86/amd64. La base de este Software dispone de una licenciaGPL2 (véase 14.1.1), mientras que el pack de extensiones que añaden fun-cionalidades estan bajo licencia privativa, Virtualbox es gratuito para un usono comercial.VirtualBox (https://www.virtualbox.org/) dispone de diversas imágenes

funcionales listas para descargar y usar varias decenas de distribuciones deLinux (https://virtualboxes.org/images/ y https://www.osboxes.org).

Interacción de VirtualBox en KVM/QEMU Ya que VirtualBox esampliamente usado, KVM/QEMU ha desarrollado formas de usar, convertiry migrar máquinas de VirtualBox y otros manejadores de máquinas virtualescon un mínimo esfuerzo, ejemplo de ello es que se puede descargar cualquierimagen VDI de VirtualBox y usarla directamente en KVM usando la mismasintaxis que con sus propias máquinas virtuales.Para mostrar esto, descargar de:

https : ==virtualboxes:org=images=lubuntu=

la imagen de LUBUNTU 12.10:

http : ==sourceforge:net=projects=virtualboximage=files=

Lubuntu=12:10=lubuntu1210:7z=download

y descomprimir el archivo lubuntu1210.7z, esto dejará una imagen de Virtu-alBox de LUBUNTU cuyo nombre es lubuntu1210.vdi. Entonces esta imagenla usaremos directamente en KVM/QEMU, mediante:

[email protected] 512 Antonio Carrillo Ledesma, Et alii

Page 515: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ kvm -m 2000 -hda lubuntu1210.vdi

o

$ qemu-system-x86_64 -enable-kvm -m 2000 -hda lubuntu1210.vdi

Nota: esta imagen usa como usuario y clave de acceso: lubuntu/lubuntu

Algunas veces es necesario montar y extraer el contenido de un disco vir-tual, supongamos que tenemos una máquina virtual de VirtualBox y quere-mos ver su contenido, para ello usamos:

$ qemu-img convert diskname.vmdk -O qcow2 diskname.qcow2

o para el formato RAW:

$ qemu-img convert diskname.vmdk -O raw diskname.raw

Instalar nbd-client:

# apt install nbd-client

después:

# qemu-nbd �connect=/dev/nbd0 /mnt/kvm/diskname.qcow2# fdisk /dev/nbd0 -l# sudo mount /dev/nbd0p1 /mnt/somepoint/# umount /mnt/somepoint/

17.10 Conversión deMáquinas Virtuales a KVM/QEMU

Es posible convertir máquinas virtuales de los proyectos de virtualización:

� VMware ESXi

� OVA exported from VMware

� VMX from VMware

� RHEL 5 Xen

[email protected] 513 Antonio Carrillo Ledesma, Et alii

Page 516: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� SUSE Xen

� Citrix Xen

� Hyper-V

a KVM/QEMU, mediante el comando virt-v2v, este convierte un Hiper-visor de estos proyectos para ser ejecutado en KVM/QEMU. Puede leermáquinas virtuales de dichos proyectos de ambientes Linux y Windows que seejecutan en VMware, Xen, Hyper-V y algunos otros Hipervisores, y conver-tirlos a KVM administrado por libvirt, OpenStack, oVirt, Red Hat Virtua-lization (RHV) u otros objetivos.También hay un Front-End169 complementario llamado virt-p2v que se

presenta como una imagen ISO, CD o PXE 170 que se puede iniciar en máquinasfísicas para virtualizar esas máquinas (de físico a virtual o p2v).

Ejemplos:

Convertir de VMware vCenter a un servidor libvirt local si setiene una imagen de VMware vCenter server llamada vcenter.example.com,en un centro de datos llamado Datacenter, y un ESXi171 hipervisor llamadoesxi. Entonces podemos convertir el invitado llamado vmware_guest a unamáquina virtual para libvirt de la siguiente manera:

$ virt-v2v -ic vpx://vcenter.example.com/Datacenter/esxi nvmware_guest

169En diseño de Software el Front-End es la parte del Software que interactúa con losusuarios170Preboot eXecution Environment (PXE) (Entorno de ejecución de prearranque), es unentorno para arrancar e instalar el sistema operativo en computadoras a través de unared, de manera independiente de los dispositivos de almacenamiento de datos disponibles(como discos duros) o de los sistemas operativos instalados.171VMware ESXi (anteriormente VMware ESX) es una plataforma de virtualización anivel de centro de datos producido por VMware, Inc.. Es el componente de su productoVMware Infraestructure que se encuentra al nivel inferior de la capa de virtualización, elhipervisor, aunque posee herramientas y servicios de gestión autónomos e independientes.

[email protected] 514 Antonio Carrillo Ledesma, Et alii

Page 517: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

en este caso es necesario ejecutar el comando en modo root, ya que nece-sita comunicación con el demonio172 libvirt y copiar localmente en:/var/lib/libvirt/images.

Convertir de VMware a RHV173/oVirt174 este ejemplo es similaral anterior, excepto que se quiere enviar el huésped a RHV Data Domainusando RHV REST API. La interfaz de red del huésped debe ser conectadacon la red del objetivo llamada ovirtmgmt, entonces:

$ virt-v2v -ic vpx://vcenter.example.com/Datacenter/esxi nvmware_guest -o rhv-upload -oc https://ovirt-engine.examnple.com/ovirt-engine/api -os ovirt-data -op /tmp/ovirt-adnmin-password -of raw -oo rhv-ca�le=/tmp/ca.pem -oo nrhv-direct �bridge ovirtmgmt

en este caso el Host175 ejecutando virt-v2v actúa como un servidor deconversión.

Convertir de ESXi hipervisor sobre SSH a libvirt local Si setiene un hipervisor ESXi llamado esxi.example.com con acceso habilitadocon SSH, entonces se puede convertir de VMFS176 almacenamiento VMFSsobre el servidor a un archivo local de la siguiente forma:

172En sistemas UNIX/LINUX se conoce como demonio o Daemon (Disk And ExecutionMonitor) a un proceso que se ejecuta en segundo plano del sistema operativo, se ejecutaen todo momento y no posee interacción directa con el usuario, también se le conocegenéricamente como servicio o proceso, del cual no percibimos su ejecución. Un demoniorealiza una operación especí�ca en tiempos prede�nidos o en respuesta a ciertos eventosdel sistema.173Red Hat Virtualization REST Application174oVirt is an open-source distributed Virtualization solution175El término Host o an�trión se usa en informática para referirse a las computadorasu otros dispositivos conectados a una red que proveen y utilizan servicios de ella. Losusuarios deben utilizar an�triones para tener acceso a la red. En general, los an�triones sonmáquinas monousuario o multiusuario que ofrecen servicios de transferencia de archivos,conexión remota, servidores de base de datos, servidores Web, etc.176VMware VMFS es el sistema de archivos en clúster de VMware, Inc. utilizado por elpaquete de virtualización de servidores insignia de la compañía, vSphere. Fue desarrolladopara almacenar imágenes de disco de la máquina virtual, incluidas instantáneas.

[email protected] 515 Antonio Carrillo Ledesma, Et alii

Page 518: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ virt-v2v n-i vmx -it ssh n"ssh://[email protected]/vmfs/volumes/datastore1n/guest/guest.vmx" -o local -os /var/tmp

El huésped no debe estar corriendo y virt-v2v no necesita ser ejecutadopor root.

Convertir imagen de disco a OpenStack Glance177 dada una ima-gen en disco se puede convertir a otro hipervisor ejecutandose sobre Open-Stack (sólo imágenes basadas en OpenStack sobre KVM son soportadas),para ello hacemos:

$ virt-v2v -i disk disk.img -o glance

Convertir imagen de disco a imagen de disco dada una imagende disco de otro hipervisor que se quiera convertir a KVM/QEMU tenemosdos opciones:

$ virt-v2v -i disk disk.img -o local -os /var/tmp

el otro método más complejo es escribir un libvirt XML que describael invitado a convertir (si se puede usar el hipervisor de origen para queproporcione el libvirt XML es mejor), entonces hacemos:

$ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp

dado que guest-domain.xml contiene la(s) ruta(s) de las imágen(es) deldisco invitado, no es necesario especi�car el nombre de la imagen del discoen la línea de comandos.Para convertir una imagen de disco local e inmediatamente iniciarla en

QEMU local, hacemos lo siguiente:

$ virt-v2v -i disk disk.img -o qemu -os /var/tmp �qemu-boot

177OpenStack es un proyecto de computación en la nube para proporcionar una in-fraestructura como servicio (IaaS).

[email protected] 516 Antonio Carrillo Ledesma, Et alii

Page 519: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

17.11 Comunicación de las Máquinas Virtuales con elSistema An�trión e internet

Para tener comunicación de las máquinas virtuales y el sistema an�trión einternet, existen varias maneras de hacer esto, a saber:a) Mediante el uso de algún navegador Web, se puede acceder a su cuenta

de correo electrónico y al almacenamiento en la nube como Google Drive,Dropbox, HubiC, pCloud, MediaFire, FlipDrive, Mega, entre otros.b) En el sistema operativo Linux, se puede acceder a cualquier servidor

de internet mediante los protocolos SSH, SAMBA178 o montar un sistema dearchivos mediante SSHFS179, NFS180, entre otros.1) Por ejemplo con PCManFM, Dolphin, Nautilus, Thunar, Konqueror,

entre otros, podemos acceder a una máquina que tenga un servidor:

A) Acceder a un servidor SAMBA, escribir la ruta de archivos enel manejador de archivos:

smb://[email protected]/estud/

B) Acceder a un servidor SSH, escribir la ruta de archivos en elmanejador de archivos:

sftp://[email protected]/home/usuario/

2) En línea de comandos, podemos:

A) Montar con SSHFS un directorio de otra máquina con servidorSSH :

178Samba es una implementación libre del protocolo de archivos compartidos de MicrosoftWindows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemasde tipo UNIX. De esta forma, es posible que computadoras con GNU/Linux, Mac OS Xo Unix en general se vean como servidores o actúen como clientes en redes de Windows.179Secure SHell FileSystem (SSHFS) es un sistema de archivos para Linux (y otros sis-temas operativos con una implementación FUSE, tal como en Mac OS X), que opera sobrearchivos en una computadora remota usando un entorno seguro de acceso. En la com-putadora local donde se monta SSHFS, la implementación hace uso del módulo del kernelFUSE.180El sistema de archivos de red (Network File System) es una aplicación cliente/servidorque permite al usuario ver y opcionalmente almacenar y actualizar archivos en un equiporemoto como si estuvieran en el propio equipo del usuario.

[email protected] 517 Antonio Carrillo Ledesma, Et alii

Page 520: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

$ sshfs [email protected]:/home/usuario/ /home/algun/lugar

B) Montar con mount un directorio de otra máquina con servidorNFS :

# mount 10.0.2.2:/directorio /home/algun/lugar

C) Usar SCP y SFTP de SSH para transferir archivos:

para copiar un archivo, usamos:

$ scp archivo.dat [email protected]:~/Datos/

para copiar un subdirectorio, usamos:

$ scp -r Directorio [email protected]:.

para copiar un archivo de una máquina remota a nuestra máquina,usamos:

$ scp [email protected]:/home/usuario/archivo .

c) En cualquier sistema operativo podemos usar algún navegador grá�code FTP, FTPS o SFTP como FileZilla, WinSCP, PSCP, PSFTP, FireFTP,CoreFTP, entre muchos otros, para transportar archivos y carpetas.d) Se puede usar FSDEV de KVM/QEMU que monta un recurso local

mediante las siguientes indicaciones:

$kvm [...]-fsdev local,id=fs1,path=$HOME/code/Linux,security_model=none-device virtio-9p-pci,fsdev=fs1,mount_tag=Host-code

Donde $HOME/code/Linux es la ruta a compartir, y Host-code es elidenti�cador para el montaje, en la MV se puede usar:

$ mkdir -p /mnt/Host

Donde /mnt/Host es el directorio de montaje (checar que se den los per-misos pertinentes), para ahora hacer:

# mount Host-code -t 9p /mnt/Host

[email protected] 518 Antonio Carrillo Ledesma, Et alii

Page 521: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Para desmontar usar:

# umount /mnt/Host

e) Mediante el uso de la línea de comandos (véase 15.3) usando el comandoscp o rsync (véase ??) y sí así se requiere, comprimiendo archivos para sufácil traslado (véase ??) ó bien mediante programas que posean una interfazgrá�ca de usuario para SSH o SCP.f) Leer un dispositivo USB montado en el sistema an�trión desde la

máquina virtual, para ello el dispositivo USB deberá estar conectado en lamáquina an�trión y deberá ser accedido directamente en la máquina virtual.KVM/QEMU necesita parámetros adicionales, el parámetro -usb activa elsoporte en la máquina virtual de dispositivos USB. La emulación de IntelSB82371 UHCI-Controller tiene 8-puertos en el USB hub. Si se busca teneracceso a uno de los dispositivos físicos, se requiere encontrar los parámetrosVendor-ID y Product-ID. Esta información se obtiene examinando la salidadel comando:

# /sbin/lsusb

o

$ cat /proc/bus/usb/devices

Entonces es posible decirle a KVM/QEMU los datos de VendorID y Pro-ductID a través de la línea de comandos (véase 15.3):

$ qemu -usb -usbdevice Host:<VendorID>:<ProductID> ...

o iniciar KVM/QEMU con soporte para dispositivos USB activados me-diante:

$ qemu -usb ...

después de iniciar la máquina virtual, cambiar al sistema de monitoreode la máquina virtual presionando:

[Ctrl]+[Alt]+[2] e introducir el siguiente comando:usb_add Host:<VendorID>:<ProductID>

[email protected] 519 Antonio Carrillo Ledesma, Et alii

Page 522: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

cuando se retorne al ambiente grá�co al teclear [Ctrl]+[Alt]+[1] se vera elmensaje de reconocimiento del dispositivo USB. Por ejemplo si se tiene unaimpresora HP Scanjet 3300C conectada en el puerto USB de la computadora,la salida del comando lsub es:

# lsusbBus 003 Device 002: ID 03f0:0205 ScanJet 3300C

así, el comando en KVM/QEMU para dejar accesible el dispositivo es:

$ qemu -usb -usbdevice Host:03f0:0205 ...

g) Usar la impresora conectada en el puerto paralelo, pera ello al invocarla ejecución de la máquina virtual usar:

$ qemu -parallel /dev/parport0 ...

h) Montar el contenido de un disco virtual y poder intercambiar infor-mación entre la máquina virtual y la huésped, primero convertir el disco aformato accesible a Linux:

$ qemu-img convert disco.img -O raw tmp.img

montar la imagen en Linux como root:

# mkdir disk# mount -o loop,o¤set=32256 tmp.img disk

trabajar con la imagen montada y al terminar desmontar esta:

# umount ./disk

y puede ser regresada al formato original mediante:

$ qemu-img convert -c tmp.img -O qcow2 disco.img

[email protected] 520 Antonio Carrillo Ledesma, Et alii

Page 523: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

17.12 Signi�cado de las Banderas de /proc/cpuinfo

Recordemos que para revisar si hay soporte en Hardware para la virtua-lización, usamos:

$ egrep "vmxjsvm" /proc/cpuinfo

si soporta la virtualización por Hardware, aparecerá la bandera:

Procesadores INTEL: vmxProcesadores AMD: svm

Hay una gran variedad de banderas que informan sobre el Hardware delque se dispone y las opciones que pueden usarse en KVM/QEMU que son so-portadas por Hardware -como la virtualización dentro de una virtualización-,en esta sección veremos parte de ellas para poder usarlas si son necesariaspara un proyecto en particular.

Intel Advanced Vector Extensions Programming Referencefpu: Onboard FPU (�oating point support)vme: Virtual Mode Extensions (8086 mode)de: Debugging Extensions (CR4.DE)pse: Page Size Extensions (4MB memory pages)tsc: Time Stamp Counter (RDTSC)msr: Model-Speci�c Registers (RDMSR, WRMSR)pae: Physical Address Extensions (support for more than 4GB of RAM)mce: Machine Check Exceptioncx8: CMPXCHG8 instruction (64-bit compare-and-swap)apic: Onboard APICsep: SYSENTER/SYSEXITmtrr: Memory Type Range Registerspge: Page Global Enable (global bit in PDEs and PTEs)mca: Machine Check Architecturecmov: CMOV instructions (conditional move) (also FCMOV)pat: Page Attribute Tablepse36: 36-bit PSEs (huge pages)pn: Processor serial numbercl�ush: Cache Line Flush instructiondts: Debug Store (bu¤er for debugging and pro�ling instructions)

[email protected] 521 Antonio Carrillo Ledesma, Et alii

Page 524: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

acpi: ACPI via MSR (temperature monitoring and clock speed modula-tion)mmx: Multimedia Extensionsfxsr: FXSAVE/FXRSTOR, CR4.OSFXSRsse: Intel SSE vector instructionssse2: SSE2ss: CPU self snoopht: Hyper-Threadingtm: Automatic clock control (Thermal Monitor)ia64: Intel Itanium Architecture 64-bit (not to be confused with Intel�s64-bit x86 architecture with �ag x86-64 or AMD64 bit indicated by�ag lm)pbe: Pending Break Enable (PBE# pin) wakeup support

AMD-de�ned CPU features, CPUID level 0x80000001syscall: SYSCALL (Fast System Call) and SYSRET (Return From FastSystem Call)mp: Multiprocessing Capable.nx: Execute Disablemmxext: AMD MMX extensionsfxsr_opt: FXSAVE/FXRSTOR optimizationspdpe1gb: One GB pages (allows hugepagesz=1G)rdtscp: Read Time-Stamp Counter and Processor IDlm: Long Mode (x86-64: amd64, also known as Intel 64, i.e. 64-bitcapable)3dnowext: AMD 3DNow! extensions3dnow: 3DNow! (AMD vector instructions, competing with Intel�sSSE1)

Transmeta-de�ned CPU features, CPUID level 0x80860001recovery: CPU in recovery modelongrun: Longrun power controllrti: LongRun table interface

[email protected] 522 Antonio Carrillo Ledesma, Et alii

Page 525: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Other features, Linux-de�ned mappingcxmmx: Cyrix MMX extensionsk6_mtrr: AMD K6 nonstandard MTRRscyrix_arr: Cyrix ARRs (= MTRRs)centaur_mcr: Centaur MCRs (= MTRRs)constant_tsc: TSC ticks at a constant rateup: smp Kernel running on uparch_perfmon: Intel Architectural PerfMonpebs: Precise-Event Based Samplingbts: Branch Trace Storerep_good: rep microcode works wellnopl: The NOPL (0F 1F) instructionsxtopology: cpu topology enum extensionstsc_reliable: TSC is known to be reliablenonstop_tsc: TSC does not stop in C statesextd_apicid: has extended APICID (8 bits)amd_dcm: multi-node processoraperfmperf : APERFMPERFeagerfpu: Non lazy FPU restorenonstop_tsc_s3: TSC doesn�t stop in S3 state

Intel-de�ned CPU features, CPUID level 0x00000001 (ecx)pni: SSE-3 (Prescott New Instructions)pclmulqdq: Perform a Carry-Less Multiplication of Quadword instruc-tion �accelerator for GCM)dtes64: 64-bit Debug Storemonitor: Monitor/Mwait support (Intel SSE3 supplements)ds_cpl: CPL Qual. Debug Storevmx: Hardware virtualization: Intel VMXsmx: Safer mode: TXT (TPM support)est: Enhanced SpeedSteptm2: Thermal Monitor 2ssse3: Supplemental SSE-3cid: Context IDfma: Fused multiply-addcx16: CMPXCHG16Bxtpr: Send Task Priority Messages

[email protected] 523 Antonio Carrillo Ledesma, Et alii

Page 526: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

pdcm: Performance Capabilitiespcid: Process Context Identi�ersdca: Direct Cache Accesssse4_1: SSE-4.1sse4_2: SSE-4.2x2apic: x2APICmovbe: Move Data After Swapping Bytes instructionpopcnt: Return the Count of Number of Bits Set to 1 instruction(Hamming weight, i.e. bit count)tsc_deadline_timer: Tsc deadline timeraes/aes-ni: Advanced Encryption Standard (New Instructions)xsave: Save Processor Extended States: also provides XGETBY,XRSTOR,XSETBYavx: Advanced Vector Extensionsf16c: 16-bit fp conversions (CVT16)rdrand: Read Random Number from Hardware random numbergenerator instructionhypervisor: Running on a hypervisor

VIA/Cyrix/Centaur-de�ned CPU features, CPUID level 0xC0000001rng: Random Number Generator present (xstore)rng_en: Random Number Generator enabledace: on-CPU crypto (xcrypt)ace_en: on-CPU crypto enabledace2: Advanced Cryptography Engine v2ace2_en: ACE v2 enabledphe: PadLock Hash Enginephe_en: PHE enabledpmm: PadLock Montgomery Multiplierpmm_en: PMM enabled

More extended AMD �ags: CPUID level 0x80000001, ecxlahf_lm: Load AH from Flags (LAHF) and Store AH into Flags(SAHF) in long modecmp_legacy: If yes HyperThreading not validsvm: Secure virtual machine: AMD-V

[email protected] 524 Antonio Carrillo Ledesma, Et alii

Page 527: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

extapic: Extended APIC spacecr8_legacy: CR8 in 32-bit modeabm: Advanced Bit Manipulationsse4a: SSE-4Amisalignsse: Misaligned SSE mode3dnowprefetch: 3DNow prefetch instructionsosvw: OS Visible Workaroundibs: Instruction Based Samplingxop: extended AVX instructionsskinit: SKINIT/STGI instructionswdt: Watchdog timerlwp: Light Weight Pro�lingfma4: 4 operands MAC instructionstce: translation Cache extensionnodeid_msr: NodeId MSRtbm: Trailing Bit Manipulationtopoext: Topology Extensions CPUID leafsperfctr_Core: Core Performance Counter Extensionsperfctr_nb: NB Performance Counter Extensionsperfctr_l2: L2 Performance Counter Extensions

Auxiliary �ags: Linux de�ned - For features scattered in various CPUIDlevelsida: Intel Dynamic Accelerationarat: Always Running APIC Timercpb: AMD Core Performance Boostepb: IA32_ENERGY_PERF_BIAS supportxsaveopt: Optimized Xsavepln: Intel Power Limit Noti�cationpts: Intel Package Thermal Statusdts: Digital Thermal Sensorhw_pstate: AMD HW-PStateproc_feedback: AMD ProcFeedbackInterfaceintel_pt: Intel Processor Tracing

[email protected] 525 Antonio Carrillo Ledesma, Et alii

Page 528: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

Virtualization �ags: Linux de�nedtpr_shadow: Intel TPR Shadowvnmi: Intel Virtual NMI�expriority: Intel FlexPriorityept: Intel Extended Page Tablevpid: Intel Virtual Processor IDnpt: AMD Nested Page Table supportlbrv: AMD LBR Virtualization supportsvm_lock: AMD SVM locking MSRnrip_save: AMD SVM next_rip savetsc_scale: AMD TSC scaling supportvmcb_clean: AMD VMCB clean bits support�ushbyasid: AMD �ush-by-ASID supportdecodeassists: AMD Decode Assists supportpause�lter: AMD �ltered pause interceptpfthreshold: AMD pause �lter threshold

Intel-de�ned CPU features, CPUID level 0x00000007:0 (ebx)fsgsbase: {RD/WR}{FS/GS}BASE instructionsbmi1: 1st group bit manipulation extensionshle: Hardware Lock Elisionavx2: AVX2 instructionssmep: Supervisor Mode Execution Protectionbmi2: 2nd group bit manipulation extensionserms: Enhanced REP MOVSB/STOSBinvpcid: Invalidate Processor Context IDrtm: Restricted Transactional Memorympx: Memory Protection Extensionrdseed: The RDSEED instructionadx: The ADCX and ADOX instructionssmap: Supervisor Mode Access Prevention

[email protected] 526 Antonio Carrillo Ledesma, Et alii

Page 529: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

18 Bibliografía

Este texto es una recopilación demúltiples fuentes, nues-tra aportación � si es que podemos llamarla así� esplasmarlo en este documento, en el que tratamos de darcoherencia a nuestra visión de los temas desarrollados.

En la realización de este texto se han revisado � enla mayoría de los casos indicamos la referencia, peropudimos omitir varias de ellas, por lo cual pedimos unadisculpa� múltiples páginas Web, artículos técnicos, li-bros, entre otros materiales bibliográ�cos, los más repre-sentativos y de libre acceso los ponemos a su disposiciónen la siguiente liga:

Herramientas

Referencias

[1] Carreras en la Facultad de Ciencias, UNAM,http://www.fciencias.unam.mx/licenciatura/resumen/ 6

[2] Aulas y Talleres en el Tlahuizcalpan de las Carrerasde Matemáticas de la Facultad de Ciencias, UNAM,http://www.matematicas.unam.mx/tlahuiz/ 13, 16, 89

[3] http://es.wikipedia.org/wiki/Microsoft_Windows 34, 379

[4] http://es.wikipedia.org/wiki/Linux 42

[5] http://es.wikipedia.org/wiki/Mac_OS 39

[6] http://es.wikipedia.org/wiki/Android 9, 51

[7] https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)121, 178

[email protected] 527 Antonio Carrillo Ledesma, Et alii

Page 530: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[8] https://es.wikipedia.org/wiki/Python 121, 198

[9] https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)121, 186

[10] https://es.wikipedia.org/wiki/C%2B%2B 121, 190

[11] http://www.gnu.org/philosophy/free-sw.es.html 8, 388

[12] http://es.wikipedia.org/wiki/Software_libre 8, 388

[13] http://www.hispalinux.es/SoftwareLibre 8, 388

[14] http://es.wikipedia.org/wiki/Software_propietario 395

[15] Diferentes Tipos de Licencias para el Software,http://www.gnu.org/licenses/license-list.html 8, 61, 62, 64, 179,388, 391

[16] Proyectos de Software Sourceforge, http://sourceforge.net/ 9, 10, 11

[17] Google Code, http://code.google.com 9, 10, 11

[18] Software proyecto GNU, http://www.gnu.org/Software/Software.es.html9

[19] FSF, Free Software Fundation, http://www.fsf.org/ 8, 9, 388, 389, 391,479

[20] GNU Operating System, http://www.gnu.org/ 8, 388, 391

[21] GCC, the GNU Compiler Collection, http://gcc.gnu.org/ 9

[22] The Linux Kernel Archives, http://www.kernel.org/ 9, 11

[23] Debian el Sistema Operativo Universal, http://www.debian.org 9, 12

[24] Microsoft O¢ ce, http://o¢ ce.microsoft.com/ 12, 95, 96, 98, 100, 102

[25] OPEN OFFICE, Apache OpenO¢ ce, http://www.openo¢ ce.org 95,96, 103

[26] LibreO¢ ce the Document Foundation, http://www.libreo¢ ce.org 95,96, 103

[email protected] 528 Antonio Carrillo Ledesma, Et alii

Page 531: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[27] Google Docs, http://docs.google.com/ 95, 96

[28] CALLIGRA The Integrated Work Applications Suit,http://www.calligra.org/ 95, 96, 103

[29] OnlyO¢ ce, https://www.onlyo¢ ce.com/ 95

[30] WPS O¢ ce, https://www.wps.com/ 95

[31] O¢ ce Online, https://www.o¢ ce.com/ 95

[32] Collabora, https://www.collaborao¢ ce.com/ 95

[33] Lotus Sympony, http://www-03.ibm.com/Software/lotus/symphony/ho-me.nsf/home 95

[34] LaTeX, A Document Preparation System, http://www.latex-project.org/ 91, 100

[35] MATLAB, MathWorks, http://www.mathworks.com/products/matlab/12, 61, 63, 89

[36] SCILAB, Scilab Open Source for Numerical Computation,http://www.scilab.org/ 62, 66

[37] Julia, The Julia Programming Language, https://julialang.org 62, 67

[38] FreeMat, FreeMat Opén Source for rapid engineering and scienti�cprototyping and data processing, http://freemat.sourceforget.net/ 62,64, 89

[39] OCTAVE, GNU Octave, http://www.gnu.org/Software/octave/ 61,64, 89

[40] SCIPY Open Source Library of Scienti�c Tools, http://www.scipy.org/62, 69, 89

[41] Python Programming Language, http://www.python.org/ 62, 69

[42] SAS, Business Analytics and Business Intelligence Software,http://www.sas.com/ 12, 89, 91

[email protected] 529 Antonio Carrillo Ledesma, Et alii

Page 532: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[43] IBM SPSS Software, http://www-01.ibm.com/Software/analytics/spss/12, 89, 90

[44] GNU PSPP, http://www.gnu.org/Software/pspp/ 89, 90

[45] PSPPIREData Editor for PSPP, http://www.softpedia.com/get/O¢ ce-tools/Other-O¢ ce-Tools/PSPP.shtml 90

[46] QEMU, http://wiki.qemu.org/Main_Page 12, 468, 492

[47] KVM, http://www.linux-kvm.org/page/Main_Page 12, 468

[48] máquinas Virtuales, http://es.wikipedia.org/wiki/M%C3%A1quina_vir-tual 12, 468

[49] Oracle MV VirtualBox, https://www.virtualbox.org 472, 492

[50] VMware, https://www.vmware.com 492

[51] Virtual PC, https://www.microsoft.com/es-mx/download/details.aspx?id=3702 492

[52] Hyper-V, https://msdn.microsoft.com/es-es/library/mt16937(v=ws.11).aspx

[53] Parallels, https://www.parallels.com 492

[54] Algunos usos de máquinas Virtuales,http://www.con�gurarequipos.com/doc747.html 12, 468

[55] LINPACK, http://www.netlib.org/linpack/ 61

[56] EISPACK, http://www.netlib.org/eispack/ 61

[57] Scicos Block Diagram Modeler/Simulator, http://www.scicos.org/ 62

[58] Simulink Simulation and Model-Based Design,http://www.mathworks.com/products/simulink/ 61, 62

[59] KOctave, http://sourceforge.net/projects/koctave/

[60] QTOctave, http://www.ohloh.net/p/qtoctave

[email protected] 530 Antonio Carrillo Ledesma, Et alii

Page 533: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[61] IDLE is the Python IDE, http://docs.python.org/2/library/idle.html70

[62] IPython Interactive Computing, http://ipython.org/ 70

[63] Appcelerator PyDEV, http://pydev.org/ 70

[64] Eclipse, http://www.eclipse.org/ 70

[65] The Eric Python IDE, http://eric-ide.python-projects.org/ 70

[66] MATLAB to Scilab conversion tips,http://help.scilab.org/docs/5.4.0/en_-US/m2sci_doc.html 72,89

[67] EViews, http://www.eviews.com/home.html 89

[68] Gretel, http://gretl.sourceforge.net/ 89

[69] Stata, http://www.stata.com/

[70] Statgraphics, http://statgraphics.softonic.com/ 89

[71] Statistica, http://www.statsoft.com/support/download/statistica-Software-updates/ 89

[72] Systat, http://www.systat.com/ 89

[73] Vensim, http://vensim.com/vensim-Software/ 89

[74] Maple, http://www.maplesoft.com/ 62, 77, 82, 89

[75] Mathematica, http://www.wolfram.com/mathematica/ 63, 77, 78, 89

[76] Maxima, http://maxima.sourceforge.net 63, 77, 84, 89

[77] The R Proyect for Statistical Computing, http://www.r-project.or/ 62,89, 91

[78] RWeka, http://cran.r-project.org/Web/packages/RWeka/index.html91

[79] Tinn-R Edit code and run it in R, http://www.sciviews.org/Tinn-R/91

[email protected] 531 Antonio Carrillo Ledesma, Et alii

Page 534: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[80] RStudio Software, Education, and Services for the R community,http://www.rstudio.com/ 91

[81] SAS grows analytics market share,http://www.bizjournals.com/triangle-/news/2011/06/13/sas-grows-analytics-market-share.html 91

[82] Mathtype, http://www.dessci.com/en/products/mathtype/ 100, 102

[83] Scienti�c WorkPlace, http://www.mackichan.com/ 102

[84] Gummi LaTeX Editor, http://dev.midnightcoding.org/projects/gummi102

[85] Kile LaTeX Editor, http://kile.sourceforge.net/ 102

[86] Led LaTex Editor, http://www.latexeditor.org/ 102

[87] Lyx LaTeX Editor, http://www.lyx.org/ 102

[88] Texmaker LaTeX Editor, http://www.xm1math.net/texmaker/ 102

[89] TeXnicCenter LaTeX Editor, http://www.texniccenter.org/ 103

[90] TextPad LaTeX Editor, http://www.textpad.com/ 103

[91] TeXstudio LaTeX Editor, http://texstudio.sourceforge.net/ 103

[92] WinEdt LaTeX Editor, http://www.winedt.com/ 103

[93] LaTeXBeamer Class, https://bitbucket.org/rivanvx/beamer/wiki/Home100

[94] Microsoft SQL Server, http://www.microsoft.com/en-us/sqlserver/default.aspx 98

[95] PostgreSQL, http://www.postgresql.org/ 98

[96] MySQL Oracle, http://www.mysql.com/ 98

[97] MongoDB, http://www.mongodb.org/ 98

[98] Knoppix is a Live CD/ DVD based on Debian GNU/Linux,http://knoppix.net 382

[email protected] 532 Antonio Carrillo Ledesma, Et alii

Page 535: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

[99] Repositorio de LaTeX en la Facultad de Ciencias, UNAM,http://tezcatl.fciencias.unam.mx/tex-archive/ 103

[100] El economista, http://eleconomista.com.mx/tecnociencia/2013/01/22/clausuraran-negocios-mexico-uso-ilegal-Software 398

[101] PCworld, http://www.pcworld.com.mx/UNAM-y-BSA-promueven-el-uso-de-software-legal/ 399

[102] https://es.wikipedia.org/wiki/SQL 260

[103] https://es.wikipedia.org/wiki/NoSQL

260

Sitios Web revisados:

� https://www.ibm.com/security

� https://www.welivesecurity.com/la-es/

� http://blogs.eset-la.com/

� http://www.criptored.upm.es/

� https://www.securityfocus.com/

� https://securiteam.com/

� https://www.cert.unam.mx/

� http://www.securitytube.net/

� https://www.issa.org/

� https://www.isaca.org/

� https://www.sans.org/

� https://www.eccouncil.org/

� https://www.isc2.org/

� https://www.comptia.org/

[email protected] 533 Antonio Carrillo Ledesma, Et alii

Page 536: mmc.geofisica.unam.mxmmc.geofisica.unam.mx/acl/edp/Herramientas/... · El Cómputo en los Cursos de la Facultad de Ciencias, UNAM Antonio Carrillo Ledesma y Karla Ivonne GonzÆlez

El Cómputo en los Cursos de la Facultad de Ciencias, UNAM

� http://oval.mitre.org/

� https://www.o¤ensive-security.com/

� https://www.giac.org/certi�cation/penetration-tester-gpen

� https://www.isecom.org/

� https://www.exploit-db.com/google-hacking-database

� https://www.ccn-cert.cni.es/

� https://www.securityfocus.com/

� https://linuxsecurity.com/

� https://www.identidadrobada.com/

� https://www.ietf.org/

� https://www.iso.org/home.html

� https://www.bis.org/bcbs/

� http://www.mit.edu/hacker/hacker.html

[email protected] 534 Antonio Carrillo Ledesma, Et alii