Claro Nicaragua: el monopolio de las telecomunicaciones al que no le gustan las críticas.

Cuando eres grande, tienes un monopolio puesto en práctica en televisión por cable, telefonía fija, internet, telefonía móvil(a medias) en todo un país te resulta fácil ganar dinero aunque tu servicio sea pésimo y con altos costos.

En Nicaragua el costo del internet es muy elevado en comparación con otros países de la región y la calidad ni se diga, tienes un 128kbs cuando pagas por 1mbs con cortes arbitrarios, pésimo servicio al cliente que en sus buenos ratos tarda unos 5 días en resolverte un problema de conexión y otras maravillas técnicas en sus redes.

Y aparte de TODO eso que ya es terrible ahora atentan contra la libertad de expresión y neutralidad de la red.

Recientemente un grupo de clientes insatisfechos abrieron un portal para quejarse de esto, el portal en pocas horas logró cierta tracción en las redes sociales, y en menos de 2 días claro bloqueó el acceso al sitio y a toda la IP del servidor afectando a otros sitios mas.

El sitio es http://claroqueno.com para los abonados de esta compañía pueden verlo acá usando proxy.

 

¿Cómo podemos ayudar?

Comunica: Hazte fan de Claro Que No en Facebook, siguelo en twitter, regá la voz, esto no puede seguir así.

¿Por qué esto es grave?

Esto sienta un terrible precedente, en un futuro podrían bloquear a otras empresas competidoras, blogs independientes, alguna aplicación que no les convenga y a como ya hacen: limitar ancho de banda en cierto sitios como youtube.

No esperen ver nada de esto en los medios, no creo que publiquen algo al respecto ya que casi NUNCA critican a esta empresa, que es una de las que mas gasta en publicidad en el país, y los medios escritos que por esta época mueren no tienen otro palo donde ahorcarse.

PD: El blog de Peñalba abordó el tema del monopolio hace un tiempo atrás.
Post relacionado de Juan Ortega

Actualización:

Claro desbloqueó el sitio, después de casi un mes de reclamos por parte de la comunidad  en línea de Nicaragua. Claro se lució por lo tardío de la respuesta y de la activación del modo Shakira(sordos-ciegos-mudos) en las redes sociales y canales de atención sobre el tema.

Llegaron a creer que el sitio era de la “competencia” (puesto entre comillas por que solo les afecta en un ramo del imperio) e ilusamente publicaron en los medios a los que ellos sí tienen acceso fácilmente ya que pagan miles de pautas publicitaria al año en estos.

Lo peor aún es el silencio, aún no reconocen el error esperemos que tengamos respuesta pronto.

Django Suite III: Usando virtualenv y pip.

Tercera entrega de la serie sobre Django, esta vez no hablaré del framework en si, sino de un par de herramientas básicas del ecosistema de Python para ayudarnos a ser mas ordenados a la hora de desarrollar proyectos.

Virtualenv es una herramienta que nos ayuda a crear ambientes aislados para Python en palabras mas simples instala las bibliotecas e intérprete en una carpeta separada a la de nuestra instalación en el sistema operativo, la ventajas están en que nos provee una manera fácil, rápida, segura y reproducible de hacer desarollo y pruebas de diversas aplicaciones.

Por otra parte pip es una herramienta para instalar paquetes de Python desde el Python Package Index que es el repositorio comunitario de paquetes. En conjunto con virtualenv, pip nos ayuda a tener todo organizado y limpio.

Usando Virtualenv

Primeramente lo instalamos con nuestro manejador de paquetes favorito, en caso de ubuntu el paquete se llama “python-virtualenv” luego procedemos a crear nuestro primer ambiente virtual.


virtualenv primer_ambiente --no-site-packages

Donde primer_ambiente es el nombre que deseamos ponerle y –no-site-packages es un parámetro para que se cree un ambiente totalmente limpio tal y como fuera una instalación básica de python sin ninguna biblioteca extra. La ejecución de este comando creará una carpeta en el directorio en donde lo ejecutamos, recomiendo crear en su directorio $HOME una carpeta llamada virtualenvs para guardar todos los que vayamos creando en un solo lugar. Para activarlo hacemos lo siguiente:


source /path/a/primer_ambiente/bin/activate

Sabremos que está activo por que en nuestra consola aparecerá (primer_ambiente) en el prompt, ya en nuestro ambiente podremos usar pip para confirugrarlo a nuestro gusto.

Para volver a la normalidad usamos el comando:

deactivate

Usando pip

La función principal de pip: instalar, actualizar y eliminar paquetes nos enfocaremos en esas tres funciones.

Instalar:

pip install django
pip install django==1.3.1

La primera línea instalaría django en la versión mas actual del pypi, mientras que en la segunda con el operador de igualdad podemos forzar la instalación de una versión específica de django o cualquier paquete requerido, esto es muy útil a la hora de tener incompatibilidades o código legacy.

Desinstalar

pip uninstall django

Simplemente elimina el paquete especificado.

Actualizar

pip install django --upgrade

Instalará la versión mas actual del paquete ya instalado previamente.

Congelar

pip freeze > requirements.txt

Esto produce un archivo de requemientos en el formato que pip puede entender, el archivo de requerimientos detalla las dependencias que tiene un ambiente, su formato acepta tanto origenes del pypi, paquetes en formato tar.gz repositorios en git, mercurial y svn. Comúnmente nos encontraremos de un requirements.txt en muchos proyectos.

Si ejecutamos este comando  en primer_ambiente seguramente tendremos un par de requerimientos, django que hemos instalado manualmente y distribute, que viene por defecto.

Instalar desde un archivo de requerimiento.

pip install -r requirements.txt

Esto leerá el archivo de requerimientos y lo instalará en el ambiente actual.

¿De qué nos sirve todo esto?

Simple: orden, orden, orden! Ventajas de usar virtualenv + pip:

  1. reproducible
  2. fácil de compartir por medio del archivo de requerimiento
  3. no afecta los paquetes del sistema
  4. nos ayuda a la hora de hacer deployments con django.
Ahora repitan conmigo: “todo proyecto de django deberá tener su propio virtualenv”
Lectura extra:
Virtualenvwrapper: un interesante proyecto que provee comandos mas fáciles de recordar para crear, usar y activar virtualenvs.

Django Suite II: Configurando nuestro proyecto de manera correcta.

En esta entrada abordaremos un tema importante: la configuración del proyecto. Como dije en la entrada anterior, en configuraciones tampoco hay una manera definitiva de hacer las cosas ya que la flexibilidad de Django nos lo permite.

Django usa archivos Python para guardar configuraciones, aprovecha la manera de trabajar del lenguaje para hacer archivos de configuración fáciles de leer, extender y utilizar dentro de nuestros proyectos.

Normalmente al iniciar una aplicación creamos un proyecto en blanco con el comando startproject que nos crea una carpeta con los archivos necesarios para iniciar.

Por defecto estas configuraciones tienen ciertos valores de los cuales normalmente nos molestaremos en cambiar sólo algunas, como configuración de bases de datos, ubicación de archivos estáticos y servidor de correo.

Acá algunos trucos para hacer estas configuraciones de manera dinámica y distribuibles para usarse en sistemas de control de versiones:

Separación del archivo settings.py

Este archivo contiene muchas veces datos sensibles que no pueden  ser publicados o simplemente varían de una estación de trabajo a otra, por lo que conviene separarlo con un archivo extra que por convención lo llamamos“settings_local.py” acá deberán ir estas configuraciones:

  • DATABASES
  • ADMINS
  • DEBUG
  • TEMPLATE_DEBUG
  • SECRET_KEY (si lo vas a hacer código libre y público)
  • Claves privadas en caso de usarse( ej. alguna clave de API de terceros)
  • Configuraciones de correo.


Como prodrán ver acá incluyo una configuración extra llamada PROJECT_DIR que usaremos luego. Para mandar a llamar este nuevo archivo en el inicio de nuestros settings.py incluimos la siguiente línea:

from settings_local import *

Dinamizando las rutas de archivos estáticos.

Django requiere rutas de archivos para cargar archivos estáticos y definir donde estarán nuestras plantillas, para hacer esto de manera dinámica y distribuible usamos un poco de Python. En el archivo settings_local definimos PROJECT_DIR, que no es mas que la ruta del directorio donde se encuentra dicho archivo, a partir de éste armaremos MEDIA_ROOT, TEMPLATE_DIRS y STATIC_ROOT

Ejemplo:

gitignore

Si vas a usar git u otro sistema de control de versiones recomiendo agregar ciertos archivos al ignore de tu SCM para git tengo un ejemplo acá será similar para otros sistemas.

Presentando django-initkit.

Para no hacer todo estas configuraciones cada vez que tengamos que iniciar un proyecto he creado django-initkit que es un proyecto simple que sobrecarga el comando startproject para hacer automáticamente todo lo que describí en este post. Para instalarlo puedes hacerlo desde Pypi (pip install django-initkit) o haciendo checkout desde github.

Su uso es igual a django-admin.py, nada más que el nombre del comando es django_initkit.py

Ejemplo:

django_initkit.py startproject foo

Espero que les haya gustado el post de hoy, pueden sugerir mas temas en los comentarios.

Django Suite I: Iniciar con Django.

Esta es una parte de una serie de post semanales que estaré dedicando a distintos temas de Django. El titulo Django Suite es un pequeño juego de palabras ya que el nombre del framework fue inspirado por el gran guitarrista de jazz Django Reinhardt y suite que se define como un tipo de pieza musical compuesta por varios movimientos breves.

Para el primer movimiento empezaré con lo básico el inicio, no voy a realizar un tutorial de como iniciar en Django por que hay muchos ya en internet que son útiles pero debido a que muchas personas me preguntan cual es la mejor manera de iniciar con Django hago este post para guiarlos un poco sobre lo que las guías dan por hecho pero que nos pueden hacer perder algo de tiempo buscando por ahí.

Sinceramente no hay bala de plata para lograr cabalgar al pony sino por que el proceso de aprendizaje varía de quien en quien, lo que si puedo decir es que Django es uno de los proyectos mejor documentados que existen, casi todo el framework menos algunas funciones internas muy poco usadas están descritas en https://docs.djangoproject.com/ en la dirección anterior puedes navegar fácilmente todos los temas.

La documentación es muy buena pero no te servirá de nada si no tienes un conocimiento básico de Python lo bueno es que existen libros como este y tutoriales completos como este otro. Cosas a tener muy en cuenta para conocer en python primero:

  1. Definición, uso y construcción de módulos en Python.
  2. Definición y uso de funciones del tipo genérica, uso de parámetros *args y *kwargs.
  3. Uso y construcción de expresiones regulares básicas.
  4. Programación orientada a objetos y herencia de clases.
  5. Como instalar paquetes de python desde PyPi.
Django depende bastante de estos cuatro puntos anteriores, por ejemplo sin conocer mucho de expresiones regulares no podrán construir urls.

Herramientas

Todo lo que necesitas es el interprete de python, django instalado, un navegador web y tu editor de texto favorito. Existen también algunos IDE con soporte a Django como Wingware y soporte para Python en Eclipse trabaja con lo que te sientas mas cómodo.
Para motor de base de datos puedes elegir Postgres, MySQL, SQLite3, SQL Server y Oracle igual que el punto anterior, usa tu favorito.

Modo de Trabajo

Tienes que tomar en cuenta que Django es un framework que usa el patrón MVC por lo que preferiblemente y por el bien de tu código debes de separar muy bien la lógica, presentación y datos de tu aplicación, si ves que esto se mezcla estás haciendo algo mal.

Django es modular e introduce el concepto de “aplicaciones plugables” que no son mas que módulos de Python encapsulando una parte de funcionalidad de tu aplicación web. Ejemplo práctico: Tenemos una página con un foro, un blog y una galería de fotos nuestro proyecto tendría como mínimo tres aplicaciones django separando la sección de blog, galería y foro. Este tipo de diseño hacen que existan mucho código libre de aplicaciones que simplemente conectamos con nuestro proyecto, si tiene nombre es muy probable que haya una aplicación de django para eso!

Si no me crees ve a http://djangopackages.com/ y busca las múltiples alternativas para resolver un problema que tengas. Normalmente en mis proyectos uso al menos una aplicación creada por terceros y eso nos facilita la vida tremendamente. En la práctica gracias a esto podemos hacer un sitio con registro de usuarios, confirmación de correo, manejo de avatares, perfiles de usuarios, blog, menús dinámicos en menos de media hora, sin tomar en cuenta el tiempo que nos llevaría realizar el diseño en html.

Django también provee un motor de plantillas sencillo de entender pero a la vez muy poderoso que permite separar los roles entre el frontend y backend, haciendo mas sencillo el trabajo en equipos.

Mantenerse al día

Como todo en la vida y mas en el mundo de la programación y tecnología es una necesidad mantenerse informado con lo último. Acá una pequeña lista de sitios que pueden ayudar:

Te invito a probarlo y te aseguro que te engancharás enseguida, si le dedicas algo de tiempo podrías comenzar a hacer sitios web completamente funcionales en menos de una semana.
El fin.
PD. Puedes dejar sugerencia sobre nuevos temas en los comentarios.

Ahorra tiempo, se mas productivo con Byobu

Byobu es un manejador de ventanas para terminal, en términos sencillos permite controlar varias ventanas de terminal desde una sola, esto es muy útil especialmente cuando estamos en servidores remotos en los que no tenemos acceso a un ambiente gráfico y manejadores de ventana desde GUI como los que estamos acostumbrados en nuestra máquina local. Este concepto ya existía en GNU screen del cual Byobu es un envoltorio y nos permite manejar de manera mas sencilla sus funciones.

Podemos instalar Byobu directamente desde los repositorios de ubuntu y luego configurarlo fácilmente a como describo en los siguientes pasos.

  1. Instalar con: apt-get install byobu
  2. Activarlos por defecto con: byobu-enable (podemos revertir esta opcion con byobu-disable)
El modo de uso es sencillo, acá una lista de los movimientos básicos para mas información ve a la documentación de Byobu:
  1. F2 - nueva terminal
  2. F3 - moverse a la siguiente terminal
  3. F4 - moverse a la terminal anterior
  4. F8 - renombrar la terminal
  5. F9 - abrir configuración
Acá un pantallazo:

 

 

2011- ¿Año de viajes o de cambios?

¿Qué puedo decir? Este año para mí ha sido de muchas bendiciones en todos los aspectos de mi vida, para comenzar cronológicamente en febrero de este año fuí invitado a participar en el taller “Digital Natives with a cause?” que es parte de una investigación a nivel mundial llevada a cabo por The Centre for Internet  & Society” e Hivos este se llevó a cabo en Santiago de Chile y fué una experiencia muy enriquecedora en mi vida, conocí a gente que esta haciendo cosas muy interesantes de (ciber/hack)activismo a nivel latinoamericano. Cuento un poco mas de esta experiencia en mi blog en digitalnatives.in y visualmente en las fotos que recolecté durante el viaje.

Un mes después fuí a parar a una de las conferencias de esas en las que uno tiene que ir a modo casi religioso de  ”al menos una vez en la vida”. Gracias a la Python Software Foundation pude viajar y formar parte de la PyCon US 2011 en Atlanta, Georgia en marzo de este año. Viaje que disfruté muchísimo como podrán imaginar, siendo yo todo un Python fanboy. Pude disfrutar de muchas conferencias muy interesantes que también están disponibles en video online. También de este viaje tengo fotos aunque de muy mala calidad :-( .

¿Después de dos conferencias faltaba una fiesta no? En abril cumplí otro sueño :-) ver a mi banda favorita, Stratovarius, en vivo y a todo color gracias a que tuvieron una parada en Costa Rica a la cual no dudé ni un momento en asistir. En este viaje me acompañó mi hasta entonces novia @hask. Foto acá.

Luego vino junio… y me casé! Una de las decisiones mas importantes que he podido tomar en mi vida :-) (les debo las fotos para mas tarde).

A solo dos días nuestra boda, fuí invitado a formar parte del equipo de Askbot que ahora ademas de ser un proyecto de software libre con el que ya había colaborado anteriormente, fué aprobado dentro del programa StartUp Chile. Así es nos vamos a Chile desde agosto. Ya me faltan pocos días para estar en mi querida Nicaragua, toca comer todo lo que se añora: rosquillas, quesillo, gallopinto, carne asada, tajadas con queso, pollo Tip Top(espero que abran en Chile pronto), quesos, cremas, nacatamales y demás comidas típicas que no veré en mucho tiempo. :-(

Creo que eso es todo lo que tengo que contar, me despido mas sin antes agradecer a todas las personas que lo hicieron posible, a SIMAS y todo su equipo, por ser mi primer empleador y ser un lugar tan cool para trabajar.

kthxbai.

¿Qué pasará en el futuro con mis datos?

Esa pregunta me vengo haciendo desde hace algún tiempo, tengo en mi cuarto una computadora muy viejita de aquellas de 33Mhz con botón turbo incluido, corre(por que aún funciona) alguna versión de DOS y Win 3.1 nostalgia aparte no hay archivos míos en esa PC pero si hay una pequeña colección de juegos clásicos de la época, con mucha nostalgia quiero rescatar los juegos que ahí se encuentran y poderlos usar cosa que aún puedo hacer pero  ¿Que pasará cuando en el futuro ningún sistema se moleste en emular o correr software para esa plataforma?  lo mismo que ha pasado con muchas otros dispositivos de almacenamiento ya no soportados, los discos de 5.25 pulgadas que leía mi primer compu, sus datos pasaron al olvido como pasará(o pasó ya) con disquetes, CD’s, DVD’s y demás cuando sean sustituidos por medios de mayor capacidad.

Todo esto se ha denominado como la Era oscura digital(Digital dark age) que sería el tiempo en el que se produzca un vacío de contenido histórico debido a la pérdida de datos guardados en medios digitales obsoletos. El canal de youtube del Museo de Historia de la Computación ha preparado un video sobre este problema.