Redirección WWW con .htaccess

Bueno, no es la primera vez que hablamos por aquí del fichero .htaccess. Hoy vamos a ver cómo utilizarlo para redireccionar nuestro dominio a www siempre, o viceversa. Esto nos permitirá mejorar nuestro SEO y nuestro PageRank.

La cuestión ahora es editar nuestro .htaccess con un editor de texto. Si lo que quieres es redireccionar del dominio sin www al que sí la tiene sería el siguiente código:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^aquitudominio.loquesea [NC]
RewriteRule ^(.*)$ http://www.aquitudominio.loquesea/$1 [L,R=301]

Y para lo contrario, para que siempre entre sin las www, entonces sería:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.aquitudominio.loquesea [NC]
RewriteRule ^(.*)$ http://aquitudominio.loquesea/$1 [L,R=301]

Cambiando aquitodominio.loquesea por lo que corresponda para vuestra web.

Arduino: Recuperar datos guardados en varios bytes de la memoria EEPROM

Seguimos con la memoria EEPROM de Arduino, su memoria no volátil: vimos cómo leer y escribir de forma básica, y vimos cómo guardar un dato mayor de un byte recortándolo y almacenándolo repartido en varias posiciones de memoria. Pero lo que no vimos en ese apartado fue ¿cómo lo recuperamos?

Pues básicamente vamos a hacer lo mismo que en el ejemplo anterior pero al revés, volviendo a tirar de opreaciones de desplazamiento de bit. Declararemos una variable con el tipo de lo que queremos recuperar y junto a ella otra variable contenedor, leo un byte, lo almaceno en la auxiliar, lo desplazo hacia la izquierda para que sea el más significativo y lo anexo al total con una operación OR, y finalmente limpiamos la variable auxiliar.

Enchurrado en código es similar a esto:

   long Numero = 0;
   //Variable contenedor inicializada a 0
   long Contenedor = 0;

  //recorremos el bucle hacia atrás, al revés que en el ejemplo anterior
   for (int i = sizeof(Numero); i > 0 ; i--){

     //Aquí guardamos en el contenedor
     // un byte de datos
     Contenedor = EEPROM.read(i-1);

     //Desplazamos tantos bits como toque
//en esta iteración del bucle.
//El if es porque en la última iteración
//no habría que desplazar.
     if (i != 1){
     Contenedor = Contenedor  << (8*i);
     }

     //Utilizamos la operación a nivel de bit OR para
     //añadir a nuestro resultado final
     //el valor del byte leído.
     Dato = Dato | Contenedor;

    //Reiniciamos la variable
    //auxiliar para evitar problemas
    //con datos leídos previamente
     Contenedor = 0;
   }

Este ejemplo es limitado, ya que sólo te valdría en caso de que hayas guardado un único valor repartido en bytes, como en el ejemplo anterior. En el futuro veremos cómo usar los métodos get() y put() que simplican el tema.

Como en el ejemplo anterior es necesario conocerse las operaciones de desplazamiento de bit y las operaciones lógicas a nivel de bit.

Si tienes interés en Arduino a mi me ha servido de ayuda la wiki de Arduinobot y su manual en PDF.

Arduino: Escribir varios bytes en la memoria EEPROM

Pensaba hablar sobre las finales de la NBA, pero creo que me voy a esperar a que acaben y voy a volver con el tema del Arduino y seguir con la EEPROM de la que ya hablamos en otro artículo.

Si en el primer artículo veíamos cómo escribir en esta memoria no volátil, en este veremos otro punto ¿Cómo guardamos información mayor de un byte? En ese caso tenemos que distribuirla entre varios ¿recuerdas el tema de los punteros en C? Pues es similar.

En el ejemplo vamos a guardar un entero largo, de 32 bits. Empezaremos por volcarlo a una variable auxiliar que servirá de contenedor del valor original, y declararemos también una variable byte para la operación de escritura. Lo que haremos será ir guardando en cada byte de la EEPROM el byte más significativo de nuestra variable auxiliar y luego aplico un desplazamiento de 8 bits hacia la izquierda a la variable auxiliar para que el siguiente byte pase a ser el más significativo. Todo esto dentro de un bucle for que repita la operación tantas veces como bytes tenga nuestra variable. En el código explicado paso a paso lo verás mejor:

   long Numero = 666777999;   

   //Usamos el contenedor para no perder el dato.
   long Contenedor = Numero;

   //Definimos una variable byte
   //para trocear el dato largo
   byte X;

   //Bucle: recorremos tantas veces como
   //bytes tiene el tipo de dato
   //que queremos almacenar
   for (int i = 0; i < sizeof(Numero); i++){
     //Guardamos la fracción más
     //a la izquierda. Es el byte
     //más significativo
     X = highByte(Contenedor);
     EEPROM.write(i, X);
     //Aplicamos un desplazamiento
     //de un byte (8 bits)
     // hacia la izquierda.
     //De esta forma en cada iteración
     //la siguiente porción pasa a ser
     //el byte más significativo
     Contenedor = Contenedor << 8;
   }

Es importante tener claras las operaciones de desplazamiento de bit en Arduino para trabajar con múltiples bytes. Próximamente hablaré de esos temas (operaciones a nivel de bit y cómo recuperar estos datos escritos).

Arduino básico: escribir y leer datos de la memoria EEPROM

Si bien el grueso de la memoria de un Arduino está representado por la memoria volátil, que se borra una vez se corta la alimentación o resetea, estas placas poseen también una memoria no volátil donde almacenar permanentemente una serie de datos: La memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) . Según el modelo varía entre los 512 bytes y los 4KB.

Para trabajar con esta memoria necesitamos hacer uso de la librería EEPROM, que viene junto al IDE oficial de Arduino. Posee un método para escribir, write(), y otro para leer, read(). Tanto para leer como para escribir se trabaja por direcciones y byte a byte. Esto implica que enl modelo de 512 bytes tendías posiciones de 0 a 511 y en cada una de ellas podrías guardar un valor comprendido entre 0 y 255. El primer ejemplo que vamos a ver es muy simple: vamos a escribir el mismo valor en todas las posiciones de la memoria y luego a leerlo. Una chorrada, pero muy didáctico:

 

//Se incluye la librería EEPROM
#include <EEPROM.h>
//Creamos una variable para el valor de la posición de memoria
//en la que se va a almacenar el dato.
int Direccion = 0;

//Creamos una variable para leer los valores de la memoria EEPROM
byte valor;

void setup()
{
  Serial.begin(9600);
  // La "B" indica que pasamos los datos
  // en binario (en decimal sería un 18)
  byte Informacion = B10010;
  
  //para el ejemplo nos pateamos
  //512 bytes.
   for (int i = 0; i < 512; i++){
     EEPROM.write(i, i);
   }
}

void loop()
{
  while(Direccion < 512){
    valor = EEPROM.read(Direccion);  
    Serial.print("En la dirección ");
    Serial.print(Direccion);
    Serial.print(" almacenamos el valor: ");
    // DEC para mostrar el resultado en decimal
    Serial.print(valor, DEC);
    delay(100);
    Direccion++;
  }
}

Más adelante seguiremos viendo otros ejemplos de programación con el IDE de Arduino.

Aprende Markdown en sencillos pasos

Lo acabo de leer en el blog de Victorhck y no he podido resistirme a compartirlo por aquí: un tutorial de Markdown (podéis hacerlo pulsando el link) similar al que hace poco os presenté por aquí de GitHub.

Markdown

Markdown es un lenguaje de marcado ligero, muy sencillo de leer y utilizar, que convierte el texto marcado a documentos XHTML. Se distribuye bajo licencia BSD y está presente en muchos CMS. Fue creado por John Gruber, contando con la aportación del programa html2text de Aaron Swartz.

Os dejo también, además de la fuente de dónde saqué el tutorial, otro enlace a una entrada de Victorhck sobre cómo usar Markdown en WordPress.

Os recomiendo echarle un ojo, ya que se trata de una herramienta muy útil que, por otra parte, es fácil de aprender.

Instalar decompilador de Java en Ubuntu: JD-GUI

¿Necesitas un software que te permita decompilar una clase Java en tu Ubuntu? Pues hoy os hablo de JD-Project, un proyecto OpenSource que nos permitirá destripar esos ficheros en nuestro equipo. Si queréis pegarle un ojo al código ahí tenéis la página de GitHub.

En la web oficial del proyecto podemos ver que nos ofrecen varios «sabores»: JD-GUI, como aplicación independiente, JD-Eclipse como plugin para el popular entorno de desarrollo y JD-IntelliJ para el IDE IntelliJ. Yo para hacer la prueba me descargué JD-GUI, que luce tal como en las fotos:

JD-GUI Windows
Así luce JD-GUI en Windows
JD-GUI xubutu
Y este es el JD-GUI en un Xubuntu 16-04 LTS

En mi caso descargué el paquete .deb para derivados de Debian y no tuve más que hacer doble click para instalar. Eso sí, la primera llegó en la frente: ejecuto y falla. ¿por qué? Pues básicamente porque no tenía Java instalado en el equipo de la prueba… un despistillo por usar un equipo recién instalado. Instalo Oracle Java 8… y por algún motivo la instalación del mismo se carga el JD-GUI. Así que otra vez a instalar el .deb de JD-GUI. Pero tras todo esto el programa ya ha funcionado como la seda. Así que ya podéis disfrutar de esta cómoda herramienta.

Eliminar un archivo en Visual Basic .NET

Vamos con un ejemplo de código rápido sobre cómo borrar un archivo usando VB.NET:

Dim ArchivoBorrar As String

ArchivoBorrar = "C:\inetpub\wwwroot\descargas\archivo.doc"

'comprobamos que el archivo existe
If System.IO.File.Exists( ArchivoBorrar ) = True Then
  System.IO.File.Delete( ArchivoBorrar )
End If

Ojito al trabajar con esto que igual os cargáis lo que no debéis.

Visual Studio 2015: Borrar una solución

Pues nada, que me han actualizado a Visual Studio 2015 y que andaba yo intentado borrar un proyecto, de hecho la solución completa, que me había liado creándolo… y no encontraba la manera de hacerlo. ¿Cómo va esto? ¿cómo borro toda la solución? Bueno, los menús los tengo en inglés, así que os cuento paso a paso:

  • En el explorador de soluciones (Solution Explorer) seleccionáis la solución que queréis borrar.
  • Después, en la barra de menú superior os váis a Archivo (File) y allí pulsáis Cerrar Solución (Close Solution).
  • Y para acabar, os vais a la carpeta donde teníais guardado el proyecto y allí borráis todos los archivos.

Y listo, solución borrada.

Aprender Git (y GitHub) en 15 minutos

Git es un sistema de control de versiones creado por Linus Torvalds en su día para facilitar el trabajo en el desarrollo del núcleo de Linux. Su buen funcionamiento, su flexibilidad y el ser software libre ha facilitado su popularización entre los programadores y su uso tanto en el ámbito académico como empresarial.

GitHub logo

Los principales comandos de Git serían los siguientes:

  •  git fetch: para descargar los cambios desde el repositorio
  • git merge: permite unir dos «ramas» de un proyecto
  • git pull: básicamente unificaría las acciones de fetch y merge en un solo comando
  • git commit -am: confirma los cambios realizados. Se puede añadir como parámetro una cadena de texto con un título descriptivo para que al consultar el log veamos qué hemos heco de forma más sencilla
  • git push origin: nos permite subir una «rama» al servidor
  • git status: nos muestra el estado de una rama y qué cambios hay sin confirmar
  • git add: añadimos un archivo
  • git checkout -b: crea una «rama» nueva a partir de donde estamos, con el nombre que le asignemos
  • git checkout -t: en este caso nos permite crear una «rama» local a partir de una «rama» remota especificada.
  • git branch: nos permite listar las ramas locales
  • git branch -a: con este parámetro además de las ramas locales muestra las remotas.
  • git branch -d: borra la rama que le especifiquemos como parámetro
  • git remote: muestra los repositorios remotos
  • git remote -v: muestra los repositorios remotos y la url asociada a ellos
  • git remote prune origin: permite actualizar tu repositorio remoto desde tu versión local en caso de que alguien haya borrado una rama remota.
  • git push origin: :Ojo a esta sintaxis, te mando a la documentación para que la ojees porque es puñetera. La cosa es que borre una «rama» remota y es similar a la orden para subirla, pero con la diferencia de que añade los dos puntos (sí, no me equivoqué y los puse duplicados). Mira el enlace para verlo bien.
  • git reset –hard HEAD: elimina los cambios que no hayan sido objeto de un commit todavía
  • git revert: en este caso le pasamos el id de un commit para deshacer los cambios que realizamos en él.

El tema de listar los comandos es útil, pero yo te prometía aprender a usar Git, y por extensión la popular plataforma web GitHub, en 15 minutos. Y por mucho que te leas un listado de comandos no vas a aprender por ósmosis… pero aquí viene el recurso que necesitas: un minicurso de uso de Git a través de la plataforma GitHub. Pégale un ojo y la cosa te quedará mucho más clara, que seguro que la lista de arriba te ha dejado dudas. A través de sencillos ejercicios el tutorial te mostrará el funcionamiento de la plataforma en poco más de un cuarto de hora. Aprovecha ya y añade Git a tu lista de conocimientos, pues es una utilidad valiosa.

Hacer un triángulo con CSS3

¿Cómo puedo insertar la imagen de un triángulo en mi web sin usar imágenes? ¿Es posible hacerlo sólo con CSS3? En el pasado vimos como hacer un exágono o un octógono, y el triángulo es todavía más fácil:

Vamos a crear cuatro divs, cada uno de ellos para un triángulo en una dirección. Este sería el marcado HTML:

<div id="triangulo"></div>
<br/>
<div id="trianguloinvertido"></div>
<br/>
<div id="trianguloizquierda"></div>
<br />
<div id="trianguloderecha"></div>

Y ahora veamos el CSS:

#trianguloizquierda{
	  width: 0;
	  height: 0;
	  border-top: 50px solid transparent;
	  border-bottom: 50px solid transparent;
	  border-right:50px solid black;
	}

#trianguloderecha {
	  width: 0;
	  height: 0;
	  border-top: 50px solid transparent;
	  border-bottom: 50px solid transparent;
	  border-left: 50px solid black;
	}

#triangulo {
	  width: 0;
	  height: 0;
	  border-left: 50px solid transparent;
	  border-right: 50px solid transparent;
	  border-bottom: 50px solid black;
	}

#trianguloinvertido {
	  width: 0;
	  height: 0;
	  border-left: 50px solid transparent;
	  border-right: 50px solid transparent;
	  border-top: 50px solid black;
	}

En este jsfiddle le puedes echar un ojo al resultado.

Con este simple truco de CSS podrás crear botones en forma de flecha o triángulo que darán una mejor imagen a tu proyecto,pudiendo jugar con los tamaños y los colores para adaptarlos mejor a tu maquetación.