viernes, 16 de noviembre de 2018

Instalando Python 3, Miniconda y Jupyter en Ubuntu para Ciencia de Datos

Anaconda es una distro que proporciona un instalador y gestión de paquetes para PyDataScience y, aunque es gratuito, incluye código binario precompilado (no es completamente open source). Vamos a ver qué nos ofrece.

Instalación

Vamos a instalar una versión "minified" de Anaconda: Miniconda. Para ello, bajamos el .sh desde este link, versión 3.
Cambiamos los permisos:
sudo chmod +x ./Miniconda3-latest-Linux-x86_64.sh 
Lo corremos:
./Miniconda3-latest-Linux-x86_64.sh 
El instalador nos pregunta si queremos incluir el path. Le decimos que si. Cerramos la terminal, abrimos otra y probamos si funciona: 
conda list
Verificamos tener la última versión instalada: 
conda update conda
También vamos a instalar una IDE: 
conda install jupyter

Ejemplo de uso

En primer lugar, vamos a levantar el server de nuestra IDE con el siguiente comando:
jupyter notebook
Una vez abierto el entorno, hacemos click en el combo (en la esquina superior derecha) "Nuevo > Python3" y se nos abre un nuevo entorno con el archivo. Le damos un nombre.

En la primera línea de nuestro archivo, importamos pandas:
import pandas
Le damos click en "run" y nos advierte que no tenemos el paquete. Entonces vamos a una terminal y ejecutamos:
conda install pandas matplotlib
Si, tenemos instalado pip pero lo recomendable es intentar primero con "conda install packane_name". Si no lo encuentra, recién ahí usar pip.

Ahora volvemos a Jupyter, hacemos click en la línea que escribimos y le damos "run" de nuevo. Esta vez deebría pasar .

Creamos un archivo llamado "demo-data.csv" con este contenido: 

Nationality,Age,Height,Study-Level,Exam-Rank
Italian,21,1.56,High school,6
French,23,1.88,Degree,3
Spanish,37,1.92,Postdegree,8
Italian,23,1.23,High school,10
French,45,1.56,Degree,3
Spanish,54,1.88,Postdegree,6
Italian,25,1.92,Degree,7
French,42,1.23,Degree,9
Spanish,24,1.56,High school,2
Italian,26,1.88,Degree,8
French,26,1.92,Postdegree,7
Spanish,36,1.23,High school,5
Spanish,28,1.55,Degree,4

 Y, de nuevo desde jupyter, escribimos estas líneas, una por cuadradito:
import pandas
myData = pandas.read_csv("/home/gabi/dev/miniconda3_docs/demo-data.csv")
print(myData.columns)
print(myData.shape)
import matplotlib.pyplot as plot
plot.hist(myData["Age"])
myData.corr('pearson')['Exam-Rank']
myData.corr('spearman')['Exam-Rank']

A jugar! 

Instalando Docker y Docker Compose en Ubuntu

¿Qué son Docker y Docker Compose?

Docker es sistema que hace virtualización a nivel de sistema operativo (containerization). Docker permite crear contenedores sobre los que las aplicaciones pueden ejecutarse sin importar qué sistema operativo, frameworks, dependencias, etc. la máquina tenga corriendo por debajo.

Docker Compose es una herramienta que permite ejecutar aplicaciones en múltiples contenedores.

Instalando Docker CE

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update

sudo apt-get install docker-ce

Probando el test ofrecido por Docker CE:
sudo docker run hello-world

Instalando docker compose

Bajar docker compose: 
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Darle permisos de ejecución:
sudo chmod +x /usr/local/bin/docker-compose

Verificar que se instaló:
docker-compose --version

Extra

Para detener los contenedores y eliminar contenedores, redes, volúmenes e imágenes creadas por el comando up:
sudo docker-compose down

Como el servicio de Docker inicia automáticamente, en caso de querer deshabilitarlo:
sudo systemctl stop docker
sudo systemctl disable docker.service

Fuentes de información

https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/compose/install/#install-compose 

sábado, 13 de octubre de 2018

Instalando Pyton, Anaconda y Pip en Ubuntu 18

Anaconda es una distribución de los lenguajes Python y R para hacer data science y machine learning. Para esto es recomendado tener mucha memoria, 8 o 16 GB.

Descargar Anaconda versión 3 desde https://www.anaconda.com/download
Si estás desde Ubuntu, como yo, basta con bajar el .sh y:

  1. sudo chmod +x Anaconda3-5.3.0-Linux-x86_64.sh
  2. bash ./Anaconda3-5.3.0-Linux-x86_64
    1. Al final del proceso, te pregunta "Do you wish the installer to prepend the Anaconda3 install location to PATH in your /home/sammy/.bashrc ? [yes|no]". Eligiendo "yes", podremos usar el comando conda.
    2. También te va a preguntar si querés instalar Visual Studio Code. Yo lo instalé para probarlo. Actualmente es gratis y open source.
  3. Activá la instalación: source ~/.bashrc
  4. Testeá la instalación: conda list
  5. Creá el launcher: code ~/.local/share/applications/anaconda-navigator.desktop
  6. Escribí en el archivo:

    [Desktop Entry]
    Version=1.0
    Type=Application
    Exec=/home/gabi/dev/anaconda3/bin/anaconda-navigator
    Name=Anaconda Navigator
    Icon=/home/gabi/dev/anaconda3/share/icons/spyder3.png
    StartupNotify=true

Listo, con esto tenés Python + la IDE Anaconda. Aún si hubioesemos instalado solo Python, PIP ya viene instalado por defecto, aunque quizas sea necesario actualizarlo. Para lo cual corremos:
pip install --upgrade pip

Si no quisieras usar Anaconda, simplemente instalá https://www.python.org/downloads/latest

Para instalar una librería con PIP: pip install pandas
Para probar que se haya instalado correctamente, el siguiente comando no debería arrojar error: python -c "import pandas"


miércoles, 12 de septiembre de 2018

Borrar commits del historial de un repositorio git

Borrando todo el historial

Algunas veces necesitamos "reiniciar" un repo. Por ejemplo, supongamos que nos olvidamos de incluir la licencia en el primer commit y no queremos dejar código sin ella.

Primero, asegurate de tener una copia extra de todo tu repo aparte. Luego, desde la carpeta original donde tenés el repo:

  1. Eliminá el historial
    rm -rf .git
  2. Inicializá tu repo
    git init
  3. Agregá todo lo que quieras tener en tu primer commit y luego
    git add .
  4. Creá el commit inicial
    git commit -m "Initial commit"
  5. Agregá el origen remoto a tu repo local
    git remote add origin https://github.com/........git
  6. Hacé push al repo remoto
    git push -u --force origin master

Borrando el último commit remoto

Algunas veces nos equivocamos o nos faltó algún detalle que no queremos que esté publicado por si solo. Por ejemplo, escribiste una clase y olvidaste ponerle licencia.

git push https://github.com/........git +xxxxxxxxxxx^:master

Donde 
  • https://github.com/........git es tu repo 
  • xxxxxxxxxxx = el numero de commit
Accedé a tu repo desde la Web y vas a ver que ese último commit ya no está. Podés repetir la oepración cuantas veces sea necesaria, aunque reemplazando el número de commit. 

Tené en cuenta que aunque borraste los commits remotos, aún los tenés localmente. Podés borrarlos localmente o simplemente clonar el repo de nuevo.


lunes, 18 de abril de 2016

Control de versiones de tu proyecto con GIT + Bitbucket

Registrar un nuevo repositorio. Desde la pantalla principal de Bitbucket, navegá a Repositorios > Crear un nuveo repositorio. Ingresá un nombre y dale click a “Crear”.
mkdir ./DemoRepo
cd ./DemoRepo

Crear el directorio del proyecto en tu computadora. Abrí una terminal, dirigite a la ubicación donde te gustaría tener el repo, e ingresá:

Iniciar el repo en tu máquina local.
git init
git remote add origin https://tuUsername@bitbucket.org/tuUsername/demorepo.git

Incluí los archivos de tu proyecto en este directorio. Si ya iniciaste un proyecto, simplemente copiá y pegá los archivos a esta ubicación.

Comprobá el estado de tu repo. Desde la terminal:
git status

Ahi vas a ver listado todos los archivos que han sido modificados desde el último snapshot (o commit). Como este es el primero, vas a ver listado todos los archivos.

Aceptá los cambios y creá un commit:
git commit -am "This is the first commit. Please write something descriptive here!"

Si este snapshot es realmente importante y querés resaltarlo de otros existentes, podés usar tags. Estos tags se aplican al último commit en tu repositorio local. Para ello:
git tag -a v1.0 -m "Initial working version"
Y es muy importante que para que otros puedan ver estos tags cuando los subas al repo general, lo hagas mediante:
git push --follow-tags

Si te olvidás de ese parámetro, solamente vos vas a ver el tag en tu repo local. Este último comando, push, subió tu snapshot al repositorio general... o al menos lo intentó. ¿Por qué digo esto? Porque si mientras vos hacías estos cambios a la versión inicial, alguien más hizo otro cambio, subió al repositorio general, y las líneas que modificaron son las mismas, git no va a dejarte subir tu commit tan fácilmente. Vas a tener que hacer un merge. Pero eso lo vemos más adelante, porque probablemente aquí tengas que configurar algo más:

Configurar la acción por default de “push” sobre el repo remoto. Acá tenés dos opciones: matching o simple. La primera hará que cuando hagas push, todas las ramas (branches) que tenés en el repositorio se actualicen. La segunda, que solo se actualice la rama sobre la cual estás trabajando. Yo prefiero la segunda, sobre todo si laburás en equipo.
git config --global push.default simple

Si aún no podés hacer push, puede que aún debas configurar la rama maestra. Para ello basta con agregar los siguientes parámetros:
git push --follow-tags --set-upstream origin master


Tranca. Esto solo vas a necesitarlo la primera vez. Y si no tenés nuevos tags que actualizar, te va a bastar con un simple “git push” de ahora en más.

Especifića que archivos no deberían incluirseen el commit. Esto puede ser útil para excluir archivos temporales o clases compiladas. Para ello, en la raiz del repositorio, desde la terminar ejecutá:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
gedit .gitignore


Agregá la ruta a las carpetas y/o archivos que quieras excluir. Ojo, esto hace que no se suban al repo, no solo que no se "trackeen". Podés reemplazar "gedit" por tu editor de texto de preferencia.

Visualizá tus commits. 
Ahora solo tenés que laburar en tu proyecto y hacer commits y pushs cada vez que lo creas necesario. ¿Es bueno hacer commit cada vez que dejo de laburar en algo? Mmm… No. Nada te lo impide, pero es bueno hacer commits solo de versiones que tengan alguna nueva funcionalidad en buen estado, no a medias. Esto es tanto más importante para con los push. (no queremos joder a otros con constantes cambios). Pero en definitiva, es algo que seguramente vas a acordar con tus compañeros de equipo.

¿Que puedo necesitar de ahora en más?

  • Mergear commits
  • Hacer stasing, en lugar de commit
  • Volver atrás para comparar alguna versión vieja de un archivo o proyecto
  • Volver a laburar con una versión vieja de un archivo/proyecto (revertir commits)
  • Laburar con branches

domingo, 31 de enero de 2016

Instalando Moodle 3 desde Ubuntu 15

1. Instala Apache, MySQL y PHP.
El primero de ellos se trata de un servidor Web de código abierto, que nos permitirá levantar un sitio virtual. EL segundo es un sistema de gestión de base de datos relacional. El último se trata de un lenguaje de desarrollo Web. Este código es interpretado del lado del servidor, por lo cual es necesario que instalemos un módulo procesador de PHP, que genere la página Web especificada. Para todo esto:
sudo apt-get install apache2 mysql-server php5 php5-mysql
2. Instala paquetes adicionales:
sudo apt-get install graphviz aspell php5-pspell php5-curl php5-gd php5-intl php5-mysql php5-xmlrpc php5-ldap
3. Reinicia para que sean cargados correctamente:
sudo service apache2 restart
Otros comandos útiles son: start | stop | reload | status
4. Ingresa a http://localhost/ desde el navegador Web y verifica que el servidor esté en funcionamiento. Si es así, verás la Apache2 Ubuntu Default Page.

5. A partir de ahora, podemos crear páginas o sitios en /var/www/ y podrán ser accedidos desde localhost. Para ello, puede que requieras cambiar el owner de los directorios creados, para tener acceso ilimitado. Para ello:
sudo chown gabi:gabi -R /var/www
Donde gabi es el nombre de tu usuario
6. Descarga Moodle desde aquí, extraelo y copialo en /var/www/html

7. Accede a http://localhost/moodle (o como hayas llamado a tu carpeta de moodle) y sigue los pasos de configuración. Si en algún momento del proceso obtienes un "Upgrade error", ingresa esto mediante terminal y recarga la página:
cd /var/www;sudo ln -s /usr/share/moodle
8. Start playing!



viernes, 6 de noviembre de 2015

Desarrollando extensiones de Firefox

1) Instalar NPM:
sudo apt-get install npm

2) Instalar JPM:
sudo npm install jpm --global

3) Si nos encontramos con error, porque no se encuentra node, crear un symlink:
sudo ln -s "$(which nodejs)" /usr/bin/node

4) Instalar la extensión auto-installer:
https://addons.mozilla.org/es/firefox/addon/autoinstaller/

5) Crear un esqueleto:
jpm init

6) Modificar su código, y postearlo con:
jpm watchpost --post-url http://localhost:8888/

7) Para instalar extensiones, a partir de Firefox 42, el browser requiere que las mismas están firmadas. Para instalar la que estamos desarrollando, si no están usando la edición Developer o Nightly, tienen que entrar a
about:config 
y cambiar el valor de la siguiente entrada a false:
xpinstall.signatures.required