martes, 30 de junio de 2015

Novedades en Gmail: nuevos temas y ¡emojis!


Soy fiel usuario de Gmail (de una buena cantidad de los servicios de Google, de hecho) y rara vez se dejan ver novedades desde que le dieron más importancia Inbox que al tradicional cliente de correo de Google. 

Sin embargo, el día de hoy Google da a conocer que ha incluido dos pequeñas pero importantes novedades en Gmail: nuevos temas para personalizar nuestro buzón de correo y la posibilidad de insertar emojis (o emoticonos, para los más puristas) en nuestros mensajes de correo electrónico.



En el caso de los temas, ahora contamos con un catálogo muy amplio de nuevas imágenes para colocar como fondo además de continuar ofreciendo la opción de subir nuestras propias imágenes. Pero no sólo eso, sino que ahora también contamos con la opción de añadir algunos efectos a nuestra imagen de fondo o cambiar el fondo del texto entre dos esquemas: oscuro o claro. Si eres de los que les encanta personalizar cómo se ve tu buzón de correo electrónico, esta es sin duda una muy bienvenida adición.

Por otro lado, también contamos ahora con la posibilidad de incluir emojis en nuestros correos electrónicos. Estos emojis son exactamente los mismos que podemos incluir en cualquier otra aplicación de mensajería como Hangouts o Whatsapp, por lo que si somos usuarios fieles de alguna de esas apps, los emojis no nos serán nada extraños.



¿Son usuarios de Gmail? ¿Cuál de estas adiciones a Gmail les parece más atractiva?



Fuente: Blog de Gmail


Lógica de Programación (27) - Comunicación con subprogramas: paso de parámetros



Cuando un programa llama a un subprograma, la información se comunica a través de una lista de parámetros o argumentos. La forma más común para realizar este paso de información es utilizando una correspondencia posicional, es decir, que los valores de los parámetros se asignan en el mismo orden en que se pasan.

Por ejemplo, supongamos que tenemos un procedimiento definido del siguiente modo:

procedimiento division (entero dividendo, entero divisor)
...
...
fin_procedimiento

y una llamada a dicho procedimiento desde nuestro programa principal, expresada asi:

division(20, 5)

Los valores 20 y 5, pasados como parámetros al procedimiento división, se asignarán en el orden que se pasan. Es decir, la variable dividendo tomará el valor de 20 y divisor el valor de 5.

Existen diferentes métodos para la transmisión de parámetros a los subprogramas, entre los cuales se cuentan:
  • Paso por valor
  • Paso por referencia
  • Paso por nombre
  • Paso por resultado


Los dos primeros son los más frecuentes en la gran mayoría de los lenguajes de programación, por lo que nos vamos a enfocar a explicarlos a detalle.

Paso por valor

Un parámetro es pasado por valor cuando lo que se le pasa al subprograma es una copia del valor de una variable, el cual recibe en una variable local al subprograma, de modo que cualquier operación realizada sobre dicho valor no afectará ni cambiará al valor original. Tomemos, por ejemplo, el siguiente algoritmo:

procedimiento cambiar(entero a, entero b)
var
   entero: aux
inicio
   aux <- a
   a <- b
   b <- aux
fin_procedimiento

algoritmo Paso_Por_Valor
var
   entero: a, b   
inicio
   a <- 5
   b <- 50
   escribir(a, b)
   cambiar(a, b)
   escribir(a,b)
fin

El algoritmo principal contiene dos variables, cuyos valores son 5 y 50, respectivamente. Luego invoca al procedimiento cambiar, el cual toma una copia de esos valores y los usa en sus operaciones internas. Dentro de dicho procedimiento, la variable a tomará el valor de 5 y la variable b tomará el valor de 50. Las operaciones del procedimiento tienen el objetivo de intercambiar dichos valores por lo que, una vez realizadas, las variables a y b tendrán los valores intercambiados. Pero dado que el procedimiento trabaja con una copia de los datos, las variables originales conservan sus mismos valores. Es decir, cuando volvamos a escribir en pantalla los valores de a y b, veremos los mismos valores que originalmente les asignamos.

Paso por referencia

Ahora bien, cuando pasamos parámetros por referencia, en realidad estamos pasando a un subprograma un indicador o apuntador que señala a la posición de memoria donde se almacena el valor de una variable, de modo que todas las operaciones que se hacen sobre dichos valores dentro del subprograma afectan y cambian a los mismos. En el paso por referencia no se pasa una copia de los datos, sino las referencias a los datos originales. Para indicar que un parámetro está siendo pasado por referencia, utilizamos la palabra reservada var delante de cada uno de los argumentos que especifiquemos en la definición del subprograma.

Observa el ejemplo anterior pero ahora modificado para recibir los parámetros por referencia:

procedimiento cambiar(var entero a, var entero b)
var
   entero: aux
inicio
   aux <- a
   a <- b
   b <- aux
fin_procedimiento

algoritmo Paso_Por_Valor
var
   entero: a, b   
inicio
   a <- 5
   b <- 50
   escribir(a, b)
   cambiar(a, b)
   escribir(a,b)
fin

Observa que hemos añadido la palabra reservada var delante de cada uno de los parámetros incluidos en la definición del procedimiento. En este caso, todas las operaciones que hacemos dentro del procedimiento cambiar están afectando directamente a los valores originales de a y b, por lo que al ejecutar la segunda instrucción escribir(a,b) del programa principal, veremos que a y b han intercambiado sus valores como resultado de la ejecución del subprograma.

Es importante resaltar que en ambos ejemplos usamos los mismos nombres para las variables tanto en el programa principal como en el procedimiento. Pero eso no siempre tiene que ser así. Si usamos nombres distintos para las variables, pero especificamos que estamos pasando los valores por referencia, las variables en el subprocedimiento apuntarán a las variables originales independientemente de su nombre.

El paso de parámetros más usual y por defecto es el paso por valor. Sin embargo, existen situaciones en las que el paso por referencia es más útil, como en aquellos casos en los que los parámetros contengan una cantidad demasiado grande de información (como un arreglo, de los cuales aprenderemos más adelante).

En los algoritmos que estamos aprendiendo a crear no veremos gran diferencia entre ambos métodos de paso de parámetros, pero es importante conocer que existen para cuando apliquemos nuestros conocimientos a algún lenguaje de programación en particular.

En la siguiente lección, la última de la tercera sección de este curso, aprenderemos uno de los conceptos más extraños y útiles de la programación de computadoras: la recursividad. ¡Hasta la próxima!





Por fin, Amazon aterriza en México

Amazon finalmente anunció su expansión a México para ofrecer productos físicos además de la venta de e-books para Kindle que ya ofrecían desde hace algún tiempo. Hoy el sitio Amazon.com.mx ya presenta la introducción de su nuevo sitio ofreciendo miles de productos incluyendo electrónica de consumo, electrodomésticos, enseres domésticos y de cocina, artículos deportivos, herramientas, productos de cuidado personal, joyería, música, libros, películas y más.

El sitio de Amazon México ya ofrece miles de productos físicos en venta

También, Amazon México estará vendiendo sus dispositivos Kindle para e-books en su nueva tienda en línea: el equipo básico por $1,499, el nuevo Kindpe Paperwhite y el Kindle Voyage. También, se han puesto a disposición de los usuarios las compras a través del dispositivo móvil con las apps de Amazon para iOS y Android.

Amazon llega a nuestro país a competir con otras compañías que ofrecen productos por internet como MercadoLibre, Walmart o Linio entre otras. Se espera que la llegada de Amazon a México refuerce el comercio electrónico, el cual de por sí ya ha reportado un crecimiento del 34% anual.

Sin duda Amazon llega en un muy buen momento para introducirse poco a poco en nuestro país y justo a tiempo para estar bien establecido para la próxima temporada navideña. Ojalá la oferta de productos sea tan amplia como en el mercado norteamericano.





domingo, 28 de junio de 2015

Reproduce tu música desde la web con CloudPlayer



Servicios como Spotify, Google Play Music o el próximo Apple Music son sin duda opciones excelentes para escuchar música directamente desde la web y sin tener que almacenar canciones en nuestros dispositivos. En una época en la que los dispositivos móviles parecen empezar a tomar la moda de reducir su espacio de almacenamiento y no contar con ranuras para expandir dicho espacio (como el caso del Moto G), reproducir música vía streaming es una solución bastante conveniente.



Pero si son como yo, que ya tienen su muy particular colección de música y sus canciones favoritas y detestan tener que estar "pescándolas" entre los miles de álbums disponibles en los servicios en línea, CloudPlayer es para ustedes.



Se trata de un reproductor de música que cuenta con la muy útil funcionalidad de conectarse a Dropbox, OneDrive o Google Drive para que podamos reproducir directamente desde la web las canciones que tengamos almacenados en dichos servicios, sin descargar nada a nuestro dispositivo. Además, la app cuenta con otras funciones como ecualizador o creación de listas de reproducción y una moderna interfaz Material Design.



Pueden instalar CloudPlayer en sus dispositivos directamente desde Google Play.


miércoles, 24 de junio de 2015

Microsoft Office para Android, disponible para todos


Microsoft sigue dando pasos agigantados para tratar de conquistar otras plataformas y ahora le toca el turno a Office para Android. Las apps de Word, Excel y PowerPoint para Android ya tienen tiempo en la Play Store, pero estaban limitadas a algunos usuarios y tamaños de dispositivos: sólo se podían instalar en dispositivos con Android 4.4 y con pantalla de al menos 7 pulgadas, es decir, sólo tablets.



Sin embargo, desde hoy están disponibles para todos los usuarios de cualquier dispositivo Android (eso sí, mientras corra la versión 4.4). Las apps son totalmente gratuitas, aunque cabe señalar que sólo se pueden visualizar documentos de Office y si se desea editarlos o crear nuevos, se deberá contar con una suscripción a Office 365.

Aquí están los enlaces para cada una de las apps de Office para Android, para que las descarguen y prueben en sus dispositivos:

domingo, 21 de junio de 2015

Lógica de Programación (26) - Ámbito de las variables

En esta lección vamos a aprender una de las más útiles características de la programación modular: el uso de variables locales y globales en nuestros programas.

Se dice que una variable es local cuando está declarada y definida dentro de algún subprograma (ya sea una función o un procedimiento). El significado y la utilidad de una variable local están limitados únicamente al subprograma donde fue definida, es decir, el valor que tenga almacenado no será accesible para ningún otro subprograma. Ahora bien, pueden definirse variables locales con el mismo nombre en distintos subprogramas, pero eso no quiere decir que se refieran a la misma posición de memoria o al mismo valor.

Por otro lado, una variable global es la que se declara en el programa o algoritmo principal, del cual dependen todos los demás subprogramas. A diferencia de las variables locales, las globales tienen la ventaja de compartir información entre subprogramas. Una variable global es útil y accesible tanto en el programa principal como en todos los subprogramas que dependan de él. Cualquier subprograma puede acceder y modificar el valor de una variable global.

El ámbito o alcance (scope, en inglés) de una variable es la parte del programa o algoritmo en el que una variable definida, conocida y acesible. En la siguiente figura podemos ver una descripción conceptual del ámbito de diferentes variables:

Ámbito de identificadores
En esta figura, podemos observar que:
  • Las variables X1 y X2 son globales por estar definidas en el algoritmo principal y serán accesibles desde cualquier parte del programa, incluidos todos los subprogramas que dependan de él. 
  • Las variables Y1 y Y2 son locales al procedimiento A y serán accesibles únicamente dentro de ese procedimiento y también por los subrogramas que dependan de él (como el procedimiento B). 
  • Las variables Z1 y Z2 son locales al procedimiento B y son accesibles única y exclusivamente por él.
  • Las variables W1 y W2 son locales al procedimiento C y son accesibles única y exclusivamente por él.
Para explicarlo aún mejor, mira este otro esquema donde podemos observar la accesibilidad que tienen las variables definidas en distintos niveles de un programa con subprogramas anidados:


En el siguiente ejemplo definimos la función signo que realiza la siguiente tarea: si el número dado es 0, entonces devuelve un 0, si es positivo, devuelve un 1 y si es negativo devuelve un -1.


algoritmo Signos
var
   entero: a, b, c
   real: x, y, z
inicio
   x <- 5.4
   a <- signo(x)
   y <- 0
   b <- signo(y)
   z <- 7.89
   c <- signo (z - 9)
   escribir ("Las respuestas son " + a +" " + b + " " + c)
fin

entero función signo (real x)
var
   entero: s
inicio
   si x = 0 entonces s <- 0
   si x > 0 entonces s <- 1
   si x < 0 entonces s <- -1
   devolver (s)
fin_función


En este ejemplo, la variable s, declarada dentro de la función signo, es local y accesible únicamente dentro de ese procedimiento.

Es importante comprender el concepto de ámbito de variables dado que muchos de los errores de programación se dan por no considerar correctamente la accesibilidad que tendrá una variable en un determinado programa. En la próxima lección aprenderemos cómo podemos aprovechar las variables locales y globales para pasar parámetros a nuestros procedimientos y funciones. ¡Hasta la próxima!


Enlace: Índice del curso



lunes, 15 de junio de 2015

¿Qué es HTML5?

El logotipo oficial del estándar HTML5

Toda página web está conformada por un código estructurado denominado HTML, que son las siglas de HiperText Markup Language (Lenguaje de Marcado de Hipertexto). Básicamente, este lenguaje cuenta con una serie de instrucciones para indicarle al navegador que estemos utilizando la manera en que la página debe ser representada.

Una de sus principales características es su simplicidad de uso y de aprendizaje, dado que para crear un documento HTML sólo necesitamos un editor de texto simple (como el bloc de notas de Windows) para escribir las etiquetas (o tags) que le darán forma a nuestra página web.

El código HTML da forma a las páginas web

Las etiquetas del lenguaje HTML indican el comienzo y el final de todos los elementos que se muestran en la página, desde las características de los textos (como el tipo de letra, el color o el estilo) hasta los elementos multimedia como imágenes, vídeos y sonidos.

Cabe aclarar que HTML no es un lenguaje de programación, sino de marcado. Esto quiere decir que únicamente le indica al navegador lo que debe mostrar mediante el uso de etiquetas y atributos. Si hubiera algún error en el código, el navegador mostraría el documento tal como lo llegue a interpretar.

Historia de HTML5

El lenguaje HTML ha tenido varias encarnaciones con el pasar de los años. Todas ellas son similares, pero con el paso del tiempo se han ido añadiendo diversas mejoras para hacer frente a nuestro más refinado entendimiento de cuál es la mejor manera de crear una página web.

HTML5 es la versión más reciente del lenguaje y se ha ido convirtiendo poco a poco en el estandar usado por la mayoría de los desarrolladores. Su versión definitiva se publicó a penas en Octubre de 2014, pero ha sido usada y soportada por la mayoría de los navegadores web desde un par de años antes.

Sin embargo, aún abundan los sitios web desarrollados en HTML4 o en su sucesor, XHTML. Además, también existen muchos libros o cursos orientados a ambos estándares del lenguaje, lo cual hace que muchos desarrolladores principiantes se confundan y no sepan cuál de ellos aprender. Vamos entonces a resaltar algunas de las diferencias entre estos estándares para subsanar la confusión.

HTML4 vs XHTML vs HTML5. Principales diferencias.

HTML fue desarrollado en 1990 por Tim Berners-Lee y su versión 4 es la más antigua que sigue en uso. La sintaxis de HTML4 es muy permisiva; por ejemplo, las etiquetas de cierre muchas veces son opcionales. Como ejemplo, en HTML4 los párrafos son cerrados automáticamente cuando se inicua uno nuevo. Es decir, no necesitas terminar un párrafo con una etiqueta de cierre en HTML4.

HTML vs XML vs XHTML vs HTML5... ¿cuál es la diferencia?

Esta sintaxis permisiva era excelente para desarrolladores amateur y hacía que HTML fuera muy fácil de aprender y adoptar. Sin embargo, la sintaxis permisiva no es tan buena si se desea lograr un resultado específico que se vea igual en todos los navegadores, dado que vuelve difícil que un navegador interpreten adecuadamente qué fue lo que el desarrollador quiso decir. Cabe aclarar que todos los navegadores web interpretan HTML de manera ligeramente distinta y, con la gran cantidad de navegadores web en uso en la actualidad, convierte a HTML4 en un lenguaje poco confiable si se usa de manera incorrecta.

Para contrarrestar este problema se introdujo XHTML, una variación del lenguaje HTML que implica el uso de una sintaxis más estricta. La principal diferencia entre HTML y XHTML es que todas las etiquetas, una vez abiertas, deben ser cerradas. También existen algunas restricciones acerca de cuáles etiquetas pueden ser incluidas dentro de otras. Estas restricciones son bastante específicas y muy probablemente no nos encontremos con ellas.

Fuera de esto, todas las etiquetas de XHTML son las mismas que las de HTML4. XHTML es el lenguaje usado por la mayoría de los desarrolladores web profesionales.

HTML5, la nueva versión del lenguaje, toma lo mejor de HTML4 y de XHTML y añade nuevas funcionalidades que reflejan el modo en que usamos la web hoy (especialmente con la explosión en el uso de la web móvil). Con HTML5 los desarrolladores son capaces de hacer cosas mucho más interesantes con los sitios web.

Al momento de escribir estas líneas, la mayoría de los navegadores web son compatibles con HTML5, pero para salir de dudas sobre la compatibilidad del navegador en uso, se puede someter a un test visitando el sitio http://html5test.com/.

Nuevas características de HTML5

A continuación se listan algunos de los cambios más significativos que introduce HTML5 para los desarrolladores web:
  • Nuevas etiquetas para estructurar nuestro sitio. Las nuevas etiquetas incorporadas se refieren a las distintas partes que conforman un sitio web y son: <header>, <nav>, <article>, <section>, <aside> y <footer>.
Las nuevas etiquetas proveen estructura a una página web
  • Gráficos con Canvas. Con el nuevo elemento "Canvas" contamos con una herramienta que nos permite generar elementos gráficos en nuestro sitio web. En combinación con Javascript, el canvas es una potente herramienta que puede usarse para incluir imágenes personalizadas, gráficas estadísticas y hasta videojuegos.
El elemento canvas de HTML5 en acción
  • Controles de audio y video. Con las nuevas etiquetas <audio> y <video> podemos incluir elementos multimedia en nuestros sitios sin necesidad de programas adicionales (como Flash Player). HTML5 nos permite incluir estos elementos potenciados con un control de reproducción que es posible personalizar y adaptar a nuestro gusto.
Los reproductores de audio y video de HTML5 pueden personalizarse
  • Geolocalización. HTML5 utiliza esta función para ubicar desde dónde se conecta un usuario haciendo uso ya sea de la red WiFi o del GPS del dispositivo movil desde el cual se accede a un sitio web. Esto permite crear aplicaciones que utilicen esta ubicación para ofrecer interesantes funciones al usuario.
La geolocalización es una de las más interesantes adiciones a HTML5
  • Web sin conexión. Mediante el uso de mecanismos de almacenamiento local, los sitios desarrollados en HTML5 pueden funcionar aún cuando no se cuente con una conexión a internet activa.
  • Etiquetas de formulario. Los formularios son un importante componente de la mayoría de los sitios web, pues sirven como plataforma para que los usuarios introduzcan información que podemos procesar. Con HTML5 vemos incorporadas importantes mejoras respecto a los formularios, como funciones de autofocus o validaciones sobre los controles, las cuales anteriormente debían hacerse mediante Javascript o algún lenguaje del lado del servidor.

HTML5 y CSS3

HTML5 trabaja en conjunto con las llamadas hojas de estilo en cascada o CSS (Cascading Style Sheets) y entre ambos tratan de definir los nuevos estándares para el desarrollo web tanto para escritorio como para dispositivos móviles.

CSS es un lenguaje que sirve para definir la presentación de un documento estructurado y escrito en HTML5. La idea detrás de CSS es que pueda separarse la estructura de un documento de su presentación. La información relativa al estilo de un documento web puede ser definida en un documento separado o en el mismo documento HTML5. Usando el lenguaje CSS puede definirse, por ejemplo, el color de los textos que se presentarán en la página web, los tipos de letra, las alineaciones, los colores de fondo, la posición de los distintos elementos del documento web, etc.

La revisión más reciente de este lenguaje es CSS3.

HTML5 y Javascript

Javascript, al igual que CSS, es una de las herramientas más utilizadas para extender la capacidad que ya de por sí tiene HTML5. Se trata de un lenguaje de programación que interpreta el navegador y que se usa en gran manera para implementar mejoras en la interfaz de usuario y páginas web dinámicas. Mientras que HTML5 se encarga del contenido y la estructura de la página y CSS3 se encarga de la apariencia o presentación de la misma, Javascript se encarga de los comportamientos que tendrá la página, como mostrar alertas o ventanas de aviso a los usuarios, validar un formulario, ocultar o mostrar elementos de la página cuando se haga clic en un botón, etc.

La interacción entre HTML5, CSS3 y Javascript puede ilustrarse de la siguiente manera:

Como vemos, desarrollar un sitio web moderno requiere del aprendizaje y dominio de al menos estas tres poderosas herramientas, que en conjunto nos permitiran crear sitios web atractivos y, sobre todo, funcionales.

Si bien el estandar HTML5 a penas está en pañales, su potencial es bastante grande y a penas estamos viendo el comienzo de su expansión.

Espero que este artículo les haya dado una mejor idea de qué es el lenguaje HTML5 y sirva como una introducción para un aprendizaje más completo y profundo del desarrollo web moderno.



MarI/O no es Ultron, pero sabe jugar Mario Bros



Seth Bling es un desarrollador de software que también resulta ser un un hábil jugador de Super Mario World. Con esos antecedentes, el buen Seth decidió crear MarI/O, una pequeña pieza de software que usa el modelo de las redes neuronales para aprender a jugar Super Mario World desde cero.

Como podemos ver en el video, MarI/O comenzó sin saber absolutamente nada de cómo se juega SMW y poco a poco, a base de prueba y error y registrando todos sus resultados, aprendió a jugar después de 24 horas. Este modelo se basa en la evolución natural del aprendizaje. Vaya, aprende como lo haría un cerebro humano, pues.



Impresionante, en verdad. Y si alguno tiene curiosidad, si hacen clic aqui, podrán ver el código fuente de MarI/O por si desean probarlo con algún otro videojuego.

Fuente: Gizmodo



Los navegadores web más utilizados.


Todavía recuerdo los días en los que las páginas de Internet que uno podía visitar eran relativamente limitadas. Vaya, tan limitada era la cantidad, que recuerdo que vendían guías de internet en los puestos de revistas, que básicamente eran como el directorio telefónico: podíamos buscar sitios de modo alfabético o por categorías. Luego bastaba con un directorio web que agrupara los sitios por categorías para encontrar lo que uno andaba buscando. En esos días, Yahoo! era el rey indiscutible. Pero luego vino la explosión de sitios disponibles y un simple directorio fue insuficiente, por lo que Google comenzó a tomar relevancia. Y ese crecimiento de la red no se ha detenido ni ha disminuido en su intensidad.

Junto con el crecimiento de la web, también ha ido creciendo la oferta de los programas disponibles para "navegar" entre tanto contenido. Y si bien todos ofrecen en esencia lo mismo (un medio para moverse en internet), hay algunos que han destacado por su rapidez, su efectividad y las herramientas adicionales que ofrecen a sus usuarios. Por mucho tiempo el infame Internet Explorer (de Microsoft) fue el líder y casi el único programa disponible para dicha tarea (luego que logró desplazar al extinto Netscape), pero en los últimos años han surgido propuestas mucho mejores, más rápidas y potentes como Firefox, Chrome (de Google) o Safari (de Apple), además de incontables opciones para dispositivos móviles como tabletas o smartphones.

Es aquí donde surge la pregunta: ¿cuáles son los navegadores más usados en el mundo? La respuesta es relevante desde el punto de vista del usuario porque nos da una mejor idea de cuál es el navegador que podemos elegir para instalar y usar de modo cotidiano (claro que no por ser el mas usado será el mejor, como bien lo evidenció Internet Explorer por tanto tiempo pero, por otro lado, algo peor que IE no creo que haya). Pero también es relevante desde el punto de vista del desarrollador web porque le permite tener una mejor vista de en qué navegadores será más probable que visualicen sus sitios, lo que acarrea decisiones respecto a la compatibilidad de algunos elementos del diseño que se pretendan usar.

Gracias al sitio StatCounter, podemos darnos una mejor idea de cuáles son los navegadores más usados a nivel mundial e incluso por país. Mira estos gráficos:

Navegadores más usados en México en el periodo May-2014 a May-2015



Source: StatCounter Global Stats - Browser Market Share


Navegadores más usados en el mundo en el periodo May-2014 a May-2015



Source: StatCounter Global Stats - Browser Market Share


Como podemos observar en ambos gráficos, el rey indiscutible de los navegadores web es Google Chrome, seguido de cerca por Internet Explorer y Safari. La lucha entre los tres gigantes tecnológicos (Google, Microsoft y Apple) queda bien evidenciada al menos en el frente de los navegadores de internet.

Si Google Chrome es el mejor o no, es una decisión que tomará cada quien de manera personal. (Para mí sí lo es, pero no voy a influenciar a nadie con mi elección ;) )

Y ustedes, ¿cuál navegador web suelen usar? ¿por qué lo eligieron?¿probarían algún otro?



Enlace: StatCounter



Orígenes V: Historia de Internet


Todos sabemos que Internet se ha convertido en un elemento omnipresente y fundamental para el funcionamiento de nuestra sociedad e incluso de nuestra vida cotidiana. Muchas cosas han cambiado con el advenimiento de Internet. ¿Se han puesto a pensar en cómo era su vida antes de contar con el acceso tan fácil a la Web? No teníamos redes sociales, tener una línea telefónica en casa era esencial, comprábamos DVD (o VHS) para ver nuestras películas favoritas, sólo teníamos TV de señal aérea, escuchábamos música desde casetes o CD's, hacíamos largas filas en los bancos para hacer un simple pago... en fin, Internet llegó para revolucionar nuestras vidas y cambiar para siempre la forma en que hacemos las tareas más cotidianas.

Pero, ¿cómo comenzó todo esto? Si bien podríamos hablar de pequeños avances e ideas que dieron forma a Internet desde hace siglos, la verdadera revolución comenzó hace poco más de 50 años. a continuación les comparto una genial animación de 8 minutos que nos explica de manera muy sencilla el origen de Internet. Está en inglés pero, si no son muy versados en la lengua de Shakespeare, no se preocupen: pueden activar los subtítulos en español.




¿Qué tanto ha cambiado su vida gracias a Internet? Bueno, en mi caso, puedo decir que me casé gracias a ella :)

viernes, 12 de junio de 2015

Lógica de Programación (25) - Procedimientos


En la lección anterior aprendimos que las funciones reciben una serie de parámetros que luego son procesados para devolver un resultado. Dado que las funciones regresan un valor, es necesario que cada función tenga un tipo de retorno asignado, el cual se especifica cuando se declara la función.

Un procedimiento es similar a una función, pero con notables diferencias:

  • Una función devuelve sólo un valor, mientras que un procedimiento puede regresar cero, uno o muchos valores a la vez.
  • Los procedimientos se declaran de manera similar a las funciones, excepto que no se necesita especificar ningún tipo de retorno.


Los procedimientos se declaran con esta sintaxis:

procedimiento nombre [(lista de parámetros)]
   <acciones>
fin_procedimiento

En este ejemplo pedimos al usuario que nos proporcione dos números enteros para calcular su suma y su producto usando procedimientos.

algoritmo Calcular_operaciones
var
   entero: a, b
inicio
   escribir ("Escribe el primer número: ")
   leer(a)
   escribir ("Escribe el segundo número: ")
   leer (b)
   suma(a,b)
   producto(a,b)
fin

procedimiento suma(entero a, entero b)
var
   entero: sum
inicio
   sum <- a + b
   escribir ("La suma de ambos números es: ", sum)
fin_procedimiento

procedimiento producto(entero a, entero b)
var
   entero: prod
inicio
   prod <- a * b
   escribir ("El producto de ambos números es: ", prod)
fin_procedimiento


Como podemos observar, cada uno de los procedimientos recibe como parámetros los dos números leídos en el programa principal. Con esos argumentos, cada procedimiento hace las operaciones solicitadas y muestra el resultado. Observa que el procedimiento no regresa ningún valor al programa principal, sino que la salida se muestra directamente dentro del cuerpo del procedimiento. Cuando el procedimiento suma(a,b) termina su labor, regresa el control al programa principal que, a su vez, llama al procedimiento producto(a,b) para que ejecute sus tareas. Cuando este termina regresa el flujo al cuerpo del programa principal para entonces terminar la ejecución.

En el ámbito de los lenguajes de programación actuales, tanto las funciones como los procedimientos son bastante utilizados en la forma de métodos dentro de clases, uno de los elementos de la programación orientada a objetos más utilizados en la actualidad. No vamos a profundizar mucho en este concepto, pero vale la pena mencionarlo para futuras referencias.

ACTIVIDADES DE APRENDIZAJE

  • Repite cada uno de los ejercicios de la lección anterior pero esta vez usa procedimientos en lugar de funciones para resolverlos.








martes, 9 de junio de 2015

Lógica de Programación (24) - Funciones



Ya en la lección anterior aprendimos que los subalgoritmos o subprogramas son una forma efectiva de atacar un problema complejo dividiéndolo en varios problemas más sencillos de resolver. En esta lección vamos a aprender una manera de lograr esta subdivisión a través del uso de funciones.

Si nos vamos a la definición matemática, una función es una operación que toma uno o más valores llamados argumentos y produce un valor determinado llamado resultado, que es el valor de la función para los argumentos dados. En la octava lección de este curso, aprendimos que en programación existen algunas funciones predeterminadas diseñadas para llevar a cabo cierta tarea o algún cálculo específico; para usarlas, sólo tenemos que "invocarlas" y pasarles algunos argumentos para obtener el resultado buscado. Por ejemplo, aprendimos que la función potencia(b,e) requiere de dos parámetros: base (b) y exponente (e), para regresar el resultado de elevar la base al exponente dado. Todas las funciones que aprendimos en aquella lección se llaman funciones internas porque ya están predefinidas en la mayoría de los lenguajes de programación. Sin embargo, también podemos desarrollar e invocar nuestras propias funciones, a las cuales se les conoce como funciones externas.

Cuando las funciones estándar no permiten realizar la función o cálculo deseado es necesario recurrir a las funciones externas que pueden ser definidas mediante una declaración de función, la cual tiene esta sintaxis:

<tipo_de_resultado> función <nombre_funcion> (lista de parametros o argumentos)
[declaraciones locales]
inicio
    <acciones> //cuerpo de la función
   devolver (<expresion>)
fin_función

En esta sintaxis vemos que debemos especificar varios componentes importantes:

  • El tipo de resultado que nos devuelve la función (si es entero, real, cadena, etc)
  • El nombre de la función con la que la vamos a invocar en nuestro algoritmo
  • La lista de parámetros o argumentos necesarios para la función. Esta lista debe tener un formato similar a este: (tipo_de_dato: argumento1, tipo_de_dato: argumento2...)
  • Las acciones que va a realizar la función con esos argumentos
  • La sentencia devolver, en la cual indicamos cuál es el resultado que va a entregar la función. Esta sentencia termina inmediatamente la función en la cual se ejecuta, por lo que siempre debe estar situada al final, justo antes del fin de la función. Es importante recordar también que una función sólo debe regresar un valor único.

Vamos a imaginar que la función potencia(b,e) no existe y tenemos que programarla nosotros mismos. El algoritmo completo de un programa que solicita al usuario los valores de la base y el exponente y luego muestra el resultado del cálculo, debería verse algo así:

algoritmo calcular_potencia
var
   real: base, exponente, res
inicio
   escribir("Introduce el valor de la base: ")
   leer(base)
   escribir("Introduce el exponente: ")
   leer(exponente)
   res <- potencia(base,exponente)
   escribir("El resultado calculado es: ", res)
fin

real función potencia(real b, real e)
var 
   real: resultado
   entero: i 
inicio
   resultado <- 1
   desde i<-1 hasta e hacer
      resultado <- resultado * b
   fin_desde
   devolver (resultado)
fin_función

Como puedes observar, el pseudocódigo correspondiente a la función potencia se encuentra localizado fuera del cuerpo del algoritmo principal (calcular_potencia). Sin embargo, ese código es ejecutado en el momento que se llama a la función por su nombre y se le pasan los parámetros correspondientes. Observa también que no es necesario que los nombres de las variables que se pasan como argumentos (base, exponente) sean iguales a las variables que recibirán dichos datos en la función (b,e). Cuando hagamos la invocación a la función, los valores se corresponderán en el mismo orden que los pasemos, es decir, el valor de base se asignará a b y el valor de exponente se asignará a e. Por supuesto, si queremos evitar usar tantos nombres distintos, podemos usar los mismos nombres para las variables tanto en la declaración de la función como en su llamada desde el programa principal. En ambos casos el resultado será el mismo. Finalmente, observa que una vez que se ejecuta el cuerpo de la función, se devuelve el valor almacenado en la variable resultado, el cual, al regresar al algoritmo principal, se almacena en la variable res, que es la que finalmente mostramos al usuario. En cierto sentido, para el programa principal, el funcionamiento de la función potencia es una caja negra, pues sólo le interesa que devuelva el resultado del cálculo sin importar cómo se hace.

Mira cómo se ve este ejemplo corriendo en C#:



Ahora veamos otro ejemplo. En el siguiente algoritmo, creamos un programa que utiliza una función para calcular el factorial de un número dado por el usuario. Por si no lo recuerdas, el factorial de un número n, representado como n!, es igual al producto de todos los números que están por debajo de n, incluyendo a este último. Es decir: n! = n * (n-1) * (n-2) * (n-3) ...

entero función factorial (entero n)
var
   entero: i, f
inicio
   f <- 1
   desde i<-1 hasta n hacer
      f <- f * i
   fin_desde
   devolver (f)
fin_función

algoritmo calcular_factorial
var
   entero: n
inicio
   escribir("Dame un número entero: ")
   leer(n)
   escribir("El factorial de ", n, " es igual a ", factorial(n))
fin

Si te fijas bien, en este listado el código de la función está antes del algoritmo principal. Esto también es perfectamente válido (de hecho, algunos lenguajes de programación exigen que se declaren primero las funciones, antes del programa principal). También observa que en este caso no asignamos el resultado de la invocación de la función a una variable, sino que directamente estamos escribiendo el resutlado sin usar una variable intermedia. El usuario nunca verá en pantalla el texto "factorial(n)", sino que verá el resultado del cálculo junto con el resto del mensaje que le estamos mostrando.

Mira cómo funciona este programa en C#:



En este último ejemplo creamos no una sino dos funciones que se llaman mutuamente y trabajan en conjunto para calcular el área de un polígono de n lados.

algoritmo area_poligono
var
   real: n, lado, ap, area
inicio
   escribir("¿Cuántos lados tiene el polígono? ")
   leer (n)
   escribir("¿Cuál es la medida de esos lados? ")
   leer(lado)
   escribir("¿Cuánto mide el apotema? ")
   leer(ap)
   area = area_poligono(n, lado, ap)
   escribir("El área del polígono es de ", area)
fin

real función area_poligono(real n, real lado, real ap)
var
   real: area
inicio
   area = perimetro(n, lado) * ap
   devolver (area)
fin_función

real función perimetro(real n, real lado)
inicio
   devolver n * lado
fin_función

Observa cómo funciona este código en C#:



En estos ejemplos ha quedado en evidencia la utilidad de las funciones como un medio para dividir un problema complejo en pequeños problemas más fáciles de resolver y así llegar a una solución a dicho problema. Sin embargo, las funciones tienen una limitación importante: sólo pueden devolver un valor a la vez. ¿Qué pasa si necesito devolver dos o más valores? Para eso existen los procedimientos, los cuales vamos a estudiar en la siguiente lección. ¡Hasta la próxima!

ACTIVIDADES DE APRENDIZAJE


  • Escribe un algoritmo que use una función creada por tí para encontrar el mayor de dos números enteros dados por el usuario.
  • Diseña una función booleana llamada Digito que determine si un caracter dado por el usuario es uno de los dígitos del 0 al 9
  • Escribe una función que transforme un número entero dado en su correspondiente número romano (nota: limita los números a convertir al rango de 1 a 3999 únicamente)


Enlace: Índice del curso




lunes, 8 de junio de 2015

Tutorial: Codenvy Esencial


Soy usuario de una HP Chromebook desde hace algunos meses y, aunque inicialmente la compré sólo por la curiosidad de conocer el sistema operativo de Google, Chrome OS, poco a poco se convirtió en mi laptop favorita para mis tareas cotidianas: checar Email, Facebook y Twitter, ver videos en YouTube o Netflix y hasta crear documentos usando Google Docs. Una Chromebook es, en general, una PC perfecta para cualquiera que le de un uso normal y cotidiano a una computadora(1).

Pero luego me empezó a surgir la duda sobre la posibilidad de desarrollar software en una de estas máquinas. Yo soy de esos que acostumbra instalar todo un entorno de desarrollo a penas me hago de una PC nueva, pero con una Chromebook la cosa no es tan fácil, dado que las herramientas que suelo instalar para desarrollar (servidor web, mysql, php, sublime text, visual studio, etc) no están disponibles para el sistema operativo de Google.

Así que, investigando sobre herramientas para desarrollar software directamente en la nube y sin salir del navegador, me topé con una de las más completas y potentes herramientas gratuitas disponibles en el mercado, y que además está totalmente recomendada por Google: se trata de Codenvy, un IDE con potentes funcionalidades listas para desarrollar software sin mayores complicaciones.




¿Y qué es Codenvy? Bueno, en esencia es un entorno alojado totalmente en la nube diseñado para codificar, compilar y depurar aplicaciones en distintos lenguajes de programación como Java, PHP, Ruby on Rails, JavaScript, HTML o CSS.

Codenvy cuenta con una gran cantidad de herramientas dedicadas a facilitar la vida del desarrollador de software al permitirle dedicar más de su tiempo a escribir código y menos a la configuración de un entorno de trabajo adecuado. Y es que cuando se pretende desarrollar software debe configurarse primero todo un ambiente de trabajo que, dependiendo del lenguaje y la tecnología en que se pretenda desarrollar, puede convertirse en una tarea bastante tediosa, complicada y propensa a errores.

La propuesta de Codenvy es proporcionarnos ambientes de trabajo preconfigurados de modo que sólo seleccionemos la plataforma en la que deseamos trabajar y nos dediquemos a escribir los códigos correspondientes, dejando que Codenvy se encargue de las configuraciones y las instalaciones previas por nosotros literalmente con un solo clic.

Lo mejor de todo es que Codenvy corre en cualquier navegador y cualquier sistema operativo, lo que hace que la herramienta sea más versátil aún. Con esta característica, podemos acceder a nuestros proyectos y nuestro ambiente de desarrollo completo aún cuando no nos encontremos en nuestra propia computadora. El sueño de todo desarrollador.

En este pequeño tutorial voy a demostrar cómo crear una muy pequeña aplicación con HTML/CSS/Javascript y PHP usando Codenvy .

Primer paso: crea una cuenta.

Crear una cuenta en Codenvy es totalmente gratis. Si bien la plataforma tiene algunos planes de pago, la cuenta gratuita es más que suficiente para un desarrollador que trabaja en solitario o en un equipo pequeño, pues incluye:
  • Espacios de trabajo, proyectos, desarrolladores y tiempo de uso del IDE ilimitados
  • Máquinas virtuales con hasta 4GB de RAM
  • Máquinas siempre encendidas
  • 20 GB-horas gratis por mes (2)
  • Foros de ayuda
También podemos acceder a Codenvy con nuestra cuenta de Google o Github

Registrarnos para una cuenta de Codenvy toma muy poco tiempo dado que no se requiere de un largo y tedioso proceso de registro. Basta con introducir una dirección de correo electrónico, el nombre del espacio de trabajo que queremos crear y hacer clic en Sign Up. Esto enivará un correo electrónico a nuestro buzón en el cual encontramos un enlace para activar nuestra cuenta y listo: una vez confirmada la cuenta, estamos dentro de nuestro espacio de trabajo y podemos empezar a crear proyectos.


Segundo paso: el espacio de trabajo



Una vez que hemos iniciado sesión con nuestra nueva cuenta, nos encontramos con nuestro espacio de trabajo. Su diseño es sobrio y cuenta con varias opciones para gestionar tanto los recursos que consumimos(3) como los detalles de nuestra cuenta. en la parte central encontramos dos grandes enlaces que nos permiten crear un proyecto nuevo o importar uno que ya tengamos creado y que tengamos alojado en algún servicio como Github o incluso en nuestro propio servicio de hosting.

Por ahora nos vamos a centrar en crear un proyecto nuevo desde cero, así que una vez que hacemos clic en Create New Project, podemos empezar a configurar lo que será nuestra primera aplicación web en Codenvy.

Tercer paso: crear el proyecto

Ya dentro del IDE, se nos presenta la ventana para crear un nuevo proyecto. En el lado izquierdo se nos presentan todos los distintos tipos de proyectos que podemos crear: desde un proyecto en blanco para configurar a nuestro gusto como proyectos ya preconfigurados para tecnologías como C++, Java, PHP, Python o Ruby, entre otros. También podemos elegir uno de los muchos proyectos de muestra de las distintas tecnologías para darnos una idea de cómo funciona la plataforma.

Ventana de creación de un nuevo proyecto

Para efectos de este tutorial, vamos a elegir "PHP Project" dentro del apartado de PHP. Daremos un nombre y una descripción a nuestro proyecto, así como un nivel de privacidad y daremos clic en "Next".

Configuración básica del proyecto

Ahora, toca configurar el "Runner", o el ambiente sobre la cual vamos a ejecutar nuestro proyecto. Como pueden ver, Codenvy ya seleccionó por nosotros las configuraciones disponibles para un proyecto PHP. Para este tutorial, vamos a elegir "php56_apache2", una configuración que incluye un ambiente LAMP típico: Un servidor web Apache (corriendo en Linux), PHP y MySQL configurado con una base de datos de prueba (cuyos datos de acceso también se nos proporcionan). Una vez que hagamos clic en "Create", tendremos un ambiente de trabajo listo para recibir y ejecutar nuestros códigos.

Configuración del ambiente de ejecución

Cuarto paso: ¡A codificar!

El IDE de Codenvy cuenta con una gran cantidad de opciones de configuración y herramientas de trabajo. En la parte superior nos encontramos con los menús para acceder a muchas de las opciones y funciones del IDE, aunque por ahora voy a resaltar sólo tres de ellos. En el menú File contamos con opciones para crear nuevos proyectos, archivos o carpetas, así como importar proyectos o archivos de otros sitios. El menú Code cuenta con opciones para deshacer/rehacer nuestros cambios así como una opción para dar formato a nuestro código de modo automático (es decir, agregar algunos espacios, líneas en blanco y sangrías para hacerlo más legible). Finalmente, el menú Run será el que nos permita ejecutar nuestro proyecto para probarlo. Nos vamos a ocupar de ello más adelante.

Los distintos menús del IDE de Codenvy

Vamos a comenzar, pues, creando un nuevo archivo HTML para comenzar a codificar. Para ello, podemos hacer clic en el menú File>New>HTML File, lo cual nos abre una ventana para darle nombre al nuevo archivo. Escribimos un nombre, hacemos clic en OK y listo, tenemos creado un archivo de tipo HTML con una plantilla básica para empezar a escribir nuestro código.

Nuestro IDE en Codenvy, listo para trabajar
Para comenzar a probar las bondades de Codenvy, vamos modificar nuestro código de modo que quede de la siguiente manera:


Si se dieron cuenta al escribir su código, el IDE de Codenvy nos ayuda al momento de escribir nuestro código, cerrando etiquetas por nosotros para que no olvidemos hacerlo (y para que escribamos menos y hagamos más ;) ). Con este código, estamos listos para probar. Para ello, hacemos clic en el menú Run y elegimos el comando Run. Esto va a activar una serie de procesos que veremos en la consola (en la parte inferior), pero no tenemos que preocuparnos si no comprendemos de qué se trata. Lo único que debemos esperar es a que se genere el enlace correspondiente a nuestra aplicación para que podamos verla en tiempo real. Ese enlace de nuestra aplicación aparecerá en la parte inferior del IDE y se verá algo así:


Al hacer clic en el enlace proporcionado, veremos en una pestaña separada nuestra primera página web creada en Codenvy, la cual será algo parecido a esto:

Nuestra primera página web creada en Codenvy
Ahora que ya probamos nuestra primera aplicación, y a fin de no consumir más de nuestros GB-Hora disponibles, vamos a detener la aplicación haciendo clic en el botón "Stop Run" que vamos a encontrar en la orilla izquierda de la Consola:



Quinto paso: hagámoslo más interesante.

Siguiendo el proceso descrito en el paso anterior, vamos a modificar nuestro código HTML y vamos a añadir unos cuantos archivos más para completar nuestra aplicación.

Primero, vamos a hacer que nuestro código HTML se vea algo así:

<!DOCTYPE html>
<html>
<head>
    <title>Tutorial Codenvy</title>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="estilo.css">
</head>
<body>
  <h1>
    Bienvenido al tutorial de Codenvy
  </h1>
  <hr>
<form id="saludar">
     Vamos a probar el código Javascript.<br>
     Por favor dime tu nombre:
     <input type="text" id="nombre">  
     <button type="submit" id="btnSaludar">Saludar</button>
  </form>
  <br>
  <form action="edad.php" method="POST">
    Ahora vamos a probar el código PHP.<br>
    Por favor dime tu año de nacimiento:
     <input type="text" name="nac">  
     <button type="submit" id="btnEdad">Calcular mi edad</button>
  </form>
  <script src="scripts.js"></script>
</body>
</html>


Ahora, vamos a crear algunos archivos adicionales en nuestro proyecto. Crea un archivo de tipo CSS, dale el nombre de "estilo" y captura el siguiente código en él:

body {
  background-color: #F3F3F3;
  font-family: Arial
}

form {
  border: solid silver 1px;
  border-radius: 10px;
  padding: 10px;
  width: 50%;
}

input {
  font-family: Arial;
  font-size: large;
  color: #4D7191;
  border-radius: 5px;
}

button {
  background-color: #009800;
  color: #FFFFFF;
  font-family: Arial;
  font-size: large;
  border: solid green 1px;
  border-radius: 5px;
  padding: 5px;
}

Crea ahora un archivo de tipo Javascript y dale el nombre de "scripts". Escribe este código:

document.getElementById("btnSaludar").onclick = function(){
  var nombre = document.getElementById("nombre").value;
  alert("¡¡¡Hola " + nombre + "!!! Bienvenido al tutorial de Codenvy");
}

Finalmente, crea un nuevo archivo haciendo clic en File>New>File(4) . Escribe "edad.php" como nombre del archivo y haz clic en OK. Escribe el siguiente código en el nuevo archivo:

<?php
$nac = $_POST["nac"];
$edad = 2015 - $nac;
   echo "<script> alert('Debes rondar los".$edad." años, ¿cierto?')</script>";
?>

Una vez que todos nuestros archivos están creados, vamos a tener un ambiente de trabajo que se verá más o menos así:


Este proyecto no tiene funcionalidades demasiado espectaculares. Al ejecutarlo (como ya aprendimos algunos párrafos atrás), sólo veremos una página web sencilla con un encabezado y dos formularios distintos: uno que nos pide nuestro nombre y nos saluda usando Javascript y otro que solicita nuestro año de nacimiento para luego calcular y mostrar nuestra edad mediante PHP.





Lo importante de este ejemplo es ver que todo esto funciona sin que nosotros hayamos tenido que instalar ni configurar absolutamente nada. Una vez creado nuestro proyecto, estará accesible desde cualquier computadora en la que nos conectemos, siempre y cuando tenga una conexión a internet activa y un navegador web.

Este sencillísimo ejemplo a penas roza la superficie de las potencialidades que nos ofrece Codenvy, pero creo que ya nos podemos dar una muy buena idea de la utilidad de esta fabulosa herramienta de desarrollo en la nube.

En tutoriales posteriores trataré de cubrir más a fondo otras funciones como la conexión a una base de datos o la integración con Github, pero creo que por ahora tienen lo suficiente para comenzar a involucrarse con Codenvy y poco a poco ir descubriendo sus increíbles funciones.

Como siempre, espero sus comentarios y dudas respecto a este o cualquiera otro de los posts de este blog. ¡Hasta la próxima!



NOTAS


(1) Si quieren saber más sobre las funcionalidades que ofrece una Chromebook, echen un ojo en la ayuda oficial de Google.
(2) Gigabyte-horas = GB de RAM * Tiempo de uso. Por ejemplo, una máquina que use 1 GB de RAM para correr y depurar aplicaciones durante 2 horas, consume 2GB-Hora.
(3) Para más detalles sobre los términos que se muestran en el espacio de trabajo, den un vistazo al glosario oficial de Codenvy.
(4)  También podemos crear archivos haciendo clic derecho sobre el nombre de nuestro proyecto en la sección "Project Explorer" para obtener el mismo menú que al hacer clic en el menú File>New>File

Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com