Sin categoría

Plantilla inicial de Bootstrap 4 (starter template)

Bootstrap 4 (y su versión anterior, la 3) es el framework CSS más usado en el desarrollo web (por ejemplo, el sistema de cotizaciones lo usa).

Como desarrolladores, necesitamos una plantilla de donde partir. Una plantilla básica o una starter template de Bootstrap para cargarla y tomarla como base para nuestros proyectos.

Plantilla inicial de Boostrap 4 (starter template)

Me di a la tarea de crear una y traducirla, para tomarla como base al desarrollar con Bootstrap 4.

Continue reading…

Operaciones y operadores aritméticos en Python

Operaciones y operadores aritméticos en Python

Introducción

Este es un post en donde explicaremos con ejemplos los operadores aritméticos que existen en Python.

Operadores aritméticos

Suma

Para sumar dos números utilizamos el operador +. Suma 2 o más números. Para sumar dos números hacemos esto:

numero1 = 2
numero2 = 10
suma = numero1 + numero2

Si queremos sumar 3 números:

numero1 = 2
numero2 = 10
numero3 = 8
suma = numero1 + numero2 + numero3

Y así infinitamente.

Si queremos sumar la misma cantidad de una variable podemos hacer algo así:

numero1 = 10
numero2 = 5
numero1 = numero1 + numero2

En este caso, a numero1 le asignamos la suma de el valor del mismo número mas el valor de numero2 .

Pero podemos simplificarlo así:

numero1 = 10
numero2 = 5
numero1 += numero2

Utilizamos entonces el operador +=

Resta

Igualmente podemos restar múltiples valores. Para restar hacemos esto:

numero1 = 28
numero2 = 21
resta = numero1 - numero2

Podemos restar cualquier cantidad de números:

un_numero = 100
otro_numero = 20
otro_numero_mas = 30
resta = un_numero - otro_numero - otro_numero_mas

Si queremos restar determinada cantidad a una variable podemos hacer esto:

numero = 10
numero = numero - 5 #Ahora  es 5, porque 10 - 5 = 5

Pero igualmente podemos utilizar la forma corta:

numero = 10
numero -= 5

Multiplicación

El producto de dos números. Para multiplicar utilizamos el asterisco o *. Por ejemplo:

base = 10
altura = 2
area = base * altura

Y no necesariamente tienen que ser variables, también puede ser así:

area = 10 * 2

No olvidemos que podemos multiplicar cualquier cantidad de números:

volumen = 10 * 20 * 5

División

Casi igual que la multiplicación, pero ahora utilizamos la barra inclinada o diagonal: /

Si queremos dividir dos números:

promedio = 500/5

O 3:

variable = 100 / 2 / 3

Y así infinitamente. Por cierto, podemos usar paréntesis si queremos atrapar el resultado de la división de un grupo de números.

Por ejemplo, si deseamos dividir 100 entre el resultado de dividir 2 entre 3 sería así:

variable = 100 / (2 / 3)

Cuyo resultado es 150. Y si lo hacemos sin paréntesis, el resultado sería 16.66.

Esto no quiere decir que siempre usemos paréntesis, pero sí que debemos tener cuidado al hacer nuestras operaciones.

Módulo

Este operador devuelve el sobrante de una división entera, o así es como yo lo defino.

Si dividimos 5 / 2 tenemos a 2.5 como resultado, pero si lo hiciéramos “enteramente” el resultado sería 2 y sobraría 1. Pues esto es lo que hace este operador.

Es representado con el símbolo de porcentaje o %.

Por ejemplo…

sobrante = 5 % 2

Cuyo resultado es 1.

Este operador es usado mayormente para detectar si un número es par o impar. Al dividir un número entre 2, siempre sobrará 1 o 0. Tenemos el caso de 10, al dividirlo sale 5 y sobran 0, por lo tanto es par.

Contrario a dividir 11 entre 2, cuyo sobrante es 1.

Entonces, para saber si un número es par podemos hacer un if:

numero = 15
if numero % 2 == 0:
  print("Es par")
else:
  print("Es impar")

Al ejecutar el código, se imprimirá Es impar.

Exponente

Este operador permite elevar cierto número a una potencia. Por ejemplo, si elevamos el 5 a la potencia 2 tenemos 25. Si lo elevamos a la 3 entonces es 125, y así sucesivamente.

Es representado con 2 asteriscos o ** y se usa como si hiciéramos una multiplicación. Así:

cinco_al_cuadrado = 5 ** 2

El resultado será 25. Y podemos elevar cualquier número a cualquier potencia.

División redondeada hacia abajo

Para terminar veamos este operador que igualmente es muy útil. Sirve para dividir 2 números, pero redondea hacia abajo el resultado. Veamos el ejemplo de dividir 9 entre 2, cuyo resultado es 4.5.

Si lo redondeamos hacia abajo, el resultado es 4.

redondeado = 9 // 2

Notar por favor que redondea hacia abajo, no redondea. Por lo que aunque el resultado sea, por ejemplo, 4.9, se redondeará a 4.

Veamos estos ejemplos:

Y con eso terminamos.

Imprimir o convertir a PDF código fuente con VSCode

Imprimir o convertir a PDF código fuente con VSCode

Introducción

Nuestro código fuente luce bien en nuestro editor, pero cuando lo queremos pasar a otro lugar como un documento de texto o un documento PDF, se le quitan los colores y las tabulaciones.

Hoy veremos cómo podemos convertir nuestro código a PDF, para poder imprimirlo, presentarlo, enviarlo o lo que sea.

Este tutorial se basa en una extensión para el maravilloso editor de texto VSCode.

Imprimir código fuente

Lo que tenemos que hacer es tener instalado VSCode. Después, instalamos la extensión llamada PrintCode.

Podemos ir al enlace que dejo arriba, o en nuestro editor buscar la extensión:

La instalamos y recargamos nuestro IDE.

Ahora abrimos un archivo que tengamos y que deseemos imprimir. Presionamos F1 o Ctrl + Shift + P y escribimos PrintCode:

Presionamos enter y automáticamente se abrirá una pestaña en nuestro navegador preferido…

Si utilizamos Chrome o uno de sus hermanos, podemos guardar como PDF. También podremos imprimir a una impresora física.

En caso de utilizar otro navegador, las opciones cambian, pero siempre hay opciones para imprimir a una impresora virtual o convertir el documento a XPS.

Finalmente aquí dejo el documento PDF generado. Se trata de unos ejercicios de MySQL resueltos.

Cadena aleatoria en PHP

Introducción

A veces nos veremos en la necesidad de generar carácteres aleatorios o una cadena o string aleatoria. También puede que necesitemos generar algún NIP o dígitos al azar.

Es por eso que aquí traigo estas funciones que pueden servirnos en un apuro.

Generar cadena alfanumérica

Esta función toma un banco de carácteres (modificable) y elige uno de ellos al azar en un ciclo que va desde 0 hasta la longitud deseada.

function cadenaAleatoria($longitud = 10)
{
	$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	$cadenaAleatoria = '';
		for ($i = 0; $i < $longitud; $i++) {
			$cadenaAleatoria .= $caracteres[rand(0, strlen($caracteres) - 1)];
		}
	return $cadenaAleatoria;
}

La longitud es un parámetro opcional cuyo valor por defecto es 10. De esta manera nos devolverá dicho string con una longitud de 10 (si no llamamos a la función con argumentos).

Generando NIP de 4 dígitos

Si quisiéramos sólo números aleatorios (por ejemplo, para un código de verificación), sería así:

function digitosAleatorios($longitud = 4)
{
	$caracteres = '0123456789';
	$cadenaAleatoria = '';
		for ($i = 0; $i < $longitud; $i++) {
			$cadenaAleatoria .= $caracteres[rand(0, strlen($caracteres) - 1)];
		}
	return $cadenaAleatoria;
}

En este caso, si llamamos a la función sin argumentos nos devolverá 4 números aleatorios en cada llamada.

Generando cadena con la mayoría de carácteres

Tal vez en algún momento necesitemos que nuestro string al azar lleve guiones bajos, guiones, etcétera. Podemos lograrlo de la siguiente manera:

function cadenaAleatoriaLarga($longitud = 10)
{
	$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!"#$%&/()?¡+{}-,;.:[]';
	$cadenaAleatoria = '';
		for ($i = 0; $i < $longitud; $i++) {
			$cadenaAleatoria .= $caracteres[rand(0, strlen($caracteres) - 1)];
		}
	return $cadenaAleatoria;
}

Aquí traerá incluidos signos como !,#,”, etcétera.

Probando funciones

Para probar las funciones podemos hacer un ciclo e ir imprimiendo los resultados, así:

for($x = 0; $x < 5; $x++){
	echo "cadenaAleatoria --> " . cadenaAleatoria() . "<br>";
	echo "cadenaAleatoria con longitud de 20 --> " . cadenaAleatoria(20) . "<br>";
	echo "digitosAleatorios --> " . digitosAleatorios() . "<br>";
	echo "digitosAleatorios con longitud de 20 --> " . digitosAleatorios(20) . "<br>";
	echo "cadenaAleatoriaLarga --> " . cadenaAleatoriaLarga() . "<br>";
	echo "cadenaAleatoriaLarga con longitud de 20 --> " . cadenaAleatoriaLarga(20) . "<br>";
}

Al ejecutarlo, los resultados son lo siguientes:

cadenaAleatoria --> cFY0verQBA
cadenaAleatoria con longitud de 20 --> z9zXaT14Bx27I3dQRVEs
digitosAleatorios --> 8096
digitosAleatorios con longitud de 20 --> 00173793063697953580
cadenaAleatoriaLarga --> q{Z1]vNQo{
cadenaAleatoriaLarga con longitud de 20 --> 2MK.f8QIQ,/3An1Gj)Kv
cadenaAleatoria --> 5RgBB4uGSE
cadenaAleatoria con longitud de 20 --> 5zvkoKAlfaGp0iVJv7T3
digitosAleatorios --> 0065
digitosAleatorios con longitud de 20 --> 51893855213964342617
cadenaAleatoriaLarga --> NA&7vQ,a]X
cadenaAleatoriaLarga con longitud de 20 --> SapTG$R;Rs/LOFi;HEU7
cadenaAleatoria --> X0wr2iBYl4
cadenaAleatoria con longitud de 20 --> haYynZvsfT3ZJRcSbm2l
digitosAleatorios --> 4311
digitosAleatorios con longitud de 20 --> 83632219956881992785
cadenaAleatoriaLarga --> 33fcJT,8NH
cadenaAleatoriaLarga con longitud de 20 --> _8I6UuhsqP:!$4UoUzRy
cadenaAleatoria --> 3VI6xhfOdI
cadenaAleatoria con longitud de 20 --> 6wGXAI1czkQbnQf7SfNI
digitosAleatorios --> 3962
digitosAleatorios con longitud de 20 --> 70233882940602793176
cadenaAleatoriaLarga --> e(74C6q+HA
cadenaAleatoriaLarga con longitud de 20 --> Jug(vg(#+OmgXp)O{Hz,
cadenaAleatoria --> 3XkFiRpMcV
cadenaAleatoria con longitud de 20 --> 1KQoZvQXFyiQUQMM2RoY
digitosAleatorios --> 9571
digitosAleatorios con longitud de 20 --> 84857348895210758209
cadenaAleatoriaLarga --> -vjcP[mr#3
cadenaAleatoriaLarga con longitud de 20 --> #k#0?9C(7Tc0N6YF,9F"

De esta forma podemos generar múltiples carácteres aleatorios. Si quieres generar fechas aleatorias, puedes leer este post.

Quitar o modificar título de archivo MKV

Introducción

Hay ocasiones en las que por una u otra razón (incluso porque a veces es molesto, o porque se nos da la gana) necesitaremos quitar el título que sale al prinicipio de un vídeo en formato MKV. O modificar otras propiedades.

Por suerte, hay gente por ahí que ha inventado una maravillosa herramienta llamada mkvtoolnix que, como su nombre lo dice, te permite editar propiedades y manipular un archivo mkv.

La herramienta es gratis y aquí mostraré cómo descargarla, configurarla y usarla.

Descargando

Para descargarla, nos tenemos que dirigir a este sitio. Una vez ahí, veremos lo siguiente:

Elegiremos la versión que se adapte a nuestro sistema. Recomiendo evitar las que dicen portable. En mi caso, como mi sistema es Windows de 64 bits voy a escoger la primera opción. Si el tuyo es de 32 bits, elige la tercera.

Una vez que se haya descargado, procederemos a instalarlo.

Instalando

Vamos a abrir el archivo ejecutable que se descargó. Si pide permisos de administrador los concedemos.

Primero que nada va a pedirnos el idioma de la instalación. Aquí tenemos que elegir español.

Nos dará la bienvenida. Presionamos Siguiente.

 

Aquí elegimos la ruta de instalación. Podemos cambiarla si lo deseamos, pero no lo recomiendo. Una vez configurado, hacemos click en Siguiente.

Finalmente tenemos que elegir la carpeta del menú inicio. De nuevo recomiendo dejar todo como está y hacer click en Instalar.

Sólo resta esperar para que la instalación termine.

Una vez terminada hacemos click en Siguiente y Terminar. Es momento de configurarla y agregarla a la variable PATH.

Configurando

Debido a que esta herramienta se ejecuta en la línea de comandos, necesitaremos agregarla a la variable path de nuestro sistema para que pueda ser llamada desde cualquier lugar.

Para ello, abrimos una consola o símbolo del sistema y escribimos lo siguiente:

set PATH=%PATH%;C:\Program Files\MKVToolNix

Lo que hace ese comando es agregar la ruta de instalación de MKVToolNix al path del sistema. Así, todos los archivos .exe que están dentro de la carpeta podrán ser invocados desde cualquier lugar sin tener que escribir dicha ruta completa.

Ahora sí podemos probar.

Cambiando título

Para cambiar propiedades de un archivo o fichero MKV usamos mkvpropedit. En este caso, vamos a cambiar el título, por lo que su sintaxis es:

mkvpropedit "NombreArchivoMKV" -e info -s title="Nuevo título"

Voy a poner de ejemplo un episodio de la serie Rick y Morty. Lo abriré con VLC, el cual muestra el título en la parte superior, y también lo muestra al iniciar el vídeo.

Se ve así:

Por favor noten lo que está encerrado con un rectángulo rojo. Es el título. Por lo regular, la mayoría de personas agregan ahí sus sitio web, nombre, etcétera.

Para quitar esto, vamos a abrir de nuevo el símbolo del sistema y navegaremos hasta donde está el episodio. Es decir, iremos de carpeta en carpeta (desde el cmd) hasta estar en el mismo lugar que el vídeo. En mi caso está en C:\Users\Luis Cabrera Benito\Documents.

Para ir a la carpeta, los comandos son:

Ahora ejecutaré el comando para editar las propiedades. Así que escribiré lo siguiente:

mkvpropedit "Rick.and.Morty.mkv" -e info -s title="Hola - parzibyte.me/blog"

 

Al presionar enter, el programa nos confirma:

Y si vuelvo a abrir el vídeo, veremos que ahora muestra algo distinto:

Es exactamente lo que escribí entre comillas al ejecutar el comando. De esta forma podemos cambiar la propiedad. Si queremos simplemente quitar el título, usamos:

mkvpropedit "Rick.and.Morty.mkv" -e info -d title

Conclusión

Con este proceso podemos editar propiedades. Pero no sólo se puede cambiar el título, hay millones de cosas que podemos hacer.

Aquí podemos ver la documentación oficial del programa, en donde nos dice los argumentos y la respectiva descripción de cada uno de ellos.

Este tutorial lo pude hacer al investigar cómo remover el título, lo que me llevó a la siguiente página en donde aprendí la sintaxis.

También funciona para MacOS e incluso hay una versión que no necesita escribir comandos; pero eso es arena de otro costal. Además, preferiré mil veces el símbolo del sistema y las terminales.

Tipado débil y tipado fuerte: diferencias y explicación

Introducción

Tal vez hemos escuchado que algunos lenguajes de programación son de tipado fuerte y otros de tipado débil. Hay una gran diferencia entre ambos tipos. Normalmente el tipado débil es el más criticado de todos, pero también es querido por muchos. Aquí daré una pequeña explicación.

Para comenzar, debemos saber que el tipado se refiere a cómo declaramos los tipos de variables. Por ejemplo, algunas las declaramos como enteras, algunas otras como cadena, flotantes, etcétera. Y en algunos lenguajes, no necesitamos declarar el tipo, pues éste se adivina.

Por otro lado, el tipado fuerte no permite hacer operaciones entre objetos de distintos tipos. No podemos sumar una cadena mas un entero. En cambio, en los débilmente tipados sí.

Tipado débil

La mayoría de veces, el tipado débil es en donde no indicamos el tipo de variable al declararla. La verdadera diferencia es que podemos asignar, por ejemplo, un valor entero a una variable que anteriormente tenía una cadena.

También podemos operar aritméticamente con variables de distintos tipos. Por ejemplo, sumar “x” + 5.

Ventajas

  • Nos olvidamos de declarar el tipo
  • Podemos cambiar el tipo de la variable sobre la marcha. Por ejemplo, asignarle un string a un int
  • Escribimos menos código

Desventajas

  • Al hacer operaciones, a veces éstas salen mal. Por ejemplo, puede que intentemos sumar 500 + “400.00” + 10, cosa que será errónea
  • Especialmente en Javascript, he notado que hay errores al comparar números que creemos que son números, pero no lo son. Por ejemplo, algo como “20” > “100” dará como resultado true, ya que son comparados como cadena, no como números.
  • Hay que castear muchas veces. En ocasiones, tendremos que castear forzosamente las variables para que se comporten como queremos y no generen errores como los mencionados arriba.
  • Código menos expresivo. Al declarar los argumentos de una función no sabemos si ésta espera un flotante, un entero, un string, etcétera. Tenemos que ir a la función, ver lo que hace e inferir el tipo de variable que espera
  • Inseguridad: existe la posibilidad de que un atacante descubra una vulnerabilidad en donde nosotros esperemos una variable de determinado tipo pero se reciba otra

Lenguajes que lo usan

  • PHP
  • Javascript

Ejemplo

Veamos lo que pasa en JavaScript cuando hacemos la siguiente operación:

let resultado = "x" + 5;

En un lenguaje fuertemente tipado daría un error, pero en JavaScript no pasa nada:

Tipado fuerte

Aquí es en donde indicamos el tipo de dato al declarar la variable. Dicho tipo no puede ser cambiado nunca. Y no podemos operar entre distintos tipos.

Ventajas

  • Código expresivo: ahora sí sabremos de qué tipo espera un argumento una función
  • Menos errores: Nos olvidaremos de ver el tipo de variable antes de hacer operaciones con ésta

Desventajas

  • Escribir más codigo: tenemos que declarar el tipo de variable al declararla

Lenguajes que lo usan

Por mencionar algunos…

  • C
  • C#
  • Java
  • Ruby
  • Python

Ejemplo

Intentemos realizar la operación de “x” + 5 en Python, y veamos lo que pasa:

Conclusión

Es un poco difícil determinar los de tipado débil y los de tipado fuerte. Los de tipado fuerte son más seguros, pues no permiten hacer operaciones con variables de distintos tipos.

Personalmente preferiría que todos fueran de tipado fuerte. Si no nos queda otra opción, simplemente hay que castear o comprobar el tipo cada vez que trabajemos con una variable. Afortunadamente tenemos funciones como gettype, settype, typeof, etcétera.

Además, algunos lenguajes (como PHP) están introduciendo un tipado fuerte al declarar funciones. De todos modos, al final todo depende del programador, pues éste se encarga de que el código funcione.

Descargar o incluir librerías javascript de GitHub usando rawgit

Introducción

Muchas veces encontramos proyectos buenos o librerías que resuelven el problema que tratamos de solucionar, pero están en GitHub y puede que no sepamos incluirlas. O también puede que no tengamos npm, bower y ninguna de esas cosas confusas que ponen. Así que en esta entrada trataré de explicar cómo es que podemos descargar librerías de GitHub a mano, de una forma fácil. Esto traerá ventajas ya que podremos obtener siempre la última versión.

Proyecto de ejemplo

Veamos este proyecto, por ejemplo. Funciona para crear gráficas, pero si sólo queremos el script… ¿cómo sabemos cuál archivo descargar? ¿en dónde está ese archivo?

La mayoría de los proyectos que he visto tienen una carpeta llamada dist. Ahí es en donde se guardan los archivos finales, listos para ser usados.

Podemos ver que hay 4 archivos ahí. Normalmente siempre debemos tomar los que terminan con min.js (el tercero) ya que están minificados. Es decir, están optimizados y pesan menos que el archivo original. Si quisiéramos analizar el código fuente y tal vez modificarlo usaríamos el que no tiene min (el primero de la lista).

Sea cual sea el archivo, vamos a abrirlo y veremos el código fuente:

Código como RAW

Para poder ver el código tal como es, y poder descargarlo para incluirlo hacemos click en raw. Lo que nos llevará a lo siguiente:

Ahí ya tenemos la librería tal y como es. Podemos presionar Ctrl + S (o click derecho y elegir Guardar como) para guardarla como un archivo .js.

Rawgit

También podemos usar rawgit, un tipo de cdn que se encarga de proveer los archivos de GitHub con los encabezados Content-Type establecidos correctamente. Si queremos, podemos copiar el link del archivo raw (el de la captura de arriba) e ir a rawgit.com para pegarlo ahí y ahora sí obtener el enlace para incluirlo en una etiqueta script.

Al pegarlo en el primer campo de texto, los otros dos se llenan automáticamente. Para usarlo en producción, simplemente hay que copiar el de la izquierda. Para usarlo en desarrollo, usemos el de la derecha. Yo siempre uso el de la izquierda.

Y una vez copiado, podemos incluirlo así:

<script type="text/javascript" src="https://cdn.rawgit.com/jtblin/angular-chart.js/master/dist/angular-chart.min.js">

Como lo dije hace un momento, también podemos descargar la librería una vez que la hayamos abierto como raw. En ese caso la incluiríamos así:

<script type="text/javascript" src="carpeta_en_donde_se_guardo/nombre_archivo.js">

Ventajas y desventajas

La ventaja de usar rawgit es que ahorramos ancho de banda si es que subimos nuestro proyecto a internet. La desventaja es que éste servicio no ofrece ninguna garantía, ya que es gratis. Pero en todo el tiempo que llevo usándolo nunca ha fallado.