Azure Web Apps: Cómo acceder correctamente a través de FTP

24/09/2017
Artículo original

Las Azure Web Apps (antes conocidas como Azure Web Sites) son una manera estupenda de gestionar tus aplicaciones web en la nube, utilizando la plataforma como servicio (PaaS) de Microsoft. Entre sus muchas ventajas se encuentran:

  • La posibilidad de auto-escalar la aplicación (tanto horizontal como verticalmente) de forma manual o automática en caso de necesidades de crecimiento puntuales o a largo plazo
  • La alta disponibilidad y el balanceado de carga automático.
  • La posibilidad de hacer despliegues con varios "slots" (por ejemplo test, pre-producción y producción)
  • La integración continua, es decir, en esencia poder actualizar automáticamente la aplicación o sitio web desde alguna fuente de trabajo que utilicemos, en cuanto haya cambios válidos. Por ejemplo, directamente desde GitHub u otro repositorio Git, pero también desde Dropbox o OneDrive entre otros.
  • Etc... Te remito al enlace anterior para conocerlas mejor.

Por supuesto puedes desplegar aplicaciones tanto Windows como Linux, y utilizar casi cualquier lenguaje de programación de servidor: ASP.NET, PHP, Node.js, Java o Python. Hasta funciona perfectamente ASP clásico.

Para mi, y por decirlo de una manera sencilla y directa, la mayor ventaja que ofrece el poder utilizar Azure Web Apps es el poder olvidarte por completo de todo lo que no sea tu propia aplicación. Es decir, la promesa de la plataforma como servicio. Nada de pensar en actualizar el S.O., si alguna de esas actualizaciones te va a dar problemas, nada de configurar el servidor y las muchas ramificaciones de esto, etc...

Aunque no son la cura para todo y tienen sus limitaciones (por ejemplo en el número de dominios que puedes albergar, 500 como máximo en una misma Web App, o el espacio de almacenamiento máximo que ofrecen: 1TB), sí que valen para el 99% de los de casos.

Incluso tienen una versión gratuita, con limitaciones, pero útil para montar tus proyectos personales. Yo por ejemplo tengo la web de mi proyecto Open Source MIIS en una instancia gratuita de Azure Web Apps, y funcionando bajo el propio MIIS.

Así que te animo a probarlas si no lo has hecho ya.

El "problema" del despliegue tradicional por FTP en Azure Web Apps

Si lo que tienes es un sitio web pequeño, y no tanto una aplicación, lo más sencillo es gestionarlo directamente por FTP, sin necesidad de hacer integración continua desde Git ni nada similar.

Si vas a las opciones de tu aplicación web, en la barra lateral, verás que hay un apartado llamado "Deployment Credentials" o "Credenciales de despliegue", y dentro de éste te deja configurar un nombre de usuario y una clave para FTP:

Estableciendo credenciales de despliegue

Pero hay que tener en cuenta una cuestión muy importante si lo haces: Estas credenciales se establecen para toda la cuenta de Azure, no solo para ese sitio web. No solo eso, sino que además son nombres globales, por lo que si intentas establecer uno que ya haya usado algún otro usuario no te lo permitirá, como se ve en la figura anterior.

Si estableces estas credenciales, podrás acceder con ellas a cualquier aplicación que tengas en tu cuenta de Azure, y no solo a la app en la que lo estás estableciendo. Llega con poner el nombre de la aplicación delante (como dominio, por ejemplo nombreDeMiApp\admiinstradorFTP), pero usando el mismo nombre de usuario y la misma clave en todas. Podrás usarlo para conectarte por FTP a la web app, y también para desplegarla usando Git, añadiéndolo como otro remoto más de tu repositorio.

Te las mostrará en la información de cualquiera de tus apps:

Info de despliegue en la portada de la web app

Esto puede ser útil si eres tú la única persona que maneja todos los servicios y no quieres gestionar individualmente las credenciales de cada aplicación. Pero es muy peligroso, ya que si no eres consciente y le das las credenciales a un tercero (un programador que te ayude, un cliente), le estás casi entregando las llaves de tu cuenta de Azure :-S

Desde mi punto de vista el hecho de que el menú que te permite establecer esto globalmente esté en el lateral de tus aplicaciones es una grave fuente de confusión y deberían buscarle otra ubicación.

Siendo justos no se puede decir que no te lo avisen con claridad en el mensaje de la propia página de configuración (ver la primera figura), pero el hecho de estar en una de las opciones de la Web App, desde luego que no ayuda.

Obteniendo las credenciales individuales para cada Azure Web App

¿Cómo podemos hacer para tener unas credenciales diferentes para cada Web App?

El "truco" es fijarse en un botón que tienen las Web Apps en su página inicial, en la portada, y que se puede ver en la captura anterior: Get Publish Profile:

Botón de obtener las credenciales

Al pulsar este botón se nos descarga un archivo con el nombre de la aplicación y con extensión .PublishSettings. Éste no es más que un archivo XML que contiene la información para poder conectarnos individualmente a la web app.

Si lo abrimos con cualquier editor de texto podemos ver las credenciales tanto para Web Deploy como para FTP, que en este caso son las que nos interesan:

Credenciales individuales

Ahora podemos introducirlas en nuestro programa de FTP favorito y acceder exclusivamente a esa Azure Web App.

Lo malo del acceso por FTP es que no podemos crear cuentas adicionales ni controlar a qué se partes se accede, así que solo vale para ser utilizada por una o dos personas (y que sean de mucha confianza).

Si por lo que sea se ven comprometidas estas credenciales y necesitamos cambiarlas, solo tenemos que pulsar en el botón "Reset Publish Profile", al lado del anterior, y se generan unas nuevas, que podremos averiguar bajando otra vez el archivo .PublishSettings.

En resumen

Existen dos maneras de acceder a través de FTP a una Azure Web App, y es muy importante saber la diferencia existente entre ambas.

Con la que parecería más evidente hay que tener mucho cuidado porque es la llave para acceder, en realidad, a todos nuestros servicios web en Azure. Por eso deberíamos evitar usarla o solo hacerlo si es una suscripción Azure personal, que vamos a usar solo nosotros.

La menos evidente (o más rebuscada) es la más correcta y aquí te explico cómo gestionarla.

¡Espero que te resulte útil!

Continuous Delivery en profundidad: problemas y soluciones alternativas comunes de los pipelines de Jenkins

23/09/2017
Artículo original

Jenkins

Articulo original publicado en el blog de Stratio.

En esta parte nos ponemos el gorro del mítico Pitfall Harry para echarle un vistazo a algunos de los problemas con los que nos hemos cruzado y el impacto que han tenido en nuestro trabajo diario. También incluimos algunos consejos sobre cómo solventar estos problemas.

Lo primero es lo primero: los pipelines de Jenkins son una gran mejora en cuanto a las funcionalidades básicas de Jenkins y nos permiten montar de forma sencilla flujos completos de continuous delivery con atributos con mucha capacidad de reutilización y mantenimiento.

En este artículo vamos a echar un vistazo a algunos de los defectos, escollos y limitaciones de nuestros (geniales) pipelines de Jenkins, estableciendo algunas de las soluciones alternativas para esquivarlos.

Timeout!

Realizar un timeout es lo mejor que podemos hacer cuando una ejecución se cuelga. Si la ejecución dura de media X minutos, X*3 significa, en prácticamente el 100% de los casos, que se ha colgado. A nadie le gusta tener a zombies pululando por casa, así que mejor deshacernos de ellos.

Sin embargo (y esto va a cambiar) los timeouts no pondrán freno al código incluido en los pasos withEnv o withCredentials. Existe un problema, para el que se está buscando actualmente una solución, con una PR de github.

Debido a que el 90% de nuestros métodos se ejecutan incluidos en elementos withX, nos estamos ocupando de este problema, forzándonos a abortar las ejecuciones de forma manual.

Solución alternativa: Espera y cruza los dedos. Se pueden realizar acciones manuales en caso necesario.

NonSerializableException

Jenkins serializa objetos en diferentes puntos para que estén listos a la hora de sobrevivir a reinicios o a fallos en el nodo. Esta es un función muy interesante para afrontar la pérdida temporal del servicio y los reinicios. La serialización en el disco permite remitir el proceso cuando es necesario reiniciar algunas de las acciones.

El plugin de checkpoints probablemente utilizará está serialización por su propio bien. Cada vez que exista un objeto que no sea pueda liberar ni serializar y Jenkins intente serializarlo… ¡BOOM! De repente NonSerializableException.

Saltará NonSerializableException y se detendrá la ejecución ¿Un impacto bastante grande, verdad?

Solución alternativa: Presta atención a cualquier iterador, matcher, jsonsluper o cualquier otra clase que no esté implementando el uso de la interfaz serializable de java. Es difícil deducir con qué clase estás trabajando, porque Groovy puede no tener tipo o incluso las clases internas pueden ser desconocidas (JsonSlurper utiliza un LazyMap de forma interna y no un serializable), hacer una prueba te echará una mano.

La anotación @NonCPS es útil para superar este problema, puesto que no se realizará una serialización en el método con anotación. No es una solución al 100 % porque no puedes invocar pasos de pipeline dentro de dichas soluciones.

Pruebas

Necesitamos hacer pruebas para asegurarnos de que la función implementada está escrita de forma correcta. Podemos tratar los casos concretos y no saltará ningún NonSerializableException. Sin embargo, y por mucho que nos pese, no hay ningún arnés de pruebas para los pipelines complejos.

Sin pruebas no hay diversión. Para asegurarnos de que nuestro código es estable, es obligatorio probarlo.

Solución alternativa: Hay que hacer las pruebas de forma manual usando la consola de script de Jenkins, trabajos auxiliares o volviendo a ejecutar trabajos. Otra opción es limitar el margen de error posible y dejar que la ejecución continúe.

Manazas

Las bibliotecas de pipeline las escriben personas y como no hay forma de montar el pipeline de manera local, un código incorrecto podría acabar en la herramienta SCM. El código mal escrito supondrá problemas a la hora de analizarlo, por lo que las ejecuciones afectadas no continuarán.

Solución alternativa: Cómete tus propios marrones. PRs para cada función con su propio pipeline. Hacer análisis estáticos de código y revisar el código te ayudarán.

Pérdida de conexión con el nodo

¿Te acuerdas del error NonSerializableException? Se suponía que era para permitir a jenkins sobrevivir a un reinicio o a reconexiones del nodo, pero surge un problema cuando el agente está en la nube. Dichos agentes tendrán un nombre variable (normalmente con una encriptación autogenerada) que lo identifique de forma única. Esto hace que un trabajo no pueda cambiar a otro agente, incluso si el primero ya no esté en activo.

Nuestro entorno está compilado sobre un enjambre de docker, por lo que es algo que pasa bastante a menudo.

Solución alternativa: Acéptalo o prueba con un cambio en el plugin del docker. En Cloudbees han resuelto este problema en su Jenkins Operations Center.

Evaluación final

Como código, los pipelines están muy bien (¿acaso no lo he dicho ya?). Nos permiten implementar estructuras completas como, por ejemplo, un mapa <String, GString> donde cada GString está compuesto por varias GStrings bastante descuidadas (¿alguien ha dicho Inception?), donde cada una a su vez tiene otra variable bastante descuidada (o lo que es lo mismo, otra GString). Esta estructura, que probablemente viene de un problema CPS, nos lleva a la peor forma de evaluación de GString. Los Gstrings son objetos con dos matrices: strings y valores. Estas matrices se combinan para una llamada o para invocar toString, lo que resulta en un objeto eat String (?).

Probablemente sea el problema más difícil al que nos hemos enfrentado y casi hace que tengamos que interrumpir nuestro proyecto. Las estructuras de datos que necesitábamos sufrieron mucho por el tema de los descuidos y otros GStrings.

Solución alternativa: La primera idea sería hacer un NonCPS en el código afectado: ¡FALSO! El string resultante también era incorrecto, cortado en el primer elemento GString (de la matriz de los strings). Finalmente acabamos analizando un objeto con clase GStringImpl y volviendo a poner en su lugar correcto las matrices de strings y valores. Esto se conoce como el famoso método gStringyHackifier.

Estos son algunos de los problemas más importantes con los que hemos tenido que lidiar. Los compartimos con vosotros a modo de referencia por si os encontráis con situaciones parecidas y os sirven a la hora de trabajar con pipelines.

Javier Delgado es evangelista no oficial del uso de Jenkins para tareas continuas (inspection, testing, delivery), apasionado de la automatización y orador en diferentes conferencias sobre estas materias. Ingeniero informático y fiel seguidor del aprendizaje continuo, actualmente trabaja como ingeniero DevOps en Stratio, compañía de big data española-americana pionera en ofrecer a grandes empresas una transformación digital completa en torno a sus datos a través de un único producto.

También te recomendamos

GitHub libera Janky, su entorno de integración continua que combina Jenkins con Hubot

La historia que hay detrás de la campaña “Testimonios que pueden salvar vidas”

Continuous Delivery en profundidad: pipelines

-
La noticia Continuous Delivery en profundidad: problemas y soluciones alternativas comunes de los pipelines de Jenkins fue publicada originalmente en Genbeta Dev por Javier Delgado Garrido .

GAMBADAS: Hackeando el asistente de voz de tu móvil usando ultrasonidos

22/09/2017
Artículo original

Todos los móviles de los últimos años llevan incorporado reconocimiento de instrucciones por voz. No solo los móviles, también PCs de sobremesa (Cortana y Siri), muchos coches y la última moda: los asistentes del hogar estilo Amazon Echo (que lleva a Alexa), Apple HomePod (con Siri) o Google Home (que incorpora Google Assistant).

Alexa, Homepod y Google Home

El funcionamiento de estos asistentes se basa principalmente en estar atentos todo el rato a los sonidos a su alrededor y reconocer cuándo les hablas para obedecer tus órdenes. Y lo mismo ocurre (si no lo desactivas) con tu móvil. Por ejemplo, basta que le digas "Oye Siri" a tu iPhone o "OK Google" a tu dispositivo Android, para que ambos asistentes se pongan a conversar contigo. Lo mismo pasa con Windows y Cortana, Bixby con dispositivos Samsung, etc... Los agentes conversacionales son lo más ahora mismo.

Por supuesto, algo tan personal como esto, todo el rato atento a tus órdenes, es algo que cualquiera querría crackear. De hecho fue famoso en la pasada Navidad el incidente con el pedido automático de muñecas a Amazon debido a un anuncio de la tele que interaccionaba con Alexa.

Ahora unos investigadores chinos acaban de dar con otra vuelta de tuerca a este tipo de ataques: hacerlo sin que ni siquiera te enteres de lo que ocurre.

Mediante una técnica denominada Ataque Delfín, generaron instrucciones concretas para estos asistentes utilizando frecuencias ultrasónicas, que son demasiado elevadas para que las escuche un ser humano, al igual que los silbatos para perros. Sin embargo los micrófonos ultrasensibles de los dispositivos sí que los reciben y el software del asistente virtual es capaz de procesarlos.

Esto les permite lanzar instrucciones para los asistentes y hacer casi de todo con ellos, encima sin que tú te enteres hasta que es demasiado tarde. Por ejemplo, puede hacer un "Ok Google" seguido de una instrucción para que navegue a un sitio web bajo su control y que se provoque la descarga de un programa malicioso que tome el control del sistema. O decirle a Amazon Echo que abra la puerta de casa si lo tienes conectado a ella. Incluso han comprobado cómo podrían hacer que algunos modelos de coche (como el Audi Q3) cambien las direcciones de destino en el GPS, llevándote a un sitio equivocado.

Y esto se puede hacer en una calle con mucha gente y activar ciertas instrucciones en todos los dispositivos a la vez ???

En este vídeo se puede ver una de las pruebas de concepto:

[youtube:21HjF4A3WE4]

Nuestra recomendación: desactivar el "Always On" de estos asistentes en el móvil, para que se activen solo bajo demanda. Te obliga a usar los dedos par interaccionar, pero es mucho más seguro. Si lo que tienes es un asistente en el hogar (no tan abundantes aquí como en EEUU)... entonces lo tienes más complicado pues todo el objeto de los mismos es precisamente que les hables en cualquier momento.

Una vez más los peligros de la vida moderna que nos acechan ?

Diferencias entre Email Marketing y Email Transaccional

21/09/2017
Artículo original

Espero y este post sea de tu agrado, no olvides compartirlo en su redes sociales y sobre todo.. Gracias por seguirnos!

¿Tienes un sitio web, tienda en linea o plataforma en Internet? ¿Necesitas una solución para el envío de correos? Hoy vamos a hablar sobre las diferencias entre Email Marketing y Email Transaccional así como usos y ventajas de contar con un servidor SMTP externo para nuestros envios. ¿Has escuchado sobre el Email Transaccional? Hoy vamos a explicar para que sirve y cual es la diferencia con el Email Marketing. Una vez tengamos claro esto vamos a hablar un poco sobre las principales ventajas y usos de utilizarlo en nuestro sitio web para nuestros envios de correo electrónico. También vamos a

Compartir en Facebook

Comparte en Google Plus

Compartir en Twitter

El post Diferencias entre Email Marketing y Email Transaccional aparece en el Blog de Jonathan Melgoza

Java 9 disponible desde hoy

21/09/2017
Artículo original

Imagen ornamental - 0 días para Java 9

Tras múltiples retrasos y variaciones en el ámbito, por fin hoy verá la luz la nueva y esperada versión de la plataforma Java: Java 9. Es importante no olvidar que la anterior versión, Java 8, se lanzó en marzo de 2014, toda una vida en los tiempos que corren, y que las sucesivas "updates" que han ido lanzando hasta julio de este año eran fundamentalmente arreglo de bugs de seguridad. Es decir, han sido 3 años y medios sin nada nuevo en el lenguaje o la plataforma ? Y eso que Java 9 lleva en el tablero de diseño desde 2011...

El principal cambio que ha vivido el JDK 9 y también el principal motivo del retraso (no se sabía si finalmente iba a estar) ha sido la introducción de un nuevo tipo de componente de programación Java: el módulo. Es el famoso "proyecto Jigsaw", que tantas discusiones ha ocasionado.

Un módulo es una colección auto-descriptiva de código y datos, según la define la propia Oracle. Siguiendo la estela de Node.js o de .NET Core, su principal objetivo es el de reducir el tamaño y la complejidad tanto de las aplicaciones Java como del propio runtime de Java (JRE), que ha sido también modularizado usando la nueva característica. De este modo es posible crear aplicaciones que incluyan solamente aquello que utilizan, y no la plataforma Java completa.

Nota: Nuestro curso de Java ya está preparado para que aprendas a programar con Java9 >>

Para poder soportar estos nuevos módulos se han creado dos nuevos tipos de archivo: una archivo module-info.class que debe ir en la raíz del módulo, y un nuevo formato de JAR modular. Se eliminan el rt.jar y tools.jar de la imagen de tiempo de ejecución de Java.

Esta nueva filosofía también va a conseguir que, por fin, Java se pueda mover más rápido como plataforma, incorporando nuevas características más rápido, sin esperar a una versión completa nueva.

En la web del OpenJDK puedes encontrar información al respecto del funcionamiento de esta característica.

Esta es la novedad más llamativa, pero en realidad se introducen hasta 90 nuevas características y mejoras, como por ejemplo, por destacar las más importantes:

Puedes ver una lista completa en la web del OpenJDK para el JDK 9.

Esta nueva versión de Java y el JDK estará soportada hasta 2022. Oracle ha manifestado que va a imponer un ciclo de nuevas versiones cada 6 meses, algo que ya empieza a ser casi la norma en el sector (y sino que se lo digan a los de Angular).

WordPress y Feedly – Aumenta tus visitas!

20/09/2017
Artículo original

Espero y este post sea de tu agrado, no olvides compartirlo en su redes sociales y sobre todo.. Gracias por seguirnos!

¿Necesitas más visitas a tu sitio web? ¿Quieres ofrecer a tus lectores más medios para seguir tu contenido? Hoy vamos a ver como con WordPress y Feedly podemos obtener más tráfico optimizando correctamente nuestro sitio para trabajar de manera adecuada con Feedly. Muchas son las personas que siguen sus sitios web preferidos con un lector de feeds, uno de los más populares es por supuesto feedly. Con Feedly, o cualquier lector de feeds, puedes agregar los sitios web o blogs que te gustan en Internet. Simplemente ingresas a Feedly y tienes el último contenido de tu sitio web favorito sin

Compartir en Facebook

Comparte en Google Plus

Compartir en Twitter

El post WordPress y Feedly – Aumenta tus visitas! aparece en el Blog de Jonathan Melgoza

TRUCO VS #5: Uso de snippets para acelerar la escritura de código

19/09/2017
Artículo original

Cabecera ornamental con el título del post

Cuando escribes código en Visual Studio puede que hayas notado que existen unas entradas en las listas que salen que parecen como erróneas, como si el icono no lo pintara bien o no fuera completo, con una especie de cuadrado gris, vacío:

Aspecto de los iconos que parecen erróneos, con un cuadrado gris

Este tipo de ayuda contextual es lo que se denominan snippets. Un snippet (o "fragmento" en español) no es más que un fragmento de código ya creado que podemos insertar de golpe mientras escribimos, ahorrándonos muchas pulsaciones de teclas.

Normalmente se trata de código muy repetitivo, lo que los americanos llaman plumbing ("fontanería" se suele decir en español) y que en realidad no nos aporta demasiado tener que escribirlos una y otra vez.

Por ejemplo, considera cómo se define una propiedad completa (no abreviada) para una clase en C#:

  1. Debes definir una variable privada para albergar el valor interno de la propiedad
  2. Ahora debes definir la propiedad en sí, estableciendo su tipo y nombre
  3. Finalmente defines sus métodos para lectura (getter) y escritura (setter).

Y esto una y otra vez para cada una.

Gracias a los snippets puedes reducir esto a la pulsación de un par de teclas y ahorrar muchísimo tiempo.

El proceso para conseguirlo es el siguiente:

  1. Escribes las primeras letras del snippet que quieres utilizar y lo seleccionas en la lista.
  2. Pulsas la tecla Tab para salir de Intellisense, y la vuelves a pulsar de nuevo para insertar el snippet.
  3. Cada vez que pulsas Tab saltas de un parámetro a otro de los disponibles para personalizar el fragmento que acabas de introducir, hasta que pulsas Return para darlo por finalizado.

Es mucho más sencillo de entender cuando lo ves en funcionamiento, pero antes de hacerlo, solo un comentario más: puedes usar snippets para que la inserción del fragmento se haga rodeando al código que tengas seleccionado. Para ello debes seleccionas unas líneas de código y pulsas CTRL+K y luego CTRL+S. ¡Listo! Se parece mucho a lo que vimos en el truco anterior.

Vamos a verlo en la práctica:

Existen un montón de snippets que vienen de serie con Visual Studio, e incluso puedes crear algunos propios si lo consideras necesario.

Si los utilizas a menudo acabarás ahorrando muchísimo tiempo al final del mes, así que no los subestimes.

Otros trucos de esta serie:

Préstamos y créditos online

19/09/2017
Artículo original

Espero y este post sea de tu agrado, no olvides compartirlo en su redes sociales y sobre todo.. Gracias por seguirnos!

Hoy vamos a hablar un poco sobre un tema que a todos nos suele interesar en algún momento de nuestras vidas, ya sea por necesidad, por inversión, por inicio de un negocio o por hacerlo crecer de alguna manera, hoy hablaremos sobre préstamos y créditos online. Para los que no saben, para pedir un préstamo no solo se tiene que hacer acudiendo a una entidad bancaria, sino que en este mundo digital en el que vivimos hoy en día también puede hacerse de manera online. Existen varias entidades serias que facilitan este proceso e incluso dan muchas más ventajas que

Compartir en Facebook

Comparte en Google Plus

Compartir en Twitter

El post Préstamos y créditos online aparece en el Blog de Jonathan Melgoza

Ganar dinero con post patrocinados – 5 Plataformas

19/09/2017
Artículo original

Espero y este post sea de tu agrado, no olvides compartirlo en su redes sociales y sobre todo.. Gracias por seguirnos!

Si tienes un sitio web o blog seguramente has pensado en más de una ocasión en monetizarlo para pagar las cuentas, es posible y hoy vamos a hablar de una de muchas formas que existen hoy en dia para hacer esto, ganar dinero con post patrocinados es una excelente forma de monetizar  tu web y hoy te presento 5 excelentes plataformas online gratuitas para hacerlo, acompañame. Monetizar tu sitio web puede ser un tema que a muchos webmaster les pasa desapercibido, a muchos otros les interesa hacerlo pero no saben como y por último muchos otros estan haciendolo actualmente. Ganar

Compartir en Facebook

Comparte en Google Plus

Compartir en Twitter

El post Ganar dinero con post patrocinados – 5 Plataformas aparece en el Blog de Jonathan Melgoza

Calculadora con JQuery desde Cero

19/09/2017
Artículo original

Espero y este post sea de tu agrado, no olvides compartirlo en su redes sociales y sobre todo.. Gracias por seguirnos!

¿Necesitas aprender a crear una calculadora con jQuery? El dia de hoy vamos rápidamente a hacer uso de nuestras habilidades con HTML, CSS y JQuery para crear una calculadora con operaciones básicas como son sumar, restar, multiplicar y dividir. Este ejemplo es perfecto para cualquier estudiante que recien esta aprendiendo desarrollo web! Anteriormente ya habiamos hablado de varios tutoriales de jQuery en el blog, por ejemplo habiamos visto como crear un sistema de ventanas con jQuery, el dia de hoy vamos a realizar un pequeño y sencillo ejemplo de como crear una calculadora con jQuery desde Cero pues muchas personas

Compartir en Facebook

Comparte en Google Plus

Compartir en Twitter

El post Calculadora con JQuery desde Cero aparece en el Blog de Jonathan Melgoza

Página Siguiente