Cómo hacer namespaces dinámicos en Socket.io


Socket.io es una librería para hacer comunicaciones en tiempo real con Node.js utilizando Websockets y en este blog he dedicado varios artículos al respecto.

Sin embargo, una necesidad muy común al usar todas las funcionalidades de esta librería es usar correctamente los Namespace y los Rooms, el cual nacen para tener extensiones y una mejor organización de nuestros canales, pero este no es el post para explicar cada uno (http://socket.io/docs/rooms-and-namespaces/) si no para crear namespaces dinámicos y que por su implementación normal no es posible.

A continuación, un ejemplo donde se puede crear namespaces y unirse a ellos dinámicamente.

Servidor

  • Declaración de variables
	var MAX_CLIENTS = 5;
	var namespace_queue = [];
  • Funciones locales

Read More

Cómo crear una máquina virtual de Microsoft Azure con Powershell


En el día a día cada vez se ven más las necesidades de automatizar tareas, tanto de desarrollo como en infraestructura; si bien ya existen distintas plataformas para hacer DevOps tales como Chef, Puppet Labs, entre otras, no está de más crear nuestra propia plataforma. En mi caso personal, estoy desarrollando varios proyectos donde requieren automatizar procesos que siempre son tediosos y que se pueden ahorrar tiempos en administración, entre esas cosas que tenía que hacer era automatizar la creación de máquinas virtuales con Ubuntu 14.04.

Este es un ejemplo básico, pero para fines prácticos está muy bien. Read More

Cómo habilitar acceso remoto en Raspberry Pi


Si bien Raspberry Pi nació como un proyecto para llevar computadores a los niños de bajos recursos y se pudiera conectar cualquier periférico para poder hacer que este fuera más asequible pero muchas veces resulta que no tenemos todo de primera mano.

Como este proyecto ha tomado tanta popularidad y tantos propósitos distintos a veces es difícil tener un teclado, mouse y pantalla extra para poder administrar cada Raspberry Pi, por lo cual hoy en día es posible hacerlo por distintos medios que veremos durante este artículo.

Comenzaré con el más amigable; cabe aclarar que ambos métodos solo sirven en Raspbian y que nuestra Raspberry debe estar en nuestra red local, a no ser que tenga una IP dedicada.

Escritorio remoto

  • Instalar XRDP que simplemente habilita un protocolo de escritorio remoto (RDP)

Read More

Capturar credenciales de Facebook con una extensión de Google Chrome


Hace unos días comencé a revisar las API de Google Chrome que ofrece para crear extensiones y decidí crear una sencilla extensión que captura el email y la contraseña de Facebook al momento de hacer login (hay gente que le llama hackear Facebook), esto lo logro al hacer un hook en el evento “submit” del formulario de login.

En términos más técnicos lo que estoy haciendo es un event listener al documento y bajo ciertos parámetros solo opero en el login de Facebook.

También me pareció interesante tomar pantallazos de Facebook cada determinado tiempo, para ello se cuenta con un botón que habilita esta opción.

Sin embargo la idea es que esta información salga del navegador de la víctima y vaya a nuestras manos, para ello configuré la aplicación para que responda a un servidor hecho con Node.js y Socket.io, de ahí para adelante es historia. Read More

Usando el sensor de latidos en Microsoft Band


Microsoft Band nos ofrece diversos sensores con el cual podemos acceder mediante el SDK que nos ofrece Microsoft.

Esta aplicación es bastante sencilla y dejo todo el código en C# comentado (por lo menos lo más relevante) y dejo el proyecto publicado en Github.

        ///<summary>
        /// Making the connection with Band
        /// </summary>

        /// <returns></returns>
        private async Task ConnectToBand()
        {
            var pairedBands = await BandClientManager.Instance.GetBandsAsync();
            if (pairedBands.Any())
            {
                var band = pairedBands.First();
                bandClient = await BandClientManager.Instance.ConnectAsync(band);                
            }
        }

        ///<summary>
        /// Cheking if the app has permission to use the sensor
        /// </summary>

        /// <returns></returns>
        private async Task<bool> HasConsentToUse()
        {
            if (bandClient != null)
            {
                if (bandClient.SensorManager.HeartRate.GetCurrentUserConsent() != UserConsent.Granted)
                {
                    // user has not consented, request it
                    await bandClient.SensorManager.HeartRate.RequestUserConsentAsync();
                    return false;
                }
                else
                {
                    return true;
                }
            }
            Debug.WriteLine("Fail when trying to connect to Microsoft Band");
            return false;
        }

        public async void StartListening()
        {
            statusBar.ProgressIndicator.Text = "acquiring data...";
            await statusBar.ProgressIndicator.ShowAsync();

            await ConnectToBand();
            if (await HasConsentToUse())
            {
                
                if (bandClient != null)
                {
                    var sensor = bandClient.SensorManager.HeartRate;
                    /// Triggering the sensor when changed
                    sensor.ReadingChanged += SensorReadingChanged;
                    /// Initiate the reading
                    await sensor.StartReadingsAsync();
                }
            }
            else
            {
                StartListening();
            }
        }

        public async void StopListening()
        {
            HeartbeatAnimation.Stop();
            var sensor = bandClient.SensorManager.HeartRate;
            sensor.ReadingChanged -= SensorReadingChanged;
            await sensor.StopReadingsAsync();
            bandClient.Dispose();
            StartAppear.Begin();
            HeartbeatOutput.Text = "0";
        }

        async void SensorReadingChanged(object sender, BandSensorReadingEventArgs<IBandHeartRateReading> e)
        {
            try
            {
                if (e.SensorReading != null)
                {
                    this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        HeartbeatAnimation.Begin();
                        HeartbeatOutput.Text = e.SensorReading.HeartRate.ToString();

                        StatusBar.GetForCurrentView().ProgressIndicator.Text = "";
                        StatusBar.GetForCurrentView().ProgressIndicator.HideAsync();
                    });
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error reading/sending data: {0}", ex);
            }
        }

Finalmente aplicando unos cuantos estilos el resultado es el siguiente:

Aquí en este enlace está el proyecto publicado: https://github.com/thEpisode/BandExperiments 

Hello World Microsoft Band


Hace unos días recibí una Microsoft Band, si bien es muy práctica es fácil de usar y lo más interesante, es muy fácil de hacer algún desarrollo para esta, por lo que he decidido indagar en el SDK y hacer algunos experimentos para así finalmente crear mi propia aplicación.

A diferencia de otros post que he hecho en este blog voy a dejar muy separados todos los post para que sean entendibles y no se aten los unos con los otros. Al final haré una aplicación funcional para esta Band. Read More