domingo, 6 de septiembre de 2015

NIC Chile y AWS Route 53

Luego de googlear estas keyword no encuentro nada respecto a la configuración de NIC Chile con route53, por descarte he configurado un dominio poniendo el nombre del registro NS en la caja que toca y la IP la tuve que obtener con ping al NS alias que me devuelve route 53.
UPDATE: debido a que gente me ha comentado que existe la posibilidad o que las IP dan lo mismo pues el error viene siendo este:

Como funciona, en la consola AWS Route 53 creamos la zona, la cual nos genera el SOA y los registros NS que debemos pasar a nic.cl, se puede ver en la imagen siguiente.


Ahora debes hacer ping a laso registros NS para obtener su IP ya que el sistema de nic.cl no resuelve la IP y te obliga a indicarla manualmente, en la siguiente se puede apreciar como obtener las IP's.


ya con las IP de los NS ir a nic.cl y solicitar la modificación del dominio, lo cual te envía un código para hacer la modificación, etc.
Una vez ingresado el código de autorización (no están las imagenes por motivos obvios) ya se puede ir a la página con los datos y tal como se puede ver en la siguiente imagen, están los registros con sus respectivas IP's


 Ya puedes guardar los cambios y todo debería ir bien si la zona tiene todos los registros que necesitas, la ventaja de esto es que ahora puedes usar el apex con cloudformation y s3.

Nota final: Esto no esta documentado en ningún sitio de momento funciona si no cambian las IP de los NS de route 53 si encuentro NIC CL se pronuncia al respecto en algún momento ya lo actualizaré.


jueves, 27 de agosto de 2015

Python Developer best practices


Buenas practicas que para seguir y no para olvidad


  1. Primero leer e interiorizar en tu forma de pensar el pep 20 
  2. Por favor en la medida de lo posible recomiendo que uses PyCharm el tiempo te hará más productivo yo ya perdí el tiempo probando todos los IDE's que existen. Ademas se integra muy bien y nunca te dará problemas.
  3. Respeta el la guía de estilo del PEP8 
  4. Si no quieres caer en malas practicas leer este articulo article antes de codificar
  5. Si usas git como VCS install git-flow-avh en mac ports y está por defecto en ubuntu
  6. Ten en consideración el costo de las operaciones time complexity
  7. Este apartado sobre argumentos en las funciones debe complementar a PEP8, ya que los argumentos posicionales terminan dando problemas y es mejor usar key-words en vez de argumentos posicionales, por otro lado el hecho de atajar los parametros en una lista y en un diccionario deja tu función habilitada para argumentos posicionales y por clave-valor. La ventaja de usar clave-valor es que no importa el orden de los argumentos cuando llamas a la función.
ver ejemplo:
Si:
def func_example(*args, **kwargs, param1=value1, …, )

No:
def func_example(param1,...)

miércoles, 25 de febrero de 2015

NAS Casero y otras maravillas con BananaPi y Debian AKA bananian

Intro

Mi primer post del 2015 un mes montandome lo que voy a contar a continuación y todo nació porque....
Buscaba tener un NAS en casa para que la familia almacene fotos y otras cosas importantes, también queria tener una seedbox para los torrents y reducir el consumo energetico de un PC encendido para hacer downloads. Otro tema era el de compartir las peliculas directamente desde un solo punto por tanto ya se descargan al NAS mediante transmission-daemon y couchpotato.

Img. 1.1

Img. 1.2

Materiales.

BananaPi €34 solo placa y €43 con caja y cable SATA en aliexpress.com (Img 1.1)
HDD WD NAS Red 1T 2.5" €82
RaspberryPi B+ (Img 1.2) y in disco externo USB 2 puede ser Una opcion mas economica.
Costo total €130 con la caja del disco y el envío aliexpress tiene free shipping. La solución elegante sería una synology que va desde los €160 sin discos y una caja My Cloud WD de €160 versión básica y sin lo versatil ni la diversión DIY.

Nota: la nueva BananaPro cuesta €43 solo placa.
OS bananian este y otros están todos disponibles en la aquí.
Los esenciales son:
bananian OS imagen dumped

apt-get update
apt-get upgrade
apt-get install openssh-server nfs-kernel-server nfs-common nginx git-core transmission-daemon samba

cd /usr/local/src
git clone https://github.com/SiCKRAGETV/SickRage.git sickrage
git clone https://github.com/RuudBurger/CouchPotatoServer.git

cat /etc/nginx/nginx.conf
user www-data;
worker_processes 2;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        gzip on;
        gzip_disable "msie6";
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

cat /etc/nginx/conf.d/torrent.conf
server {
        listen 80;
        server_name torrent.bsdchile.cl torrent;
        access_log /var/log/nginx/torrent-access.log;
        location / {
                root /usr/share/transmission/web;
                proxy_pass_header X-Transmission-Session-Id;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://127.0.0.1:9091/transmission/web/;
        }
        # Also Transmission specific
        location /rpc {
                proxy_pass http://127.0.0.1:9091/transmission/rpc;
        }
}

cat /etc/nginx/conf.d/couchpotato.conf
server {
        listen 80;
        server_name movies.bsdchile.cl movies;
        access_log /var/log/nginx/exiled-access.log;
        location /static/ {
                root /usr/local/src/CouchPotatoServer/couchpotato;
        }
        location / {
                proxy_pass http://127.0.0.1:5050;
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_redirect off;
                proxy_buffering off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

cat /etc/nginx/conf.d/tv.conf
server {
        listen 80;
        server_name  tv.bsdchile.cl tv;
        location / {
                root /usr/local/src/sickbeard;
                proxy_pass  http://127.0.0.1:8081;
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_redirect off;
                proxy_buffering off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

cat /etc/default/couchpotato
# COPY THIS FILE TO /etc/default/couchpotato
# OPTIONS: CP_HOME, CP_USER, CP_DATA, CP_PIDFILE, PYTHON_BIN, CP_OPTS, SSD_OPTS

CP_HOME=/usr/local/src/CouchPotatoServer
CP_USER=www-data
Cambiar owner
chown -R www-data. /var/opt/couchpotato
dns opcional
apt-get install ntfs-3g bind9 bind9utils bind9-host dnsutils

viernes, 23 de mayo de 2014

introduccion a SQLAlchemy python ORM

Dejo aquí mi paso por pybcn.org, SQLAlchemy es mucho más, pero solo eran 20 minutos de presentación.




El código utilizado en la presentación está aquí