Toolkit & Setup

En esta clase presentaremos algunos conceptos y herramientas que utilizaremos durante el curso. El objetivo final es instalar correctamente el toolkit de MAT281.

Sistema Operativo

  • Personalmente recomiendo Linux, en particular distribuciones como Ubuntu, Mint o Fedora por su simplicidad y transversalidad a la hora de instalar.

  • En ocasiones las implementaciones en Windows no están completamente integradas e inclusive en ocasiones no están disponibles. Actualmente contamos con dos alternativas para utilizar Linux en Windows:

  • En el caso que poseas un equipo con macOS no debería haber problema.

Interfaz de Línea de Comandos (Command Line Interface / CLI)

  • Es un método que permite a los usuarios interactuar con algún programa informático por medio de líneas de texto.

  • Típicamente se hace uso de una terminal/shell (ver imagen).

  • En el día a día dentro de la oficina facilita flujo de trabajo.

  • Permite moverse entre manipular directorios y ficheros, instalar/actualizar herramientas, aplicaciones, softwares, etc.

cli Screenshot of a sample bash session in GNOME Terminal 3, Fedora 15. Wikipedia

Entorno Virtual

  • Problemas recurrentes

    • Dependencias de librerías (packages) incompatibles.

    • Dificultad a la hora de compartir y reproducir resultados, e.g. no conocer las versiones de las librerías instaladas.

    • Tener una máquina virtual para cada desarrollo es tedioso y costoso.

    • Miedo constante a instalar algo nuevo y tu desarrollo (nunca) vuelva a funcionar.

  • Solución

    • Aislar el desarrollo con tal de mejorar la compatibilidad y reproducibilidad de resultados.

  • ¿Cómo?

    • Utilizando entornos virtuales.

Conda

Conda

Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN. (Link)

¿Por qué Conda?

  • Open Source

  • Gestor de librerías y entornos virtuales.

  • Compatible con Linux, Windows y macOS.

  • Es agnóstico al lenguaje de programación (inicialmente fue desarrollado para Python).

  • Es de fácil instalación y uso.

    • Miniconda: Instalador de conda (Recomendado).

    • Anaconda: Instalador de conda y otros paquetes científicos.

Otras alternativas

  • pip + virtualenv, el primero es el gestor favorito de librerías de Python y el segundo es un gestos de entornos virtuales, el contra es que es exclusivo de Python.

    • Ojo! En Conda también puedes instalar por pip.

  • Dockers es una herramienta muy de moda en grandes proyectos debido a ser, en palabras simples, un intermedio entre entornos virtuales y máquinas virtuales.

Python

Las principales librerías científicas a instalar y que ocuparemos durante el curso son:

A medida que avance el semestre detallaremos mejor cada una de estas (y otras) librerías.

Project Jupyter

Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.

Jupyter Notebook

Es una aplicación web que permite crear y compartir documentos que contienen código, ecuaciones, visualizaciones y texto. Entre sus usos se encuentra:

  • Limpieza de datos

  • Transformación de datos

  • Simulaciones numéricas

  • Modelamiendo Estadístico

  • Visualización de Datos

  • Machine Learning

  • Mucho más.

Jupyter Notebook Example

Jupyter Lab

  • Es la siguiente generación de la interfaz de usuario de Project Jupyter.

  • Similar a Jupyter Notebook cuenta con la facilidad de editar archivos .ipynb (notebooks) y heramientas como una terminal, editor de texto, explorador de archivos, etc.

  • Eventualmente Jupyter Lab reemplazará a Jupyter Notebok (aunque la versión estable fue liberada hace algunos meses).

  • Cuenta con una serie de extensiones que puedes instalar (y desarrollar inclurisve.

Puedes probar Jupyter Lab con solo dos clicks!

  1. Ingresar a este link: https://github.com/jupyterlab/jupyterlab-demo

  2. Hacer click en el icono de binder: Binder

Otros proyectos

Entre los más conocidos se encuentran:

Git

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Un control de versiones es un sistema que registra los cambios realizados en un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante. Aunque en los ejemplos de este libro usarás archivos de código fuente como aquellos cuya versión está siendo controlada, en realidad puedes hacer lo mismo con casi cualquier tipo de archivo que encuentres en una computadora (fuente).

Es importante comprender que Git es la herramienta que permite versionar tus proyectos, sin embargo, a la hora de querer aprovechar más funcionalidades, como compartir o sincronizar tus trabajos se hace necesario utilizar servicios externos. Los más famosos son:

  • GitHub

  • GitLab

  • Bitbucket

Piensa lo siguiente, cualquiera podría implementar un correo electrónico entre dos computadoras conectadas entre ellas por LAN pero no conectadas a Internet. Sin embargo la gente utiliza servicios como Gmail, Outlook, etc. con tal de aprovechar de mejor manera las funcionalidades que ofrece la tecnología del correo electrónico. Esta es una analogía perfecta entre las diferencias de Git y los servicios como GitHub o GitLab.

GitHub

GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside 30 million developers. Es decir, es una plataforma para alojar proyectos que utilizan Git como sistema de control.

El material del curso estará disponible a través de GitHub en el siguiente link: https://github.com/aoguedao/mat281_2020S2.

De manera experimental este año, se está implementando una página web del curso utilizando Jupyter Book y alojada en GitHub: https://aoguedao.github.io/mat281_2020S2

Resumen

  • Sistema operativo: Cualquiera, sin embargo se recomiendan alternativas basadas en Unix.

  • Lenguaje de programación: Python

  • Entorno virtual: Conda, preferentemetne a través de miniconda.

  • Entorno de trabajo: Jupyter Lab.

  • Versionamiento: Git & GitHub.