miércoles, 12 de marzo de 2014

Formularios html 5 y JavaScript validation API , descubre lo que puedes hacer con tus formularios

Gracias a HTML 5 ahora tenemos a nuestra disposición nuevas formas de validar y asegurar la integridad de los datos ingresados por el usuario,  a continuación veremos algunas de ellas :

Pattern Attribute : Con esta propiedad puedes especificar una expresión regular para validar el texto en un input. Podemos ver un ejemplo en la w3school sobre un input donde requiere que el dato ingresado sea 3 letras en mayúsculas, aqui el  ejemplo.

Mas información sobre aqui

Maxlenght :  Si queremos limitar la cantidad de información ingresada en un input podemos usar este atributo, aqui el ejemplo 

novalidate : Este atributo es usado para indicar que un formulario no sera validado, no puedo imaginar un caso de uso para este atributo pero es bueno saber que existe, aquí el ejemplo 

Constraint Validation

Antes de que los datos de un formulario sean enviados al servidor, el navegador verifica los inputs para confirmar si son correctos con una serie de algoritmos y si encuentra algún error en ellos mostrara el siguiente error:


Existe algo llamado  "Constraint API" que son una serie de métodos y propiedades DOM de las cuales podemos hacer uso para un mayor control de nuestros formularios. 

willValidate : Este método nos indica si un input sera validado o no cuando el formulario sea enviado. Ejemplo : 

<input type="text" id="name" />
<script>
   
document.getElementById('name').willValidate; //true
</script>

Validity: Devuelve un objecto javascript con propiedades útiles para determinar si un input es valido como: 
  • patternMismatch : Devuelve true si el valor del input no concuerda con la expresion regular en el attributo pattern.
<input id="bar" pattern="[0-9]{4}" value="ABCD" />
<script>   
   
document.getElementById('bar').validity.patternMismatch; //true
</script>
  • rangeOverflow : Devuelve true si el valor del input es max alto que su atributo max.
<input id="bar" type="number" max="2" value="3" />
<script>
   
document.getElementById('bar').validity.rangeOverflow; //true
</script>
  • rangeUnderflow: Devuelve true si el valor del input esta por debajo de su atributo min.
<input id="bar" type="number" min="2" value="1" />
<script>
   
document.getElementById('bar').validity.rangeUnderflow; //true
</script>
  • typeMismatch :  Devuelve true si el valor del input no es del mismo tipo del especificado en el atributo type.
<input id="bar" type="url" value="foo" />
<input id="bar2" type="email" value="bar" />
<script>
   
document.getElementById('bar').validity.typeMismatch; //true
   
document.getElementById('bar2').validity.typeMismatch; //true
</script>
  • valueMissing: Devuelve true si el input es tiene el atributo required y no tiene ningún valor
<input id="foo" type="text" required value="foo" />
<input id="bar" type="text" required value="" />
<script>
   
document.getElementById('foo').validity.valueMissing; //false
   
document.getElementById('bar').validity.valueMissing; //true
</script>
  • stepMismatch: devuelve true si el valor del input no es acorde con el especificado en el atributo step.
  • tooLong: Devuelve true si el valor del input es mayor que el especificado en el atributo maxlength, una cosa interesante aqui es que los navegadores no permiten que esto pase por efecto.
  • valid : Devuelve true si todas las condiciones anteriores son false.
<input id="valid-1" type="text" required value="foo" />
<input id="valid-2" type="text" required value="" />
<script>
   
document.getElementById('valid-1').validity.valid; //true
   
document.getElementById('valid-2').validity.valid; //false
</script>



validationMessage : Esta propiedad contiene el mensaje que se muestra cuando un input no cumple con las validaciones del formulario.


<input type="text" id="foo" required />
<script>
   
document.getElementById('foo').validationMessage;
   
//Chrome  --> 'Please fill out this field.'
   
//Firefox --> 'Please fill out this field.'
   
//Safari  --> 'value missing'
   
//IE10    --> 'This is a required field.'
   
//Opera   --> ''
</script>

checkValidity : Este es un método que devuelve true si un elemento de formulario contiene datos validos.(input, textarea, ect)

<form id="form-1">
   
<input id="input-1" type="text" required />
</form>
<form id="form-2">
   
<input id="input-2" type="text" />
</form>
<script>
   
document.getElementById('form-1').checkValidity();  //false
   
document.getElementById('input-1').checkValidity(); //false
   
document.getElementById('form-2').checkValidity();  //true
   
document.getElementById('input-2').checkValidity(); //true
</script>

Cada vez que un elemento de formulario es verificado con "checkValidity" y falla, un evento "invalid" es disparado en ese elemento. Podemos usar este evento para hacer cualquier cosa que queramos. También como no existe el evento "valid" en su lugar se usa "change".

<form id="form-1">
   
<input id="input-1" type="text" required />
</form>
<script>
document.getElementById('input-1').addEventListener('invalid', function() {//you code here, whatever you wnat here
},
false);

document.getElementById('input-1').addEventListener('change', function(event) {
   
if (event.target.validity.valid) {
       
//Field contains valid data.
   }
else {
       
//Field contains invalid data.
   }
},
false);

</script>

Datalist : Es un elemento para sugerencias muy al estilo de autocompletado, ejemplo.

autocomplete : Con este atributo puedes desactivar el autocompletado del navegador, ejemplo.

autofocus: puedes usar este atributo para que un elemento de formulario tome el foco apenas la vista sea cargada, pero solo puedes asignarlo a uno que sera el que por defecto sera el primero a llenar, ejemplo.

stepUp: Método que incrementa al siguiente valor logico en inputs date y numeric.
stepDown : Método que decrementa al siguiente valor lógico en inputs date y numeric.

document.getElementById('date').stepUp()document.getElementById('date').stepDown()

valueAsNumber: Propiedad que devuelve el valor de un input como numero, para no tener que usar a cada momento parseInt() o parseFloat().

document.getElementById('date').valueAsNumber

valueAsDate: Propiedad que devuelve el valor como un objecto date, ejemplo.

Existen casos donde algunas veces tenemos que agregar valores adicionales al formulario, pero que no se tienen que mostrar al usuario, lo mas común es usar un "input hidden", pero ahora puedes usar el nuevo objecto formData como lo describen en el siguiente link :


Básicamente seria de la siguiente manera sin usar inputs hidden :

var formElement = document.getElementById("myFormElement");
formData =
new FormData(formElement);
formData.append(
"serialnumber", serialNumber++);

Con el mismo objecto formData puedes crear formularios al vuelo y enviar los datos al servidor por ajax sin que exista el formulario en el DOM. puedes ver el ejemplo en el link anterior.

Propiedades y metodos adicionales en los siguientes links.




martes, 25 de febrero de 2014

Todos tenemos bookmarks o marcadores guardados ¿ por que no compartirlos ?

Quiero comenzar este post con una pequeña reseña de como los buscadores como google cambian constantemente los resultados de búsqueda, no tengo nada contra Google pero haré referencia a el por ser el mas conocido.

Has notado algunas vez que los resultados de tus búsquedas en Google no siempre son iguales ? Eso es  debido a que Google usa un super-ninja algoritmo para decidir que contenido es relevante o importante para mostrarte. Nadie sabe como funciona en realidad, es super secreto  y lo que existen son técnicas para lograr que Google reconozca y muestre tus paginas en sus resultados, algo conocido como SEO y SEM.

Entonces una persona común y corriente que solamente quiere escribir un blog sencillo con una receta de un super-duper sandwich y si desconoce estas reglas, simplemente nunca aparecerá en los resultados de Google debido a que estaría compitiendo con otros sitios webs que usan las técnicas SEO ó SEM y su posicionamiento seria muy pero muy abajo de sus competidores, aunque su receta de sandwich sea la mejor del mundo.

Si a esto sumamos que Google elimina periódicamente links de sus resultados de búsquedas, en base a peticiones del gobierno, empresas, personalidades , ect.  que consideran su contenido ofensivo o no acto para el publico, tenemos mucha información que nos estamos perdiendo por razones un tanto irrelevantes.

Yo personalmente considero cada link, cada pagina web o vídeo, como información valiosa que no debe de ser olvidada o ocultada a las personas, sin importar su contenido o procedencia. Y este es el problema que intento resolver con una aplicación web que acabo de terminar.

Yo soy de las personas que piensa que obtener respuestas de personas es muy distinto de recibir respuesta de un algoritmo, no importan cuando sofisticados los algoritmos lleguen a ser, nunca se compararan con la inventiva, creatividad y agilidad de la mente humana. Las personas quiere respuestas de personas que han resuelto el mismo problema.

Es común para todos nosotros gastar mucho tiempo buscando algo en internet usando Google y algunas veces podemos visitar sitio tras sitio , pagina tras pagina de los resultados hasta encontrar  lo que realmente necesitamos. 

¿Y cuando encontramos una web que realmente nos es útil, que hacemos ?

La respuesta comúnmente seria, guardar el link como bookmark ó marcador, para poder revisarlo cada vez que nosotros queremos luego.  

Ahora imagina otro usuario buscando lo mismo que tu  ¿ que pasara entonces ? Bueno el empleara el mismo tiempo que tu gastaste buscando lo mismo que tu, incluso puede que esta vez no lo encuentre, por que Google decidió remover el link ó el contenido no era relevante para mostrarse debido a que no cumple con las reglas SEO. Pero su contenido aun es importante, la receta del super-duper sandwich aun esta ahí y es la mejor del mundo, el problema es que el algoritmo no lo sabe y estamos condenados a obedecerlo.

La idea de United Bookmark es que tu guardes tu marcadores ó bookmarks en un solo lugar y lo compartas con toda las personas de internet. Por ejemplo puedes crear un bookmark con el titulo : "recetas del ricos sandwich" y agregar el link que has encontrado.

De esta manera un usuario buscando recetas de sandwich pueden encontrar tu link y si ellos conocen de otros links que ellos consideran importante podrán agregarlos a tu bookmark, de esta manera todos en internet podemos contribuir para compartirnos información que los buscadores no puede reconocer.
  • Comparte los link que fueron difíciles de encontrar.
  • Agrega los link que consideras importantes de compartir.
  • Comparte todos tus links que puedan ayudar a otros usuarios a encontrar sus respuestas.

Personas ayudando a otras personas, no un algoritmo diciéndonos que ver. Te invito a que visites United Bookmark y lo pruebes, actualmente esta en fase beta , puede que tenga ciertos errores lo cuales estoy corrigiendo. Por que el sitio esta en ingles ? bueno pronto tendrá multi lenguaje :) .

Si tienes alguna duda o idea para mejorar el sitio por favor escribeme a info@saulburgos.com.






Curso de programación de aplicaciones web desde cero


 http://codingonweb.com/

Curso de aplicaciones web para principiantes


Aprender a crear aplicaciones web nunca había sido tan fácil como ahora, la información abunda en Internet por ejemplo si escribes en Google "Tutorial de paginas web" veras muchos enlaces y vídeos que enseñan como hacerlo. Incluso recientemente yo publique un post con enlaces con muchos sitios en donde aprender.

A como yo lo veo conseguir la documentacion no es el problema pero si hay algo interesante que he notado, la cantidad de información sobre paginas web es enorme y creo que las personas que desean comenzar en este mundo de la web se podrían sentir abrumadas con toda esta información y no sabrían por donde empezar.

En mi opinión los principiantes mas que un profesor que les enseñe paso a paso como crear paginas web, necesitan a alguien que los guié y muestre el camino a seguir entre toda esa documentacion, enseñarles como buscar en google documentacion de calidad, que sitios son los adecuados para sus consultas  y como leer adecuadamente la documentacion oficial.

www.codingonweb.com es una web donde podrás conocer los pasos necesarios para aprender a programar paginas web. Al ser un curso para principiantes abordaremos temas muy básicos y sencillos por lo que personas que ya sepan lo básico se podrían aburrir en el curso. A continuación una lista que detalla el curso.

Los cursos son gratuitos, solo necesitas  inscribirte en la pagina y comenzar a aprender.






sábado, 22 de febrero de 2014

All we have Bookmarks, Why we don't share ?


I am not against Google, just is the most popular search engine that is why I am using it like example.

Hello stranger, like you I also spend a lot time using search engines to find something on internet, for example Google. And sometimes I search page by page until find something that I consider useful to me.

What do I do when I found some website that was difficult to find ?

Well, I save it like a bookmark, because you know...Google might forget this website in any moment and disappear from results for all this reasons and this. Each year, Google changes its search algorithm around 500–600 times. While most of these changes are minor, Google occasionally rolls out a "major" algorithmic update, that affects search results in significant ways. When this happens, all the results change and many sites are lost who know where. 

If another user is searching the same thing that I searched before, he will waste the same time that I lost looking up the same information or worst, he never won’t find the information because the Google might not consider that website important this time. We are doom to obey his search algorithm.

The idea of United Bookmark is that you save all your bookmarks in one single place and share them with others users.

  • Share all your links that were difficult to find.
  • Share all your links that you consider important.
  • Share all your links that might help others users to find their answers.


Users helping others users not an algorithm telling you what to see. Once you add a bookmark, others users can share their own links with you, that they consider useful based on your bookmark description. You may find yourself adding bookmarks as well as sharing links with others users. You can help friends, or friends-of-friends with their bookmarks and grow our collection of bookmarks in order to help other people. It feels good to share… :)

All users can vote on all links, in that way you know what link is the best and discard links that may not have valuable content. Take for example a website of a grandmother’s recipe about sandwich. You can create a bookmark called : “Best recipes of sandwiches” and add this link of the grandmother’s website.

Once this bookmark is created other users can add others links with other recipes of sandwich that they found interesting. In that way you will have valuable links about recipes of sandwiches that others users tested and consider important to share with you.

 I am the person that think that getting answers from people is very different from retrieving information with algorithms. No matter how sophisticated algorithms become, they are still no match for the experience, inventiveness, and creativity of the human mind. People want answers from people searching the same thing.

United Bookmark is my idea to help these tiny websites not to be forgotten by Search engine algorithms and the same time share my bookmarks with others users.

United bookmark is in beta phase. That means :

  • Is an unfinished product.
  • Contain a lot of errors.
  • I am working to improve some features.
  • The interface and colors may change in the future.

If you find a error, I will be glad if you send me an email telling me about it to info@saulburgos.com

Angularjs UI y boostrap 3.0 problema con formulario dentro de Tabs

El siguiente articulo es un tanto técnico, pero quiera publicarlo para que otros pudieran resolver el mismo problema que tuve.

Angularjs es un framework javascript que nos ahorra mucho tiempo en el desarrollo de una aplicación web, para este framework existe una versión de Boostrap con todos los widgets convertidos en directivas.

Ahora bien con el widget Tabs de bootstrap existe cierto problema cuando tienes un formulario dentro de las tabs he intentas acceder al ngFormController dentro de tu controlador. El problema es que en tu controlador no existe el ngFormController de tu formulario por lo tanto no puedes acceder a ninguno de sus metodos.

El problema en si es que la directiva Tab crea un scope aislado y todo elemento dentro de el sera aislado de su padre , por tal razón nunca aparecerá dentro del scope padre. La unica forma de resolver este problema es usando la directiva  "ng-form" de angular para crear nuestro formulario y pasando como modelo un objecto anteriormente definido en el controlador padre, de esta manera cuando la directiva Tab cree su scope heredara del controlador padre.

He creado un ejemplo de como debería de ser resulto este problema :

http://plnkr.co/edit/HKyh1BJYL12knGMfkRq0?p=preview

Mas información en detalle del problema en el siguiente link donde estuve preguntado sobre el problema :

https://github.com/angular-ui/bootstrap/issues/574#issuecomment-34859522




viernes, 21 de febrero de 2014

Harto de Google hangout ? appear.in es tu alternativa

Si estas harto de usar Google hangout ó simplemente estas buscando alternativas para video conferencias te presento :  https://appear.in/   sitio web donde podrás crear una sala para vídeo conferencia hasta con 8 personas al mismo tiempo.

Lo que mas me gusta de este servicio es que no necesitas instalar nada , configurar nada , no registro , no login , no descargas , solamente creas la sala y listo solo tiene que compartir el link de tu sala.

Muy sencillo esta alternativa de vídeo conferencia.

Link : https://appear.in/

Lista de sitios donde puedes aprender sobre Diseño web.

Como comentaba en el post anterior, si quieres aprender algo solamente depende ti lograrlo. Toda la documentacion y tutoriales esta internet, solamente tenemos que encontrarla. En este campo de la programación web personalmente pienso que es mas fácil de cualquier otra, solo basta que escribas en Google : "Tutorial sobre diseño web" y recibirás muchos resultados donde aprender. 

Hoy quiero compartir con ustedes un articulo donde listan muchos lugares donde aprender programación y diseño web, con algunas opciones de pago y otras gratuitas, como siempre con estos temas de programación web la mejor documentacion esta en ingles pero tal vez a alguien mas le puedan ser útil esta información.

Yo personalmente he aprendido mucho de algunas de los sitios web que se listan ahi.



Gibbon sitio web con infinidad de cursos para aprender gratis

Gibbon es un sitio web donde puedes aprender lo que sea. La filosofía de Gibbon es que en internet esta toda la información que necesitamos para aprender algo nuevo, el problema es que esta muy dispersa y desorganizada.

Gibbon funciona de la siguiente manera : Si por ejemplo sabes mucho sobre como hacer ricos pasteles , como conocedor del tema sabes  identificar que documentación , vídeos o libros que son  buenos para aprender y cuales deberían de leer y en que orden los principiantes para llegar a ser un gran pastelero como tu.

Ok sabiendo todo este conocimiento solo tienes que crear un curso y ingresar los link, vídeos o escribir artículos para guiar a los principiantes para que se conviertan en profesionales. Como vez no tienes que escribir largos artículos explicando como hacer pasteles, lo único que tienes que hacer es armar los pasos a seguir para aprender hacer pasteles, suministrando los links donde esta la información.

Como ves Gibbon se nutre de los cursos que sus usuarios crean diariamente, de esta manera puedes saber fácilmente por donde empezar y paso a paso volverte un profesional. Ojeando un poco los cursos que actualmente existen mire de todo tipo como por ejemplo:

  • Programación
  • Diseño de interfaces
  • SEO
  • Educación 2.0
  • Emprendimiento
  • multimedia
  • edicion de vide
  • Etc

Es un sitio relativamente nuevo y me he decidido a escribir sobre el por la cantidad de cursos que se están creando y son de acceso gratuito para todos, lo único malo es todos los cursos están en ingles solamente encontré uno en español. Pero como mencione antes, los cursos son creados por los mismo usuarios así que animo a mis lectores a crear cursos en español para la comunidad del habla hispana.


Libro gratuito de Nodejs a traves de koans



Ese es el titulo del libro que hoy les traigo : " Introduccion a NodeJs a traves de koans " libro gratuito en español sobre la programacion con Nodejs. ¿ Pero que son koans ? bueno copio y pego la definición que sale en el libro.

"El término koan proviene de la filosofía Zen oriental. Es el nombre que se le da a un pequeño problema que un maestro plantea a su discípulo para evaluar su progreso. Suelen ser breves y escuetos y, a menudo, con apariencia trivial o absurda pero que, sin embargo, suponen para el discípulo un paso más en su 2"

"Los koans en el ámbito informático fueron idea de Joe O’Brien y Jim Weirich, de EdgeCase, como forma de alcanzar “la iluminación” en el aprendizaje del lenguaje Ruby. Manteniendo la analogía con la filosofía Zen, los koans de Ruby son peque-ños trozos de código donde se sustituye alguna parte con unos guiones bajos ‘__’, al estilo de los ejercicios de rellenar el hueco, que el alumno deberá cambiar por el código que piense que es el correcto para que el ejercicio ejecute sin errores."

Este libro es un excelente referencia si quieres conocer mas sobre Nodejs,  he revisado el libro  personalmente creo que tiene temas muy técnicos y los lectores principiantes que no tienen mucha experiencia con javascript creo que se sentirán abrumados. Pero si tienes experiencia con javascript este libro te permitirá despejar muchas dudas y sin duda aprender este lenguaje.

Segun leo en la web, el libro se mantendrá actualizado constantemente.