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