Como probar envios de email en servidor local

En varias ocasiones he programado aplicaciones y paginas web que notifican mediante un correo electrónico ciertas acciones o sucesos (envíos de formularios de contactos, inicios de procesos automáticos, etc.), esto con el tiempo se ha vuelto común para mi, pero en algún momento debí realizar las pruebas necesarias para verificar el correcto funcionamiento es ahí cuando me surgió una necesidad, como probar el envío de email desde mi servidor local.

Como muchos sabrán, para poder enviar email mediante una pagina web, por ejemplo, requerimos que el servidor en cuestión cuente con un servidor de email correctamente configurado, esto es un hecho en la mayoría de Web Hosting, pero si desarrollamos en ambientes locales, como podría ser nuestro propio computador, ejecutando un simple servidor web, esto se vuelve un poco mas complejo. A primera vista necesitamos instalar y configurar un servidor de email, pero esto no es una tarea simple a pesar de existir mucha literatura disponible en internet.

No todo lo 'Fake' es malo

Teniendo claro lo anterior, sabemos que intentar instalar un servidor de email «solo para realizar pruebas locales», no es sensato, entonces ¿Como podemos realizar las pruebas?, y pare responder esto les presento una sencilla, simple y extremadamente útil aplicación llamada FakeSMTP, con ella podremos «emular» un servidor de email y ver como se envían nuestras pruebas.

Instalación y Configuración

Por suerte es una aplicación realmente fácil de empezar a utilizar, esta escrita en java, por tanto su uso en distintos Sistemas Operativos esta garantizada, obviamente el requisito mínimo es tener instalada la alguna versión de java.

Vamos a su pagina web disponible aquí y procedemos a descargar la aplicación (es un archivo con extensión .jar comprimido). Al momento de escribir este post se encuentra disponible la versión 2.0, lo descomprimimos en una carpeta fácil de encontrar y ejecutamos la aplicación, si no les reconoce de inmediato pueden usar la opción de abrir con y seleccionar java.

Cuando la aplicación este cargada deberán ver algo similar a lo siguiente:

Lo único a configurar seria la ubicación donde se guardaran los mensajes haciendo clic en la caja de texto llamada Save message(s) to, seleccionamos un lugar (yo elijo el mismo lugar donde esta el programa), y luego presionamos Start Server, por defecto el puerto es 25 y no es necesario cambiarlo, a menos que les de algún problema o tengan otro servicio en ese puerto, si cambian el puerto del programa deberán cambiarlo en la configuración del servidor web, que por defecto se configura en el puerto 25, autorizan la petición de excepción del firewall si se trata de windows y ya estamos listos para realizar las pruebas.

Por si no lo leyeron en la pagina principal del programa o no lo intuyen por el nombre, les digo, esto no es un servidor de email como tal, lo que hace es interceptar la comunicación del puerto del servidor de email (por defecto 25 para servidores SMTP).

Pruebas de Funcionamiento y Uso

Ahora que tenemos nuestro servidor falso de email, podremos realizar cuantas pruebas queramos, y para demostrar su eficacia lo usare con este post y veremos que sucede.

Completamos el formulario y lo enviamos

Una vez realizado el envío del formulario podemos ver nuestro «FakeSMTP» y podremos ver como ya registro el envío y nos da claras señas de ello.

Si contamos con un cliente de email como Microsoft Outlook o Thunderbird instalado bastara con hacer doble clic en el registro de nuestro interés y el mensaje se desplegara en el cliente de correo.

screenshot.6

Y como pueden observar todo ah funcionado perfectamente y ya contamos con un medio para verificar nuestros envíos por email en entornos locales sin necesidad de complicarnos la existencia. Si no contamos con un cliente de email instalado el programa nos permite ver el fuente de los email «enviados» tan solo presionando la pestaña llamada Last message y podrán visualizar la estructura básica del mail.

screenshot.7

Si desean presentar las pruebas del envió a otra persona, como podría ser un cliente (para que apruebe la estructura), o un Jefe de Proyecto (siempre molestan xD), recuerden que en los primeros pasos configuramos donde guardar los mensajes y si navegamos a ese directorio, encontraran un archivo con extensión eml por cada prueba realizada que pueden adjuntar por correo de ser necesario.

screenshot.5

Espero les pueda servir o ayudar de algo la información presentada aquí, si desean compartir su experiencia, aportar o incluso reclamar, no duden en comentar mas abajo, saludos cordiales.

Envío de formularios web por email con PHP y jQuery AJAX

Hace algún tiempo publique una entrada para crear un formulario multi pasos con html, jquery y css3. Pero nunca explique cómo enviar ese formulario y he recibido varias consultas preguntando eso, así que por fin le dedique un poco de tiempo y crearemos un sencillo script php para el envío de formularios web por email con PHP y jQuery AJAX.

Que necesitamos?

Un formulario (obvio) incluso podría usarse el formulario multipasos ya explicado en esta entrada, pero para fines practico crearemos uno mas simple, pero el método es aplicable a cualquier formulario.

  • Formulario HTML.
  • Un servidor web con php.

Nuestro formulario

<div class="form-style" id="contact_form">
<div class="form-style-heading">SuperMegaDuperHiper Formulario</div>
<div id="contact_body">
<label>
<span>Nombre <span class="required">*</span></span>
<input type="text" name="name" id="name" required="true" class="input-field"/>
</label>
<label>
<span>Email <span class="required">*</span></span>
<input type="email" name="email" required="true" class="input-field"/>
</label>
<label>
<span>Fono</span>
<input type="text" name="phone1" maxlength="4" placeholder="+91"  required="true" class="tel-number-field"/>&mdash;
<input type="text" name="phone2" maxlength="15"  required="true" class="tel-number-field long" />
</label>
<label for="subject">
<span>Asunto</span>
<select name="subject" class="select-field">
<option value="Felicitaciones">Felicitaciones</option>
<option value="Petición">Petici&oacute;n</option>
<option value="Reclamo">Reclamo</option>
</select>
</label>
<label for="field5">
<span>Mensaje <span class="required">*</span></span>
<textarea name="message" id="message" class="textarea-field" required="true"></textarea>
</label>
<label>
<span>&nbsp;</span>
<input type="submit" id="submit_btn" value="Submit" />
</label>
</div>
</div>

Los mas suspicaces notaran que no existe la etiqueta form y esto no es un error del todo, semanticamente no seria correcto si lo validamos con el w3c, pero lo podemos resolver eligiendo el doctype mas adecuado, en este caso html5, así que lo agregamos a nuestro documento html.

<!DOCTYPE html>

Bien y el resultado seria mas menos lo siguiente:

Mmmm, realmente es un formulario muy básico xD, pongamos un poco de color ayudados por css.

Creamos un nuevo documento con extensión .css yo lo llamare style.css (que original).

/* ajuste basico del documento */
body,html{background: #E0EFF1;margin: 0px;padding: 0px;}
/* estilos del formulario */
.form-style{
 max-width: 450px;
 padding: 40px 30px 40px 40px;
 font: 13px Arial, Helvetica, sans-serif;
 margin: 50px auto;
 background: #fff;
     border-radius: 5px;
 -webkit-border-radius:5px;
    -moz-border-radius:5px;
         box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2);
 -webkit-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2);
}
.form-style-heading{
 font-weight: bold;
 font-style: italic;
 border-bottom: 2px solid #ddd;
 margin-bottom: 10px;
 font-size: 15px;
 padding-bottom: 3px;
}
.form-style label{display: block;margin: 0px 0px 15px 0px;}
.form-style label > span{
 width: 100px;
 font-weight: bold;
 float: left;
 padding-top: 8px;
 padding-right: 5px;
}
.form-style span.required{color:red;}
.form-style .tel-number-field{width: 40px;text-align: center;}
.form-style  .long{width: 120px;}
.form-style input.input-field{width: 48%;}

.form-style input.input-field,
.form-style .tel-number-field,
.form-style .textarea-field,
.form-style .select-field{
 -webkit-transition: all 0.30s ease-in-out;
    -moz-transition: all 0.30s ease-in-out;
     -ms-transition: all 0.30s ease-in-out;
      -o-transition: all 0.30s ease-in-out; 
         box-sizing: border-box;
 -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
 border: 1px solid #C2C2C2;
     box-shadow: 1px 1px 4px #EBEBEB;
    -moz-box-shadow: 1px 1px 4px #EBEBEB;
 -webkit-box-shadow: 1px 1px 4px #EBEBEB;
     border-radius: 3px;
 -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
 padding: 7px;
 outline: none;
}
.form-style .input-field:focus,
.form-style .tel-number-field:focus,
.form-style .textarea-field:focus,  
.form-style .select-field:focus{
 border: 1px solid #7DB4B5;
}
.form-style .textarea-field{height:100px;width: 55%;}
.form-style input[type="button"],
.form-style input[type="submit"] {
    -moz-box-shadow: inset 0px 1px 0px 0px #3985B1;
 -webkit-box-shadow: inset 0px 1px 0px 0px #3985B1;
     box-shadow: inset 0px 1px 0px 0px #3985B1;
 background-color: #216288;
 border: 1px solid #17445E;
 display: inline-block;
 cursor: pointer;
 color: #FFFFFF;
 padding: 8px 18px;
 text-decoration: none;
 font: 12px Arial, Helvetica, sans-serif;
}
.form-style input[type="button"]:hover,
.form-style input[type="submit"]:hover {
 background: linear-gradient(to bottom, #2D77A2 5%, #337DA8 100%);
 background-color: #28739E;
}
.form-style .success{
 background: #D8FFC0;
 padding: 5px 10px 5px 10px;
 margin: 0px 0px 5px 0px;
 border: none;
 font-weight: bold;
 color: #2E6800;
 border-left: 3px solid #2E6800;
}
.form-style .error {
 background: #FFE8E8;
 padding: 5px 10px 5px 10px;
 margin: 0px 0px 5px 0px;
 border: none;
 font-weight: bold;
 color: #FF0000;
 border-left: 3px solid #FF0000;
}

Ahora nuestro formulario si luce bien.

screenshot.1

Pero un momento, si el formulario no tiene la etiqueta

<form></form>

  como enviaremos el formulario sin el atributo action?. La respuesta es bien simple… Con Jquery Ajax por supuesto. Podemos crear un Archivo independiente para el script Jquery o integrarlo en la cabecera de nuestro documento html dentro de una etiqueta 

<script type="text/javascript">

  , yo lo incluiré dentro del documento.

Primero  declaramos un document ready

$(document).ready(function(){});

  y dentro programamos las validaciones básicas.

El código esta fuertemente comentado, por tanto no lo explicaré detalladamente (si existen dudas o incluso pueden aportar mejoras, comentarlas).

Debemos realizar las validaciones del lado del cliente antes que se envíe el formulario y presentar los errores si es que existen, para ello activamos nuestras validaciones con el método .click de jQuery, en términos mas simples, nuestro código jQuery se activara una vez realicemos un clic al botón enviar.

Usando los selectores de jQuery, vigilamos la acción .click()

$(document).ready(function(){
//usaremos el metodo .click() de jQuery para iniciar
//las validaciones del lado del cliente y enviar el formulario
$("#submit_btn").click(function(){
//creamos una variable como flag(bandera), 
//la usaremos para detener el script si no 
//se cumplen las reglas de validacion
var continuar = true;
//Validacion del lado del cliente
//iniciamos un bucle para validar todos los campos input y agregar un borde de color 
//cuando se envie el formulario con algun campo vacio
$("#contact_form input[required=true], #contact_form textarea[required=true]").each(function(){
$(this).css('border-color','');
if(!$.trim($(this).val())){ //si el campo esta vacio 
$(this).css('border-color','Red'); //cambiar el color del borde   
continuar = false; //Seteamos la bandera en false y detemos la ejecución
}
//si el if anterior valida correctamente pasamos a la siguiente validacion
//Usaremos una expresion regular para validar la estructura del email
var email_reg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; 
if($(this).attr("type")=="email" && !email_reg.test($.trim($(this).val()))){
$(this).css('border-color','Red'); //Cambiamos el color del borde si no cumple la estructura   
continuar = false; //Seteamos la bandera en false y detemos la ejecución                
}
});
});

//restablecer los colores del borde establecidos con anterioridad y ocultar todos los mensajes de .keyup()
$("#contact_form  input[required=true], #contact_form textarea[required=true]").keyup(function(){
$(this).css('border-color','');
$("#result").slideUp();
});
});

La primera parte ya esta hecha, pero al probar el formulario nos daremos cuenta que no realiza ninguna acción, si vemos la consola del navegador observaremos este error:

Error jQueryEsto se produce por no haber agregado la llamada a la librería de jQuery, asi que procedemos a incluirla en la cabecera de nuestra pagina 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">

  ahora al volver a probar nuestro formulario e intentar enviarlo sin completar los campo se iluminan los bordes con un color rojo indicando un error y si completamos los campos iluminados estos se restablecen.

validacíon jQueryBien ahora ya validamos correctamente, pero cuando realizamos el envío no sucede nada, pues bien ahora lo resolveremos.

Para enviar los datos por email, usaremos el método mail() de PHP, este método de php es lo mas básico que podríamos implementar y mas sencillo.

Desde nuestro script jQuery mediante ajax enviaremos los datos del formulario a nuestro nuevo archivo php (contact_me.php) para procesarlos y enviar el mail (al fin).

Agregamos los siguiente a nuestro script después  del método .eatch().

//Si llegamos a este punto, ¡Todo se ve bien! proceder...
if(continuar){
//obtenemos los valores de los campos de entrada para ser enviados al servidor
post_data = {
'user_name'    : $('input[name=name]').val(),
'user_email'   : $('input[name=email]').val(),
'country_code' : $('input[name=phone1]').val(),
'phone_number' : $('input[name=phone2]').val(),
'subject'      : $('select[name=subject]').val(),
'msg'          : $('textarea[name=message]').val()
};

//Enviar datos mediante Ajax al servidor
$.post('contact_me.php', post_data, function(response){  
if(response.type == 'error'){ //Cargamos datos en formato JSON de validacion del lado del servidor para mostrar los mensajes de error.
output = '<div class="error">'+response.text+'</div>';
}else{
output = '<div class="success">'+response.text+'</div>';
//Restablecemos los valores de todos los campos del formulario
$("#contact_form  input[required=true], #contact_form textarea[required=true]").val('');
$("#contact_form #contact_body").slideUp(); //Ocultamos el formulario y mostramos un mensaje de éxito
}
$("#contact_form #contact_results").hide().html(output).slideDown();
}, 'json');
}

Ahora crearemos el archivo

contact_me.php

  y agregamos el siguiente código.

<?php
if($_POST){
//A quien le llegara el email
$to_email = "mail@localhost";    
//Primera validacion y basica, comprobar si es una petición AJAX
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
$output = json_encode(array( //crear datos JSON
'type' => 'error',
'text' => 'Perdon, las peticiones deben ser de tipo Ajax'
));
die($output);
}
//Limpiamos los datos de entrada utilizando filter_var() de PHP5
$user_name    = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING);
$user_email   = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL);
$country_code = filter_var($_POST["country_code"], FILTER_SANITIZE_NUMBER_INT);
$phone_number = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT);
$subject      = filter_var($_POST["subject"], FILTER_SANITIZE_STRING);
$message      = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);


//Aunque validamos los datos con jQuery, si por alguna razon el
//navegador del visitante tiene javascript desahilitado no funcionara la validacion
//asi que realizaremos validación adicional con php del lado del servidor
if(strlen($user_name)<4){ //Si la longitud es menor que 4, devolvemos el error con JSON
$output = json_encode(array('type'=>'error', 'text' => 'El nombre es demasiado corto o está vacío!'));
die($output);
}
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //validacion de email
$output = json_encode(array('type'=>'error', 'text' => 'Por favor ingrese un email valido!'));
die($output);
}
if(!filter_var($country_code, FILTER_VALIDATE_INT)){ //Chequear que el campo codigo pais es un numero valido
$output = json_encode(array('type'=>'error', 'text' => 'Introduzca sólo dígitos en el código de país'));
die($output);
}
if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //Chequear que el telefono sea un numero valido
$output = json_encode(array('type'=>'error', 'text' => 'Introduzca sólo dígitos en el número de teléfono'));
die($output);
}
if(strlen($subject)<3){ //Nos aseguramos que el asunto no este vacio
$output = json_encode(array('type'=>'error', 'text' => 'El asunto es requerido'));
die($output);
}
if(strlen($message)<3){ //Revisamos que el mensaje no esta vacio
$output = json_encode(array('type'=>'error', 'text' => 'Mensaje demasiado corto! Por favor, introduzca algo mas.'));
die($output);
}


//cuerpo del email
$message_body = $message."\r\n\r\n-".$user_name."\r\nEmail : ".$user_email."\r\nPhone Number : (".$country_code.") ". $phone_number ;
//enviamos el email con php.
$headers      = 'From: '.$user_name.'' . "\r\n" .'Reply-To: '.$user_email.'' . "\r\n" .'X-Mailer: PHP/' . phpversion();
$send_mail    = mail($to_email, $subject, $message_body, $headers);

if(!$send_mail){
//Si el correo no pudo ser enviado o recibimos error de salida.
//Compruebe la configuración de correo electrónico PHP (si es que alguna vez sucede )
$output = json_encode(array('type'=>'error', 'text' => 'No se pudo enviar el correo! Por favor, compruebe la configuración de PHP mail.'));
die($output);
}else{
$output = json_encode(array('type'=>'message', 'text' => 'Hola '.$user_name .' Gracias por tu email, pronto nos contactaremos.'));
die($output);
}
}
?>

Ahora ya podemos realizar un prueba del envío. No olviden cambiar la dirección de email donde llegaran los mensajes en la linea 4 del archivo contact_me.php.

Otra cosa importante es el hecho que si prueban el formulario en un servidor local no les llegara el mensaje al correo configurado y si miran la consola del navegador verán un mensaje similar al siguiente.

<br />
<b>Warning</b>:  mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your
 &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in <b>D:\USBWebserver
 v8.6\root\ajaxcontact\contact_me.php</b> on line <b>54</b><br />
{"type":"error","text":"No se pudo enviar el correo! Por favor, compruebe la configuraci\\u00f3n mail
 en su archivo php.ini."}

Esto es por que nuestros computadores hogareños no cuentan con un servidor de email configurado para poder enviar los email a otros servidores (gmail,yahoo, etc), pero en un hosting publico no deberíamos tener problema.

Actualización 21/06/2016

Para realizar pruebas en ambientes locales leer el siguiente post Como probar envios de eamil en servidor local

Descargar

Referencias

Paleta de Colores
Método .click() jQuery
Método mail PHP
jQuery.ajax()
filter_var PHP
filter_sanitize PHP

Notepadqq, el Notepad++ para Gnu/Linux

Desde hace tiempo eh utilizado como editor de texto multi propósito Sublime Text, como principal motivo su multi plataforma y permitir utilizarlo en los principales Sistemas Operativos, pero como en gustos nada es absoluto, les traigo un excelente editor bastante similar al archi conocido Notepad++ (o notepad plus) de windows, muy liviano y grandes características que podrían hacer el deleite de usuarios noveles que solo deseen un editor de texto para tomar notas o para aquellos usuarios avanzados como programadores web que requieran un editor liviano y simple.

Ayuda a los desarrolladores, proporcionando todo lo que se puede esperar de un editor de texto de uso general, tales como resaltado de sintaxis para más de 100 idiomas diferentes, plegado de código, esquemas de color, el seguimiento de archivos, selección múltiple y mucho más.

Notepadqq home page

Como instalar

Primero podemos ir directamente a su web oficial y proceder a agregar el ppa en nuestra distribución ubuntu mediante los siguientes comandó en la consola o terminal:

$ sudo add-apt-repository ppa:notepadqq-team/notepadqq
$ sudo apt-get update
$ sudo apt-get install notepadqq

Una vez realizados los pasos previos ya podremos disfrutar de este prometedor editor.

Ahora claro si eres un usuario mas avanzado puedes ir a su repositorio en github, para descargar los fuentes y compilar el software para adaptarlo a tu maquina o necesidades.

$ git clone https://github.com/notepadqq/notepadqq.git
$ cd notepadqq

Una vez descargados los fuentes en nuestra maquina, procedemos a compilar.

notepadqq$ ./configure --prefix /usr
notepadqq$ make

Una vez completada la compilación procedemos a instalar.

notepadqq$ sudo make install

Ahora solo queda disfrutar de esta fantástica opción, ademas de disponer de un ppa para Ubuntu y derivadas, es posible instalarlo en Debian y Arch Linux.

Espero tus consultas, comentarios y sugerencias.

Acarus: APT para Pentesting

Pocas cosas dan tanto miedo como las siglas APT: "Una amenaza persistente avanzada, también conocida por sus siglas en inglés, APT (Advanced Persistent Threat), es un conjunto de procesos informáticos sigilosos y continuos, a menudo orquestados por humanos, dirigidos a penetrar la seguridad informática de una entidad específica. Una APT, generalmente, fija sus objetivos en organizaciones o naciones por motivos de negocios o políticos. Los procesos de APT requieren un alto grado de cobertura…

Contenido completo del post en http://ift.tt/mDaonR o haciendo clic en el título de la noticia

desde Segu-Info – Noticias de Seguridad Informática http://ift.tt/1FnX6aJ
via IFTTT

jQuery Lazy Load Plugin

Jquery Logo 1

Quizás algo de lo que más pesa a la hora de cargar una página HTML es el conjunto de imágenes que la página necesita para visualizarse correctamente. En muchas ocasiones existe la necesidad de realizar la carga de forma vaga (lazy load). Esta carga se realizará según el usuario necesite las imágenes. Uno de los plugins más habituales para realizar esta operación es jQuery LazyLoad.

Configuración

El plugin se puede instalar a traves de npm, bower, o se puede descargar a través del site de jQuery plugins. Hacer uso de este plugin es sencillo ya que basta con cargarlo y definir un selector de clase que afectará al conjunto de imágenes que se van a cargar de forma vaga.

<html>
<head>
<script src="jquery-1.11.1.js"></script>
<script src="jquery.lazyload.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("img.lazy").lazyload({
effect : "fadeIn", });
 });
</script>
</head>
<body>
<img class="lazy" src="imagencarga.jpg" data-original="imagen1.jpg" width="640" height ="480"/>
<img class="lazy" src="imagencarga.jpg" data-original="imagen2.jpg" width="640" height ="480" />
<img class="lazy" src="imagencarga.jpg" data-original="imagen3.jpg" width="640" height ="480"/>
</body>
</html>

 

 

Según el scroll de la página vaya avanzando las diferentes imágenes se cargarán.

Jquery

El plugin soporta varios parámetros de configuración interesantes:

  1. threshold (px) : Carga los primeros pixels de cada imagen antes de que se muestre en el viewport.
  2. event: Carga las imágenes como respuesta a un evento asociado, como por ejemplo click.

El plugin permite también una integración sencilla con AJAX.

También te recomendamos

Ebook: Ritual virtual

rlightbox, un plugin jQuery para multimedia y diseño sensible

CSS3 Animaciones y Frameworks


La noticia jQuery Lazy Load Plugin fue publicada originalmente en Genbeta Dev por Cecilio Álvarez .

 

desde Genbeta Dev http://ift.tt/1ItaJG0
via IFTTT

Utilizando JSON Schema

JsonvalidatorLos conceptos en programación tienden a repetirse por mucho que cambiemos el lenguaje. Hoy se utiliza JSON como formato de intercambio de datos y XML parece más relegado a una segunda posición. Una de las funcionalidades que más se demandan a la hora de intercambiar datos es validar las estructuras de estos. XML dispone de sus XML Schemas y JSON dispone de los JSON Schemas que son relativamente modernos. Vamos a ver un ejemplo de estos.

JSON Schemas

La sintaxis de un JSON Schema define los diferentes campos que una estructura concreta posee :

 { "$schema": "http://ift.tt/1h69xvr;, "properties": { "nombre": { "type": "string", "minLength": 3, "maxLength" : 20 }, "apellidos": { "type": "string", "minLength": 3, "maxLength" : 20 } "edad": { "type": "number", "description": "edad de la persona", "minimum" : 0 }, }, "required": [ "nombre", "apellidos", "edad", ] }

En este caso se definen tres propiedades (nombre,apellidos,edad) con su diferente tipología. Ademas se obliga a que todas ellas sean obligatorias. Eso implica que una estructura JSON como la siguiente será válida:

 { nombre:"juan", apellidos:"fernandez", edad:20 }

En cambio las siguientes estructuras no lo serán:

 { nombre:20, apellidos:"fernandez", edad:20 }
 { nombre:"juan", apellidos:"fernandez", }

Para validar de forma rápida las estructuras JSON contra sus Schemas podemos usar como herramienta online jsonschemavalidator.

Jsonvalidatorschemaonline

Si necesitamos usar las validaciones a nivel de programación muchas plataformas ya disponen de sus propias librerías (.NET, Java, Javascript).

También te recomendamos

Convierte tus XML a JSON y viceversa, online

Centro de innovación BBVA

Interoperabilidad en el siglo XXI


La noticia Utilizando JSON Schema fue publicada originalmente en Genbeta Dev por Cecilio Álvarez .

 

desde Genbeta Dev http://ift.tt/1JiVaHv
via IFTTT

Arc Theme, un nuevo tema para tus ventanas en Ubuntu

Arch Theme es una nueva forma de personalizar tu gestor de ventanas que ofrece temas visuales con elementos transparentes para escritorios basados en GTK 3 y GTK 2, así como para GNOME Shell. Es una nueva opción que se añade a las ya existentes para dar a nuestro escritorio el aspecto visual que más nos convenza,…

El artículo Arc Theme, un nuevo tema para tus ventanas en Ubuntu ha sido originalmente publicado en Ubunlog.

desde Ubunlog http://ift.tt/1ET01rH
via IFTTT

Ubuntu libera el código que usaba en Ubuntu One

Hace ya mucho que Ubuntu cerró el servicio de Ubuntu One y sorprendentemente hoy conocemos que el proyecto al fin revivirá aunque no de la forma que hubiéramos esperado. Ubuntu ha publicado bajo licencia AGPLv3 todo el código que se usaba para Ubuntu One, más en concreto el programa que se utilizaba para sincronizar sus…

El artículo Ubuntu libera el código que usaba en Ubuntu One ha sido originalmente publicado en Ubunlog.

desde Ubunlog http://ift.tt/1h17os8
via IFTTT

18 Essential Plugins to Get More Out Of Sublime Text – Hongkiat

Even though SublimeText comes with a bunch of great features that help our work as web developers, like any other tool, there will always be a room for enhancements. This is when plugins can be real useful (and we are huge fans of plugins). Before we proceed, maybe

Origen: 18 Essential Plugins to Get More Out Of Sublime Text – Hongkiat

La lista definitiva de los mejores sitios para descargar ROMs

Este post les va a gustar a los nostálgicos de los juegos, sobre todo aquellos que tienen más de 30 años. Quiero dejarles una lista con buenos sitios para descargar ROMs y poder revivir aquellos tiempos en los que jugábamos cuando éramos niños o adolescentes, sea cual sea la consola. Obviamente, para poder jugar y […]

Este artículo La lista definitiva de los mejores sitios para descargar ROMs fue publicado originalmente en Punto Geek.

desde Punto Geek http://ift.tt/1EeoUgR
via IFTTT

5 de los mejores plugins para crear Formularios de Contacto para WordPress | GeeksRoom

Una parte importante del blog para que los lectores se puedan comunicar con ustedes los webmasters o editores es la página de contacto. En esa página de contacto en su blog pueden tener una dirección de email para que el usuario haga clic y con su cliente de email les envíe directamente un email o algo más profesional y mucho más cómodo para el lector, un formulario de contacto. En WordPress hay muchos plugins que permiten agregar un formulario de contacto y 5 de los mejores son los siguientes, Contact Form 7 Es el que utilizamos en este blog.  Ofrece muchas características y permite al usuario crear un formulario personalizado.  Si no quieren personalizar, viene con un formulario preestablecido que solicita al lector escribir su nombre (obligatorio), dirección de email (obligatorio), página web (opcional) y la caja de texto para escribir el mensaje.  Ahora no es algo fácil de personalizar intuitivamente, pero muestran varios ejemplos como para en poco tiempo poder crear uno formulario

Origen: 5 de los mejores plugins para crear Formularios de Contacto para WordPress | GeeksRoom

Los mejores mazos de Hearthstone para trollear a base de combos

Hearthstone0

Ya se ha cumplido un año de la publicación de nuestra guía de mazos para ‘Hearthstone’ y, desde entonces, la situación en el juego de cartas de Blizzard ha cambiado lo suficiente como para que parte de aquellas colecciones hayan quedado algo desfasadas debido a las nuevas incorporaciones que han ido aterrizando en ‘Hearthstone’.

El metajuego ha cambiado casi por completo con la llegada de las nuevas cartas de Goblins vs. Gnomos y el modo aventura de Montaña Roca Negra, así que ya va siendo hora de actualizar nuestros mazos. Podríamos hacerlo con lo básico, a base de coleccions para alcanzar el modo leyenda o conseguir monedas fáciles, pero aquí hemos venido a divertirnos, y si algo tienen los mazos que encontraréis a continuación es que controlarlos a la perfección es todo un espectáculo.

Mazo: el Cazador que fingió su muerte

Hearthstone2

Empezamos por mi clase preferida, más aún después de convertirse en una de las más potentes y divertidas de jugar gracias a las nuevas cartas que han ido aterrizando en ‘Hearthstone’ durante los últimos meses. Si aventurarse a jugar con él era poco más que una locura hace apenas un año, ahora es una de las opciones más elegidas por los jugadores.

La gracia de este mazo reside en intentar aprovechar al máximo las posibilidades de Fingir muerte, la carta que activa el último aliento de todos los esbirros que tengamos en nuestra zona de la mesa. A base de secretos controlaremos el juego durante los primeros turnos y luego intentaremos llenar la mesa de legendarias o cartas fuertes con último aliento para aprovecharnos de sus poderes sin que desaparezcan de la lucha.

Para este mazo necesitarás una copia de cada carta salvo las siguientes, que requieren dos copias para alcanzar las 30: Tejerred, Fingir muerte, Arco de cuerno de águila, Crinalta de la sabana, Acaparador de botín, Científico loco, Gólem de la cosecha, Trituradora pilotada y Eructador de lodo.

mazo-de-cazador

image01 image01 image01 image01

Mazo: el Pícaro aceitoso te parte la cara

Hearthstone3

Si hay una clase que controle los combos a la perfección es la del Pícaro, no sólo por hacer uso de esa estrategia en gran parte de sus cartas al jugarlas después de otras, también por la sinergia que puedes montar entre ellas si tienes la suerte de montar una buena mano mientras aguantas los primeros embistes del rival.

Nos interesan dos cartas, el Aceite afilaespadas con su combo de +3 de ataque a tu arma y +3 a un esbirro aleatorio, y la Profesora violeta para invocar aprendices 1/1 pegándole una patada a una piedra para que aparezcan tres o cuatro por turno. Aprovecha la carta de Preparación para sumar otro hechizo más cuando te hayas quedado sin cristales y mantén tu vida a controlada a base de Chamanes clarividentes y Sanabots.

Para montar este mazo necesitarás dos copias de las cartas que encontrarás a continuación. Las únicas que sólo incluyen una copia son: Sprint, Marinero de Mares del Sur, Chamán clarividente, Sanabot antiguo, Subastador de Gadgetzan y las legendarias.

mazo-picaro

image01 image01 image01 image01

Mazo: el Sacerdote de los 30 puntos de daño

Hearthstone5

No soy un gran fan del Sacerdote (de hecho el estilo de juego de los mazos habituales de esta clase me mosquean con facilidad), pero debo reconocer que el combo que encontraréis a continuación es todo un espectáculo y, aunque difícil de ejecutar, lo suficientemente espectacular para que el esfuerzo valga la pena.

Ahí va un caso práctico. Acabas de jugar el Emperador Thaurissan para reducir el coste de todas tus cartas un punto al finalizar cada uno de tus turnos, y al llegar el turno 10 tienes cristales suficientes para lanzar el Profeta Velen, bufarlo con el hechizo El elegido de Velen (daño duplicado y +1) y reventar al enemigo con una Punición Sagrada y dos Explosión mental (0 y 2 cristales gracias al amigo Thaurissan) alcanzando los 30 puntos de daño en el décimo turno. GG y a por otro pobre infeliz.

No es un mazo excesivamente caro si ya llevas una temporada jugando porque algunas de sus legendarias son de las primeras que habrás creado. Si no es el caso, ya sabes, al menos para probar si te sale bien la jugada. Las únicas cartas incluidas que sólo necesitan una copia son: Resurrección, Acólito de dolor y legendarias.

mazo-sacerdote

image01 image01 image01 image01

Mazo: el ejército infinito del Guerrero

Hearthstone6

Cerramos la selección con otra de las clases que no acostumbraba a jugar a menudo, la del Guerrero, ¿pero cómo iba yo a resistirme a la posibilidad de llenar la mesa de esbirros atacando en manada si es lo que más disfruto de ‘Hearthstone’?

Las gracias tenéis que dárselas a la amistad entre Comandante Grito de Guerra (todos los esbirros con 3 puntos de ataque o menos reciben cargar) y Parroquiano lúgubre (un 3/3 que cada vez que recibe daño invocas a otro Parroquiano lúgubre), y como ese sentimiento se convierte en amor al utilizar el último aliento de 1 punto de daño a todos los esbirros de la Picadura de la Muerte. Cargad, mis zumbados con hacha, cargad.

Sólo una aclaración antes de que saltéis a la galería, necesitas una copia de: Grito de orden y las legendarias, el resto las metes en el mazo a pares sin olvidarte a nuestro querido amigo Thaurissan para que el tramo final de la partida se nos haga más fácil y el Torbellino (otro punto de daño a todos los esbirros) nos salga completamente gratis.

mazo-guerrero

image01 image01 image01 image01

En VidaExtra | Los mejores mazos de cartas para triunfar en Hearthstone

También te recomendamos

La perdición por Goblins vs. Gnomos, primera expansión de Hearthstone, comenzará en una semana

Mi vida en videojuegos: 11 expertos españoles escogen los títulos que más les marcaron

Más de 120 nuevas cartas en Goblins vs. Gnomos, la primera expansión de Hearthstone


desde Vidaextra http://ift.tt/1EKyf3V
via IFTTT

12 Most Useful WordPress Custom Post Types Tutorials

WordPress allows you to create your own custom content types. These content types are called custom post types. You can use them to add custom content like products, reviews, recipes, etc. In this article, we will share the 12 most useful WordPress custom post types… Read More »

To leave a comment please visit 12 Most Useful WordPress Custom Post Types Tutorials on WPBeginner.

desde WPBeginner http://ift.tt/1Hnu1jt
via IFTTT

Los perfiles sombra al descubierto, Facebook sabe qué hacemos incluso si no se lo decimos

6328264579 B5f6dfb5f6 B

Hace casi dos años Facebook ocupó todos los titulares de la prensa al exponer por accidente información sobre más de 6 millones de cuentas. Cuando los usuarios afectados fueron notificados de los datos filtrados, algunos se sorprendieron al encontrar entre ellos correos alternativos o teléfonos que nunca habían compartido con la red social.

Fue entonces cuando empezaron las sospechas sobre los perfiles en la sombras, con los que parecía que la red de Zuckerberg almacenaba sin consentimiento datos que no se compartían con ellos, y es ahora cuando un estudio encargado por la comisión de privacidad belga ha confirmado las sospechas y demostrado que Facebook viola las leyes europeas… y nuestra privacidad.

Este estudio apunta a que la red social ha estado recopilando la información de sus usuarios mientras navegaban por la red, aun habiéndose deslogueado de su web, gracias a plugins sociales como el botón Like. De esta manera se ha descubierto que han almacenado datos incluso sobre personas que ni siquiera tienen una cuenta creada.

Facebook, de nuevo saltándose las leyes europeas

Según las leyes europeas, cualquier página tiene que tener el permiso de sus usuarios antes de colocar cookies en los ordenadores. Facebook no sólo coloca cookies sin permiso, sino que estas interactúan con las de las webs por las que hemos navegados e incluyen sus plugins sociales cada vez que accedemos de nuevo a la red social.

Y es que la comisión de privacidad belga se toma muy enserio las violaciones de las leyes europeas por parte de Facebook, y hace apenas un mes denunció con otro estudio la manera en la que la utiliza el contenido creado por sus usuarios con ánimos comerciales y sin haberles pedido su permiso de manera clara y concisa.

Y es que nuevamente, una de las cosas que más escuecen en la comisión belga son los complejos menús de configuración de Facebook, que contienen parámetros demasiado complicados y difíciles de entender, de manera que sólo los usuarios más experimentados son capaces de encontrar la forma de proteger su propia privacidad.

Imagen | zeevveez
Vía | ICRI/CIR y iMinds-SMIT
En Genbeta | Facebook sabe mucho más de ti de lo que piensas… aunque ni siquiera tengas cuenta

También te recomendamos

Facebook acusada (otra vez) de violar la privacidad de sus usuarios

Cómo revisar la privacidad de todas las fotografías de Facebook en las que aparezcas

5 actividades de la vida real que no te imaginabas que se pueden hacer 100% online


desde Genbeta http://ift.tt/1NDirlW
via IFTTT