Dividir un fichero

Gracias al comando split podemos dividir un fichero que pese bastante en trozos más pequeños, por ejemplo para dividir un fichero de 20Mb en en ficheros de 1Mb tendremos que ejecutar el siguiente comando (siempre en Linux),

  1. split -b 5m ficherode20Mb PREF_        # Aquí le decimos al comando split que queremos que nos parte el fichero “ficherode20Mb” en ficheros de 5Mb con el prefijo PREF_

El resultado son, en este caso, 4 ficheros de 5Mb cada uno con los nombres:

  • PREF_aa
  • PREF_ab
  • PREF_ac
  • PREF_ad

Muy útil cuando tenemos que tratar ficheros muy grandes de texto.

Redirección 301

Redirección 301

El servidor Apache dispone de la posibilidad de generar redirecciones “amiglables” para los buscadores. De este modo si un dominio o una URL la tenemos que eliminar o simplemente ya no está disponible podemos redirigirla a una nueva URL, lo bueno ó malo es que el valor del PageRank y BackLinks también se transmiten a la nueva URL.

Para crear la redirección es necesario crear un fichero .htaccess en el directorio donde queramos que se produzca la redirección y añadirle las siguientes líneas,

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^dominio1.com$ [NC] 
RewriteRule ^(.*)$ http://dominio.com/$1 [R=301,L]

claro esta que donde pone dominio.com tendréis que poner vuestra nueva URL.

También podemos hacer la redirección con  PHP (en la página que queramos redireccionar),

<? Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: http://www.nueva-direccion.com" ); ?>

Con  ASP (en la página que queramos redireccionar)

<% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.nueva-direccion.com" %>

Suerte y a redireccionar 😉

Editor Social

Twitter, FaceBook, Google Buzz...
Editor Social

Os invito a visitar un nuevo site que me he encontrado navengando por internet, me parece muy interesante el hecho de poder hacer rentable el tiempo que paso delante del PC hablando con mis amigos tan solo por colocar algún anuncio, anuncio que por cierto soy yo quien decide si publicar o no; Ellos mismos lo dicen:

Conectamos Anunciantes con tus cuentas en Redes Sociales

Cálculo binario

Código binario
Código binario

Estos días he necesitado desempolvar los apuntes de números binarios para crear una serie de máscaras.

Pero, ¿qué es sistema binario?

Es un sistema numérico en base 2 que sólo utiliza dos dígitos diferentes, el 0 y el 1, que se conocen como bits. Por esta razón un número binario es una sucesión de bits.

Como el sistema decimal, el sistema binario es posicional, esto significa que cada dígito tiene un valor relativo a la posición que ocupa en el número. El valor de la posición se consigue multiplicando el dígito por una potencia de 2.

Al igual que el sistema decimal, el sistema binario es posicional, por lo cual cada dígito tiene un valor relativo a la posición que ocupa en el número. El valor de posición en este sistema se consigue multiplicando el dígito por una potencia de 2. A continuación se muestra una tabla con los valores posiciónales de los dígitos en el sistema numérico binario.

Cómo convertir un número binario en un número decimal

Para realizar esta conversión multiplicaremos cada dígito por su posición y sumaremos todos los valores, por ejemplo, dado el número binario 10101 convertirlo a decimal

10101 = 1×24 + 0×23 + 1×22 + 0×21 + 1×20 = 16 + 0 + 4 + 0 + 1

1 0 1 0 1 — Número binario
4 3 2 1 0 — Posición
1×24 + 0×23 + 1×22 + 0×21 + 1×20 = 16 + 0 + 4 + 0 + 1 = 21

 

Como convertir un número decimal en un número binario

Ya que los números decimales se componen de una parte entera y una parte decimal, debemos convertir por separado la parte entera y  la parte decimal.

En el número 2.345,25 la parte entera es 2.345 y la parte decimal es 0,25.

Para convertir la parte entera en binario tendremos que realizar los siguientes pasos,

  1. Dividir el número entre 2 y anotar el resto
  2. Si el cociente es mayor de 0 lo dividiremos entre 2 y pasaremos al paso 1, utilizando el cociente
  3. El resultado se encuentra anotando los residuos encontrados, escritos en orden inverso a cómo fueron conseguidos.

Pasaremos el número 29 a binario, según los pasos anteriores

  • 29÷2 = 14 resto 1
  • 14÷2 = 7 resto 0
  • 7÷2   = 3 resto 1
  • 3÷2   = 1 resto 1
  • 1÷2   = 0 resto 1

Por lo que 29 = 11101

Para convertir la parte decimal en binario tendremos que realizar los siguientes pasos,

  1. Multiplicamos la parte fraccionaria por 2 y anotamos la parte entera
  2. Si la parte fraccionaria del resultado es mayor que cero pasamos al paso 1 utilizando la parte fraccionaria encontrada
  3. El resultado se encuentra escribiendo las partes enteras encontradas en el orden que fueron obtenidas y añadiendo el punto decimal al principio

Pasaremos el número 0,78125 a binario según los pasos anteriores

  • 0,78125 x 2 = 1,5625 parte entera 1
  • 0,5625 x 2 = 1,125 parte entera 1
  • 0,125 x 2 = 0,25 parte entera 0
  • 0,25 x 2 = 0,5 parte entera 0
  • 0,5 x 2 = 1,0 parte entera 1

Por lo que 0,78125 = 11001

A continuación representamos los diez primeros números decimales en binario

Número decimales y binarios
Enteros no negativos Equivalente binario
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010

 

Operaciones con números binarios

Las combinaciones a la hora de sumar dos bits son:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10 al sumar 1+1 siempre nos llevamos 1 a la siguiente operación.

Por lo que,

      10011000
    + 00010101
    ———————————
      10101101

Las combinaciones a la hora de restar dos bits son:

  • 0 – 0 = 0
  • 1 – 0 = 1
  • 1 – 1 = 0
  • 0 – 1 = 1 (se transforma en 10 – 1 = 1) (en sistema decimal equivale a 2 – 1 = 1)

Por lo que,

        10001                           11011001
       -01010                          -10101011
       ——————                          —————————
        00111                           00101110

 

La multiplicación de dos números binarios se realiza de la misma forma que con los números decimales; el 0 multiplicado por cualquier número es 0 y el 1 es el elemento neutro del producto,

Por ejemplo, multipliquemos 10110 por 1001:

        10110
         1001
    —————————
        10110
       00000
      00000
     10110
    —————————
     11000110

La división de números binarios también es similar a la decimal, la única diferencia es que a la hora de realizar las restas, dentro de la división, éstas se tienen que hacer en binario, veamos un ejemplo,

Vamos a dividir 100010010 (274) entre 1101 (13),

 100010010 |1101
            ——————
- 0000      010101
———————
 10001
- 1101
———————
  01000
 - 0000
 ———————
   10000
  - 1101
  ———————
    00111
   - 0000
   ———————
     01110
    - 1101
    ———————
     00001

Veamos ahora como se realizan operaciones AND (Y), OR (o), XOR y NOT,

Para las operaciones AND se obtiene como resultado 1 si los dos operandos son 1
Para las operaciones OR se obtiene como resultado 1 si cualquier de sus operandos es 1
Para las operaciones XOR se obtiene como resultado 1 si os operandos son distintos
Para las operaciones NOT se obtiene como resultado 1 si el operando es 0 y viceversa

 

Creo que más o menos y por encima hemos explicado como realizar cálculos con números binarios, espero que os sea de utilidad.

CheatSheet interesantes

Veo en Vera un post con 34 cheat sheets muy interesantes y que no debemos perdernos ya que pueden sacarnos de algún aprieto.

Aquí os dejo el listado,

  • jQuery ( si la hubiera tenido hace un par de meses cuanto dolores de cabeza me habría ahorrado )
  • jQuery 1.2 Cheat Sheet
  • Fireworks CS3

Gestionando Redes con PHP

Redes
Redes

Pasando el rato y buscando cositas interesantes he llegado a la web de phpip, ni me acuerdo como llegué jeje, pero lo importante es que esta gente tiene un paquete para descargar que te permite ver y “gestionar” todos los recursos de una red local.

Su uso es realmente sencillo, aquí van los 4 pasitos que se necesitan para tenerlo funcionando,

Paso 1
Descargar el paquete desde http://www.phpip.net/download.php

Paso 2

Descomprimir en un directorio público de nuestro servidor y accediendo a través del navegador a http://localhost/directoriodeinstalacion, cambiando “directoriodeinstalacion” por el directorio donde lo habéis descomprimido.

Paso 3

Por último simplemente tendremos que renombrar el fichero de configuración:

# mv /includes/install.database.php /includes/database.php

Y acceder al asistente de instalación que nos guiará durante este último paso: http://localhost/phpip/install.php

(tan pronto tenga un ratito haré un par de capturas de pantalla para que veáis la interface)

Amazon: MySQL, bases de datos relacionales

El gigante Amazon ha dado un nuevo paso ( de gigante? ) en su afán de ente innovador y anuncia el lanzamiento de Bases de Datos Relacionales – MySQL como un servicio más.

La idea es que Amazon hospedaría las bases de datos de los clientes, a las que se accedería a través de una API. Con este nuevo planteamiento ya ofrece tres modos de almacenamiento, S3 para ficheros, SimpleDB y ahora relacional/MySQL.

Con esta nueva idea de Amazon basada en el cloud computing con sus ventajas y desventajas amplía el tipo de proyectos que pueden encajar en multitud de sectores.

Amazon
Amazon

Ejecutar aplicación con PHP y Windows

Windows + Apache + PHP
Windows + Apache + PHP

Estos días en la oficina hemos tenido que echar mano de un windows y montarle Apache, PHP y MySQL para un proyecto que estamos desarrollando. Sí no había otra forma o windows o nada, por eso digo lo de “nunca cerrar las puertas a nadie” bueno en este caso a “nada”.

Sí Windows tendrás sus cosas malas pero en este caso nos está funcionando a las mil maravillas.

Os cuento hemos desarrollado una aplicación que necesita generar un tipo concreto de ficheros que en Linux se nos hacía bastante complicado generar con la suficiente calidad y no nos quedó otro remedio que echar mano de windows.

Los problemas llegaron cuando desde el código PHP no éramos capaces de lanzar un programa, siempre nos encontrábamos con el error,

“programatal.exe” no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

Buscando en Internet encontramos que teníamos que modificar en el php.ini la siguientes opciones:

  • safe_mode= off
  • safe_mode_exec_dir= On

También es necesario modificar el servicio del apache para darle permisos para permitir al servicio “interactuar con el escritorio”, para ello hacemos click en el botón Inicio->Ejecutar y escribimos “Services.msc” ( sin las comillas ), se nos abrirá el “gestor de servicios” de windows, tendremos que hacer click con el botón derecho en el Apache y click en propiedades. Ahora en la ventana que se nos ha abierto haremos click en “Inicio sesión” y marcaremos la opción “Permitir a los servicios que interactúen con el escritorio”.

Con estos pasos ya deberíamos poder ejecutar mediante la shell de windows un php y que éste lanze cualquier aplicación. En nuestro caso fue imposible, sí podíamos lanzar, por ejemplo, la calculadora de windows, el bloc de notas pero no una aplicación externa a windows.

Solución? La única solución que encontramos y que está funcionando perfectamente, es el crear un acceso directo al programa en la carpeta donde está nuestro fichero php.

El motivo por el cual no podíamos lanzar nuestra aplicación aún está por descubrir, la falta de tiempo no nos ha dejado investigar un poco más el por qué, aunque teóricamente es una medida de seguridad el no permitir ejecutar programas externos fuera del directorio del php que se está ejecutando.

MySQL conversión de LATIN1 a UTF-8

Seguramente alguna vez nos hemos encontrado que a la hora de comprobar un isert de miles de registros en una tabla recién creada ésta está codificada con LATIN1 cuando nosostros necesitamos tenerla en UTF-8.

Intentaré dar unos pasos para realizar la conversión y que todo funcione de nuevo con UTF-8.

Haced siempre una copia de seguridad antes de nada, recordad la Ley de Murphy.

  1. Hacer un backup de la base de datos con la codificación en LATIN1 a un fichero:mysqldump -u <usuario_BD> -p <nombre_BD_latin1> –default-character-set=latin1 > <nombre_BD_latin1>.sql
    Donde: usuario_BD es el nombre de usuario de la base de datos, nombre_BD_latin1 es el nombre de la base de datos con la codificación en LATIN1; este comando te pedirá la clave del usuario de base de datos introducido.
  2. Crear una base de datos vacía con codificación de caracteres UTF8:

    mysql -u <usuario_BD> -p
    CREATE DATABASE <nombre_BD_utf8> CHARACTER SET utf8 COLLATE utf8_general_ci;
    quit

  3. Modificar los caracteres del backup de LATIN1 a UTF8:

    iconv -f ISO-8859-1 -t UTF-8 <nombre_BD_latin1>.sql > <nombre_BD_utf8>.sql

  4. Substituir en la creación de las tablas del fichero de backup las cadenas que hacen que las tablas se creen con la codificación mala:

    perl -pi -w -e ‘s/CHARSET=latin1/CHARSET=utf8/g;’ <nombre_BD_utf8>.sql

  5. Importar el fichero de backup en la nueva base de datos:

    mysql -u <usuario_BD> -p <nombre_BD_utf8> –default-character-set=utf8 < <nombre_BD_utf8>.sql

Y listo, a trabajar en UTF-8.

Hacer un backup de la base de datos con la codificación en LATIN1 a un fichero:

mysqldump -u <usuario_BD> -p <nombre_BD_latin1> --default-character-set=latin1 > <nombre_BD_latin1>.sql
Donde: usuario_BD es el nombre de usuario de la base de datos, nombre_BD_latin1 es el nombre de la base de datos con la codificación en LATIN1; este comando te pedirá la clave del usuario de base de datos introducido.

Paginación simple con JavaScript

Empezamos la sección de Programación con un script muy simple. Necesitaba un paginador en JavaScript rápidamente y sin complicaciones y que paginara tablas. Buscando por internet y con un poco de código de aquí y un poco de allí montamos este pequeño script que funciona perfectamente para paginaciones no muy grandes.
El funcionamiento es muy simple, tan solo necesitamos insertar un par de líneas de código.

Paso 1
Insertar entre las etiquetas head el siguiente código:

<script type=”text/javascript” src=”paging.js”></script>

Paso 2
Donde queramos mostrar el paginador insertaremos:

<div style=”display:none; border: 0px;” id=”NavPosicion”></div>

Paso 3 Al final de nuestra página insertaremos:

<script type=”text/javascript”>
var pager = new Pager(‘resultados’, 10);
pager.init();
pager.showPageNav(‘pager’, ‘NavPosicion‘);
pager.showPage(1);
</script>

Paso 4
La tabla que vayamos a paginar debe tener un id, como por ejemplo:

<table id=”resultados”>

Fijaros que los nombres del id de la tabla ( resultados ), como el id del div ( NavPosicion ) son los que están definidos al crear el objeto pager en el paso 3, si los cambias debéis cambiarlos en todas las llamadas.

El 10 que se define al declarar el objeto pager es el número de resultados por cada página.

Con estos simples pasos tendremos implementado un sencillo paginador en JavaScript. Desde aquí podéis descargar el .js necesario para que todo funcione correctamente, acordaros de comprobar la ruta del paso 1.

p.d.: si conocéis algún plugin que permita colorear la sintaxis del código manteniendo el editor WYSIWYG os pediría que me dijéseis cual, porque los que he probado necesitan tener el editor visual desactivado y como no soy el único que, teoricamente, escribe en el blog si quito el editor visual me cuelgan…jejeje