Mostrando entradas con la etiqueta Off Topic. Mostrar todas las entradas
Mostrando entradas con la etiqueta Off Topic. Mostrar todas las entradas

jueves, 15 de noviembre de 2018

Consejos para realizar una entrevista de trabajo exitosa


Cuando un estudiante se quiere incorporar a la vida laboral, unos de los primeros problemas a los que se enfrenta son las entrevistas de trabajo. Es un nuevo escenario, con nuevos desafíos, en los que se aplican reglas diferentes a las que está acostumbrado. Como entrevistador y seleccionador en las áreas técnicas, te doy los siguientes consejos:



Llega de cinco a diez minutos antes. ¡Es increíble la poca importancia que se le da a la puntualidad! Si te va a entrevistar alguien de perfil técnico, ten por seguro que esta saturado de trabajo, y que está haciendo un “hueco” para poder entrevístate, lo cual hace tenga que mover sus compromisos. Si llegas tarde puede pasar que no te pueda entrevistar o que lo haga de mala gana. En lo personal me es imposible pensar en otra cosa durante la entrevista, si no tuvo la responsabilidad de llegar a tiempo a la entrevista de un trabajo, me resulta difícil de creer que sea acertado en sus tiempos y compromisos. Considera que llegar tarde predispone al entrevistado en tu contra y es una mala forma de comenzar.

Vístete adecuadamente, según el tipo de empresa que te va a entrevistar. A veces tenemos un estilo propio al que no queremos renunciar, lo sentimos como parte de nuestra identidad, y nuestra forma de ser, y eso está bien, pero lo cierto es que las empresas buscan personal que encajen con su forma de ser, su visión y su política. Si haces una entrevista en un lugar donde la norma de etiqueta es la formalidad, es mejor que busques dicha formalidad en la entrevista. Detalles sencillos como tener atado correctamente los cordones de los zapatos, la camisa colocada apropiadamente, y una imagen de cuidado personal adecuado, ayudan bastante a ofrecer una imagen acertada.

Infórmate muy bien de cuál es el giro y el área de intereses de la empresa que te esta entrevistando, y además intenta que quede patente en la entrevista que tienes dicha información. Los entrevistadores valoran mucho que se conozcan detalles de sus empresas, porque demuestran que el entrevistado tiene intereses y proactividad. No da muy buena imagen que el candidato no sepa nada de “donde esta” y “por qué vino”.

Cuando el entrevistador te pregunte algo, no conteste con monosílabos (“si”, “no”, “no sé”, “puede”), intenta siempre dar una explicación detallada, y que queden claro los “porqués”. El entrevistado quiere conocerte, conocer como piensas y como te desarrollas en un ambiente laboral.

Una de las reglas que asumí hace unos años, es no seleccionar gente que no pueda comunicarse apropiadamente. Para mí es muy importante que puedan interaccionar con compañeros y que quede claro que pueden comprender los requisitos y las necesidades apropiadamente. Tenlo mucho en cuenta, las capacidades de comunicación, son tan importantes como las capacidades técnicas.

Posiblemente te hagan una pregunta estilo “¿Dónde te ves dentro de cinco años?” La pregunta sobretodo es de interés profesional, piénsala bien, incluso llévala preparada. Contesta algo que le haga sentido al entrevistador y tenga que ver con vida empresarial. Hace unos meses un candidato me contesto que quería ser estrella de rock, lo cual es muy loable y sincero, pero fue bastante sorpréndete y sin ninguna relación con el puesto que yo pudiera valoras. El entrevistador siempre buscara algo que le diga que puedes ser una buena inversión a futuro, y que vale la pena apostar por ti. Hazle saber que es así.

Algunas otras preguntas comunes son, “¿Cómo trabajas en situaciones de estrés” y “¿Cómo trabajas en equipo?”. La primera pregunta tiene realmente mala fama, pero lo que realmente quiere saber un entrevistador es si eres capaz de reaccionar apropiadamente en un contingencia. Los sistemas informáticos son muy delicados, sobre todos si estos gestionan dinero, salud o algún tipo de seguridad (de la cual pueden depender incluso el patrimonio o la vida de alguna persona), es importante que en la contestación des algún ejemplo de una situación de estrés (profesional) que hayas vivido y como lograste superarla.

Sobre como trabajas en equipo, lo recomendable es que hables sobre las estructuras organizaciones en las que has trabajado y como te has relacionado en ellas (hablando de tus roles y de roles de las personas del equipo), también aprovecha para hablar de los procesos o métricas que has seguido. Destaca los puntos positivos del trabajo en equipo y los que han sido mas satisfactorios. Si quieres hablar de puntos negativos, es buena idea, siempre y cuando muestres como los superaste y no hables mal de tus compañeros (y jamás de de personas en particular). Una queja excesiva (y poco fundamentada) sobre determinados aspectos o personas puede generar una impresión negativa de tu forma de trabajar un equipo y lidiar con los problemas. Es increíble lo pequeño que es esta industria cuando llevas años trabajo, una vez entreviste a una persona que hablaba muy mal (pero muy mal) de su antiguo jefe, dio la casualidad que su jefe era un antiguo colaborador mío al que tenía en muy alta estima y con el que nunca tuve ningún problema (al contrario), lo cual me genero mucha controversia acerca de la sinceridad del candidato.

Seguramente también te pregunte el por que quieres este trabajo, contesta con sinceridad, pero también comenta aspectos que tengan que ver con tus intereses profesionales, y de crecimiento además comenta aspectos que tengan que ver con la misma empresa, igual puedes comentar intereses personales, pero no los maximices con respecto a los profesionales.

Habla claro de los aspectos tecnológicos que conoces bien, y se sincero con los que no conoces. Nunca digas “creo que si lo conozco”, o “creo que lo conozco con otro nombre”, es muy frustrante para un entrevistador, no poder decir definir que sabes o que no sabes, cualquier cosa que comience con un “creo”, el entrevistador lo va a convertir en un “no sabe”.

Siempre es conveniente tener experiencia en las tecnologías a tratar en la entrevista, si eres estudiante y no la tienes, intenta realizar proyectos personales que te provean de dicha experiencia, si no es posible, intenta tener cursos que demuestren que conoces la tecnología, y tampoco es posible, debes dejar en claro en la entrevista porque tienes las capacidades necesarias para obtener los conocimientos tecnológicos para el puesto, ya sea comparándolos con tecnológicas semejantes, o con desafíos parecidos que hayas superado.

Así pues infórmate bien de los requisitos tecnológicos que requiere el puesto, y aunque algunos nos los conozcas, es muy importante que tengas claros los nombres y para lo que sirve, un entrevistador de calidad, comprenderá que no es posible conocer todo, pero valora que digas cosas como “esta tecnología sirve para esto o aquello, aunque nunca le he manejado profesionalmente”.

Es importante la sinceridad, recuerda igualmente que seguramente habrá una prueba técnica para validar tus conocimientos, si no fuiste sincero el entrevistador se sentida “engañado” y tu credibilidad quedara en entredicho.

Muéstrate orgullo de tus conocimientos pero no seas prepotente, considera que la persona que te esta entrevistando posiblemente no solo sea experto en las tecnologías requeridas, sino en el negocio en las cuales se aplican dichas tecnologías, no te enzarces en discusiones estériles que no llevan a ninguna parte.

Posiblemente se interese por algunos aspectos de tu vida (dentro, claro de los que es prudente y normal). Realza aquellos que tienen que ve con la empresa o con tu profesión. Si te esta entrevistando alguien técnico, seguramente tenga muchos puntos en común, sobre los motivos por los cuales decidiste estudiar o dedicarte a esta profesión, con lo que es un tema para generar empatía y darte a conocer.

Si te ofrecen Café o agua, recházalos a no ser que le entrevistador está tomando algo, y solo acéptalo si dicho café o agua está cerca, por ejemplo si te una botella de agua (y te la dan en la mano), acéptala, eso ayuda a crear cercanía, pero si esto implicara a que el entrevistador tiene que levantarse o prepáralo es mejor no hacerlo.

Si tomaste agua o usaste una servilleta, asegúrate que no lo dejas en la mesa. No manches el lugar de la entrevista, eso da que pensar que eres poco cuidadoso con tu entorno, y con los detalles.

Cuida tu lenguaje corporal. Es bueno que te expreses moviendo las manos, eso da confianza. Si las manos están quietas, dan una sensación extraña, en cambio estarlas mostrado (de una manera no demasiado histriónica), da expresividad y ayuda a explicar las cosas mejor. Pero sobretodo no te muevas continuamente (sin darte cuenta), o comiences a hacer cosas como mover una pierna constantemente, golpear la mesa o mover la silla sin ningún motivo, eso da una sensación de inseguridad, y puede poner nervioso a tu entrevistador.

Unas de las cosas que se valora especialmente es que la gente se interese por el resultado de su entrevista, eso da a entender que es una persona que busca mejorar los aspecto negativos, y que no está esperando que las cosas simplemente pasen.

Espero que estos consejos te ayuden a superar las entrevista futuras con éxito.

miércoles, 21 de diciembre de 2016

Depurar aplicaciones Android en Windows con AMD

En este artículo, voy a apartar un poco la temática general del blog, que es la arquitectura de software, para hablar sobre un problema reciente que he tenido y la solución que encontré.

Hace unas semanas decidí comprar una nueva laptop aprovechando una temporada de ofertas, hacía mucho que no renovada mí equipo y estaba realmente impaciente. Uno de mis principales objetivos era iniciarme en la programación en Android (con Android Studio). Había tenido algunos acercamientos previos, no profesionales, pero esta vez desea poner en serio manos en el asunto.

Vi una laptop de la que me enamore, tenía una memoria impresionante, un procesador más que decente y una tarjeta gracia aceptable, aparte de un teclado y monitores bastante cómodos. Solo había un problema, tenía un micro AMD.

Había oído que los procesadores AMD era muy lentos a la hora de ejecutar aplicaciones en el emulador de Android, pero me dije “¡Ba!, ¿Qué tal lento puede ser, con esta máquina?”. Así que me la lleve a casa. Todo iba como la seda, rapidísimo, hasta que probé el dichoso emulador. Era lento, muy lento… Ridículamente lento. El emulador tardaba horas en arrancar, ¡Horas! Y cuando arranco, no se podía hacer nada, cada movimiento era extremadamente tedioso.





En este punto podía hacer varias cosas [1]:

  • Devolver la laptop, pero ¡Me gustaba mucho!
  • Comprar una solución de pago, como Genymotion, pero no desea gasta más dinero y menos tener que realizar un poco anual.
  • Compra un o varios dispositivo móvil, y debugear en ellos, pero ¡Ey, me acabo de comprar una laptop, no estoy para derrochar!
  • Buscar algún otro emulador (gratuito), que funcione correctamente.

La solución que encontré fue combinar android-x86, un sistema operativo para pc, basado en Android, y Virtual Box (un sistema para gestionar maquinas virtuales). Con ambos sistemas conseguí tener un emulador rápido que se acoplaba perfectamente a Android Studio.

Estos son los pasos para montar un emulador con Android-x86 y Virtual Box.


Habilitar las capacidades de virtualización de tu equipo


Tanto AMD, como Intel, tiene capacidades de virtualización para acelerar el uso de máquinas virtuales, pero por defecto vienen, casi siempre, apagadas. Aunque no es necesario, si es muy recomendable que las habilites para el emulador vaya más rápido.


Conseguir el software


Puedes bajar el android-x86 del siguiente enlace, yo tengo android-x86_64-6.0-r1.iso (Marshmallow), aunque puedes usar la imagen que más te convenga:


Android Studio puedes descargarlo de:


Y por último Virtual Box


Procede a Instalar la maquina Android Studio y Virtual Box


Crea un maquina virtual para Android-x86


Inicia Virtual Box y crea una nueva máquina virtual que contenga Android-x86. Para lo cual haz clic, en “Nuevo”, y proporciona la siguiente información:

  • Nombre: “Emulador Android”
  • Tipo: Linux
  • Versión: Other Linux (64 bits)
  • Memoria: Yo seleccione 1204 Megas, pero ajústalo a tus necesidades y capacidades.
  • Disco duro: Deje el recomendado de 8 gigas.

Y continúa el proceso hasta finalizar.

Inicia la máquina, cuando te pregunte el disco de arranque indícale el archivo ISO que descargaste (en mi caso android-x86_64-6.0-r1.iso)

Nos mostrara el menú inicial, seleccionaremos

Installation – Install Android-x86 to harddisk

A continuación iremos seleccionando las siguientes opciones:

Create/Modify partitions

Do you want to use GPT, indicaremos que no.

Nos aparecerá el menú de particiones del disco virtual, seleccionaremos las siguientes opciones:

New -> Primary

Seleccionaremos Bootable.

Después Write y por ultimo quit.

Seleccionaremos la partición creada, normalmente sda1, y la formateamos como ext4 (confirmarnos el formateo).

Indicaremos que queremos instalar GRUB (yes), que no queremos instalar EFI (skip).

Indicaremos que quedemos nuestra directorio /system de lectura y escritura.

Se procederá a copiar los archivos.


Iniciar la maquina


Una vez realizada la instalación, debemos arrancar el sistema y configurarlo como si fuera un dispositivo Android cualquiera (con cuenta de Gmail y demás).

La primera ejecución puede llegar a ser un poco lenta (varios minutos), pero las siguientes serán aproximadamente, como iniciar un teléfono móvil (si no es que mas rápido).

Por cierto, el sistema de integración del ratón, no es automático, tenemos que seleccionar la opción “integración del ratón”, dentro del menú “Entrada”, cada vez que iniciemos la maquina y usar la tecla <HOST > (por defecto control derecho) para liberar el puntero de la máquina virtual.


Configurar las dimensiones de un teléfono móvil


Al momento de iniciar nuestro nuevo sistema operativo Android, veremos que tiene el aspecto de un monitor, más ancho que alto. El sistema tiene varias resoluciones y todas cumplen ese patrón.

Para poder usar resoluciones propias de un teléfono, es decir más alto que ancho, tenemos que modificar el arranque de nuestro sistema, además de indicar a nuestra máquina virtual que soporte dichas resoluciones.

Las resoluciones que recomiendo para emular un dispositivo móvil, son las siguientes:

  • 320x480
  • 480x800
  • 768x1280
  • 1080x1920

Para hacer posible que la máquina virtual reconozca estas resoluciones, hay que ejecutar en una ventana de cmd, los siguientes comandos (con la maquina virtual apagada):

VBoxManage setextradata "Emulador Android" "CustomVideoMode1" "320x480x16"
VBoxManage setextradata "Emulador Android" "CustomVideoMode2" "480x800x16"
VBoxManage setextradata "Emulador Android" "CustomVideoMode3" "768x1280x16"
VBoxManage setextradata "Emulador Android" "CustomVideoMode4" "1080x1920x16"

Ya que estén habilitadas estas resoluciones, iniciamos nuestra máquina, pulsando en la ventana de inicio de GRUB, la tecla ‘e’, para editar la línea de arranque. En la segunda pantalla, la volvemos a pulsar para entrar en el editor.

Debemos dirigirnos al final de la línea de arranque y agregar la configuración vga=ask. Guardamos y iniciamos la maquina, con la tecla ‘b’, para pulsar enter cuando nos lo solicite.

Aquí vemos la las opciones de resolución posible (para ver más escribimos ‘scan’):


Es necesario apuntar, los números de “Mode” que corresponde a cada resolución nueva, en mi caso son los cuatro últimos y son los siguientes:

Modo
Dimensiones
360
320x480
361
480x800
362
768x1280
363
1080x1920

Estos números están en Hexadecimal, a partir de ahora necesitaremos los mismo números pero en decimal, para convertirlos, puedes usar, por ejemplo, esta página http://www.binaryhexconverter.com/hex-to-decimal-converter

Los valores de mis pantallas en decimal quedarían así:

Dimensiones
Hexadecimal
decimal
320x480
360
864
480x800
361
865
768x1280
362
866
1080x1920
363
867

Apunta bien esos valores por que los vas a necesitar en la sección siguiente


Configurar GRUB, para arrancar en diversas resoluciones


Una vez que tenemos los mencionados números de las resoluciones, debemos configurar GRUB, para arrancar una u otra. Para ello, debemos crear nuevas entraras en su archivo de configuración.

Para poder modificarlo debemos seleccionar, en el arranque de la máquina virtual “Android-x86 6.0-r1 (Debug mode)” (o el modo debug que aparezca) en el menú de inicio. Se nos habilitara un Shell donde podremos escribir comandos (posiblemente tengamos que pulsar enter antes de comenzar a escribir):

Los pasos a completar son:

Localizar el archivo menu.lst, en mi caso está en /mnt/grub/.

cd /mnt/grub

Lo editamos con vi:

vi menu.lst

Tendrá una apariencia como esta:




Nuestro objetivo es que acabe con las siguientes entradas:

default=0
timeout=6
splashimage=/grub/android-x86.xpm.gz
root (hd0,0)

title Android-x86 6.0-r1
kernel /android-6.0-r1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86_64 SRC=/android-6.0-r1
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 320x480x32
kernel /android-6.0-r1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86_64 SRC=/android-6.0-r1 vga=864
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 480x800x32
kernel /android-6.0-r1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86_64 SRC=/android-6.0-r1 vga=865
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 768x1280x32
kernel /android-6.0-r1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86_64 SRC=/android-6.0-r1 vga=866
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 1080x1920x32
kernel /android-6.0-r1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86_64 SRC=/android-6.0-r1 vga=867
initrd /android-6.0-r1/initrd.img


title Android-x86 6.0-r1 (Debug mode)
kernel /android-6.0-r1/kernel root=/dev/ram0 androidboot.hardware=android_x86_64 DEBUG=2 SRC=/android-6.0-r1
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 (Debug nomodeset)
kernel /android-6.0-r1/kernel nomodeset root=/dev/ram0 androidboot.hardware=android_x86_64 DEBUG=2 SRC=/android-6.0-r1
initrd /android-6.0-r1/initrd.img

title Android-x86 6.0-r1 (Debug video=LVDS-1:d)
kernel /android-6.0-r1/kernel video=LVDS-1:d root=/dev/ram0 androidboot.hardware=android_x86_64 DEBUG=2 SRC=/android-6.0-r1
initrd /android-6.0-r1/initrd.img

Tenemos que agregar nuevas configuraciones basadas en la primera y agregar el atributo vga=<valor de nuestra pantalla> por ejemplo vga=865, siendo el numero indicado, el valor en decimal, que se obtuvo en las pantalla de seleccionar resolución (estando en dicha pantalla en hexadecimal).

Para editar un archivo en vi, tenemos los siguientes comandos

Tecla
Efecto
Ejemplo
Esc
Permite introducir comandos
I
Comienza una inserción
dd
Borra una línea completa
Nyy
Copia N líneas al portapapeles
10yy
p
Pega las líneas del portapapeles
:wq
Salva el archivo y sale

A partir de ahora cuando iniciemos nuestra máquina virtual podremos seleccionar la resolución deseada



Ajustar la resolución


Cuando iniciemos la aplicación, nos daremos cuenta que la resolución de Android, es mayor que nuestro monitor, con lo que aparecerán unas scrollbar con la que nos podemos desplazar, lo cual es bastante incómodo.

Para solucionarlo, podemos pulsar la tecla <HOST>+C, hará que sea redimensionable la ventana de Android, con el nuevo problema que se verá con un “aspecto” raro:




Para solucionarlo dimensiona la ventana de la pantalla, fijándote que la figura central quede circular, con eso obtendrás la resolución deseada. Tómalo como referencia, siempre que cambies el tamaño de la pantalla.



Por otro lado el posible que pierdas frecuentemente el uso del ratón, para recuperarlo pulsa <HOST>+c y activa la integración del ratón, para luego volver a pulsar <HOST> + C y volver a la resolución deseada.


Configura la red


La configuración que yo tengo en la red de la máquina virtual de Android es “Adaptador puente”, si tienes por necesidad otra, ve a esta página ver configuraciones adicionales http://www.android-x86.org/documents/debug-howto




¡Vamos a debugear!


Ya casi hemos llegado…

Este es el único paso que vas a tener que hacer cada vez que quieras debugear tu aplicaciones (y hayas reiniciado tu maquina).

Necesitas “conectar” tu maquina física con la máquina virtual Android, para lo cual necesitas conocer la IP de dicha máquina.

En una terminal de Android, teclea ifconfig, y apunta la IP, que te va a dar (suele ser siempre la misma si así configuras tu router, por si más adelante quieres hacer un Shell).


Una vez que tengas dicha IP, en tu máquina de Windows, teclea el comando

adb connect <IP de la máquina de Android>



¡Listo!, ahora podemos iniciar nuestro Android Studio, y comenzar a depurar.





[1] Otra opción no expuesta es usar el emulador en Linux, donde se comparta de forma nativa, con un muy buen rendimiento, prueba que es lo mejor para ti y elije lo que más te convenga.

domingo, 20 de diciembre de 2015

CapicuaGen: Proyecto de generador de codigo

Me encuentro estos días por comenzar mi proyecto de fin de master en "Investigación en ingeniera de software". Después de mucho debatir el tema decidí hacer un producto orientado a la generación automática de código, y a la construcción de software desde un enfoque generativo. ¿Que quiere decir esto? Bueno básicamente que construiremos un software, cuya misión es construir otro software, o mas exactamente el código de dicho software. El generador de código que voy a hacer se llamara CapicuaGen, nombre que elegí de forma aleatoria entre varias opciones, y espero, quizás, publicarlo como GPL (o otra licencia afín). En los siguientes meses iré publicando los avances que vaya haciendo en este tema y según sea posible el código fuente, quizás en GitHub.

Para comenzar, publico la propuesta del proyecto, sobre la que voy a comenzar a construir.

Situación actual


Durante la creación de sistemas empresariales, es común que se den las siguientes circunstancias:

  • Software muy parecido a desarrollos anteriores, pero lo suficientemente diferente para impedir que se reúse software y librerías de una forma clara y consistente.
  • Cortos tiempo de desarrollo.
  • Numero de recursos limitados (tanto económicos como humanos).
  • Equipos que atacan varios frentes que no tiene que ver con el sistema a desarrollar en cuestión (los recursos desarrollando o soportando varios sistemas a la vez).

El resultado de toda esta combinación de factores causa los siguientes problemas en el desarrollo de un sistema:

  • Lentitud en el desarrollo.
  • Retrasó en los tiempos de entrega.
  • Elevación de costos.
  • Multitud de horas extras realizadas por el equipo, lo que a su vez en la motivación de este.
  • Sacrificios en la calidad del sistema, lo que a su vez lleva a fallos en el sistema.

Como conclusión impactamos aspectos relativos al producto en si, como la calidad y el tiempo de entrega, y por otro lado impactamos en el equipo de personas que trabaja en el sistema.

Objetivos


Los objetivos a conseguir son los siguientes:

  • Agilizar la construcción de un sistema a partir del uso de generadores de código, que creen de manera adecuada las características comunes de cada sistema, ensamblándola apropiadamente.
  • Reducir la programación manual de un sistema a los elementos particulares que así lo requieran, esto es, aquellos elementos que son exclusivos del sistema y por lo tanto no están incluidos en otros sistemas.

Con el cumplimiento de estos dos objetivos se espera satisfacer las siguientes necesarias:

  • Aumento de la calidad del software al generarse en parte de forma automática. Los fallos detectados se podrían corregir en los elementos generadores y aplicar automáticamente al código de los sistemas.
  • Los codificadores no perderían tiempo realizando tareas repetitivas y se concentraría en las tareas que realmente da valor al sistema, y no en aquellas que se duplican sistema tras sistema.
  • Reducción de tiempo de desarrollo, en base a la generación de código automático, lo cual a su vez reduce el número de hora extras a desarrollar por un sistema.

Propuesta


Se realiza la siguiente propuesta de solución:

  • Es necesario detectar las características (features) comunes a un sistema, y las posibles variaciones de dichas características.
  • El análisis de dichas características detectadas y sus posibles variaciones, serán incorporados dentro de un generador de código, llamado Generador de características.
  • Los generadores de características serán los encargados de crear el código fuente que implementan las mencionadas características en base a una configuración sobre su variabilidad.
  • Los generadores de características deben ser independientes unos de otros, aunque pueden tener una serie de interfaces con las que exponer servicios a otras características, con el menor acoplamiento posible (debe ser lo más independientes posible).
  • La configuración de la variabilidad debe ser lo más versátil posible, si en una primera versión se uso XML, se intentara usar Ruby como lenguaje de configuración, parecido a la configuración de los archivos RakeFile o a un archivo podFile de CocoaPods.
  • Igualmente la generación de un sistema se llevara a cabo mediante la agrupación de varios generadores de características, que interactúan entre sí, para crear el código de dicho sistema.
  • La configuración, tanto del sistema, como de la variabilidad del sistema deben hacerse a través de una interfaz grafica que facilite dicha tarea.
  • Cuando se genera el código de un sistema, es necesario considerar que el sistema no puede generarse en un 100% de forma automática, por lo que habrá una parte del sistema que será creada automáticamente, y otra parte que lo creara el programador. Es importante que el generador reconozca la parte creada manualmente por el codificador y no sea reemplazado su código en ninguna circunstancia.
  • La creación de generadores de características en sí, es construida de forma manual, y se crean en parte a base de plantillas de código y analizadores de código, realizados en Ruby
  • Estos generadores de características una vez creados, podrán ser usados por varios programadores, con lo que se creara un repositorio centralizado en los que los programadores puedan subir sus generadores de características, o bajar los generadores de característica creados por otros programadores, algo parecido a las gemas de Ruby.
  • Hay que considerar que el generador de características, genera código, esa es su funcionalidad, es decir en ningún caso son librerías o framework a usar en nuestro código, sin embargo el código generador si puede usar librerías o framework externos.
  • Unos de los objetivos de generar el código, es aumentar la calidad del sistema, haciendo que el código generador implemente patrones de software, así como estándares y mejores prácticas de programación.
  • Hay que considerar que si tenemos un sistema generado con una versión de un generador de características y descargamos una nueva versión de las características podemos volver a generar el código y aprovechar las nuevas mejoras y cambios de esta versión.

miércoles, 28 de octubre de 2015

Cuestión de confianza III: ¿Dónde están los malos?

Los “malos”, son personas individuales, o mafias que se dedican a buscar sujetos o entidades vulnerabilidades para poder obtener nuestros datos personales o financieros, con intención de lucrase con ellos. En algunos caso puede que no exista lucro, solo existe el afán de hacer daño, de perjudicar o de exponer información de nuestra vida que nos hacen sensibles a ataques futuros, como datos sobre nuestra salud, dinero o familia.

Ahora bien, ¿Dónde están los malos?

Hay una reglar sencilla para tener claro que elementos debemos proteger, por que allí están los intrusos. La regla es:

¡¡¡Los malos están en todas partes!!!

  • Están del lado del Usuario: Pueden usar técnicas de ingeniería social, tener acceso a los medios de autentificar del usuario, o atacar directamente la computadora de la víctima.
  • Están en las comunicaciones: O bien analizándolas o falseándolas para que pensemos que estamos operando directamente con nuestros servidores o sitios web, cuando no es así.
  • Están en el servidor: Empleados que tiene acceso a información privada o secreta, y que solo se confía en su "buena" fe para que no usen sus privilegios de forma maliciosa o bien software pernicioso que explota la información directamente de los servidores bancarios.
  • Están en lo servidores adicionales: Además de lo mencionado anteriormente, es posible que aplique solo la seguridad en los puntos de entrada de la red, y se deje toda una intranet desprotegida, confiando en que estamos protegidos de ataques del exterior. La seguridad se debe incluir en cada uno de los elementos de nuestra infraestructura.

miércoles, 21 de octubre de 2015

Cuestión de confianza II: Factores de autentificación.


La autentificación es una de las partes más delicadas de implementar en un sistema, básicamente consiste en asegúranos que la persona que se contacta a nuestro sistema es quien dice ser, pero no solo eso sino que los usuarios puedan garantizar que se están conectando a nuestro sistemas y no a ningún otro que se haga pasar por este.

Acerca de los factores de autentificación


Los factores de autentificación son maneras de clasificar los métodos posibles en los que basar la autentificación a nuestros sistemas.

  • Factor 0: Algo la empresa que ofrece el servicio conoce y el usuario debiera conocer. Se aplica, por ejemplo, haciendo preguntas por teléfono, en el que el operador telefónico conoce las preguntas (mediante un script), pero no las repuestas (o por lo menos no todas, porque su veracidad debe ser resulta por el  sistema informático). Es importante que el usuario sea el que inicie la comunicación telefónica siempre y en ningún caso contestar preguntas cuando es el usuario el que recibe la llamada del teléfono, puesto que no sabemos quién nos está llamando realmente, lo cual podría ser un fraude para conseguir nuestros datos personales. En lo general conviene evitar este tipo de autentificación, aunque generalmente no es posible porque necesitamos una atención personalidad.
  • Factor 1: Algo que el usuario conoce y que proporciona para acceder a su servicios, es esta categoría entran los password y los NIP, que deben estas compuestos con una fortaleza mínima, y que idealmente no conoce la institución, pero conoce los medios posibles de validarlo (por ejemplo con password encriptados no reversible, como SHA512).
  • Factor 2: Contraseñas dinámicas generadas por medios electrónicos, aquí entra el papel de los Token,  los cuales son dispositivos hardware (o aplicaciones moviles) que en base al tiempo, generan  un número (exclusivo para el usuario) que sirve para que autorice una operación en el sistema (y solo una), una vez que la ha autorizado, necesitara un nuevo número de token, para nuevas operaciones. Esto es "Algo que tiene el usuario", en este caso el dispositivo físico
  • Factor 3: Medios biométricos (“Algo que el usuario es”), Alguna característica física propia del cliente en si, como su huella dactilar, o patrones en la retina, etc.

Lo recomendable es usar un doble factor de autentificación. Combinamos un factor de seguridad, junto con otro, lo más común es combinar el factor 1 (contraseña), con el factor 2 (token).

De esta forma aunque alguien se adueñe de nuestras contraseñas, será incapaz de realizar ninguna operación en nuestro sistema por no poseer el número de token que le da acceso.

Todo esto en la práctica: Ejemplo con Gmail



Google ofrece un sistema de autentificación en dos pasos, que consiste de un sistema en el uso de la contraseña del usuario de una cuenta de Google, y adicionalmente un Token, que puede ser un token  basado en el tiempo o basado o un Token SMS.

Se activa desde la configuración de GMAIL



Se activa mediante un Token SMS que llega al celular registrado


Una vez autentificados nos pedirá que indiquemos la pantalla


Y mediante la lectura de un QR, queda instalada la clave simétrica en un celular



Desde este momento podremos usar la autentificación en dos pasos:



Ventajas de este token:

  • Es gratis
  • Se basa en estándares y algoritmos públicos

Desventajas:

  • Está pensado para los productos de Google, o aquellos que usan sus servicios.

jueves, 8 de octubre de 2015

Cuestión de confianza I: Criptografía


Es curioso como casi todos los elementos en los que se basa en internet se crearon de una manera más o menos insegura en la que cada elemento viajaba por la red si ningún tipo de protección, libres para que cualquiera pudiera leer su contenido. Esto fue así, hasta que entro en juego la criptografía.

Muchas veces la gente no es consciente de la información personal, privada y secreta que viaja a través de sus computadoras o celular, o si lo es no le da importancia requerida. El tema es que es realmente importancia limitar el acceso a nuestra información, porque nunca sabemos que consecuencia podría tener que un extraño acceda a nuestro teléfono, nuestras fotos o mensajes, lo que para nosotros es inofensivo para otras personas abren posibilidades de extorsión o estafas en contra nuestra.

La criptografía garantica que solo nosotros (u otras personas autorizas) puedan acceder a nuestra información, de forma que sepamos que lo que sale de nuestros dispositivos, está debidamente protegida, y es confidencial.

La criptografía es un conjunto de técnicas y métodos en que los que un mensaje origen (o en claro) con información confidencial, se convierte en otro sin aparente significado y que puede viajar por medios no seguros, con la tranquilidad de que el mensaje original no podrá ser descubierto, sin aplicar los correspondiente métodos criptográficos sobre el mensaje original.

La criptografía existe desde hace muchos siglos, siempre asociada al envió de mensaje secretos entre dos partes. Algunos sistema de criptografía antiguos, se basan en la ocultación del método criptográfico. En los sistemas criptográficos modernos, el método de inscripción es público (o podría serlo sin comprometer la seguridad) y al mismo tiempo poseen una clave de encripción que debe ser secreta, y que si la cual aunque tengamos el algoritmo y el mensaje cifrado, no conseguiremos tener el mensaje original.

Una excepción al tema de claves de encripción son los algoritmos de hash donde la información se encripta de forma no reversible, sin necesidad de una clave o llave de encripción, en una cadena de longitud fija tal que así:

Original: “ESTE ES MI PASSWORD”

Este es el hash creado: ed85e76ecad699fdb1bfa36876f35e665a3105750f0af9c4d6bbfc80a3b664a1

Debido a que es imposible partir del hash y llegar al original, Esta es la forma ideal para almacenar password, ya que incluso cuando la base de datos de los usuarios se viera comprometida (por ejemplo que se robara) no supondría un problema, porque no se podrían averiguar los password.

Al margen la autentificación anterior, se dan principalmente dos tipos de criptográfica.

Criptografía simétrica


Tanto el recepto del mensaje encriptado, como la persona que encripta, usan la misma clave de encripción para realizar sus operaciones. Algoritmos que lo usa son por ejemplo AES (Rijndael).

Las ventajas de este método son:
  • Es la practica tiene una velocidad aceptable
  • Es muy seguro

Las desventajas:
  • La principal desventaja es que un usuario genera la clave y tiene que pasársela a otro usuario, lo cual podría comprometer la conexión desde un inicio

El hecho que compartan la misma clave, es un problema, el único que tiene este tipo de criptográfica, porque ¿Cómo se hace que el usuario final y destino tengan la misma clave?, solo enviando la clave por un medio que sea seguro, para garantizar que nadie más la tiene, pero precisamente necesito intercambiar la llave porque no tengo un medio seguro para enviar información.

Criptografía asimétrica


Consta de dos claves, en lugar de una, llamadas clave privada y clave pública, la clave pública sirve para encriptar, y es de libre acceso, la clave privada para desencriptar y solo la tiene una persona (la que genero las claves). Además la privada sirve para firmar mensajes y garantizar que la persona que la usa es el dueño de la clave.

En la práctica funciona así: Una persona genera (a través de un algoritmo) una clave privada y pública (que se complementan entre sí), se queda para si la clave privada, y distribuye la clave pública (a quien desee), a partir de ese momento, quien desee mandarle un mensaje encriptado, puede hacerlo usando la clave pública, y solo el podrá desencintarlo usando la clave privada. Igualmente si él quiere mandar un comunicado y garantizar su autenticidad, podrá firmarlo con su llave privada, y todo aquel que tenga la llave publica, podrá validar su origen.

Algoritmos que implementan esta tecnología son por ejemplo RSA o DSA.

Las ventajas de estos algoritmos son:
  • Seguridad en cuanto al custodio de las claves (nunca se difunde la clave privada)
  • Seguro en cuanto los mecanismo de inscripción

Las desventajas:
  • Increíblemente lento

En esta criptografía se resuelve el problema de la llave compartida, puesto que al haber dos llaves, se puede distribuir libremente la llave pública (a cualquier persona) para encriptar, y la permanecer debidamente custodiada la llave privada para desencriptar. Así por ejemplo dos personas (o entes), pueden iniciar una comunicación segura, simplemente intercambiando sus llaves públicas y usando sus llaves privadas para desencriptar.

Debido a que la criptografía asimétrica es realmente lenta, en lugar de encriptar un mensaje completo, se genera una llave simétrica aleatoria, con la que se encripta el mensaje y se envía el mensaje encriptado y adjunto con la llave simétrica encriptada (ahora sí) con la llave asimétrica publica, lo cual garantiza la velocidad y la confidencialidad.

Certificados digital


Cuando recibimos un mensaje firmado con una llave privada, podemos validar su autenticidad con nuestra llave pública. Esto quiere decir que podemos garantizar que la persona que tiene la llave privada es la se está comunicado, con nosotros, puesto que debe coincidir con la llave publica que nos proporcionó.

Hay que agregar que la firma es diferente por cada mensajes, por lo que garantiza no solo que el mensaje fue enviado por quien tiene la llave privada, sino además que el mensaje no ha sido modificado en el cambio.

Un detalle importante es que solo garantiza eso, es decir que el mensaje fue firmado con la llave privada, pero no garantiza que esa firma electrónica pertenezca a una persona en particular. La firma podría ser de cualquier persona, y haberse generado en cualquier momento.

Para garantizar además que la firma privada pertenece a una determinada persona o entidad, se usan los certificados, que bien pueden identificar a una persona o a un ente como una empresa o un banco.

Pero, ¿En que consiste exactamente un certificado? Imaginemos que yo quiero comunicarme (a través de una computadora) con otra persona o entidad, por ejemplo una tienda. Con el uso de llaves públicas (y privada) garantizo que la comunicación es confidencial entre ambos, pero de ninguna forma garantizo que esa llave pertenezca a la tienda, pero igualmente imaginemos que existe un tercer elemento, un ente en el que confiamos los dos (la tienda y el usuario), que garantice que esa llave privada pertenece a la tienda, ¿Cómo lo puede hacer? Dando por supuesto que yo confió en el tercero, que se llama entidad certificadora, esta firma (con su propia llave privada), la llave publica y demás información de la tienda, posterior a que valide la identidad de la tienda (mediante documentos, escrituras, registros de empresa, visitas en persona). En este punto ya tenemos un certificado, que contiene la llave pública, y que está firmado por alguien en el que confiamos que ha validado correctamente la identidad de la tienda, de esta forma queda ligada la identidad con la llave pública.

¿Quién son esas entidades certificadoras y por qué confiamos en ella? Son grandes empresas cuyo servicio es precisamente ese garantizar la identidad de entes y personas, y son aceptadas a nivel mundial como VERISIGN, o incluso gobiernos o entidades gubernamentales que realizan dicha función.

¿Cuál es proceso para generar un certificado?

  1. Se genera un par de llaves (pública y privada)
  2. Se realiza una petición de generación de certificado en base a la clave pública, y a los datos de la empresa (y los host que queremos certificar).
  3. Se envía la petición a una entidad certificara, que realizara los pasos necesarios para garantizar que somos la empresa para la cual estamos pidiendo los certificados, y una vez garantizado nos expedida dicho certificado.
  4. En nuestro servidor podemos unir la llave privada con el certificado, y en base a eso configurar nuestros servidores para que lo usen apropiadamente

Nuestro clientes al conectarse a nuestros servidores descargaran el certificado (con la llave publica), y al estar firmado por la entidad certificadora (en la confiamos), asumiremos que el servidor al que nos estamos conectando es el correcto. Igualmente si no está firmado o lo está por alguien en que no confiamos seremos advertidos de esta situación, y estará en nuestra decisión continuar la comunicación con dicho servidor.

¿Qué ocurre cuando queremos generar un certificador de pruebas?


Es posible que los certificados se firmen a sí mismos, como si fueran una entidad certificadora, estos se llaman certificados autofirmados.

Por otro lado es posible que firmemos un certificado a través de otro certificado, por ejemplo puedo firmar todos los certificados internos de una empresa, con un mismo certificado, y configurar en los ordenadores de la empresa, el certificado firmante como entidad firmante de confianza. A partir de este momento todos los certificados firmados con aquel, serán de confianza.

martes, 14 de julio de 2015

La evolución de los videojuegos hasta convertirse en servicios


La siguiente entrada es un extracto de un texto perteneciente a una actividad calificable del master “Investigación en Ingeniera del Software” que me encuentro actualmente cursando, exactamente para la asignatura “Arquitecturas Orientadas a Servicio”.

En este extracto hablo sobre como los evolucionaron los videojuegos desde un modelo basado en el producto físico a un modelo de distribución basado en servicios.


La industria de los videojuegos en los 80 y parte lo de 90, estuvo ligada a los soportes físicos, principalmente por cartuchos especiales para cada consola. Quien tuviera el cartucho era el dueño del juego, y tanto juego, como soporte físico eran inseparables. En los 90 se popularizo el uso de discos compactos (CD), formatos ópticos, sin componentes adicionales, que eran más fácilmente transportables y almacenables. Como efecto del cambio de formato, apareció la copia de juegos entre usuarios, con lo que el producto estaba cada vez más separado del soporte físico en sí. El tema de las copias de los juegos, que no reportaba ningún beneficio a las empresas de videojuegos, tuvo curiosamente un efecto inesperado, las consolas cuyo juegos se podían copiar más fácilmente, como la Sony PlayStation, se acabaron imponiendo sobre otras en los que eran más difíciles, como la consolas de Nintendo o las de Sega.

Imagen extraída en Wikipedia


Aunque el beneficio de la venta de consolas, por los motivos antes citados, no podía duran indefinidamente, puesto que en algún momento la creación de videojuegos debiera ser retribuible.

Paralelamente al desarrollo de videojuegos de consolas, en el mundo de las computadoras personales, se comenzó a aprovechar conectividad de estas a las redes locales, para dar una experiencia interactivas entre varios usuarios (usando por ejemplo el protocolo IPX), y posteriormente sobre internet (sobre el protocolo TCP/IP). Lo juegos comienzan a ofrecer interacción entre usuarios, y aunque el juego dista mucho de ser o ofrecer servicios, se marca de alguna forma el camino en que se posteriormente se liberan los juegos y su relación con Internet.

En el año 2003, comienza a originarse un nuevo formato de distribución de videojuegos. Valve, creadora de HalfLife (popular video juego de finales de los 90), decide cambiar su modelo de venta de software, prescidiendo de los empacadores y distribuidores de software (aquellos que ponen su software en discos y cajas y lo llevan hasta las tiendas físicas para su venta) y vender a través de internet, directamente al usuario, sin intermediarios. Para ellos crearon un programa llamado Steam, que a través de una cuenta de usuario, se pueden comprar videojuegos, e instalarse automáticamente desde internet. En el caso que perdiéramos (o borrásemos) la descarga del juego, al estar asociada a nuestra cuanta de usuario, podemos volver a descargárnoslo, con lo que el soporte físico queda obsoleto y se vuelve prescindible. Aun mas, el software se actualiza automáticamente y sin intervención del usuario, con lo que prácticamente tenemos un software donde podemos tener acceso a otros software (en este caso videojuegos), en los que no tenemos que preocuparnos por instalar o actualizar ningún componente (el sistema de encarga de ello) y al que podemos acceder instantáneamente. Se ven aquí los primeros indicios de software como servicio.

El modelo de Steam ha tenido un éxito creciente a lo largo de los años. Otros creadores de videojuegos se unieron a esta tienda para poder ofrecer sus productos de una forma rápida y sencilla al usuario, además de abaratar costos. Era una plataforma ideal tanto para nuevos lanzamiento, como para distribuir viejos videojuegos descatalogados y poder seguir obteniendo beneficios económicos de ellos.



Si bien ya tenemos un escenario donde es sencillo obtener software. Steam siguio creciendo para proporcionar servicios que permiten que interactúen los videojuegos de diversas formas con los usuarios, y también permite a los usuarios interactuar entre ellos.

Entre los servicios ofrecidos para los usuarios están los siguientes:

  • Voice Chat: Chat de voz durante y fuera de las partidas para los jugadores.
  • Acceso desde cualquier computadora: El usuario no está atado a un computadora, los videojuegos están atados a la cuenta de usuario, y este podrá ejecutar estos desde cualquier computadora donde use su cuenta.
  • Steam Cloud: Permite, a los juegos que sean compatibles, guardar datos en la nube, en lugar de en la maquina del usuario. Por ejemplo los juegos pueden guardar partidas en la nube y el usuario puede continuar dichas partidas en maquinas diferentes, esto quiere decir que el usuario ya no depende de una maquina fija y concreta para su datos. Aquí vemos como uno de los principales punto de los servicios, la movilidad, se cumple.
  • Gestión del perfil del usuario.
  • Gestión de Contenido descargable.

Los servicios dedicados a los desarrolladores de software son los siguientes:

  • Sistema antipiratería.
  • Sistema de actualizaciones automáticas para los productos.
  • Reportes de venta de los productos.
  • Control de ejecución por territorio.
  • Gestión de días gratuitos e invitaciones.

El concepto de tienda e interacción entre usuarios a través de servicios, continuo en las consolas domesticas, siendo estas cada vez más dependientes de internet para realizar sus operaciones

Xbox de Microsoft, creo el servicio Xbox Live, para permitir el uso de varios jugadores simultáneamente conectados a internet, Skype para servicios de videoconferencia, compra de videojuegos en línea, además de compra y gestión de contenido descargable y por ultimo gestión de perfiles de usuario en línea. De forma semejante, Sony creo PlayStation Network (PSN) y Nintendo su red Nintendo Network.






Si bien el consumo de los videojuegos a través de las consolas se ha popularizado en los últimos años debido a la creación de nuevo hardware cada vez más potente y de cierta manera más accesible. La verdad es que fue a través de otros formatos donde los videojuegos llegaron al gran espectro de los posibles usuarios. El uso general de los videojuegos se popularizó entre sectores que nunca habían jugado en un videojuego, a través de los tablets y teléfonos inteligentes.

Videojuegos sencillos (y muchas veces basado en temáticas de antiguos juegos), se hicieron muy populares en teléfonos inteligentes y en otros medios como la red social Facebook, entre los cuales están (por poner algunos ejemplos):

  • Candy Crush Saga (y derivados)
  • Plantas vs Zombies
  • Angry Bird (y derivados)

Estos videojuegos se pueden obtener de las distintas tiendas de Android y iOS (entre otros). Y cada uno tiene características orientas a servicios, y principalmente consumen a su vez servicios, para ofrecer su funcionalidad, estas características son:

  • Se pueden obtener desde internet, de forma sencilla, así como su actualizaciones (el software siempre esta actualizado sin intervención o con poca del usuario), algunos son gratuitos, o con micro pagos (pagar cierta cuotas para obtener mayores funcionalidades en el programa).
  • Algunos se asocia a una identidad que proporciona otro servicio, por ejemplo es posible asociar Plantas vs Zombies a un perfil de Google+, igualmente se puede asociar Candy Crush a un perfil de Facebook. Esto se hace por que ambos sistemas esta preparados para consumir un servicio de autentificación de las mencionadas redes social. Con lo que es están ligando dos servicios diferentes, por un lado los videojuegos, por el otro las diversas redes sociales.




Adicionalmente el servicio de Google Play proporciona un perfil común, para que puedan ser consumirlo como servicio por los jugos que así lo deseen.


Se puede jugar en múltiples dispositivos siempre y cuando el perfil sea el mismo, el usuario podría comenzar por ejemplo una partida de Candy Crush en Facebook, y posteriormente continuar su avance en su teléfono móvil. En este punto vemos otra característica de los servicios como la movilidad, es decir los juegos no están asociados un dispositivo físico en especial, sino que son trasportables.

Lo usuarios pueden interactuar entre sí a través del mismo juego o de entras plataformas, por ejemplo es normal ver notificaciones y interacciones de diversos juegos en Facebook, a la vez que dentro del los mismos juegos es normal ver el avance de nuestro amigos de Facebook.



Imagen de Candy Crush Soda, en Facebook y en Android

Es esta entrada hemos visto como los videojuegos se apoyan cada vez en servicios, para ofrecer una experiencia de interacción y colaboración entre distintos usuarios y en el mismo juego, a la vez en la que es cada vez más común ver cómo se va progresando entre un formato físico para distribución a uno completamente digital y a demanda del usuario.

jueves, 2 de julio de 2015

Google, casos de éxito y de fracaso de sus servicios y productos


La siguiente entrada es un extracto de un texto perteneciente a una actividad calificable del master “Investigación en Ingeniera del Software” que me encuentro actualmente cursando, exactamente para la asignatura “Arquitecturas Orientadas a Servicio”.

En este extracto hablo de la evolución de Google y el enfoque se sus productos hacia una arquitectura orientada a servicios.





Google comenzó su andanza en 1998, con una simple pantalla blanca, su logo, un cuadro de texto y un par de botones para buscar en internet. A pasar de lo sencillo de su apariencia y la competencia de buscadores emergentes (mucho más sobrecargados) que existían a final de los noventas, tuvo un gran éxito, el cual aumento en los años posteriores a su lanzamiento. El secreto de su éxito fue su misma sencillez, y un algoritmo realmente potente que sabia como organizar las paginas para entregar los resultados más relevantes para el usuario en los primeros lugares de la búsqueda.

Durante los años siguientes Google desarrollaría una seria de productos y compraría otros, creando un ecosistema de servicios que interactúan entre ellos y que son ofrecidos al usuario. En la mayoría de las veces de forma gratuita.

Al principio Google guardaba preferencias y comportamientos del usuarios a través de cookies que guardaba en el navegador de la maquina donde accedía el usuario. Esto permitía seguir la actividad del usuario y personalizarse a sus gustos, pero de forma temporal debido a la duración de la vida de la cookie, además que dichas personalizaciones solo podría accederse desde una maquina, y no llevarse a otras. Todavía distaba mucho de acercase a una arquitectura orientada a servicios.

Uno de los primeros servicios de Google fue iGoogle, un portal donde el usuario podría configurar la apariencia de la página de inicio de Google, para agregarle Gadgets, y a través de estos agregar funcionalidad al portal de diversas formas, como reporte del clima, juegos sencillos o noticias, Además permitía a terceros crear Gadgets, y modificar la funcionalidad de la pagina. De esta forma y mediante la composición de servicios, se creaban a su vez nuevos servicios y nueva funcionalidad. Si bien este servicio era interesante Google decidió cerrarlo, apuntando a que ya no resultaba útil frente a otros tipos de servicios. La verdad es que le daba una apariencia semejante a sus competidores, y hacia que Google perdiera parte de la identidad basada en la sencillez. El servicio se abrió en el año 2005 y se cerró en el 2012.







En el 2004, se dio el lanzamiento de Gmail, al cual solo podría accederse mediante invitación, y estuvo en fase de beta hasta el año 2009 (aunque desde algunos años antes ya no era necesaria la invitación). El correo tenía varias características sobresaliente con respecto a sus competidores, como por ejemplo un destacable espacio para guardar los email, y un poderoso filtro antispam. El correo fue ofrecido de manera gratuita para los usuarios normales, para las empresas se ofrece un servicio especial de correo, Google Apps for Work, que proporciona correos empresariales del estilo miempleado@micompañia.com, pero la gestión de esta es llevada por Google y no por la empresa en sí. Pudiendo acceder a nuestro correos desde cualquier lugar, además de poder acceder a cualquier servicio de Google desde esta cuenta.





Imagen extraída de Google Apps for Work

La cuenta de usuario de gmail, se convirtió desde entonces en la piedra angular que nos permitía acceder a sus herramientas. A partir de su estandarización, cada servicio o software, que crearon o comprado, le integraron una autentificación a través de la cuenta y clave de gmail, de esta forma con una sola cuenta, se podía acceder a todo lo que nos ofrece Google.





A continuación haremos una breve descripción de los servicios ofrecidos por Google, así como la relación que guardan entre ellos, y analizaremos el éxito o fracaso de cada uno de ellos

Google Maps


Es una herramienta de mapas, creada en el año 2005, ha pasado por varias revisiones, evolucionando cada vez más hasta el punto de llegar a superar en cuanto a precisión y funcionalidad a los creadores de mapas digitales tradicionales como por ejemplo TOM TOM, y otros.

A parte de las funciones típicas que se esperan de un servicio de mapas digital, como calculo de rutas, posiciones y navegación, además de una base de datos de localizaciones, Maps ofrece las siguientes funciones:

  • Servicios para crear aplicaciones basadas en la ubicación del usuario.
  • Uso del servicio de mapas en aplicaciones móviles de terceros.
  • Creación de mapas personalizados: Es posible establecer ciertas características personales a nuestro mapas, como rutas concretas, formas especiales de visualización (incluyendo las posibilidad de agregar datos propios de Street View, como interiores),
  • Decisiones e información basada en ubicaciones creadas por el usuario: Como por ejemplo la "casa" del usuario, su "trabajo", otras. Algunas aplicaciones como Google Now, nos muestra por ejemplo a través de Maps, el tiempo que falta para llegar de nuestra casa al trabajo, en base a otro servicio que informa de la cantidad de tráfico, por ejemplo.
  • Integración de los mapas en nuestras páginas web.

Google News


Es un servicio que recorre diversas páginas web de noticias de diversos medios, y las agrupa en formato consistente para el usuario, mostrando lo que más podría interesarle, teniendo en cuanta además su ubicación. El servicio puede consumirse desde su misma página web y de forma más cómoda desde un dispositivo móvil





El éxito o fracaso de este servicio, depende de un factor ajeno a él y a su como tecnología, y es la legislación de cada país con respecto al consumo de noticias por parte de Google. Algunos medios consideran que al mostrar (aunque sea un enlace, junto al resumen) información de sus páginas, es consumir su propiedad intelectual, y por lo tanto Google debiera hacer un pago por dicho uso, algunos medios cifran en grandes cantidades dichos pagos. En España por ejemplo se creó la "Tasa Google" que obliga a pagar a paginas por enlazar contenido en la red con propiedad intelectual. Esto implica que Google News deba pagar a las páginas de las cuales muestra noticia, sin embargo la misma popularidad de Google, hacia popular al resto de las paginas que enlazaban, y aumentaba el número de visitantes que veían sus noticias, sin los enlaces de Google, las visitas a dichas paginas disminuirían, y por lo tanto sus ingresos derivados de dichos conceptos. Los periódicos y proveedores de noticias, que impulsaron este ley demostraron un poco conocimiento sobre cómo funciona internet y como obtener beneficios de esta, ciñéndose a un modelo de recolecta de dinero, obsoleto pero más tradicional, que a la larga les va a reportar perdidas.

Google decidió cerrar el servicio en España y algunos países de la unión Europea (para evitar tener que pagar la tasa), con lo que dichas noticias y periódicos son inaccesibles desde Google News, suponiendo una perdida para los usuarios de estos servicios y para los mismos periódicos.

La continuidad (y éxito) de este servicio depende de si se aplican esas nuevas leyes y tasas en nuevos países, y la forma en la cual se apliquen.

Google Reader






El producto Google Reader que estuvo vigente desde el 2001 al 2013, era un lector de fuentes RSS (Really Simple Syndication, un formato XML para compartir contenido, que nos avisa sobre actualizaciones sobre páginas web) , durante ese tiempo paso por varias revisiones mayores cambiando parte de sus funciones y interfaz grafica. Existía como servicio accesible desde una página web y como aplicación para teléfonos móviles.

Pese a que fue una aplicación y servicio excelente, además de tener cierta popularidad, el servicio fue discontinuado. Existe varias teorías sobre porque Google decidió prescindir de este servicio, una de ellas, es que al tener tantos servicios Google, algunos realizan funciones parecidas, en este caso Google podría hacer preferido que se compartieran contenidos a través de Google+ y no a través de Google Reader, con lo que quito los servicios que le podrían restar popularidad.

YouTube






YouTube fue un servicio creado en 2005, que permitía visualizar y compartir videos, a finales del 2006, fue comprada por Google, después de que esta liberara de forma poco exitosa su propio servicio de videos llamado Google Video.

A pesar de su popularidad, no obtuvo beneficios, hasta que Google supo como rentabilidad el sistema, a través de publicidad, convirtiéndolo un negocio de gran éxito.

El servicio permite compartir videos a través de redes sociales, visualizarla en páginas web de terceros, y agregar comentarios a los videos.

Pese a ser una servicio que enlaza contenido protegido con derechos de autor, y haber tenido en su historia varias demandas con las distribuidoras de estos contenido, ha sabido lidiar con ellas, y con esta situación, convirtiéndose en una referencia para la compartición de videos, tanto para particulares, como para empresas privadas.

Google Plus






Google Plus es una red social creada por Google en el año 2011. A través de esta red social Google da acceso a algunos servicios, para compartir contenido entre sus usuarios. Los usuarios pueden:

  • Compartir comentarios, videos y fotografías entre ellos de forma privada o pública.
  • Tener acceso a conversaciones de video, audio o texto entre ellos, por Handouts.
  • Acceder a fotografías del usuario: Estas fotos pueden ser cargadas como un backup de un dispositivo Android, o fotografías de Blogger.
  • +1: Es parecido a "me gusta" de Facebook, permite indicar desde una página web de terceros que es de preferencia del usuario, y que nuestros círculos vean dicha preferencia.
  • Servicio de autentificación: Permite usar la autentificación de Google+ para que a su vez sean autentificaciones para otros sistemas, dichos sistemas se integrarían en Google+, para usar otros servicios a su vez.





El servicio es altamente promocionado por Google (aun así no ha alcanzado la popularidad de otras redes sociales como Facebook, o Twitter) motivo por el cual parece garantizado su éxito, hasta que deje de ser interesante por Google, o lo sustituya por otro servicio, con intención de aumentar su éxito.

Google Talk y Google Handouts


Google Talk fue lanzado en el año 2005, como un servicio de mensajes y VoIP entre usuarios, fue sustituido en el año 2013 por Google Handouts, con las mismas funciones, más otras nuevas (como recepción de SMS en los dispositivos Android). El servicio es accesible desde Chrome, desde Google+ y desde los Android.

Pese a ser un software bastante completo de gran funcionalidad y haber remodelado su apariencia varias veces, no ha conseguido alcanzar la popularidad de WhatsApp, aunque este fuera un software más limitado en sus funciones y en su apariencia.

Blogger






Blogger es un servicio veterano creado en al año 1998, por Pyra Labs, la cual fue adquiera por Google en el año 2003. Blogger permite que sus usuarios compartan artículos por internet de usa forma sencilla, y rápida. El sistema se contacta a varios servicios de Google entre los cuales:

  • Google+: para la autentificación y para compartir contenido como imágenes.
  • Google AdSense: Sirve para que el propietario del blog gane dinero a través de publicidad incrustada en su página.
  • Google Analytics: Para estudiar las estadísticas del uso del blog por sus propietarios.
Al margen de eso y como muestra del uso de servicios Blogger se puede conectar a otros servicios para mostrarlos como parte de nuestro blog, esto componemos nuestro blog con servicios o "trozos" de otros proveedores de contenidos.

El servicio es bastante popular y es casi segura su continuidad, a pesar que el número de blogs activos, se ha visto reducido debido a los usuarios ahora pueden compartir contenido de forma más rápida a través de las diversas redes sociales.

Google Docs


Google Docs es una suite ofimática en la nube, que ofrece acceso a un procesador de texto, una hoja de cálculo, y creador de presentaciones.

El usuario puede acceder desde cualquier computador a través de un navegador web, e inmediatamente comenzar a trabajar.

Permite realizar un trabajo individual o un trabajo colaborativo entre varios usuarios. El documento se puede compartir, por gmail a los usuarios designados por el autor, y dichos usuarios pueden editar el documento, en distintos lugares, a través de internet. Además los cambios hechos son visualizados en tiempo real por el resto de los usuarios.

Adicionalmente el sistema se conecta con Google Drive para almacenar en la los documentos creados.

La suite es ideal para trabajar en tablet, donde puede que no tengamos un suite ofimática (como MS Office o LibreOffice) instalada localmente o simplemente tengamos una estación de trabajo fijo y queremos la movilidad de la tablet para trabajar fuera de esta.





Google Chrome





El lanzamiento de Google Chrome, fue un tanto curioso, en el año 2008, se filtro que Google estaba creando un navegador, lo que abrió muchos rumores y expectativas, finalmente Google libero una versión beta de su navegador, que a finales de año se acabo convirtiendo en una versión estable.

Google estaba acumulando una seria de servicios y aplicaciones WEB, pero dependía de otros para poder ejecutar dichos servicios, ya fuera de Internet Explorer o de Firefox. Google creó un navegador que pudiera ser el marco de ejecución de todos sus servicios, sin depender de terceros.

El navegador es actualmente uno de los más populares en cuanto al número de usuarios, gracias su rapidez, y su alta compatibilidad con los estándares HTML.

Permite además acceder a una serie de servicios mezcla de servicios web y programas ejecutados localmente, como el servicio Google Now, notificaciones de correo Gmail, y otros

Chromebook


El Chromebook, son portátiles, con un sistema operativo de nombre ChromeOS, que llegan a un paso más la idea mencionada sobre un sistema dedicado a ejecutar servicios. Si antes exponíamos a Chrome como un entorno para ejecutar servicios de Google, este es un hardware y un sistema operativos, pensados para que el portátil sea exclusivamente un consumidor de servicios en la nube.

La idea es tener un dispositivo hardware, cuyo software sean servicios en la nube, y que todo lo necesario para hacerlo funciona esta en internet, lo cual la hace muy dependiente de esta, pero por otro lado muy sencillo de manejar, al no tener el usuario de preocuparse de actualizaciones del software, ni de donde almacenar sus datos, además de ser más baratos, puesto que no requieren toda la potencia necesaria para ejecutar el software localmente.

Aunque la idea es interesante, no ha tenido gran éxito, quizás porque la gente está acostumbrada a trabajar de otras formas con sus equipos portátiles. Por el costo más barato es una buena opción para países emergentes, salvo por el hecho que en dichos países emergentes la conexión requerida para que funcionen correctamente no siempre esta disponibles. Habrá que esperar todavía un par de años para ver si esta idea tiene éxito, o queda en el olvido, ante el uso de teléfonos móviles o tablets.