WEBVTT 99:59:59.999 --> 00:00:04.841 Muy bien. Gracias a todos por venir. 00:00:04.841 --> 00:00:07.799 Éste es el "Semestre Perdido" en Ciencias de la Computación. 00:00:07.799 --> 00:00:10.764 Al menos así decidimos llamarle. 00:00:10.774 --> 00:00:13.709 Si no estás aquí por ésto, estás en la habitación equivocada. 00:00:13.709 --> 00:00:15.900 Estaremos aquí alrededor de una hora. 00:00:17.689 --> 00:00:20.099 Primeramente, quiero hablarles un poco 00:00:20.100 --> 00:00:22.910 sobre por qué creamos este curso. 00:00:22.910 --> 00:00:27.070 Esta clase se extiende de una observación que Anish, José y yo hicimos cuando 00:00:27.080 --> 00:00:30.240 fuimos profesores de apoyo en varias clases aquí en el MIT. 00:00:30.240 --> 00:00:34.580 Básicamente, todos los científicos de la computación, sabemos 00:00:34.580 --> 00:00:38.223 que las computadoras son excelentes en el desarrollo de tareas repetitivas 00:00:38.223 --> 00:00:42.040 y automatizando. Sin embargo, se nos pasa que hay muchas herramientas que 00:00:42.040 --> 00:00:45.930 mejoran nuestros procesos de desarrollo. Podemos ser mucho más eficientes en el uso 00:00:45.930 --> 00:00:49.620 de nuestras computadoras ya que las empleamos 00:00:49.620 --> 00:00:53.641 como una herramienta para nosotros, no sólo para crear páginas web o software 00:00:53.650 --> 00:00:57.809 o ese tipo de cosas… y esta clase es un intento de abordar ésto. 00:00:57.809 --> 00:01:02.135 Es un intento de mostrarles algunas de las herramientas 00:01:02.140 --> 00:01:05.220 que pueden aprovechar enormemente en su día a día, 00:01:05.220 --> 00:01:09.937 en sus investigaciones y en sus estudios. 00:01:09.937 --> 00:01:12.827 Y será una clase donde les enseñaremos 00:01:12.827 --> 00:01:15.680 tanto cómo sacar el mejor provecho 00:01:15.700 --> 00:01:18.187 de las herramientas que ya usan 00:01:18.187 --> 00:01:19.330 pero ojalá, enseñarles 00:01:19.330 --> 00:01:20.909 herramientas que no conocían antes 00:01:20.909 --> 00:01:23.520 y cómo juntarlas para producir cosas más poderosas 00:01:20.909 --> 00:01:24.750 y cómo juntarlas para producir cosas más poderosas 00:01:24.750 --> 00:01:30.587 que las que pudiesen coseguir con lo que conocen ahora. 00:01:30.587 --> 00:01:36.030 Serán 11 clases, cada una de 1 hora 00:01:36.030 --> 00:01:38.120 tocando un tema en particular. 00:01:38.120 --> 00:01:40.920 Pueden ver el sitio web en la descripción (https://missing.csail.mit.edu/) 00:01:40.920 --> 00:01:43.439 con la lista de temas y en qué fecha serán las clases. 00:01:40.920 --> 00:01:44.489 En su mayoría, serán independientes. 00:01:44.489 --> 00:01:48.640 Por lo tanto, pueden asistir a las que consideren interesantes. 00:01:48.640 --> 00:01:51.450 Sin embargo, asumiremos que las tomaron una a una 00:01:51.450 --> 00:01:54.649 a medida que progresemos, por lo que no se repetirán temas pasados. 00:01:54.649 --> 00:01:57.692 Por ejemplo, no les estaré enseñando bash de nuevo. 00:01:57.692 --> 00:02:03.321 También publicaremos las notas de la clase y las grabaciones en el sitio web. 00:02:03.321 --> 00:02:05.947 No sabemos cuándo exactamente, pero lo haremos. 00:02:05.947 --> 00:02:10.110 [Nota del traductor:] Obviamente ya están disponibles! 00:02:10.110 --> 00:02:12.330 Si no no estaría viendo esto usted. 00:02:12.340 --> 00:02:18.694 La clase la darán 3 maestros: su servidor John, Amish, quien está sentado por allá 00:02:18.694 --> 00:02:22.310 y José quien no pudo estar hoy pero dará la clase de mañana. 00:02:22.310 --> 00:02:28.689 Tengan en cuenta que abordamos demasiado para tan poco tiempo, 00:02:28.689 --> 00:02:32.258 por lo que avanzaremos a pasos agigantados 00:02:32.258 --> 00:02:41.910 pero en caso de que se atoren en algún tema, no duden en contactarnos. 00:02:41.910 --> 00:03:07.170 (Concerniente a la clase presencial) 00:03:07.170 --> 00:03:13.533 Debido a la carencia de tiempo 00:03:13.533 --> 00:03:16.530 no será posible tocar todas las herramientas detalladamente. 00:03:16.530 --> 00:03:21.240 Se mencionarán herramientas interesantes y maneras útiles. 00:03:21.240 --> 00:03:25.110 No necesariamente profundizaremos en los detalles de cómo funcionan 00:03:25.110 --> 00:03:27.540 o casos de uso más complejos 00:03:27.550 --> 00:03:41.620 (Concerniente a la clase presencial) NOTE Paragraph 00:03:45.840 --> 00:03:48.380 Esta clase, en específico, cubrirá prinicipios básicos 00:03:48.380 --> 00:03:53.123 que utilizaremos en las siguientes clases. 00:03:53.160 --> 00:03:56.480 Por ejemplo, cómo usar el shell en su terminal. 00:03:56.480 --> 00:03:59.660 Explicaré qué es para los que lo desconozcan, 00:03:59.660 --> 00:04:02.424 y después avanzaremos a herramientas más avanzadas. 00:04:02.424 --> 00:04:05.750 Probablemente, ya se pueden dar una idea de qué vendrá 00:04:05.750 --> 00:04:09.580 basado en las notas de la clase. 00:04:09.580 --> 00:04:12.773 Y eso nos trae a la clase de hoy. En esta clase hablaremos de el 00:04:12.773 --> 00:04:13.820 Shell. 00:04:13.820 --> 00:04:16.950 Será una de las principales maneras en las que interactuamos con 00:04:16.959 --> 00:04:18.669 nuestra computadora. 00:04:18.669 --> 00:04:22.259 cuando quieran empezar a hacer cosas que las interfaces gráficas 00:04:22.259 --> 00:04:24.520 no les permite hacer. 00:04:24.520 --> 00:04:27.880 Las interfaces visuales están, de alguna manera, limitadas 00:04:27.880 --> 00:04:30.743 porque sólo se pueden hacer las cosas que tienen botones, 00:04:30.743 --> 00:04:32.726 deslizadores o campos de entrada. 00:04:32.726 --> 00:04:35.110 La mayoría del tiempo, estas herramientas de texto 00:04:35.110 --> 00:04:38.060 están diseñadas para ser modulares y funcionar entre sí. 00:04:38.060 --> 00:04:42.817 Y también tener muchísimas maneras de combinarse y programarse. 00:04:42.817 --> 00:04:46.698 En esta clase nos estaremos centrando en herramientas de texto, 00:04:46.698 --> 00:04:49.573 también conocidas como herramientas de la terminal. (command line utilities) 00:04:49.573 --> 00:04:50.910 El shell será en donde 00:04:50.910 --> 00:04:52.670 harán la mayoría de su trabajo. 00:04:52.670 --> 00:04:54.698 Para los que no conozcan lo que es un shell, 00:04:54.698 --> 00:04:57.567 la mayoría de las plataformas proveen un shell por defecto. 00:04:57.567 --> 00:05:01.086 En Windows, es Powershell, pero también hay otros disponibles... 00:05:01.086 --> 00:05:04.139 En Linux, encontrarán cientos de terminales, es decir, ventanas que 00:05:04.139 --> 00:05:07.407 te permiten ver shells. 00:05:07.407 --> 00:05:10.500 Asimismo, encontrarán diferentes tipos de shell, el más común 00:05:10.500 --> 00:05:13.226 siendo bash. Conocido como el Shell Resusitado. 00:05:13.226 --> 00:05:15.706 (Bourne-Again-SHell) 00:05:15.706 --> 00:05:19.553 Como éste es un shell tan común, será el que utilizaremos en la clase. 00:05:19.553 --> 00:05:22.050 Si están en MacOS, probablemente tendrán una versión de bash. 00:05:22.050 --> 00:05:24.097 (Nota del traductor): Las nuevas versiones de MacOS Catalina (10.15) 00:05:24.097 --> 00:05:26.159 usan zsh, bastante similar a bash. Se abre con la app conocida como 00:05:26.159 --> 00:05:27.479 Terminal. 00:05:27.479 --> 00:05:31.417 Tengan en cuenta que la mayoría de esto estará centrado en Linux 00:05:31.417 --> 00:05:34.159 en términos de cómo lo enseñamos. Sin embargo, la mayoría de estas 00:05:34.159 --> 00:05:37.260 herramientas funcionan con otros sistemas operativos. 00:05:37.260 --> 00:05:41.088 Si quieren instalar una terminal y un shell, y no saben cómo hacerlo 00:05:41.088 --> 00:05:46.319 les podemos ayudar a hacerlo en las horas de tutoreo. También pueden 00:05:46.319 --> 00:05:53.859 simplemente buscarlo en google como su plataforma + terminal. 00:05:53.859 --> 00:06:01.169 Entonces... cuando abrimos una terminal, usualmente se verá así. Tendremos 00:06:01.169 --> 00:06:06.998 una línea hasta arriba. esto se conoce como el Shell Prompt, contiente mi 00:06:06.998 --> 00:06:12.090 nombre de usuario, el nombre de mi computadora y el directorio 00:06:12.090 --> 00:06:16.365 en donde estoy. Hablaremos de `paths` o directorios más tarde. 00:06:16.365 --> 00:06:20.064 Y después sólo hay un cursor esperando a que reciba alguna entrada. 00:06:20.064 --> 00:06:23.634 Y este es el shell en donde le decimos lo que queremos que haga. 00:06:23.634 --> 00:06:28.279 Podemos personalizar este prompt, puede no necesariamente verse exactamente 00:06:28.279 --> 00:06:35.846 como el mío pero se puede ver de diferentes maneras, así, así y así. 00:06:35.846 --> 00:06:42.344 En esta clase no hablaremos mucho de cómo personalizarlo, eso lo haremos en otra clase. 00:06:42.344 --> 00:06:44.650 Hoy hablaremos de cómo usamos un 00:06:44.650 --> 00:06:47.790 shell para hacer cosas útiles. 00:06:47.790 --> 00:06:49.860 Y esta es la interfaz de texto principal en donde 00:06:47.790 --> 00:06:50.644 escribimos comandos de texto. 00:06:50.644 --> 00:06:53.430 En el shell, escribimos comandos. 00:06:53.430 --> 00:06:55.588 Estos comandos pueden ser 00:06:55.588 --> 00:06:58.290 bastante simples, usualmente, 00:06:58.290 --> 00:07:02.000 ejecutaremos programas con argumentos, bueno... y ¿cómo se ve eso? 00:07:02.000 --> 00:07:04.764 Un programa que podemos ejecutar dentro del shell es `date`. 00:07:04.764 --> 00:07:09.050 Escribimos "date" y presionamos Enter. Y, naturalmente, nos muestra la fecha 00:07:09.050 --> 00:07:13.270 y la hora. Asimismo, podemos ejecutar un programa con argumentos, también 00:07:13.280 --> 00:07:16.180 conocidos como parámetros. Existe un programa llamado `echo`, 00:07:16.180 --> 00:07:16.510 el cual simplemente imprime los argumentos que le damos. 00:07:16.510 --> 00:07:16.760 Los argumentos son "cosas" separadas por espacios que le damos al programa. 00:07:16.760 --> 00:07:17.290 Entonces, podemos decirle "hola" y nos imprime hola. 00:07:17.290 --> 00:07:18.100 Nuevamente, no del todo sorprendente, pero estos son los básicos de argumentos. 00:07:18.100 --> 00:07:22.160 También, si se dieron cuenta, dije que los argumentos están separados por 00:07:22.160 --> 00:07:24.620 espacios. Y podrían preguntarse, pero cómo le hago para que un argumento 00:07:24.620 --> 00:07:25.050 tenga espacios. Bueno. pues también podemos ponerlo entre comillas y escribir 00:07:25.050 --> 00:07:27.330 algo como "Hola mundo" en comillas y ahora contiente un argumento nuestro 00:07:25.050 --> 00:07:29.820 programa que contiene espacios. También se pueden usar comillas simples en lugar 00:07:27.330 --> 00:07:30.720 de dobles. Hablaremos de las diferencias cuando empecemos a hacer scripts 00:07:29.820 --> 00:07:32.940 en bash. También podemos utilizar el caracter de escape para un sólo caracter. 00:07:30.720 --> 00:07:35.610 Todas estas reglas las cubriremos más en específico después. Esperemos que no 00:07:32.940 --> 00:07:37.050 les den contratiempos con esto. Por ejemplo, si quiero crear un directorio 00:07:35.610 --> 00:07:38.550 llamado Mis Fotos se crearán 2 directorios, uno llamado Mis y otro, Fotos. 00:07:37.050 --> 00:07:40.380 Y probablemente eso no es lo que queremos. 00:07:38.550 --> 00:07:42.060 Ahora... una cosa que probablemente se preguntarán es cómo sabe a qué 00:07:40.380 --> 00:07:44.310 programas me refiero y cómo sabe dónde están esos programas y qué 00:07:42.060 --> 00:07:47.220 tienen que hacer? Y bueno, la respuesta es que su computadora tiene programas 00:07:44.310 --> 00:07:50.310 que vienen instalados dentro de sus computadoras. Justo como podría 00:07:47.220 --> 00:07:52.710 ir con Windows Explorer, la aplicación de la terminal, Windows Explorer, 00:07:50.310 --> 00:07:55.380 etc. también viene con aplicaciones centradas a la terminal. Y, estas, 00:07:52.710 --> 00:07:57.540 literalmente están en el sistema de archivos. Y, el shell, tiene una manera 00:07:55.380 --> 00:07:58.770 de determinar dónde están esos programas. Báicamente, tiene una 00:07:57.540 --> 00:08:00.480 manera de buscar en dónde está cada uno de estos programas. 00:07:58.770 --> 00:08:03.420 Y lo hace con algo llamado, una variable de entorno (conocida en 00:08:00.480 --> 00:08:06.120 inglés como ENVIRONMENT variable). Es simplemente como una variable 00:08:03.420 --> 00:08:09.000 que podrían encontrarse en un lenguaje de programación. De hecho resulta que 00:08:06.120 --> 00:08:12.150 el shell, y el BASH en particular, es un lenguaje de programación. 00:08:09.000 --> 00:08:15.720 Este prompt que tenemos aquí también puede realizar bucles while, for, 00:08:12.150 --> 00:08:17.340 condicionales. Podemos definir funciones, entre otras cosas. Esto lo hablaremos en 00:08:15.720 --> 00:08:19.590 la siguiente clase. Mientras tanto, veamos esta variable de 00:08:17.340 --> 00:08:21.330 entorno. Debo notar que las variables de entorno se asignan cada vez que iniciamos 00:08:19.590 --> 00:08:23.520 nuestro shell en automático. No son variables que tenemos que cambiar 00:08:21.330 --> 00:08:26.070 siempre que abrimos un shell. Hay variables de entorno que nos 00:08:23.520 --> 00:08:27.930 dicen dónde esta nuestro directorio de HOME (casa), el nombre del usuario y 00:08:26.070 --> 00:08:29.610 también, muy importante, la variable PATH (en español, camino). 00:08:27.930 --> 00:08:31.920 Entonces, si imprimimos con `echo` la variable $PATH esto nos mostrará 00:08:29.610 --> 00:08:33.780 todos los paths (caminos) en donde el shell buscará programas. 00:08:31.920 --> 00:08:35.880 Se darán cuenta de que esto es una lista separada por dos puntos, 00:08:33.780 --> 00:08:40.010 lo cual es bastante difícil de leer, pero lo esencial es que cada vez 00:08:35.880 --> 00:08:43.229 que escribamos el nombre de un programa buscará dentro de esta 00:08:40.010 --> 00:08:45.600 lista de paths, por un archivo ejecutable que tenga el mismo 00:08:43.229 --> 00:08:48.839 nombre que escribimos. En mi caso, cuando escribo 00:08:45.600 --> 00:08:50.700 `echo` buscará en cada uno de estos directorios hasta que 00:08:48.839 --> 00:08:53.190 encuentre un programa llamado `echo` y lo correrá. SI queremos 00:08:50.700 --> 00:08:54.000 saber dónde está el programa que corre podemos usar el 00:08:53.190 --> 00:08:55.439 comando llamado `which`. podemos escribir `which echo`. 00:08:54.000 --> 00:08:57.000 Esto quiere decir que si fuéramos a correr un programa llamado `echo` 00:08:55.439 --> 00:08:59.759 lo correríamos de ese archivo en específico. Es imporante mencionar 00:08:57.000 --> 00:09:02.579 lo que es un path (camino). Los paths son una manera de mencionar la 00:08:59.759 --> 00:09:05.339 ubicación que tienen tus archivos en tu computadora. En Linux y MacOS 00:09:02.579 --> 00:09:07.800 los paths están separados por diagonales, específicamente, diagonales para adelante. 00:09:05.339 --> 00:09:09.569 En inglés conocidos como `forward slashes`: / Y verán aquí que estamos en el directorio 00:09:07.800 --> 00:09:11.639 `root`, eso es lo que indica el primer slash (diagonal) y nos dice que nuestro 00:09:09.569 --> 00:09:14.819 path empieza en la raíz del sistema de archivos (file system). Entonces nos 00:09:11.639 --> 00:09:18.209 vamos al directorio llamado `usr`, después ve en el directorio `bin`y luego encuentra 00:09:14.819 --> 00:09:19.949 el archivo llamado `echo`. En Windows, los paths se separan por diagonales hacia 00:09:18.209 --> 00:11:21.630 atrás \\ 00:11:56.370 --> 00:12:02.070 En Windows, hay una raíz por cada partición. Puede que hayan visto 00:12:00.270 --> 00:12:05.130 algo como `C:\` a diferencia de Linux o macOS que traen todo bajo la misma 00:12:02.070 --> 00:12:08.220 'raíz'. Tal vez se dieron cuenta de que dije la palabra path absoluto (camino 00:12:05.130 --> 00:12:11.340 absoluto). Los absolute paths son caminos que determinan completamente 00:12:08.220 --> 00:12:13.050 la ubicación de un archivo. En este caso, estamos hablando de un archivo 00:12:11.340 --> 00:12:14.850 llamado `echo` en específico. Y nos está dando el camino completo al archivo. 00:12:13.050 --> 00:12:18.540 También tenemos caminos relativos. Y estos, como su nombre lo indica, están basados 00:12:14.850 --> 00:12:20.010 en donde estamos al momento. Podemos obtener el path en donde estamos 00:12:18.540 --> 00:12:21.690 con el comando `pwd`, el cual significa imprime el directorio de trabajo 00:12:20.010 --> 00:12:27.360 (print working directory).