Skip to main content

Calcular el tiempo transcurrido Javascript

Calcular el tiempo transcurrido

El método getTime devuelve el número de milisegundos transcurridos desde la medianoche del 1 de enero de 1970. Para cualquier fecha anterior a esa, devuelve un número negativo.

Puede usar el método getTime para establecer una hora inicial y final para calcular el tiempo transcurrido. Se puede utilizar para medir unidades pequeñas, como unos segundos, y unidades grandes, como días.

En el ejemplo siguiente se calcula el tiempo transcurrido en segundos. El método getTime obtiene el número de milisegundos desde la fecha cero.

Para trabajar con unidades más controlables, puede dividir los milisegundos proporcionados por el método getTime por un número adecuado. Por ejemplo, para convertir los milisegundos en días, divida el número por 86.400.000 (1.000 milisegundos x 60 segundos x 60 minutos x 24 horas).

En el siguiente ejemplo se muestra el tiempo que ha transcurrido desde el primer día del año especificado. Se usan operaciones de división para calcular el tiempo transcurrido en días, horas, minutos y segundos. No tiene en cuenta el horario de verano.

 

 

Comentarios Facebook

Leer Más

Objetos JSON

JSON significa JavaScript Object Notation o notación de objetos JavaScript. No es más que una forma muy potente y poco conocida de crear e instanciar objetos que tomo un significado nuevo a partir de las aplicaciones AJAX.

Su notación es tan sencilla que en la actualidad se utiliza en muchos lenguajes para el transporte liviano de objetos.

Sintaxis

Un objeto JSON está encerrado entre llaves ( { } ) y contiene propiedades separadas por comas, cuyos nombres deberían estar encerrados entre comillas ( aunque la mayoría de las implementaciones los acepta sin ellas ); cada propiedad tiene un valor separado por dos puntos ( : ) y cada valor puede ser :

  • Un String encerrado entre comillas.
  • Un número.
  • Una función.
  • Otro objeto JSON.

Ventajas

Las ventajas son muchas, es sencillo y rápido de escribir , su lectura es comprensible y se puede navegar por el objeto con notación de punto, como cualquier objeto JavaScript.

Un JSON como todo objeto JavaScript puede recorrerse con un for in para saber las propiedades que posee.

JSON con funciones

Un JSON también puede contener funciones, que pueden transportarse como cualquier otra variable.

Usos

En el presente , JSON se utiliza para :

  • Definir enumeraciones o constantes para evitar problemas de escritura por ejemplo:

  • Transportar objetos entre el cliente y el servidor a través de AJAX, en remplazo de XML. Para ello, se recibe el objeto como string. Por medio de la propiedad responseText para hacer que JavaScript interprete a JSON como tal y no solo como string, hace falta ejecutar el código siguiente que evalúa el JSON:

Antes de hacer eval , es necesario están seguros que es un JSON valido, si no generará una excepción, la cual se puede capturar con un try ,o ejecutar código JavaScript si lo fuera , con la posibilidad de un problema de seguridad de inyección.

Del lado del servidor

Cuando enviamos un objeto JSON al servidor , tenemos que tener instalado una librería especial para poder manejar la información, en PHP desde la versión 5.2.X , esta librería ya viene instalada por defecto su uso es el siguiente:

La función JSON_decode() , decodifica el objeto JSON y lo convierte en un arreglo asociativo en cambio , JSON_encode() hace la función inversa , de un arreglo asociativo a un objeto JSON.

Comentarios Facebook

Leer Más

AJAX con JavaScript

Esta entrada daremos la introducción a la tecnología de AJAX, este será la primera publicación sobre este tema, en futuras entregas publicare como implementarla para desarrollar aplicaciones ricas en internet.

Lo primero que se preguntaran es, ¿Qué es AJAX?, la palabra es el acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de los usuarios mientras se mantiene la comunicación asíncrona con el servidor en segundo plano.

Toda aplicación que usa AJAX usa al objeto XMLhttpRequest , por eso mismo veremos un poco de historia y después como usar este objeto para desarrollar aplicaciones interactivas.

El objeto XMLHttpRequest

Empezaremos con un poco de historia , corría el año de 1998 cuando Microsoft libero una tecnología conocida como Remote Scripting que permitia por medio de un applet Java, realizar peticiones desde JavaScript al servidor sin que el usuario lo notara y sin que cambiara la URL del sitio web.

Al año siguiente la empresa lanzo Internet Explorer 5.0 (La pesadilla de los desarrolladores web de la época) y en este incorporó, bajo la tecnología ActiveX un objeto llamado XMLHttp, que remplazaba a Remote scripting sin necesidad de que el usuario tenga instalada una máquina virtual Java.

Esta tecnología paso desapercibida hasta que 5 años después un conjunto de empresas (Google, Yahoo, AOL, etc.) retomaron el concepto y comenzaron a aplicarlo en sus servicios web para lograr interfaces ricas jamás antes vistas desde la llegada del HTML.

Es así como el objeto XMLHttp es el corazón de toda aplicación AJAX dado que es el que permite realizar peticiones al servidor en forma asíncrona y sin cambiar de URL.

La competencia de IE implementaron un objeto clon que lo denominaron XMLHttpRequest. Este objeto es nativo de JavaScript y tiene los mismos métodos y propiedades que el objeto ActiveX de Microsoft.

Estas dos versiones del objeto XMLHttp se convirtieron durante mucho tiempo en el dolor de cabeza de muchos desarrolladores, hasta que IE 7 implementó el objeto XMLHttpRequest en forma nativa.

Modo de uso

Ya que nos pusimos en contexto veamos cómo se implementa esta tecnología.

Para hacer una petición al servidor es necesario seguir los pasos siguientes:

  1. Instanciar el Objeto antes mencionado.
  2. Configurar y abrir la petición.
  3. Definir una función que se encargue de administrar la evaluación de la petición.
  4. Enviar la petición y los datos al servidor.
  5. En la función definida antes, manipular el estado de la petición y en que caso correcto recibir los datos y actuar en consecuencia con ellos, según lo que se quiera hacer.

 

Instanciar el Objeto

Para esto declaramos una variable y asignamos el objeto como lo muestra el código de abajo:

 

Configurar y abrir la petición.

Para configurar y preparar la petición antes de enviarla al servidor usaremos el método open(), este recibe los datos de configuración como son el método por el cual se enviaran los datos, los más utilizados son GET o POST , la URL a donde se hará la petición y si la petición será asíncrona o no, el uso del método seria como el siguiente:

Código para preparar la conexión.

 

Ya que se configuro y esta lista la petición para su envió, usaremos el método send(), cabe mencionar que si en el método anterior configuramos como método de envio a GET , el método send recibe como parámetro NULL, ya que los datos fueron enviados por medio de la URL.

En caso contrario los datos serán pasados en el formato

.

Código del uso del método send().

Propiedades

Ahora veremos las propiedades para poder llevar el monitoreo y administración de nuestra petición.

ReadyState

La propiedad de solo lectura readystate devuelve el código numérico entre 0 y 4, inclusive, que indica en qué estado se encuentra la petición.

 

Código

Estado

Descripción

0

Sin inicializar

El requerimiento solo fue instancionado. Muchos navegadores no manejan este código y pasan directamente al siguiente

1

Cargando

El requerimiento se configuro con open pero todavía no se envía.

2

Cargado

El requerimiento de envió o se está enviando, aunque todavía no tenemos respuesta alguna del servidor

3

Interactivo

El servidor ya respondió la petición, ya tenemos disponibles las cabeceras pero el contenido todavía se esta descargando.

4

Completo

La petición ya finalizó y el contenido está completo.

 

 

Status

Es muy importante no confundir esta propiedad con la anterior, la propiedad status devuelve el código HTTP que nos devolvió el servidor.

Código

Descripción

200 La petición se pudo procesar en forma correcta.
404 La URL a la que realizamos la petición no existe en el servidor.
500 Error interno del servidor. Puede indicarnos que el servidor está saturado o que hay algún error en el script ejecutado en el servidor.
400 La petición enviada al servidor es errónea. Hay algún inconveniente con las cabeceras o con la información POST enviada.
403 No tenemos permiso de acceder al recurso en el servidor.
405 No se acepta el método. Hay un problema al definir los métodos POST o GET.
414 La URL pedida es muy larga. Puede producirse cuando se envían muchos datos por GET. En este caso, se debe cambiar al método a POST.
503 El servidor esta temporalmente no disponible.

 

Como vemos en la tabla anterior, el código que se debe esperar de una petición correcta será 200.

Ahora agregamos esta condición a la anterior.

ResponseText

Esta propiedad de solo lectura devuelve un string con el contenido del cuerpo devuelto por el servidor ante la petición. Solo tenemos seguridad de que los datos están correctos cuando readystate sea 4 y status sea 200.

Esta propiedad se utiliza para recibir del servidor tanto información textual como HTML, código JavaScript u objetos JSON.

Onreadystatechange

De todas las propiedades descritas hasta ahora, esta es la única que se utiliza antes de enviar la petición.

El objeto XMLHttpRequest posee un solo evento estándar, que se puede y se debe capturar para procesar la petición dado que se está tratando con una petición asíncrona donde el objeto se encarga de avisarnos cuando la petición termina.

La propiedad onreadystatechange, entonces debe asignarse a una función que se ejecutara de manera automática cada vez que la propiedad readystate cambie su valor de entre 0 y 4.

De esta forma cuando el estado llegue a 4 ya estaremos listos para leer los datos que nos devuelve el servidor.

Para asignarle una función a esta propiedad tenemos dos opciones, la primera es definir una función anónima o en línea y la segunda es almacenar una función en una variable, al usar la segunda opción tenemos que tener cuidado de no usar los paréntesis ya que en vez de almacenar la función estaríamos ejecutándola.

Esta propiedad deberá definirse antes o después del método open y antes del send para que el código funcione correctamente.

Implementación

Ya que vimos los métodos y propiedades del objeto XMLHttpRequest haremos una pequeña demostración para esto haremos una petición al servidor para que nos devuelva un mensaje «Hola Mundo en AJAX», este tutorial tenemos dos archivos index.html y Ajax.php.

En el archivo index.html pondremos el código javascript y la estructura HTML, en Ajax.php ira el mensaje que nos devuelve el servidor, estos dos archivos tienen que estar en algún servidor web y en la misma carpeta.

Ajax.php

Comentarios Facebook

Leer Más

Configuración básica de un Router Cisco

 

Cuando se configura Un Router, se realizan ciertas tareas, tales como:

  • Denominar al Router.
  • Configurar contraseñas.
  • Configurar sus interfaces.
  • Configurar mensaje del día.
  • Guardar los cambios realizados al router.
  • Verificar la configuración básica y las operaciones del router.

     

Ya que prendimos el router la primera petición de entrada aparece en el modo usuario. El modo usuario deja ver el estado del router, pero no permite modificar su configuración. Cundo estamos en el modo usuario nos aparece esto en el promt <pre>Router></pre>.

Para poder configurar el router debemos entrar al modo EXEC privilegiado utilizando en comando enable. En este modo el promt cambiara de «>» a «#».

 

Nombres de host y contraseñas

 

Para una mejor administración de nuestra red hay que nombrar a los dispositivos que pertenezcan a ella ya que si no lo hacemos y dejamos el nombre por defecto tenderíamos a confundirnos de dispositivo y seriamos susceptibles a fallos de configuración.

Para nombrar a un router debemos entrar al modo EXEC privilegiado como vimos en la parte anterior de este post, después el siguiente paso es entrar en modo de configuración global con el comando configure terminal, este comando tiene una versión resumida, config t . De las dos formas entraremos al modo de configuración y veremos que el promt cambia nuevamente a Router(config)#, ya estando en ese modo utilizaremos el comando hostname, que su nombre lo dice nos sirve para cambiar de nombre al dispositivo, su sintaxis es la siguiente:

Ahora, configuremos una contraseña que se usara para entrar al modo EXEC privilegiado, esto para evitar que personas no autorizadas puedan configurar el dispositivo para que esto no suceda tenemos que asegurarnos que esta contraseña sea segura.

enable secret [password], donde password es la contraseña que usaremos.

El siguiente paso es configurar las contraseñas en las líneas Telnet y consola

El comando llogin permite la verificación de la contraseña en la línea. Si no se ingresa el comando login en la línea de consola el usuario obtendrá acceso sin ingresar una contraseña.

 

Configurar el mensaje

 

La configuración de un mensaje adecuado forma parte de un buen plan de seguridad. Como mínimo, un mensaje debe prevenir el acceso no autorizado. No configure nunca un mensaje que le dé la «bienvenida» a un usuario no autorizado.

Para configurarlo entramos el modo de configuración global y usamos el comando banner motd [delimitador], donde delimitador es el carácter al comienzo del mensaje y al final del mismo, este delimitador permite configurar un mensaje de varias líneas como el siguiente:

 

Configuración de las interfaces del router

 

Para que podamos tener comunicación entre los dispositivos conectados al router tenemos que configurar estas interfaces asignándoles una dirección IP y una máscara de sub-red. Es recomendable asignarle también una pequeña descripción para poder documentar la información de red, el texto de dicha descripción tiene un límite de 240 caracteres. La configuración de las interfaces también se lleva a cabo en el modo de configuración global.

 

Donde tipo de interfaz puede ser FastEthernet , GigabitEthernet y serial , según el tipo de router que estemos configurando.

El número de interfaz suele ser el del slot por ejemplo la serial 0 / 0 o la fastEthernet 0/ 1.

El comando no shutdown sirve para activar la interfaz, esta debe de estar conectada a otro dispositivo para que la capa física se active.

Verificación de la configuración

 

Todas las configuraciones hechas en el router se van almacenando en el archivo de configuración en ejecución este archivo se almacena a su vez en la memoria RAM y es el archivo de configuración que usa el IOS. El próximo paso consiste en verificar los comandos ingresados mediante la visualización de la configuración en ejecución con el comando desde el modo EXEC privilegiado:

Router#show running-config

Ya que hemos verificado y/o corregido nuestros errores procedemos a guardar la configuración a la NVRAM (La memoria no volátil del router) con el siguiente comando:

Router#copy running-config startup-config

Donde startup-config es el archivo donde se almacena la configuración que se cargara en el próximo reinicio del router.

Si solo queremos saber las configuraciones de las interfaces usaremos el comando: show ip interface brief nos mostrara la dirección de la interfaz y su estado en el que se encuentra, activa o desactiva.

 

 

 

 

 

Comentarios Facebook

Leer Más

Diccionarios en Python

Los diccionarios son estructuras de datos que almacena una serie de valores utilizando otros como referencia para su acceso y almacenamiento. Los diccionarios se asemejan a los arreglos asociativos de PHP o a los objetos JSON de JavaScript ya que cada elemento es un par de clave valor, donde el primero debe ser único y será utilizado para obtener el dato almacenado. Al igual que las listas, los diccionarios son mutables e iterables y representan una colección de objetos que pueden ser de diferentes tipos, pero no tienen un orden específico, ya que el intérprete de Python se encarga de eso.

Declaración

Para declarar un diccionario se utilizan las llaves ({ }) entre las que se encuentran los pares clave – valor separados por comas, la clave de cada elemento está separada del correspondiente valor por dos puntos (:) en el siguiente ejemplo se muestra como declarar un diccionario.

Diccionario = {'a':1,'b':2,'c':3}

Otra manera de declarar un diccionario es utilizando la función dict().

Diccionario = dict(a=1, b=2, c=3)

Acceso, inserciones y borrados

Como lo vimos en el artículo de tuplas, para acceder a los elementos de esta, tenemos que usar el índice en función a la posición que ocupa cada de elemento. Los diccionarios, en cambio necesitamos utilizar la clave para accesar al valor de cada elemento. Usando nuestro ejemplo anterior para accesar al valor de 1 pondremos lo siguiente

Diccionario ['a']

Para modificar cualquier elemento basta con acceder con su clave de la siguiente manera:

Diccionario ['a'] = 2

Con esto el elemento con clave ‘a’ pasa a tener un valor de 2.

Para añadir un elemento es lo mismo que al modificar uno ya existente, ya que si la clave no existe se agrega automáticamente y se le añadirá su correspondiente valor.

Para iterar sobre los diccionarios tenemos tres métodos propios de esta estructura de datos: ítems (), values (), keys (). Por su nombre nos damos una idea de lo que realizan, el primero nos da acceso tanto a claves como a valores, el segundo nos devuelve los valores, y el tercero solo nos devuelve las claves del diccionario. Veamos a estos métodos en acción:

Cabe mencionar que al usar ítems() nos genera una lista y dentro de esta lista en cada posición hay tuplas con la clave y valor, en los dos últimos métodos nos genera una lista.

Para eliminar elementos usaremos la función del() para ello , necesitaremos parar como parámetro la clave que contiene el valor que deseamos eliminar. Por ejemplo para eliminar la clave ‘c’ hacemos lo siguiente del( Diccionario['c'])

Otra función integrada , en este caso len() también funciona sobre los diccionarios, devolviéndonos el numero total de elementos contenidos.

El operador   in en un diccionario sirve para comprobar si una clave existe. En caso afirmativo devolverá el valor de True y False en otro caso: x in Diccioanario  nos devolverá False

 

 

 

Comentarios Facebook

Leer Más

Hack del cifrado cesar

Ya vimos cómo es que funciona el cifrado cesar y programamos una función en la cual cifrábamos y des cifrábamos un mensaje, si no has visto la entrada ve aquí: cifrado cesar .

El cifrado cesar no nos da ninguna seguridad ya que como usa como claves las letras del abecedario es muy fácil de romper a través del método de fuerza bruta, el cual consiste en probar todas las claves posibles que en este caso son 26. Cada vez que probamos con una clave de ciframos el mensaje , lo volvemos a cifrar usando la clave que estamos probando y lo comparamos con el mensaje cifrado que nos dio el usuario , si se cumple esta condición se ha encontrado la clave correcta , si no se cumple prueba con la letra siguiente.

Código para romper el cifrado cesar

 

Comentarios Facebook

Leer Más

Cifrado de transposición

 

El cifrado por transposición consiste en agrupar los caracteres del mensaje a cifrar dentro de una matriz bidimensional, un carácter en cada índice de la matriz, el segundo paso es leer cada columna por ejemplo para cifrar el mensaje «A quien madruga Dios le ayuda» con una matriz de 5×5, en este caso el 5 sería nuestra clave, nuestra matriz quedaría de la siguiente manera:

A

Q

U

I

E

N

M

A

D

R

U

G

A

D

I

O

S

L

E

A

Y

U

D

A

H

 

El último elemento que esta sombrado es el relleno de la matriz este se genera aleatoriamente.

Ahora leemos cada columna para crear nuestro mensaje cifrado: ANUOY QMGSU UAALD IDDEA ERIAH, para mayor seguridad y complejidad podemos leer las columnas con un determinado orden preestablecido entre las entidades involucradas, por ejemplo leeremos las columnas con el orden 3-5-2-1-4 el mensaje cifrado seria : UAALD ERIAH QMGSU ANUOY IDDEA

Para des cifrar el mensaje lo que haremos es a volver a hacer una tabla para leer las columnas:

A

N

U

O

Y

Q

M

G

S

U

U

A

A

L

D

I

D

D

E

A

E

R

I

A

H

 

Si implementamos algún orden en especial para cifrar el mensaje, para des cifrarlo tenemos que leer las columnas en orden inverso, utilizando el mensaje UAALD ERIAH QMGSU ANUOY IDDEA al invertir el orden quedaría como el original y así podríamos generar la tabla anterior para des cifrar el mensaje.

Recomendaciones

Algunas personas manejan los espacios en blanco con caracteres especiales que al des cifrar el mensaje los sustituyen por los espacios en blanco para hacer más legible el mensaje.

Si nuestro mensaje es más corto que nuestra clave, el mensaje no quedaría cifrado del todo y sería más fácil de romper por ejemplo si nuestro mensaje es «hola amigo» y nuestra clave es 10 la matriz quedaría algo así:

H O L A (s) A M I G O

Como ven este mensaje queda en texto plano es decir que el método no servirá de nada, por eso hay que comprobar que el mensaje sea más grande que nuestra clave.

En este ejemplo use el carácter (s) como un espacio en blanco.

Algoritmo para Cifrar

 

Si quisiéramos cifrar todo un documento realizar el cifrado sería un trabajo titánico sin hablar del des cifrado del mismo, pero no hay que preocuparnos que por eso tenemos las computadoras para que realicen el trabajo tedioso por nosotros, ahora programemos una función para cifrar un mensaje y darle la clave para que genere la matriz.

 

 Código para decifrar

 

 

 

 

 


Comentarios Facebook

Leer Más

Cifrado Cesar

El cifrado cesar es un método de cifrado por transposición o desplazamiento, su origen se remonta a la antigua Roma donde julio cesar, de ahí el nombre del algoritmo, lo utilizaba para hacer llegar sus órdenes a sus generales en batalla con el fin de que si el mensaje era interceptado por el enemigo este no pudiera leerlo.

El cifrado funciona desplazando las letras según el numero clave por ejemplo, la letra A se cambiaría por la D si nuestra clave fuera 3, y la B pasaría a ser E y así sucesivamente. Este método de cifrado en la actualidad no provee ningún grado de seguridad ya que es muy fácil de romper, falta observar las letras que se repiten con más frecuencia, por ejemplo en el español la letra E es la más usada por lo tanto si vemos un texto cifrado en el cual se repite muchas veces la letra J podríamos calcular la clave restando el valor de la J menos el valor de la E obteniendo así un 5 , este número seria nuestra clave para poder descifrar el mensaje.

Código para cifrar y descifrar

Ahora que hemos visto un poco de historia veamos como programar una función para cifrar y descifrar mensajes utilizando python, en la parte de abajo les dejo el código comentado.

 

 

Espero que les haya gustado la entrada no olviden compartirla , en futuras entradas publicare más métodos criptográficos.

 

Comentarios Facebook

Leer Más

Método de integración Simpson 1/3

 

Código en python utilizando el método de Simpson 1 / 3 para integrales definidas, esta función recibe cuatro argumentos, el primero es el número de iteraciones (n) , el intervalo inferior (a) , el intervalo superior(b) , y la función que queremos integrar (f).

El valor de N es un entero.

El valor de los intervalos a y b son de tipo Float.

Y la función es un String por ejemplo «sin(x)».

Pseudo – código.

Implementación en python

 


Comentarios Facebook

Leer Más

Interpolación de Lagrange

En está ocasión les dejo el algoritmo  hecho en python de la Interpolación de Lagrange, cualquier duda o comentario respecto al código lo pueden dejar en la parte de comentarios.

 

Comentarios Facebook

Leer Más