Instalar Python, Pip y Virtualenv en Windows 7 / 8 / 10 (viniendo de Linux y sin sufrir en demasía en 2019)

Una hora es el tiempo que he dedicado a instalar y configurar python en Windows 10; algo que en cualquier distribución Debian habría sido coser y cantar. Dejo a continuación los pasos que he seguido para que, con suerte, tú lo logres en menos tiempo.

Descarga python

Ve a esta web: https://www.python.org/downloads/windows/ y descarga la versión de Python que necesites. Recuerda bajarte la opción de 32 (x86) o 64 (x64) bits, según lo necesites. Por ejemplo, para usar Tensorflow necesitarás Python 3.5 x86/x64.

Ejecuta el instalador

Haz clic en opciones avanzadas y asegúrate de seleccionar la opción 'añadir al path de Windows', 'instalar para todos los usuarios' y de no instalarlo dentro de 'program files'. En su lugar, instálalo en una carpeta que no requiera de privilegios avanzados como 'C:\Python35'.

Verifica la instalación

Abre la consola 'powershell', la 'cmd' o la que sea que te resulte más cómoda y escribe:

  • `python --version`
  • `pip --version`

Ambos comandos deberían imprimir por pantalals la versión de Python y de pip (el instalador de paquetes de Python).

Entornos virtuales (virtualenvs)

A continuación, instala virtualenv desde la raíz de tu ordenador.

  • cd C:\
  • `pip3 install -U pip virtualenv`

Instalamos este paquete desde la raíz del PC (C:) porque de hacerlo desde C:\users\Ernesto, por ejemplo, tendríamos errores de permisos.

-U significa que la instalación se va a realizar de forma global a toda tu instalación, para lo cuál debemos ejecutar el comando desde la raíz del sistema.

Antes de inicial un proyecto nuevo

Cada vez que vayas a crear un nuevo proyecto, crea antes un entorno virtual en la raíz del mismo. En realidad puedes poner el entorno donde sea siempre que recuerdes añadirlo a tu .gitignore. Teniéndolo en la raíz de un proyecto facilita (bajo mi punto de vista) las cosas. Ejecuta los siguientes comandos con la powershell (ya que en caso de haber errores, los mostrará en la consola).

  • cd carpeta_proyecto
  • virtualenv --system-site-packages -p python ./venv
  • .\venv\Scripts\activate

Un entorno virtual de python no es más que una instalación de Python a nivel de proyecto. Imagina que tienes dos proyectos, A y B, en tu PC que van a requerir del paquete de Python 'X'. A requiere de la versión 1.0 de X y B de la versión 3.2 de X. No deberías instalar a nivel global dos versiones del mismo paquete. La solución: tanto A como B tienen un entorno virtual de Python instalado dentro del cada cuál tendrás la versión que requieras de X.

En caso de error al ejecutar '.\venv\Scripts\activate'

Es posible que te encuentres con un error al ejecutar la activación del entorno virtual. Esto se debe a que tu Sistema Operativo no permite la ejecución de Scripts no firmados. El error des que hablo debería decir algo como:

...la ejecución de scripts está deshabilitada en este sistema...

  • Ejecuta Get-ExecutionPolicy en la consola. Probablemente devolverá Restricted. En tal caso, pasa al siguiente punto.
  • Cierra todas las terminales que tengas abiertas (powershells, cmds, etc).
  • Abre una nueva powershell con privilegios de administrador. Introduce los comandos:
  • `Set-ExecutionPolicy Unrestricted -Force`
  • `.\venv\Scripts\activate`
  • Listo, ya no debería haber error. Cuando quieras desactivar el entorno virtual, simplemente escribe 'deactivate'.

Quiero ser desarrollador web y no sé qué framework escoger: te echo una mano

Un gran quebradero de cabeza al que estamos sometidos todos los informáticos que nos dedicamos al desarrollo web es la elección del framework con el cual vamos a desarrollar nuestros proyectos. En este breve artículo quiero dejar una reflexión / guía que con suerte podrá ayudarte a continuar tu carrera como desarrollador de una forma más aliviada.

 

Mi nombre es Ernesto y soy Ingeniero Informático. Aunque no me especialicé en desarrollo web, es en esto en lo que he estado trabajando los últimos años, y es algo que me gusta mucho. Cuando comencé a trabajar poca era la idea que tenía de JavaScript (venía de Java y C), y sin embargo, dos semanas después estaba usando AngularJS. No era un experto ni mucho menos, pero ahí estaba yo, usándolo para programar aplicaciones reales.

 

Interesado por este mundillo, seguí investigando por mi cuenta en mis ratos libres, y descubrí otros frameworks tanto de back-end como de front-end. Frameworks de todas las clases, colores y lenguajes. Descubrí cientos de artículos en los cuales se comparan todos los aspectos de todos estos frameworks, convirtiendo un proceso que debería ser sencillo en una auténtica pesadilla. Aún a día de hoy, cuando voy a comenzar un nuevo proyecto, caigo en la tentación de aprender el nuevo framework de moda. Y es precisamente por eso que me decidí a escribir estas líneas; es por esto que he redactado los siguientes tres puntos que deberían servirte para hacerte una idea de lo que la industria pide hoy en día:

 

1: Los cimientos

Sea cual sea la curva de aprendizaje de un framework frontend, en el fondo va a estar basado en JavaScript. Incluso si usa TypeScript, JavaScript siempre va a estar ahí, sencillamente porque es la piedra angular de todo el desarrollo web moderno. Esto debería darte la primera pista en tu carrera para ser un buen desarrollador: aprende JavaScript, sin más. Una vez tengas nociones básicas de este lenguaje, no dependerás de ningún framework nunca más, y podrás escoger el que desees de forma libre.

 

2: Mantén la cabeza fria

Ya sabes JavaScript, pero aún no dominas ningún framework. No importa, pues ya eres más valioso que muchos full stack rock star developers. Ahora, haz una lista de las empresas o proyectos en los que quieres trabajar. Si no quieres nada en concreto, busca los sueldos divididos por tecnologías, o sigue cualquier otro criterio. Coge el primer framework de la lista y haz su tutorial oficial más algún otro (ni siquiera hace falta que lo termines cuando ya hayas pillado la idea). ¿Te has sentido cómodo? Si sí, has dado con el framework de tus sueños. Pasa al paso 3. Si no, repite el paso 2 hasta que o bien se te acabe el tiempo o des con un framework que cumpla tus expectativas personales y profesionales. ¿No estás seguro de si te gusta o no? Ve al tercer paso. Si no te hubiera gustado ni te lo cuestionarías.

 

3: Domínalo

Ya tienes tu framework. Da igual cuántas estrellas tenga en GitHub, que no lo conozca nadie de tu entorno o que sean pocos los artículos que estén escritos acerca del mismo en Medium. Te gusta y hay empresas que te van a pagar por saber usarlo. Es todo lo que necesitas saber. Olvídate de benchmarks y artículos click bait comparativos. Hazte con ese Framework, aplica a trabajos que lo requieran y úsalo hasta la saciedad.

 

Eso es todo. Quien mucho abarca poco aprieta. Si tienes cualquier duda, no dejes de escribir en los comentarios. Estaré encantado de ayudarte con tus preguntas.

Redirigir todo el tráfico de una web a un nuevo dominio

Existen numerosas soluciones para redirigir todo el tráfico de una web hacia un nuevo dominio conservando el esquema de la url. Es decir, si tienes una web llamada 'sitioA.com' (con enlaces como sitioA.com/contacto, sitioA.com/post=324, etc) y quieres redirigir todas las direcciones a 'sitioB.org' (con enlaces como sitioB.org/contacto, sitioB.org/post=324, etc), lo más sencillo es modificar el archivo .htaccess que se debería encontrar en la raíz de tu sitio. Si no existe, puedes crearlo a través de SSH, gestor de archivos o FTP. Una vez localizado el archivo .htaccess, tan sólo has de abrirlo y pegar las dos siguientes líneas de código, sustituyendo DOMINIO por el nuevo dominio de tu sitio, que ha de incluir el protocolo (http / https). Por ejemplo, podrías sustituir DOMINIO por https://www.sitioB.org/Recuerda incluir la / al final de la nueva dirección.

El código que has de copiar al comienzo de tu archivo .htaccess:

[code]
RewriteEngine on
RewriteRule ^(.*)$ DOMINIO$1 [R=301,L]
[/code]

Esta forma de redirección es totalmente independiente a la tecnología que tu sitio use. Es decir, si tras hacer esto borraras todos los archivos de sitioA.com (incluyendo bases de datos, etc), la redirección seguiría funcionando, siempre y cuando no elimines el archivo .htaccess. Se trata, además, de una redirección tipo 301, lo cual indica a, por ejemplo, el motor de búsqueda de Google, que esta redirección es permanente; que sitioA.com es ya un dominio que debería quedar en desuso.

 

Si tienes dudas o curiosidad por saber cómo funciona el archivo .htaccess, puedes echar un ojo a mi artículo ' Entendiendo el archivo .htaccess' haciendo clic aquí.

 

[give_form id="10162"]

Enviar archivos multiform | Django Rest Framework

Creé este snippet para un proyecto en el que necesitaba enviar audio a un servidor vía API REST empleando el formato multipart / form data.

views.py

En el archivo de vistas se encuentra la clase AnswerCreate, que no se encarga ni más ni menos que de crear respuestas de un examen y redirigirlas para almacenarlas debidamente en la base de datos. Dicha clase hereda de CreateAPIView, una clase genérica de DRF sobre la cuál puedes leer aquí, aunque resumiento estipula que sólo podrá ser usada para crear (ni actualizar, ni listar, etc). En nuestro queryset tenemos todas las respuestas actualmente almacenadas en la BD, y en la lista de permisos indicamos que sólo usuarios autenticados podrás crear respuestas.

En nuestra lista de parsers encontramos los necesarios para admitir cabeceras que incluyan archivos. Puedes informarte en mayor profundidad sobre los parsers de DRF aquí.

Lo que encontramos a continuación es el método perform_create sobrescrito para adaptarlo a nuestras necesidades. El resto del código, junto con los ejemplos de Postman son bastante legibles.

[code language="python"]
class AnswerCreate(generics.CreateAPIView):
queryset = Answers.objects.all()
serializer_class = AnswerSerializer
# Sólo usuarios autenticados
permission_classes = (permissions.IsAuthenticated,)
parser_classes = (MultiPartParser,FormParser,)

def perform_create(self, serializer):
owner = self.request.user

# audio-answer es la <em>key</em> de la petición http
if self.request.data.get('audio-answer') is not None:
audio_answer = self.request.data.get('audio-answer')
serializer.save(audio_answer = audio_answer)
else:
raise Exception("Al audio no pudo ser enviado")

[/code]

serializers.py

[code language="python"]
class AnswerSerializer(serializers.ModelSerializer):
class Meta:
model = Answers
fields = ('id', 'student_name',)
[/code]

models.py

[code language="python"]
class Answers(models.Model):
student_name = models.TextField(default="Test student")
audio_answer = models.FileField(upload_to='uploads')
[/code]

Dejo adjuntas un par de capturas con una petición de prueba hecha en postman:

La mejor forma de insertar código en artículos de WordPress

Una de las ventajas de emplear el servicio de WordPress.com es la facilidad con que se pueden introducir fragmentos de código en artículos para así mostrarlos a tus visitantes, algo que en un wordpress instalado por ti mismo no viene, por alguna razón, por defecto. Sin embargo el sistema que usan en WordPress.com parece ser el de un proyecto open source que un trabajador de Auttomatic (Vipper007) tine publicado en GitHub.

La cosa es que resulta que también está, a modo de plugin en la librería de plugins de WordPress.org; tan sólo tienes que buscar SyntaxHighlighter Evolved e instalarlo. Una vez lo instales verás que el funcionamiento se basa en envolver entre dos etiquetas 'code' todo tu código. Puedes ver más información acerca de su uso haciendo clic aquí (sí, funcina exactamente igual que la versión de WordPress.com). Hasta ahora había usado para esta y otras webs el plugin Syntax Crayon que tampoco está nada mal pero que a mi parecer es más engorroso de configurar y algo más lento de renderizar.

 

 

Posting Source Code

[Solución ] “Error getting audio” en Chrome

Cualquier librería javascript que use APIs potentes en el sentido de que estas sean capaces de controlar aspectos sensibles o físicos de tu ordenador (como la API GetUserMedia que por ejemplo permite grabar la voz del cliente a través de su micrófono, o su imagen en directo como con una webcam) requieren de conexiones seguras a través del protocolo https.

Es decir, que si tratas de grabar audio desde http://example.com, te saltará el error ya que la conexión no es segura y ello implica que cualquiera podría estar grabando tu voz con el fin que quisiera. Por tanto la solución a este problema es configurar nuestro servidor para que acepte conexiones https. Hasta entonces será imposible lograrlo gracias a los sistemas de seguridad de Google Chrome / Chromium / Firefox.

Notar que en entornos de desarrollo (localhost) no tendremos este problema. Una buena solución para el despliegue de nuestro proyecto de forma gratuita es usar Heroku, que desde el principio provee conexiones seguras. Si estás desarrollando tu app con Django y necesitas una guía de cómo desplegar en Heroku pincha aquí.

Acceder a servidor local Django desde otro ordenador

En esta breve guía explicaré cómo podemos iniciar un servidor de desarrollo (o producción) Django y permitir el acceso a otras máquinas desde tu misma red o el exterior.

Para ello iniciamos nuestro servidor de desarrollo Django indicándole que escuche en nuestra interfaz de red:

[code language="python"]
python manage.py runserver 0.0.0.0:8000
[/code]

Si ahora queremos que otras máquinas de nuestra red local se conecten a nuestro servidor, tan sólo necesitaremos conocer cuál es la ip de la computadora donde esté corriendo el servidor (mediante por ejemplo ifconfig en linux) para luego concatenar el puerto que estemos usando, 8000 en el caso base de tal forma que quedara, por ejemplo 192.168.10.4:8000.

Accediendo a 192.168.10.4:8000 podremos acceder a nuestra web.

¿Cuál es mi IP?

[spb_column width="1/3" el_position="first"] [/spb_column] [spb_column width="1/3"] [spb_raw_html width="1/1" el_position="first last"]JTNDc2NyaXB0JTIwbGFuZ3VhZ2UlM0QlMjJKYXZhU2NyaXB0JTIyJTIwdHlwZSUzRCUyMnRleHQlMkZqYXZhc2NyaXB0JTIyJTIwc3JjJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy52ZXJtaWlwLmVzJTJGdmVybWlpcCUyRm11ZXN0cmFpcC5waHAlMjIlM0UlM0MlMkZzY3JpcHQlM0UlMEElM0Nub3NjcmlwdCUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy5lcndvbC5jb20lMjIlMjB0YXJnZXQlM0QlMjJfYmxhbmslMjIlM0UuLS4lM0MlMkZhJTNFJTNDJTJGbm9zY3JpcHQlM0U=[/spb_raw_html] [/spb_column] [spb_column width="1/3" el_position="last"] [/spb_column]

Prueba tu diseño web en distintos dispositivos

Uno de los tantos quebraderos de cabeza que el auge de los dispositivos móviles ha traído consigo a los desarrolladores web es la infinita variedad de resoluciones de pantalla que se encuentran disponibles y a las cuales toca adaptarse. Al finalizar un proyecto querremos que este se visualice de forma correcta tanto en una pantalla de escritorio convencional, como en un smartphone o una tablet. Incluso si tuviéramos una gran variedad de dispositivos con distintas resoluciones de pantalla sería una pesadilla probar todas las posibles opciones de forma manual.

Debido a esto cada vez hay más webs que te permiten probar tu página (ya online) en distintos dispositivos con tan sólo hacer un par de clics. En mis andanzas por este tipo de sitios he encontrado todo tipo de configuraciones del servicio: las hay que muestran resultados que luego no concuerdan con la realidad, otras te piden una suscripción y otras te llenan el navegador de anuncios.

Finalmente he dado con http://mobiletest.me/, una plataforma que te ofrece un servicio tremendamente amigable para el público al que está destinado. El funcionamiento no podría ser más sencillo:

  1. Entras en la web y seleccionas un dispositivo.
  2. Introduces la url de la web que quieras visualizar y pulsas enter.
  3. En tan sólo unos segundos verás el aspecto real que tu web tendrá al ser cargada desde el dispositivo que seleccionaste en el paso 1. Ahora, usando los controles disponibles en la barra superior podrás usar unas sencillas opciones que te permitirán ver el aspecto del sitio según la inclinación del dispositivo móvil o según si tu diseño es adaptable (responsive) o no.

Si tienes una mejor alternativa no dudes en presentarla 😉