jueves, 27 de noviembre de 2014

Herramientas digitales y buenas prácticas de las mismas para el incremento y seguimiento del Marketing en PYMES o MIPYMES a través de Internet

Alguna vez te has puesto a pensar si es posible incrementar la proyección de un negocio que existe en Internet a través de algunas herramientas o buenas prácticas con el objetivo de obtener mayores clientes en potencia e incrementar la cantidad de visitas al sitio web del negocio.



Pues por acá te dejo un trabajo que se realizó en esta línea; la idea que se siguió es que se pusieron en práctica algunas herramientas de bajo coste para incrementar la proyección de un negocio a través de Internet; estas herramientas se implementaron y se dejaron actuar a lo largo de un mes, luego del cual se evaluaron los resultados obtenidos con dichas herramientas; consiguiéndose saber el sexo de los visitantes, los países desde los cuales se hacían las visitas, herramientas de contacto directo entre cliente-empresa, franjas horarias de las visitas, etc.

Las herramientas usadas fueron las siguientes:
  • Google Analytics
  • Google Adwords
  • MailChimp
  • Hootsuit
  • ClickDesk

Por acá les dejo un vídeo de una presentación que se realizó sobre el tema; esta se llevo a cabo en la JUDC 2014 de la Universidad Nacional Autónoma de Nicaragua, León.

Y por último les dejo el Link del documento elaborado por los autores del trabajo. Espero les sea de utilidad.

miércoles, 26 de noviembre de 2014

Programación concurrente en C# - Thread

 
En muchas ocasiones al diseñar o crear una aplicación en lo último en que se suele pensar es en si debe o no emplear múltiples hilos para su ejecución; ya que cuando se nos enseña un lenguaje de programación lo que se suele hacer es programar todo dentro del mismo programa principal (el famoso Main( )) sin preocuparnos por nada más.

La realidad de las cosas es que con el Hardware moderno se debe explotar al máximo las características que este nos ofrece y para ello son las aplicaciones las que se deben encargar de exprimir esos recursos. Es por ello que he decidido poner un ejemplo que permita esclarecer un poco cómo se deben emplear los Hilos en C# y cómo manejarlos desde una aplicación con interfaz gráfica.

Antes de ello cabe recalcar que siempre que tengamos una necesidad demostrada de diseñar una aplicación que va a estar haciendo más de una cosa al mismo tiempo entonces es ahí en donde debemos pensar en la programación concurrente. Y ¿porqué decidimos utilizar Hilos para ello? pues la idea es simple un Hilo es una especie de proceso muy pequeñito que se va a encargar de ejecutar un mismo trozo de código cada vez que se le diga por tanto consume muy poca memoria RAM y forma parte de un proceso más grande que lo conocemos como programa principal. La idea es que el Hilo le ayude al programa principal a hacer su trabajo; por tanto el programa principal debe delegar algunas actividades para que estas sean realizadas por el Hilo.

Para nuestro ejemplo vamos a diseñar una interfaz gráfica que permita seleccionar la cantidad de hilos que queremos crear y que luego cada hilo se encargue de ir actualizando una etiqueta que servirá como contador y se irá sumando de uno en uno.

La interfaz gráfica será la siguiente:


La opción Archivo → Iniciar lanzará un total de Hilos indicados en el control NumericUpDown; cada hilo se encargará de actualizar la etiqueta de uno en uno.

El código sería el siguiente:

public partial class Form1 : Form
{
        private Thread[] hilos = null;  //Nuestro arrays de Hilos
        private bool[] finalizado = null;  //Señales empleadas por los hilos para indicarle al programa principal que ya terminaron
        private bool finalizar = false;  //Señal empleada por el programa principal para indicarle a los Hilos que terminen
        private delegate void setValueDelegate(string valor);

        public Form1()
        {
            InitializeComponent();
        }

        /*Método empleado por el programa principal para saber si todos los Hilos ya terminaron*/
        private bool terminaronTodosLosHilos()
        {
            for (int i = 0; i < finalizado.Length; i++)
            {
                if (!finalizado[i])
                    return false;
            }

            return true;
        }

       private void iniciarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            numericUpDown1.Enabled = false;
            hilos = new Thread[Convert.ToInt32(numericUpDown1.Value)];
            finalizado = new bool[Convert.ToInt32(numericUpDown1.Value)];

            for (int i = 0; i < hilos.Length; i++)
            {
                finalizado[i] = false;
                hilos[i] = new Thread(new ThreadStart(actualizarValor));
                hilos[i].Name = Convert.ToString(i);
                hilos[i].Start();
            }
        }

        private void actualizarValor()
        {
            while (true)
            {
                if (finalizar)
                    break;

                if (Convert.ToInt32(label1.Text) % 2 == 0)  //Si el valor es par
                {
                    //lock ((object)label1)
                    //{
                    try
                    {
                        Monitor.Enter((object)label1);
                        setValue_Label1(Convert.ToString(Convert.ToInt32(label1.Text) + 1));
                        System.Console.WriteLine(label1.Text);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Monitor.Exit((object)label1);
                    }
                    //}
                    Thread.Sleep(2000);  //Duerme 2 segundos
                }
                else  //Si el valor es impar
                {
                    lock ((object)label1)
                    {
                        setValue_Label1(Convert.ToString(Convert.ToInt32(label1.Text) + 1));
                        System.Console.WriteLine(label1.Text);
                    }
                    Thread.Sleep(4000);  //Duerme 4 segundos
                }
            }

            finalizado[Convert.ToInt32(Thread.CurrentThread.Name)] = true;
        }

        private void setValue_Label1(string valor)
        {
            if (label1.InvokeRequired)
            {
                setValueDelegate delegado = new setValueDelegate(setValue_Label1);
                label1.Invoke(delegado, new object[] { valor });
            }
            else
                label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (hilos == null)
                return;

            finalizar = true;

            while (true)
            {
                if (!terminaronTodosLosHilos())
                    Application.DoEvents();
                else
                    break;
            }
        }
    }

Como podemos observar al momento de crear varios Hilos es necesario sincronizarlos para evitar posibles estados inconsistentes o posibles condiciones de carrera. Para ello en C# existe la instrucción Lock o la instrucción Monitor. Otra cosa que es obligatorio hacer es que los Hilos terminen todos correctamente antes de salir de la aplicación; por ello en el evento FormClosing del formulario principal hacemos el uso de las señales respectivas (finalizar y finalizado) para controlar dicha funcionalidad. La señal finalizar es establecido por el programa principal y cuando vale true sirve para indicarle a los Hilos que el programa principal quiere que se terminen. La señal finalizado es establecida por cada Hilo y cuando vale true indica que ese Hilo ya ha finalizado correctamente. Como hay más de un Hilo es necesario crear un array de señales del tipo finalizado para poder controlarlos a todos.

Algo que hay que aclarar es que hay dos formas de lanzar un Hilo, una de ellas es que el Hilo sólo se ejecute una única vez; por tanto se lanza el Hilo, se le dice cuál es el método que él va a ejecutar, el Hilo ejecuta dicho método y cuando termina de ejecutar el método el Hilo termina. Luego hay otra forma de ejecutarlo y es que el Hilo va a estar ejecutando el mismo método de forma reiterada infinitas veces hasta que se le indique que debe terminar. Está última recibe el nombre de Hilo demonio. Para el caso del ejemplo los Hilos que hemos creado son todos del tipo demonio.

Si quieres el código completo lo puedes obtener desde este Link. Espero te sea de utilidad.

Fórmula E - Competición de vehiculos de alto rendiiento movidos por energía eléctrica

La Fórmula E es una categoría de competición de vehículos monoplazas (similares a los de fórmula 1) pero que son eléctricos con el mismo carácter jerárquico que la Fórmula 1. Las carreras son organizadas por la Federación Internacional del Automóvil (FIA) creada con la intención de servir como laboratorio de investigación y desarrollo de vehículos eléctricos para promover y acelerar su popularidad, sirviendo como escaparate de innovaciones y desarrollo en un marco que combina tecnología y deporte.


McLaren será la suministradora de los motores, transmisiones y sistemas electrónicos de todos los vehículos, Dallara construirá los chasis, Michelin el suministrador único de neumáticos y Williams las baterías.

Algo que me llamo mucho la atención es que en esta Fórmula E las cosas funcionan un poco diferente y se juega con estrategia pues los pilotos deben conservar la energía suficiente para poder llegar hasta el final de la carrera; según lo que puede observar es posible hacer cambio de vehículo (en 1 misma carrera se pueden emplear 2 vehículos) puesto que no es posible recargar las baterías del vehículo con el cual estás compitiendo; me pongo a pensar en el tiempo que tomaría hacer esto.

Otra cosa que me llamo la atención es algo que le llama FanBoost. La Fórmula E quiere que el aficionado se involucre directamente en la competición. Una de las medidas que implementará es el FanBoost permitiendo que los votos de los seguidores de la Fórmula den algo de ventaja a su piloto favorito. En la página web de la Fórmula E se ha abierto una sección en la que los aficionados podrán votar por su pilotos favoritos, Los tres pilotos más votados en el FanBoost recibirán un power-boost extra (Push to pass o aumento de potencia de 133kw (180 CV) a 200kw (270CV)) que durará unos 2,5 segundos. De momento aún se desconoce la cantidad total de power-boost que cada piloto podrá utilizar en cada carrera. Cada aficionado puede votar a su piloto preferido hasta el mismo día de la carrera y no será hasta 20 minutos antes de la carrera cuando los propios pilotos conozcan el resultado de las votaciones. La empresa española PriceWaterhouseCoopers se encargará de validar la votación. Para fomentar el uso de varios medios, si el aficionado vota mediante la página web podrá votar una única vez pero si recurre a la aplicación oficial podrá votar hasta en cinco ocasiones.


En la Fórmula E hay un total de 10 escuderías y 20 pilotos, muchos de ellos con pedigrí Fórmula 1 (es decir, que antes estaban en F1). Por delante, 10 carreras para decidir quien es el primer ganador de una competición reservada a vehículos eléctricos y auspiciada por la FIA.

Interesante verdad!!! creo que esto fomenta el uso de energías limpias para un deporte tan sucio y poco económico como es el automovilismo.

martes, 25 de noviembre de 2014

Internet - White Space

La idea que se persigue es difundir Internet a aquellas zonas a las que aún no ha llegado por la forma que tiene geográficamente dicha zona.

White Space se refiere a las frecuencias de radiodifusión no utilizadas en el espectro inalámbrico. Las cadenas de televisión dejan huecos entre los canales, y este espacio en el espectro inalámbrico es similar al que se usa para 4G y por lo que se pueden utilizar para entregar Internet de banda ancha.

El Wi-Fi de un hogar puede viajar a través de las paredes. White Space puede viajar hasta 10 kilómetros, a través de la vegetación, edificios y otros obstáculos. Tabletas, teléfonos y computadoras todo pueden acceder a esta conexión inalámbrica a Internet a través de las centrales fijas o portátiles. Las cantidades reales de espectro varían según la región, pero el espectro de White Space oscila entre 470 MHz a 790 Mhz.



¿Un ordenador portátil puede conectarse directamente a White Space?, pues sucede que NO, ya que se requiere de un dispositivo especial que se conecta a un concentrado Wi-Fi regular.

Google y Microsoft ya están persiguiendo el mercado emergente de White Space en África, donde sólo el 16 por ciento de la población está en línea. Debido a que las ondas pueden viajar hasta 10 kilómetros de radio esto es ideal para las aldeas remotas.

Google y Microsoft también han invertido en la tecnología de White Space en los países en desarrollo. Google lanzó recientemente un programa en 10 escuelas en Ciudad del Cabo, Sudáfrica. Iniciativa 4Afrika de Microsoft se centra en la tecnología de White Space en todo el continente, con la esperanza de llevar a millones de personas en línea, y tiene proyectos en: Tanzania y Sudáfrica.

Google lanza YouTube Music Key

YouTube Music Key, un servicio de reproducción de música streaming por suscripción. La idea es dar acceso a vídeos y canciones sin anuncios, con la posibilidad de reproducir en segundo plano y sin conexión por una cuota de 9.99 euros mensuales.



Para emplear la reproducción sin conexión, solo habrá que seleccionar el vídeo y almacenarlo en el dispositivo en la propia app. La cuota incluye una suscripción a Google Play Music, que contiene más de 30 millones da canciones, y que supone un complemento de la apuesta de la compañía por la música por suscripción.


Ya está disponible el servicio para el sistema operativo Android, mientras que la versión para iOS (Apple) llegará próximamente. Se trata de la respuesta para clasificar y aglutinar todo lo relativo al consumo de música. Si una canción existe en este mundo, casi seguro que puedes encontrarla en YouTube. Pero hasta hoy, localizar y reproducir álbumes enteros no era tarea fácil.

El servicio, que arranca en fase beta para un número limitado de usuarios, incluye la posibilidad de consultar diferentes listas de reproducción o los canales suscritos previamente, tales como David Bisbal, Taylor Swift, Ed Sheeran o U2.

Comentarios de Andres Oppenheimer - América Latina debe Crear o Morir

El otro día viendo en la tele un programa; estaban haciendo comentarios sobre un artículo que publicó el famoso Andres Oppenheimer y que se refiere a que en América Latina se tienen muchas deficiencias asociadas al proceso de innovación y de creación; menciona que en muchas ocasiones los latinos somos más consumistas que creadores y que esto afecta enormemente el desarrollo de estos países.

Menciona que: "Los gobiernos en los países latinos en la mayoría de los casos, lo que están haciendo son proyectos inmobiliarios (refiriéndose a la construcción de gigantescos parques científico-tecnológicos) que no sirven nada más que para proyectar una imagen ficticia de progreso científico y tecnológico".
Según él, los conocedores de tecnología en SiliconValley se ríen de este tipo de proyectos, los describen como una monumental pérdida de dinero. De la misma manera, un estudio reciente del Banco Interamericano de Desarrollo concluyó que los parques científicos y tecnológicos que se están construyendo en América Latina están lejos de alcanzar sus metas.

Menciona que: "el atraso en innovación productiva a escala mundial es uno de los mayores retos para el futuro de América Latina; el trabajo mental vale cada vez más, mientras que el manual cada vez menos".

¿A qué se deben todos estos problemas?
  • Los países de América Latina tienen sistemas de educación de mala calidad, producen demasiados graduados en humanidades y demasiado pocos en ciencia e ingeniería, y porque carecen de ecosistemas favorables a las empresas que fomenten el espíritu empresarial y la innovación.
  • La mayor traba a la innovación es la ausencia de una cultura de veneración a los innovadores y a los emprendedores, y la falta de tolerancia social con el fracaso individual.
  • En la mayoría de países de América Latina, hay decenas de millones de niños que quieren ser estrellas del fútbol, pero relativamente pocos que quieren ser el proximo Premio Nobel de Química, o un empresario exitoso

    Read more here: http://www.elnuevoherald.com/noticias/septimo-dia/article3943619.html#storylink=cpy

    Read more here: http://www.elnuevoherald.com/noticias/septimo-dia/article3943619.html#storylink=cpy
     En la mayoría de países de América Latina, hay decenas de millones de niños que quieren ser estrellas del fútbol, pero relativamente pocos que quieren ser el proximo Premio Nobel de Química, o un empresario exitoso.
¿¿¿Interesante no lo crees???, no pierdas más tu tiempo y a innovar se a dicho :)

Por acá les dejo el Link de su libro por si alguien lo quiere comprar y leer.

Smartdust - Redes de sensores diminutos

Se trata de una diminuta y casi invisible red inalámbrica de minúsculos sensores microelectromecánicos (MEMS), robots o dispositivos que pueden detectar señales de luz, temperatura, vibraciones, etc.

Los dispositivos también se llaman motas y se trabaja en disminuir su tamaño hasta el de un grano de azúcar, o incluso de una partícula de polvo. Cada dispositivo contiene sensores, circuitos que computan, tecnología de comunicaciones sin hilos bidireccional y una fuente de alimentación. Los nodos recopilarían datos, realizarían cómputos y se comunican por medio de radio frecuencias con otros en distancias que se acercan a 1.000 pies (300 metros).

Cuando están muy juntos o apiñados, crean automáticamente redes altamente flexibles, de baja potencia con usos que se extienden desde sistemas de control del clima, sistemas militares, etc.

Se denomina nodo sensor (dust mote) a un diminuto sensor que está conformado por:
  • Arreglo de paneles solares que le proveen su energía
  • Uno o más micro sensores (MEMS) que permiten medir: temperatura, luz, sonido, etc.
  • Circuito impreso que interconecta los dispositivos
  • Interfaz de comunicación que puede ser un retroreflector (Corner Reflector), o un láser infrarrojo.
Estos nodos sensores pueden variar de tamaño desde 1 milímetro cúbico hasta elementos 100 veces más pequeño. Cada nodo tiene un costo de alrededor de 10 centavos de dolar y su coste depende de cómo se proporcione la alimentación energética.

El receptor de datos consiste en un sistema óptico convencional para recoger simultáneamente la señal procedente de los cientos o miles de sensores, un chip de CMOS personalizado por imágenes para procesar la señal y un sistema de visualización para presentar los datos. El rango de la comunicación es de unos pocos cientos de metros.


viernes, 21 de noviembre de 2014

Mantener un Android Activity siempre activo

Muchas veces nos resulta indispensable hacer que nuestra actividad en Android no sea tapada por el bloqueo de pantalla o por que la pantalla se va a poner en modo reposo; ya sea porque la aplicación está constantemente capturando datos o por cualquier otro motivo.

Para hacer esto no necesitamos muchos elementos de complejidad se necesita únicamente hacer algo como:

import android.app.Activity;
import android.view.WindowManager;

public class MainActivity extends Activity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
       }
}

Listo!!! con eso es más que suficiente, no necesitamos permisos adicionales en el AndroidManifest.xml. Bastante básico ¿verdad?

Si quieres conocer otras formas de hacer esto mismo puedes dirigirte al siguiente Link; ahí encontrarás otras dos diferentes formas de hacer lo mismo.

jueves, 20 de noviembre de 2014

Bloquear SMS entrantes desde Android

Hola por acá les dejo una útil e interesante aplicación que me he programado cuyo objetivo es bloquear los mensajes recibidos en un teléfono celular con plataforma Android.

Muchas veces suele suceder que las compañías de telefonía celular nos inundan el teléfono con mensajes referentes a promociones de recargas, de Internet, etc. y en muchas ocasiones esos mensajes no nos interesa que nos estén llegando por tanto se me ocurrió la idea de bloquear esos mensajes.

Pero es cierto también que a veces sucede que quisiéramos recibir cierto tipo de mensajes de esos que hemos bloqueado ya sea porque contienen algo en específico o una palabra determinada como: "quintuple", "sextuplica", etc. y quisiéramos, aún cuando los mensajes están bloqueados, recibir ese tipo de mensajes en específico.

Pues la aplicación SMSwall hace todo eso y un poco más. Si te interesa puedes descargarla desde el siguiente enlace:





Espero les sea de su agrado :)

miércoles, 19 de noviembre de 2014

Estudio de viabilidad de la Virtualización de Servidores aplicada al Ministerio de Relaciones Exteriores de Nicaragua (MINREX), Managua 2012

Este es otro estudio muy interesante que evalúa la viabilidad de la utilización de la virtualización para una empresa del estado nicaragüense con el objetivo de identificar los pro y los contra del uso de la virtualización dentro de dicha empresa.



Muy interesante por cierto, por acá les dejo el Link

DOI del artículo
Pdf completo

Utilización de mecanismos de Síntesis de Voz y Reconocimiento de Voz para el desarrollo de aplicaciones sobre dispositivos móviles-celulares

Hace ya un buen rato atrás escribí un artículo que intenta explicar la forma en que funciona el reconocimiento de voz de Google dentro de los dispositivos móviles con Android, así como también indicar qué se debe hacer para programar una aplicación que emplee el reconocimiento de voz dentro de su funcionalidad.




Por acá les dejo el Link del artículo, espero les sea de utilidad.