3ENGINE

Programación y otros cachivaches

Autor: David Miró

Página 23/104

Tecnologia

node.js: codificación correcta de caracteres de un HTTP response


Si en node.js definimos el siguiente callback para dar respuesta a una petición HTTP

var server = http.createServer(function (request, response) {
  response.writeHead(200);
  response.write('el niño es rápido');
  response.end();
});

Esto es lo que obtendremos en nuestro navegador Web:

el niño es rápido

Vemos que el navegador no interpreta bien ni los acentos ni la eñe de la frase. Esto pasa porque estamos incluyendo caracteres que están fueran del rango del código ASCII. El navegador necesita que en la cabecera HTTP le especifiquemos el juego de caracteres correcto. Esto se hace a través del Header HTTP Contec-Type, donde en nuestro caso le indicaremos UTF-8.

Modificamos la función:

var server = http.createServer(function (request, response) {
  res.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"});
  response.write('el niño es rápido');
  response.end();
});

Y ahora el navegador Web interpreta correctamente la respuesta:

el niño es rápido

referencias:
http://nodejs.org/api/http.html
http://howtonode.org/hello-node




Tecnologia

Oracle. Cómo añadir un nuevo campo autoincremental a una tabla existente e indexarlo.


Supongamos un caso hipotético. Tenemos una tabla usuarios con un mal diseño donde el campo nombre es la clave única:

CREATE TABLE MYUSERS
(
  NOMBRE   VARCHAR2 (50) NOT NULL,
  APELLIDO VARCHAR2 (50) NOT NULL,
  CONSTRAINT PK_MYUSERS PRIMARY KEY (NOMBRE)
);

La poblamos de datos de ejemplo:

INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Rafael','Sanchez');
INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Daniel','Rodriguez');
INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Rodolfo','Martínez');
INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Sebastian','López');
INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Laura','Martí');
INSERT INTO MYUSERS (NOMBRE, APELLIDO) VALUES ('Sergio','Casas');

Y se decide añadir un campo numérico autoincremental que será la nueva clave única.

Pasos:

1. Crear secuencia INCMYUSERS
2. Eliminar primary key PK_MYUSERS
3. Añadir nuevo campo ID_MYUSERS y que permita valores nulos.
4. Asignar un valor incremental al nuevo campo para cada uno de los registros ya existentes.
5. Modificar el campo ID_MYUSERS para que no permita nulos.
6. Crear nueva primary key PK_MYUSERS

Script:

-- crear secuencia
CREATE SEQUENCE INCMYUSERS INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCYCLE NOORDER CACHE 20; 
-- eliminar primary key
ALTER TABLE MYUSERS DROP CONSTRAINT PK_MYUSERS;
-- añadir nueva columna 
ALTER TABLE MYUSERS ADD ID_MYUSERS NUMERIC(10);
--dar un valor incremental
DECLARE
CURSOR MYUSERS_CUR IS
  SELECT * FROM MYUSERS
  FOR UPDATE OF ID_MYUSERS;
BEGIN
    FOR MYUSERS_REC IN MYUSERS_CUR
    LOOP
    UPDATE IMPORT
      SET    ID_MYUSERS = INCMYUSERS.NEXTVAL
      WHERE  CURRENT OF MYUSERS_CUR;
    END LOOP;
END;
-- ahora la nueva columna no puede ser nula
ALTER TABLE MYUSERS MODIFY ID_MYUSERS NUMERIC(10) NOT NULL; 
-- crear nueva primary key 
ALTER TABLE MYUSERS ADD CONSTRAINT PK_MYUSERS PRIMARY KEY (ID_MYUSERS);

Resultado:




Tecnologia

TRACERT


TRACERT determina la ruta tomada hasta un destino enviando al destino paquetes de eco del Protocolo de mensajes de control de Internet (ICMP)

U:\>tracert www.3engine.net
Traza a la dirección 3engine.net [91.199.120.8]
sobre un máximo de 30 saltos:
  1    10 ms    <1 ms    <1 ms  10.21.9.2
  2    <1 ms     2 ms    <1 ms  10.255.21.1
  3     *        *        3 ms  
  4     4 ms     2 ms     4 ms  10.255.16.4
  [....]
Traza completa.

Enlaces relacionados:

http://support.microsoft.com/kb/162326
http://www.dba-oracle.com/teas_prae_util26.htm




Tecnologia

Format y format array en javacript


Javascript, y por lo tanto node.js, no tiene nada parecido a una función format, pero se puede emular facilmente aprovechando el prototipado de javascript:

// Format emulate
String.prototype.format = function () {
  var args = arguments;
  return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
    if (m == "{{") { return "{"; }
    if (m == "}}") { return "}"; }
    return args[n];
  });
};

Ademas, si necesitas aplicar un format sobre un array puedes hacer esto:

// apply string format to all elements of array and return result
Array.prototype.format=function(prefix)
{
    var result = [];
    this.forEach(function(entry) {
        result.push(prefix.format(entry));
    });
    return result;
};

Ejemplo de uso

console.log("soy el numero {0}".format(1));   
// return soy el numero 1
var misNumeros = [1,2,3];
console.log(misNumeros.format("soy el numero {0}")); 
// return [ 'soy el numero 1', 'soy el numero 2', 'soy el numero 3' ]