miércoles, 27 de febrero de 2019

Ejemplo de Patron Singlenton en javascript (ECMAScript 6)

Buenas, hace mucho tiempo que no posteo nada ya mas de un año, aun sigo echando código "duro" (como diría un compañero de trabajo, jeje), realmente quiero seguir compartiendo, mi idea siempre fue compartir por medio de un blog, pero ahora todo se dirige a los vídeos y mas que todo en la plataforma (si es que se puede decir asi) de youtube, no se que serán de los blogs :(.
No me lió mas, jajaja, ya saben que empiezo a escribir sin parar y me desvió del objetivo
Hoy comparto un pequeño código, es un ejemplo del patrón de diseño Singlenton usando javascript, y el plus es que lo voy a compartir con una plataforma que nos provee github denominada gist, realmente me parece muy útil, para compartir código y almacenar nuestras guías y para un sin fin de ideas que pasan por tu mente inquieta.
Lo digo en serio se ve genial los gits en una pagina :)
Y el siguiente link al wiki, si quieres contextualizar sobre el patrón de diseño singlenton :)
hasta la próxima, y que sea pronto

sábado, 8 de octubre de 2016

Trucos Android Dev - Ver Archivos de base de datos SQLite Android Studio

Buenas, llevo varios meses sin escribir nada, y no es que no tenga nada que escribir, al final del post comento el porque.
Hoy iniciare con una nueva sección de post, los cuales se llamaran Trucos Android Dev, y el objetivo es mostrar algunos de los trucos o ayudas para el desarrollo de aplicaciones android (con los que pruebe en el camino), para iniciar hablaremos un poco sobre cómo ver los datos que almacenamos en archivos SQLite en nuestra aplicación android.
Como siempre pretendo que sea un post corto, pero ya saben tal vez me extienda con chachara (no es nada raro), comencemos.
Es común que en alguna aplicación de android que estemos desarrollando, se requiera almacenar datos, hay varias maneras, formas o tecnologías que nos permiten almacenar datos de forma persistente en el dispositivo, para el beneficio de la aplicación, una de ellas es usar SQLite, que para mi, es una un motor pequeño de sql que permite leer archivos en un formato definido, y por medio del lenguaje sql podemos manipular los datos, la definición técnica y correcta es, SQLite es un manejador de base de datos SQL embebido (no necesita iniciar un servidor de base de datos), permite crear base de datos empotradas en las aplicaciones, tiene un completo soporte para tablas índices en un único archivo de base de datos (como que la estaba liando un poco con mi explicación :|).
Cuando estamos desarrollando aplicaciones con SQLite, es común que queramos ver los datos que estamos almacenando, para esto hay varias formas:

Sacar el archivo de base de datos y abrirla en con un programa.

Veremos la posibilidad que nos da Android Studio, que por cierto me ha parecido un buen entorno de desarrollo para android.
Primero que todo debemos iniciar el emulador, luego Iniciamos el Android Device Monitor, Tools > Android > Android Device Monitor, esto es con el propósito de obtener la ruta donde esta el archivo de base de datos.

imagen 1

imgen 2

imgen 3

En la pestaña File Explore, está la estructura de archivos de Android, El archivo de base de datos lo encuentras dentro del directorio de la aplicación data/data/[nombre paquete]/databases

imagen 4

La mayoría de las veces el nombre del archivo de base de datos no tiene extensión en es la que definas cuando defines el nombre de la base de datos desde el código fuente.
Ahora vamos al terminar que tiene Android Studio, y nos ubicamos donde tenemos instalado el SDK de android y buscaremos la carpeta platfrom-tools.

imagen 5

imagen 6

Ejecutamos los siguientes comandos, en orden
adb shell: conecta la consola al dispositivo android (en este caso el emulador)

imagen 7

sqlite3 data/data/[nombre paquete]/databases/[nombre-base-de-datos]: ejecuta el manager sqlite3 para manipular la base de datos especificada.

imagen 8

Listo ya nos conectamos, algunas pruebas para ver si funciona
comando .tables es para listar las tablas que existen en la base de datos

imagen 9

y un comando de sql

imagen 10

En este punto ya podemos manipular la base de datos, insertando, modificando datos, creando y borrando tablas, y lo que es más importante ver si realmente la aplicación está haciendo lo correcto con los datos.
Y listo, eso es todo, por el momento.
Ahhh, se me olvidaba, la razón por la que no había vuelto a subir post, es porque la verdad me di un tiempo de descanso, creo que me deje llevar de la locha, a si que con esto ya no alcanzó a cumplir uno de mis propósitos del 2016, pero ya viene el 2017 con nuevos propósitos y algunos encolados, jejeje.

Les deseo un desarrollo divertido, hasta la próxima.

viernes, 15 de abril de 2016

Me quiero armar un “PC GAMER” ahora en el 2016



Buenas a todos, espero que sus deseos estén cada vez más cerca, pues nada, este post será algo corto aquí, pero dejare un link en donde echaré toda la chachara o carreta que llaman y más; pues si como dice el anuncio, me entro la arrechera por armarme un “PC GAMER” después de que me estafaran por internet (no confíen en ninguna usuaria con nick “milenitapeliroja”, ojo ahí), al querer hacerme con un PS4 de segunda mano, si si, se me fue un dinerillo que ahorre en el 2015 y que duele a inicios del 2016 :( :(.
Después de eso, deje el mundo de los videojuegos en consola (será por un tiempo no mas), y me entro la arrechera por armarme una PC GAMER, todo el cuento lo dejo AQUI, es una log echo en joomla.com, hace rato que cree la cuenta, creo que ya va para el año, realmente me gusta blogspot pero, pero, hay cosas que me incomodan (tal vez sea que no conosco todo sobre blogspot) como la edición de los post, es difícil hacer que un post quede como realmente planeas, hay veces que es un arduo trabajo para que el tamaño del texto quede como uno quiere, creo que google le deberia poner un poco de atención a blogspot hace mucho, o bueno en lo que llevo que no veo que hagan mejoras.
Sobre joomla.com, es es el mismo motor joomla pero ya hosteado (existe ese termino), te limitan las cosas que puedes hacer en el, pero no te llenan de propaganda y ademas es gratis, tal vez cree un post sobre ello, a mi modo de ver si realmente prometen que siempre sea gratis sera una excelente propuesta.

No siendo más por el momento, me despido y feliz reto.

@drincastX



domingo, 3 de abril de 2016

Laboratorio rendimiento If vs Switch en Visual Studio C#.

Laboratorio rendimiento If vs Switch en Visual Studio C#.

Buenas a todos espero que la semana santa les haya dado un buen descanso y nuevos aires para continuar haciendo lo que nos apasiona.

Desde hace mucho tiempo, a nivel de programación surgen muchas preguntas a medida que se va avanzando en este mundo; de mi memoria unas de las preguntas que me he realizado y aun me sigo haciendo, es la siguiente, “Que es mas optimo o rápido en la toma de decisión un If anidado o un switch”, pues creanlo o no aun no tengo una respuesta para ello y cada vez que trato de dar una respuesta se amplían más las posibilidades y las variables; me acuerdo, echando memoria muuuyyy atrás en mis tiempos de universidad en clases de circuitos, el profesor que ni me acuerdo ya de él, pero sí de su asistente (bueno no se si era asistente o docente ya en ese tiempo) Eva !hayy donde carajos estará esa muchacha¡, bueno y su hermana también (como tema aparte estas dos muchachas eran por decirlo de alguna forma unas nerdas, pero bien bonitas, ojala sigan asi, ahora entiendo del porque no me concentraba en las clases), en fin, el profesor decía que a nivel de circuitos es mas optimo y rápido las compuertas and-or que usar un PIC y programarlo como una instrucción de control switch, pues uno aquí en que le alega al profe, ps nada, no hay mucha forma, primero, porque programar ese PIC ya es todo un cuento (aclaro que mi fuerte no es la electrónica, más bien la locha :)).

Ahora mirando el problema desde el punto de la programación de software, ps ya entran un poco de variables como por ejemplo, el lenguaje de programación y el entorno en donde se ejecuta el programa en sí, no más con esto, ya tienes un montón de posibilidades para probar; para centrarnos un poco, este laboratorio lo realizaremos con .NET y C#; divagando un poco por la información que he leído y en el momento que escribo este post, vienen los flashes de retazos de información, hay algo que recuerdo, y fue algo que leí hace ya mucho rato, hay un tipo, obviamente alguien que sabía o sabe programar que escribió sobre lo mismo (lamentablemente no tengo el enlace y no me acuerdo del nombre del sujeto en cuestión), este personaje, si no mal recuerdo mencionaba que la sentencia switch es mas optima, ya que el compilador la optimiza con tablas de saltos (jump tables), que en si, es una mejora de rendimiento a la hora de ejecutar partes del código fuentes especificas, algo que nos puede hacer plantear la siguiente hipotesis “el uso de switch es más optimo que sentencias if anidadas, por el uso de la tabla de saltos”. 

Hay un post, que aun guardo la url y me gusto, debido a que comenta que dependiendo del caso (mirando a nivel lógico, se ve que lo descrito es más que acertado) es mejor usar los if anidados en vez del switch y para otros casos en mejor usar el switch en vez de los if anidados, aqui dejo el link para que lo miren.

Para este laboratoria, diseñaremos un programa Windows Form, para hacer la simulación del objetivo que nos compete, mientras estoy escribiendo debo decirles que no tengo nada hecho y voy hacer el programa sobre la marcha el programa, mejor dicho vamos hacer de científicos de a prueba y error y ejecutaremos las ideas que vengan de la inspiración del viento, jejeje si asi es.

Se definirá el programa como sigue (se que cambiara a medida que lo vamos codificando y con las  diferentes ideas que se nos ocurran, pero empezaremos marcando una línea partida). Existirán dos métodos, uno para el caso del switch y el otro para el caso del if anidado. Tanto el if como el switch constaran de 10 casos a ser validados (comparaciones simples del 1 al 10).

Cada método se ejecutará en un ciclo, el cual se puede definir en un archivo de configuración o en el programa (lo del ciclo es como para emular el dato de una media ponderada en cuanto a tiempo).

El programa en si se basara en la medición del tiempo en ejecución de la sección switch y la sección if, hay que tener en claro que juegan muchos factores en contra para realizar el laboratorio, la idea es que solo el procesador del pc le dedicará el 100% de su procesamiento para que de unos resultados más reales, sabemos que esto no es posible ya que el procesador va ejecutar muchas operaciones algunas de mayor prioridad que otras, y se demorará en procesar según el número de procesos (valga la redundancia) que esté ejecutando en el momento, para bajar un poco el grado de esta limitante al ejecutar el programa abriremos el administrador de tareas (sistemas windows) y le subiremos la prioridad a Alta cuando realicemos la simulación.

Ahora entrando a parte técnica, nos planteamos primero como tomar el tiempo de ejecución, en .NET existe una clase optimizada para dicho propósito, esta clase es Stopwatch, con esta clase podemos medir el tiempo trascurrio desde cierta parte del código que queramos y su funcionamiento es sencillo, solo es iniciar una variable donde queremos que se empiece a contabilizar el tiempo y parar ese conteo en donde queramos que finalice el conteo (nuevamente valga la redundancia), algo como la siguiente imagen. 


Hay mucha información en la sobre este tem, de cómo medir el tiempo de ejecución. 

Antes de continuar, a la aplicación le agregaremos la siguiente prueba, debido a algo que surgió de momento. 
  • Se agregara método para manejar el caso de if-else anidados. 
Tendremos entonces tres mediciones, uno para el if (en espagueti, solo if), el if else anidados, y el switch, más que válido el agregar el último caso. 

El código de la aplicación lo manejaremos en GitLab (seeeee !!!!), al fin voy a subir alguito, esto me acuerda de algo, vamos hacer un post sobre como manejar Git, se que he subido dos post pero hacen más referencia a los servicios de GitLab y GitHub que a la filosofía del control de versiones GIT, haremos algo básico, básico para no morir en el intento :).

bueno creo que tenemos un panorama de lo que vamos hacer, así que manos a la obra……… 

Hemos finalizado la app que realizara el laboratorio, poner aqui una funcion solamente, el código completo lo puedes visualizar o descargar de aqui el proyecto esta en la carpeta LabVS.

Método VerIf. 
private bool VerIf(int v)
{
  bool res = false;
  if (v == 1)
  {
     res = true;
  }
  if (v == 2)
  {
     res = true;
  } 
   ........

  if (v == 10)
  {
     res = true;
  }
  return res;
} 

Imagen 2

La imagen 2, es como vamos a ejecutar cada función para tomar un tiempo de ejecución del ciclo total, primero se iniciará el temporizador, luego pasará el ciclo que ejecutará la función n veces, al finalizar el ciclo paramos el temporizador, la idea no es medir cuánto se demora en un if, si no que vamos a ejecutar varias veces la misma función para tener un tiempo total y comparar ese tiempo en los tres caso, de esta forma miramos cual de el menor tiempo; ¿porque vamos a  usar un número alto de ciclos? es debido a que el procesador ejecuta la tarea en nanosegundos y queremos ampliar este tiempo para que sea más perceptible por nosotros.

Como lo comentamos arriba, vamos aumentar la prioridad de la aplicación de laboratorio y cada función la vamos a ejecutar un número de veces, este número de veces será un número elevado, un ciclo de 2000000 iteraciones (elevado para hacerlo nosotros. el pc vuela).

Esta será la IU de la aplicación, hay algunas cosas que explicaremos de ella.

Imagen 3

Bueno esta super interfaz, funciona así, valor, es el número a comparar, iteraciones, es el número de veces que se repetirá el ciclo, el campo de selección (switch, if, if_else), es para seleccionar qué método ejecutar, en TSwitch, TIf, TIfElse, es donde se mostrará el tiempo al finalizar la ejecución, el botón Ejecutar es para cuando se va ejecutar una sola opción, el botón EjecutarTod es para ejecutar los tres casos, no al tiempo si no para que nos arroje el resultado de los tres casos, creo que nos queda claro (??????????). 

Describiré los equipos donde se ejecutará la prueba 

PC1

PC2

PC1 es un poco mas actual, creo que del 2014, PC2 es de a principios 2011, en cada uno ejecutaremos 5 veces el laboratorio y compararemos el resultado, vamos a comparar el número 8 para que haga unas cuantas verificaciones antes de que se encuentre el if o case correcto y solo ejecutaremos con el laboratorio con el botón EjecutarTod, tambien vamos a ejecutar el programa desde el binario no desde el visual studio ya que esto puede hacer retrasar el proceso y la lógica de funcionamiento normal del procesador.

Como subir de prioridad al programa 

primero ejecutamos la aplicación que está en el directorio bin del proyecto (claro primero se compila) 
luego abrimos el administrador de tareas, y buscamos el programas. 



Luego damos clic derecho y escojemos la opción Ir a Detalles.


Nuevamente clic derecho en el programa y seleccionamos la opción Establecer Prioridad y seleccionamos Alta. 


Saldrá una ventana de advertencia y seleccionamos cambiar prioridad. 


Listo ya tenemos configurado el programa, ahora si a ejecutar el laboratorio.

Capturas de resultado en PC1

Imagen 
Imagen 
  
Imagen 
  
Imagen 
  
Imagen 
  

Captura de resultados PC 2 

Imagen 
Imagen 
Imagen 
Imagen 
Imagen 
  

Tabla de Datos 

Imagen

Con esto podemos dar un resultado, pero para lavarme las manos lo haré a nivel personal ustedes ya decidieron que concluir, el porqué de esto, pues fácil, se me salen de las manos la infinidad de variables a manejar y cualquier cosa más que en sus cabezas llenas de sabiduría ronda y que pueden ser muy validadas.

Según los resultado, y teniendo en cuenta que se usó el Framework .Net para el desarrollo de la aplicación de laboratorio, en visual studio si viene optimizada la sentencia switch (bueno hasta el momento ya saben la tecnología es muy variable, año 2016, jeje).
  • El uso de Switch para comparaciones simple y que tengan varias posibilidades es más rápido, que el uso de if y if else anidados (teniendo en cuenta que no evaluamos un caso para un valor inicial como el número 2).
  • En ese mismo caso la sentencia if else anidada es un poco mas rapida que la if. 
  • Que la arquitectura de procesador si importa a la hora de velocidad de cómputo, :), eso lo sabemos pero aquí se comprueba otra vez. 
Generalmente eso, falta mucho para afinar este laboratorio, pero si hago un par de casos más se alargaría tanto este tema que me tocaría que desplazar muchas cosas personales que tengo que hacer y eso que ya llevo desarrollando este post por más de dos semanas. 

Te reto a que hagas algunos caso como: 
  • Tomar el valor 2 con el mismo número de ciclos, para ver qué resultados se obtiene. 
  • Que pasa si aumentamos el número de ciclos a 4000000. 
  • Probar en una arquitectura AMD.

Si ven, salen muchas posibilidades y casos interesantes, me surgieron varias preguntas, no solo sobre el tema en cuestión de switch o if, sino a nivel de rendimiento de procesamiento, comparaciones, se me ocurrió una idea para un proyecto y es crear un programa para estadísticas de procesamiento de un computador, tengo muchas cosas por hacer, si tambien incluyo jugar wow en ellas por eso si alguien quiere trabajar en dicho programa, pues nos contactamos para desarrollar algo divertido y funcional.

Por el momento me despido, y feliz laboratorio.

@drincast