1 99:59:59,999 --> 00:00:04,841 Muy bien. Gracias a todos por venir. 2 00:00:04,841 --> 00:00:07,799 Éste es el "Semestre Perdido" en Ciencias de la Computación. 3 00:00:07,799 --> 00:00:10,764 Al menos así decidimos llamarle. 4 00:00:10,774 --> 00:00:13,709 Si no estás aquí por ésto, estás en la habitación equivocada. 5 00:00:13,709 --> 00:00:15,900 Estaremos aquí alrededor de una hora. 6 00:00:17,689 --> 00:00:20,099 Primeramente, quiero hablarles un poco 7 00:00:20,100 --> 00:00:22,910 sobre por qué creamos este curso. 8 00:00:22,910 --> 00:00:27,070 Esta clase se extiende de una observación que Anish, José y yo hicimos cuando 9 00:00:27,080 --> 00:00:30,240 fuimos profesores de apoyo en varias clases aquí en el MIT. 10 00:00:30,240 --> 00:00:34,580 Básicamente, todos los científicos de la computación, sabemos 11 00:00:34,580 --> 00:00:38,223 que las computadoras son excelentes en el desarrollo de tareas repetitivas 12 00:00:38,223 --> 00:00:42,040 y automatizando. Sin embargo, se nos pasa que hay muchas herramientas que 13 00:00:42,040 --> 00:00:45,930 mejoran nuestros procesos de desarrollo. Podemos ser mucho más eficientes en el uso 14 00:00:45,930 --> 00:00:49,620 de nuestras computadoras ya que las empleamos 15 00:00:49,620 --> 00:00:53,641 como una herramienta para nosotros, no sólo para crear páginas web o software 16 00:00:53,650 --> 00:00:57,809 o ese tipo de cosas… y esta clase es un intento de abordar ésto. 17 00:00:57,809 --> 00:01:02,135 Es un intento de mostrarles algunas de las herramientas 18 00:01:02,140 --> 00:01:05,220 que pueden aprovechar enormemente en su día a día, 19 00:01:05,220 --> 00:01:09,937 en sus investigaciones y en sus estudios. 20 00:01:09,937 --> 00:01:12,827 Y será una clase donde les enseñaremos 21 00:01:12,827 --> 00:01:15,680 tanto cómo sacar el mejor provecho 22 00:01:15,700 --> 00:01:18,187 de las herramientas que ya usan 23 00:01:18,187 --> 00:01:19,330 pero ojalá, enseñarles 24 00:01:19,330 --> 00:01:20,909 herramientas que no conocían antes 25 00:01:20,909 --> 00:01:23,520 y cómo juntarlas para producir cosas más poderosas 26 00:01:20,909 --> 00:01:24,750 y cómo juntarlas para producir cosas más poderosas 27 00:01:24,750 --> 00:01:30,587 que las que pudiesen coseguir con lo que conocen ahora. 28 00:01:30,587 --> 00:01:36,030 Serán 11 clases, cada una de 1 hora 29 00:01:36,030 --> 00:01:38,120 tocando un tema en particular. 30 00:01:38,120 --> 00:01:40,920 Pueden ver el sitio web en la descripción (https://missing.csail.mit.edu/) 31 00:01:40,920 --> 00:01:43,439 con la lista de temas y en qué fecha serán las clases. 32 00:01:40,920 --> 00:01:44,489 En su mayoría, serán independientes. 33 00:01:44,489 --> 00:01:48,640 Por lo tanto, pueden asistir a las que consideren interesantes. 34 00:01:48,640 --> 00:01:51,450 Sin embargo, asumiremos que las tomaron una a una 35 00:01:51,450 --> 00:01:54,649 a medida que progresemos, por lo que no se repetirán temas pasados. 36 00:01:54,649 --> 00:01:57,692 Por ejemplo, no les estaré enseñando bash de nuevo. 37 00:01:57,692 --> 00:02:03,321 También publicaremos las notas de la clase y las grabaciones en el sitio web. 38 00:02:03,321 --> 00:02:05,947 No sabemos cuándo exactamente, pero lo haremos. 39 00:02:05,947 --> 00:02:10,110 [Nota del traductor:] Obviamente ya están disponibles! 40 00:02:10,110 --> 00:02:12,330 Si no no estaría viendo esto usted. 41 00:02:12,340 --> 00:02:18,694 La clase la darán 3 maestros: su servidor John, Amish, quien está sentado por allá 42 00:02:18,694 --> 00:02:22,310 y José quien no pudo estar hoy pero dará la clase de mañana. 43 00:02:22,310 --> 00:02:28,689 Tengan en cuenta que abordamos demasiado para tan poco tiempo, 44 00:02:28,689 --> 00:02:32,258 por lo que avanzaremos a pasos agigantados 45 00:02:32,258 --> 00:02:41,910 pero en caso de que se atoren en algún tema, no duden en contactarnos. 46 00:02:41,910 --> 00:03:07,170 (Concerniente a la clase presencial) 47 00:03:07,170 --> 00:03:13,533 Debido a la carencia de tiempo 48 00:03:13,533 --> 00:03:16,530 no será posible tocar todas las herramientas detalladamente. 49 00:03:16,530 --> 00:03:21,240 Se mencionarán herramientas interesantes y maneras útiles. 50 00:03:21,240 --> 00:03:25,110 No necesariamente profundizaremos en los detalles de cómo funcionan 51 00:03:25,110 --> 00:03:27,540 o casos de uso más complejos 52 00:03:27,550 --> 00:03:41,620 (Concerniente a la clase presencial) 53 00:03:45,840 --> 00:03:48,380 Esta clase, en específico, cubrirá prinicipios básicos 54 00:03:48,380 --> 00:03:53,123 que utilizaremos en las siguientes clases. 55 00:03:53,160 --> 00:03:56,480 Por ejemplo, cómo usar el shell en su terminal. 56 00:03:56,480 --> 00:03:59,660 Explicaré qué es para los que lo desconozcan, 57 00:03:59,660 --> 00:04:02,424 y después avanzaremos a herramientas más avanzadas. 58 00:04:02,424 --> 00:04:05,750 Probablemente, ya se pueden dar una idea de qué vendrá 59 00:04:05,750 --> 00:04:09,580 basado en las notas de la clase. 60 00:04:09,580 --> 00:04:12,773 Y eso nos trae a la clase de hoy. En esta clase hablaremos de el 61 00:04:12,773 --> 00:04:13,820 Shell. 62 00:04:13,820 --> 00:04:16,950 Será una de las principales maneras en las que interactuamos con 63 00:04:16,959 --> 00:04:18,669 nuestra computadora. 64 00:04:18,669 --> 00:04:22,259 cuando quieran empezar a hacer cosas que las interfaces gráficas 65 00:04:22,259 --> 00:04:24,520 no les permite hacer. 66 00:04:24,520 --> 00:04:27,880 Las interfaces visuales están, de alguna manera, limitadas 67 00:04:27,880 --> 00:04:30,743 porque sólo se pueden hacer las cosas que tienen botones, 68 00:04:30,743 --> 00:04:32,726 deslizadores o campos de entrada. 69 00:04:32,726 --> 00:04:35,110 La mayoría del tiempo, estas herramientas de texto 70 00:04:35,110 --> 00:04:38,060 están diseñadas para ser modulares y funcionar entre sí. 71 00:04:38,060 --> 00:04:42,817 Y también tener muchísimas maneras de combinarse y programarse. 72 00:04:42,817 --> 00:04:46,698 En esta clase nos estaremos centrando en herramientas de texto, 73 00:04:46,698 --> 00:04:49,573 también conocidas como herramientas de la terminal. (command line utilities) 74 00:04:49,573 --> 00:04:50,910 El shell será en donde 75 00:04:50,910 --> 00:04:52,670 harán la mayoría de su trabajo. 76 00:04:52,670 --> 00:04:54,698 Para los que no conozcan lo que es un shell, 77 00:04:54,698 --> 00:04:57,567 la mayoría de las plataformas proveen un shell por defecto. 78 00:04:57,567 --> 00:05:01,086 En Windows, es Powershell, pero también hay otros disponibles... 79 00:05:01,086 --> 00:05:04,139 En Linux, encontrarán cientos de terminales, es decir, ventanas que 80 00:05:04,139 --> 00:05:07,407 te permiten ver shells. 81 00:05:07,407 --> 00:05:10,500 Asimismo, encontrarán diferentes tipos de shell, el más común 82 00:05:10,500 --> 00:05:13,226 siendo bash. Conocido como el Shell Resusitado. 83 00:05:13,226 --> 00:05:15,706 (Bourne-Again-SHell) 84 00:05:15,706 --> 00:05:19,553 Como éste es un shell tan común, será el que utilizaremos en la clase. 85 00:05:19,553 --> 00:05:22,050 Si están en MacOS, probablemente tendrán una versión de bash. 86 00:05:22,050 --> 00:05:24,097 (Nota del traductor): Las nuevas versiones de MacOS Catalina (10.15) 87 00:05:24,097 --> 00:05:26,159 usan zsh, bastante similar a bash. Se abre con la app conocida como 88 00:05:26,159 --> 00:05:27,479 Terminal. 89 00:05:27,479 --> 00:05:31,417 Tengan en cuenta que la mayoría de esto estará centrado en Linux 90 00:05:31,417 --> 00:05:34,159 en términos de cómo lo enseñamos. Sin embargo, la mayoría de estas 91 00:05:34,159 --> 00:05:37,260 herramientas funcionan con otros sistemas operativos. 92 00:05:37,260 --> 00:05:41,088 Si quieren instalar una terminal y un shell, y no saben cómo hacerlo 93 00:05:41,088 --> 00:05:46,319 les podemos ayudar a hacerlo en las horas de tutoreo. También pueden 94 00:05:46,319 --> 00:05:53,859 simplemente buscarlo en google como su plataforma + terminal. 95 00:05:53,859 --> 00:06:01,169 Entonces... cuando abrimos una terminal, usualmente se verá así. Tendremos 96 00:06:01,169 --> 00:06:06,998 una línea hasta arriba. esto se conoce como el Shell Prompt, contiente mi 97 00:06:06,998 --> 00:06:12,090 nombre de usuario, el nombre de mi computadora y el directorio 98 00:06:12,090 --> 00:06:16,365 en donde estoy. Hablaremos de `paths` o directorios más tarde. 99 00:06:16,365 --> 00:06:20,064 Y después sólo hay un cursor esperando a que reciba alguna entrada. 100 00:06:20,064 --> 00:06:23,634 Y este es el shell en donde le decimos lo que queremos que haga. 101 00:06:23,634 --> 00:06:28,279 Podemos personalizar este prompt, puede no necesariamente verse exactamente 102 00:06:28,279 --> 00:06:35,846 como el mío pero se puede ver de diferentes maneras, así, así y así. 103 00:06:35,846 --> 00:06:42,344 En esta clase no hablaremos mucho de cómo personalizarlo, eso lo haremos en otra clase. 104 00:06:42,344 --> 00:06:44,650 Hoy hablaremos de cómo usamos un 105 00:06:44,650 --> 00:06:47,790 shell para hacer cosas útiles. 106 00:06:47,790 --> 00:06:49,860 Y esta es la interfaz de texto principal en donde 107 00:06:47,790 --> 00:06:50,644 escribimos comandos de texto. 108 00:06:50,644 --> 00:06:53,430 En el shell, escribimos comandos. 109 00:06:53,430 --> 00:06:55,588 Estos comandos pueden ser 110 00:06:55,588 --> 00:06:58,290 bastante simples, usualmente, 111 00:06:58,290 --> 00:07:02,000 ejecutaremos programas con argumentos, bueno... y ¿cómo se ve eso? 112 00:07:02,000 --> 00:07:04,764 Un programa que podemos ejecutar dentro del shell es `date`. 113 00:07:04,764 --> 00:07:09,050 Escribimos "date" y presionamos Enter. Y, naturalmente, nos muestra la fecha 114 00:07:09,050 --> 00:07:13,270 y la hora. Asimismo, podemos ejecutar un programa con argumentos, también 115 00:07:13,280 --> 00:07:16,180 conocidos como parámetros. Existe un programa llamado `echo`, 116 00:07:16,180 --> 00:07:16,510 el cual simplemente imprime los argumentos que le damos. 117 00:07:16,510 --> 00:07:16,760 Los argumentos son "cosas" separadas por espacios que le damos al programa. 118 00:07:16,760 --> 00:07:17,290 Entonces, podemos decirle "hola" y nos imprime hola. 119 00:07:17,290 --> 00:07:18,100 Nuevamente, no del todo sorprendente, pero estos son los básicos de argumentos. 120 00:07:18,100 --> 00:07:22,160 También, si se dieron cuenta, dije que los argumentos están separados por 121 00:07:22,160 --> 00:07:24,620 espacios. Y podrían preguntarse, pero cómo le hago para que un argumento 122 00:07:24,620 --> 00:07:25,050 tenga espacios. Bueno. pues también podemos ponerlo entre comillas y escribir 123 00:07:25,050 --> 00:07:27,330 algo como "Hola mundo" en comillas y ahora contiente un argumento nuestro 124 00:07:25,050 --> 00:07:29,820 programa que contiene espacios. También se pueden usar comillas simples en lugar 125 00:07:27,330 --> 00:07:30,720 de dobles. Hablaremos de las diferencias cuando empecemos a hacer scripts 126 00:07:29,820 --> 00:07:32,940 en bash. También podemos utilizar el caracter de escape para un sólo caracter. 127 00:07:30,720 --> 00:07:35,610 Todas estas reglas las cubriremos más en específico después. Esperemos que no 128 00:07:32,940 --> 00:07:37,050 les den contratiempos con esto. Por ejemplo, si quiero crear un directorio 129 00:07:35,610 --> 00:07:38,550 llamado Mis Fotos se crearán 2 directorios, uno llamado Mis y otro, Fotos. 130 00:07:37,050 --> 00:07:40,380 Y probablemente eso no es lo que queremos. 131 00:07:38,550 --> 00:07:42,060 Ahora... una cosa que probablemente se preguntarán es cómo sabe a qué 132 00:07:40,380 --> 00:07:44,310 programas me refiero y cómo sabe dónde están esos programas y qué 133 00:07:42,060 --> 00:07:47,220 tienen que hacer? Y bueno, la respuesta es que su computadora tiene programas 134 00:07:44,310 --> 00:07:50,310 que vienen instalados dentro de sus computadoras. Justo como podría 135 00:07:47,220 --> 00:07:52,710 ir con Windows Explorer, la aplicación de la terminal, Windows Explorer, 136 00:07:50,310 --> 00:07:55,380 etc. también viene con aplicaciones centradas a la terminal. Y, estas, 137 00:07:52,710 --> 00:07:57,540 literalmente están en el sistema de archivos. Y, el shell, tiene una manera 138 00:07:55,380 --> 00:07:58,770 de determinar dónde están esos programas. Báicamente, tiene una 139 00:07:57,540 --> 00:08:00,480 manera de buscar en dónde está cada uno de estos programas. 140 00:07:58,770 --> 00:08:03,420 Y lo hace con algo llamado, una variable de entorno (conocida en 141 00:08:00,480 --> 00:08:06,120 inglés como ENVIRONMENT variable). Es simplemente como una variable 142 00:08:03,420 --> 00:08:09,000 que podrían encontrarse en un lenguaje de programación. De hecho resulta que 143 00:08:06,120 --> 00:08:12,150 el shell, y el BASH en particular, es un lenguaje de programación. 144 00:08:09,000 --> 00:08:15,720 Este prompt que tenemos aquí también puede realizar bucles while, for, 145 00:08:12,150 --> 00:08:17,340 condicionales. Podemos definir funciones, entre otras cosas. Esto lo hablaremos en 146 00:08:15,720 --> 00:08:19,590 la siguiente clase. Mientras tanto, veamos esta variable de 147 00:08:17,340 --> 00:08:21,330 entorno. Debo notar que las variables de entorno se asignan cada vez que iniciamos 148 00:08:19,590 --> 00:08:23,520 nuestro shell en automático. No son variables que tenemos que cambiar 149 00:08:21,330 --> 00:08:26,070 siempre que abrimos un shell. Hay variables de entorno que nos 150 00:08:23,520 --> 00:08:27,930 dicen dónde esta nuestro directorio de HOME (casa), el nombre del usuario y 151 00:08:26,070 --> 00:08:29,610 también, muy importante, la variable PATH (en español, camino). 152 00:08:27,930 --> 00:08:31,920 Entonces, si imprimimos con `echo` la variable $PATH esto nos mostrará 153 00:08:29,610 --> 00:08:33,780 todos los paths (caminos) en donde el shell buscará programas. 154 00:08:31,920 --> 00:08:35,880 Se darán cuenta de que esto es una lista separada por dos puntos, 155 00:08:33,780 --> 00:08:40,010 lo cual es bastante difícil de leer, pero lo esencial es que cada vez 156 00:08:35,880 --> 00:08:43,229 que escribamos el nombre de un programa buscará dentro de esta 157 00:08:40,010 --> 00:08:45,600 lista de paths, por un archivo ejecutable que tenga el mismo 158 00:08:43,229 --> 00:08:48,839 nombre que escribimos. En mi caso, cuando escribo 159 00:08:45,600 --> 00:08:50,700 `echo` buscará en cada uno de estos directorios hasta que 160 00:08:48,839 --> 00:08:53,190 encuentre un programa llamado `echo` y lo correrá. SI queremos 161 00:08:50,700 --> 00:08:54,000 saber dónde está el programa que corre podemos usar el 162 00:08:53,190 --> 00:08:55,439 comando llamado `which`. podemos escribir `which echo`. 163 00:08:54,000 --> 00:08:57,000 Esto quiere decir que si fuéramos a correr un programa llamado `echo` 164 00:08:55,439 --> 00:08:59,759 lo correríamos de ese archivo en específico. Es imporante mencionar 165 00:08:57,000 --> 00:09:02,579 lo que es un path (camino). Los paths son una manera de mencionar la 166 00:08:59,759 --> 00:09:05,339 ubicación que tienen tus archivos en tu computadora. En Linux y MacOS 167 00:09:02,579 --> 00:09:07,800 los paths están separados por diagonales, específicamente, diagonales para adelante. 168 00:09:05,339 --> 00:09:09,569 En inglés conocidos como `forward slashes`: / Y verán aquí que estamos en el directorio 169 00:09:07,800 --> 00:09:11,639 `root`, eso es lo que indica el primer slash (diagonal) y nos dice que nuestro 170 00:09:09,569 --> 00:09:14,819 path empieza en la raíz del sistema de archivos (file system). Entonces nos 171 00:09:11,639 --> 00:09:18,209 vamos al directorio llamado `usr`, después ve en el directorio `bin`y luego encuentra 172 00:09:14,819 --> 00:09:19,949 el archivo llamado `echo`. En Windows, los paths se separan por diagonales hacia 173 00:09:18,209 --> 00:11:21,630 atrás \\ 174 00:11:56,370 --> 00:12:02,070 En Windows, hay una raíz por cada partición. Puede que hayan visto 175 00:12:00,270 --> 00:12:05,130 algo como `C:\` a diferencia de Linux o macOS que traen todo bajo la misma 176 00:12:02,070 --> 00:12:08,220 'raíz'. Tal vez se dieron cuenta de que dije la palabra path absoluto (camino 177 00:12:05,130 --> 00:12:11,340 absoluto). Los absolute paths son caminos que determinan completamente 178 00:12:08,220 --> 00:12:13,050 la ubicación de un archivo. En este caso, estamos hablando de un archivo 179 00:12:11,340 --> 00:12:14,850 llamado `echo` en específico. Y nos está dando el camino completo al archivo. 180 00:12:13,050 --> 00:12:18,540 También tenemos caminos relativos. Y estos, como su nombre lo indica, están basados 181 00:12:14,850 --> 00:12:20,010 en donde estamos al momento. Podemos obtener el path en donde estamos 182 00:12:18,540 --> 00:12:21,690 con el comando `pwd`, el cual significa imprime el directorio de trabajo 183 00:12:20,010 --> 00:12:27,360 (print working directory).