tacOmetro

Cuando el profesor de aplicaciones móviles me comentó sobre la idea de hacer un tacómetro para Android me pareció un poco descabellada la idea, después de mucho pensarlo (y buscar mucho en internet) se pudo, aquí una breve crónica al respecto, además del enlace a la aplicación y el reporte entregado.

Idea

La idea es hacer que mediante la cámara del dispositivo se perciba una imagen, de esta se extraiga la información necesaria como para crear un análisis en las variaciones de ilumnación de la misma. Se parte de la premisa de que cada que un objeto gire frente a la cámara habrá pequeñas (o muy grandes) variaciones en la iluminación. Entonces, contando estas variaciones y el tiempo que se lleva siguiendo podemos obtener la medición de las revoluciones por minuto. Esta parte de la aplicación se puede observar en este vídeo, en él se aprecia como es que la aplicación responde a las variaciones de iluminación:

El dispositivo a medir

Desde el inicio se supo que no podríamos medir cualquier cosa, ya que la prueba se debe desarrollar en ambiente controlado así que agarré mis Legos y de armar se trató esto:

Para finalizar

Ya para terminar les muestro un vídeo del producto funcionando, así como el reporte para que lo descargen y el enlace a la aplicación.

Ah, por cierto, esta la considero una aplicación muerta (ya no piennso seguirla actualizando) así que si alguien lo desea puede obtener el código fuente en GitHub para emplearlo como desee.

Reporte


¡Saludos!
@fferegrino :)

Para "perder el tiempo"

Si eres como yo, de esos que les gusta pasear por el internet, seguro te gustará conocer unos cuantos sitios más. Encontré unos blogs acerca del espacio y la tierra, estos sitios tienen unas cuantas fotos impresionantes y que espero ustedes disfruten "perdiendo su tiempo" tanto como yo lo hice.

Infinity Imagined
Heck Yeah Galaxies
Pappus' plane
Terra et Cosmos
Col. Chris Hadfield

En fin, todos son interesantes, si conocen otro más, coméntenlo para agregarlo a la lista.

¡Saludos!
@fferegrino :)

AndroidWebServer

La aplicación

Para construir un servidor web es necesario contar con un programa que haga las veces de “servidor”, es decir, que esté escuchando siempre en uno o varios sockets a la espera de algún cliente para servirle la información solicitada.
La interfaz gráfica será muy sencilla, una etiqueta para mostrar la IP del servidor, un botón para encender o apagar el servidor web y una consola para ver que es lo que está sucediendo, es decir llevar un registro de eventos.

Super query sobre Northwind

Antiguamente, en mis clases en UPIITA el profesor Carlos de la Cruz había pedido un query sobre la base de datos Northwind que nos devolviera las órdenes que tuvieran dos productos iguales, en aquel momento no pude hacerlo (t_t), pero ahora que lo ha vuelto a pedir en el grupo de mi maigo @Rosend_mc, me lo tomé personal y aquí está.

La consulta nos regresará pares de órdenes, con al menos dos productos iguales, sé que es enooorme y que seguro hay una solución mejor pero como siempre digo: por algo se empieza. Dejo el Script en SQL y un PDF en el que intento explicar los detalles de la consulta.

Descargar PDF con la explicación
SELECT DISTINCT O1.Or1
 ,O2.Or2
FROM (
 SELECT OD1.OrderID Or1
  ,OD2.OrderId Or2
  ,OD1.ProductID
  ,OD2.ProductID P1
 FROM [Order Details] OD1
 INNER JOIN [Order Details] OD2
  ON OD1.ProductID = OD2.ProductID
   AND OD1.OrderID <> OD2.OrderID
 WHERE OD1.OrderID IN (
   SELECT OD.OrderID
   FROM [Order Details] OD
   GROUP BY OD.OrderID
   HAVING COUNT(OD.ProductID) >= 2
   )
  AND OD2.OrderID IN (
   SELECT OD.OrderID
   FROM [Order Details] OD
   GROUP BY OD.OrderID
   HAVING COUNT(OD.ProductID) >= 2
   )
 ) O1
INNER JOIN (
 SELECT OD1.OrderID Or1
  ,OD2.OrderId Or2
  ,OD1.ProductID
  ,OD2.ProductID P2
 FROM [Order Details] OD1
 INNER JOIN [Order Details] OD2
  ON OD1.ProductID = OD2.ProductID
   AND OD1.OrderID <> OD2.OrderID
 WHERE OD1.OrderID IN (
   SELECT OD.OrderID
   FROM [Order Details] OD
   GROUP BY OD.OrderID
   HAVING COUNT(OD.ProductID) >= 2
   )
  AND OD2.OrderID IN (
   SELECT OD.OrderID
   FROM [Order Details] OD
   GROUP BY OD.OrderID
   HAVING COUNT(OD.ProductID) >= 2
   )
 ) O2
 ON O1.Or1 = O2.Or1
  AND O1.Or2 = O2.Or2
  AND O1.P1 <> O2.P2

Si lo mejoran no duden en pasarme su script.


¡Saludos!
@fferegrino :)

Usando OneNote en la escuela

Ahora que he regresado a la escuela he decidido usar OneNote para tomar mis apuntes, he de aprovechar que ahora curso asignaturas que tienen que ver por completo con el desarrollo de sistemas informáticos. Por el momento es un poco extraño oír solo las digitaciones mientras otros rasgan sus hojas con bolígrafos. Ya me acostumbraré.

Tampoco es que sepa aprovechar al 100% la plataforma de OneNote, pero de a poco se aprende (¿¡cómo inserto un dibujo en una hoja?!).

Ah, se me olvidaba, acá el link a los apuntes: Bloc de notas ESCOM_3, desde luego, se actualiza diario... o cada vez que tomo notas ;)

¡Saludos!
@fferegrino :)

Envío de correos "desde la base de datos" con .NET

Seguro hay otras maneras de hacerlo, pero cuando tienes que hacerlo rápido no hay muchas opciones, hablo de enviar correos periódicamente desde datos tomados de la base de datos.

Forma de uso
La solución que aquí propongo es de cierta manera "dinámica", ya que podemos usar este programita para enviar tantos correos como deseemos, lo único que necesitamos hacer es enviarle como parámetro el stored procedure del cual consultará los datos, el procedimiento le deberá devolver estas tres columnas al programa:

  • DESTINATARIOS: Una columna que contiene los correos a los cuales será enviado el mensaje. Los correos deberán ir separados por un ;.
  • ASUNTO: Contiene el asunto con el que será enviado el correo.
  • MENSAJE: El mensaje que contendrá el correo, puede ser HTML (recomiendo sea básico).



Como mencioné al principio de todo: probablemente haya mejores maneras de hacerlo ya que de esta manera dejamos toda la carga a la BD ya que es ella quien tendría que formar el mensaje, el dinamismo del que hablo radica en que nosotros podemos, con la ayuda del stored procedure sacar cualquier información que necesitemos de la base.

La forma de usar el programa es la siguiente:
$ SendMails storedProcedure
La mejor parte es que gracias a las tareas de Windows podemos programar el programa para que se ejecute periódicamente, tantas veces como deseamos y con un procedimiento distinto para enviar correos distintos cada ocasión.

Para configurarlo necesitamos poner nuestra cadena de conexión en el archivo app.config, así como los parámetros para enviar el correo, como el host, usuario, puerto...
<configuration>
  <appSettings>

    <add key="mailHost" value="smtp.gmail.com"/>
    <add key="mailUser" value="ejemplo@gmail.com"/>
    <add key="port" value="587"/>
    <add key="ssl" value="true"/>
    <add key="user" value="ejemplo@gmail.com"/>
    <add key="password" value="random*Pass"/>

  </appSettings>
  <connectionStrings>
    <add name="CON" connectionString="Data Source=localhost\SQL;Initial Catalog=DB;User ID=US;Password=PSWD" 
        providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

SendMailsApp (Se incluyen las librerías de Microsoft Practices necesarias para que el programa funcione).

¿Tienes alma de desarrollador?

Si necesitas algo más especializado te dejo el código la solución del programa hecho en C# y con Visual Studio  para que lo modifiques a tu gusto.

Cualquier duda o comentario siempre es bienvenido :)

SendMailsSource (Se necesitan algunas librerías de Microsoft Practices incluídas en el enlace de arriba).

¡Saludos!
@fferegrino :)

ediThor se muda a GitHub


Tiene rato ya que les había contado de ediThor, el editor de texto concurrente que en equipo programamos unos compañeros y yo para una asignatura en la UPIITA.

Pues resulta que en aquellos tiempos era un novato (más) en esto de compartir código en línea, ahora que ya me "enseñaron" a usar GitHub, he decidido mudar el proyecto a un repositorio en la plataforma. Cabe destacar que no es el ediThor (beta) del que se habla en la entrada anterior porque decidí reescribirlo todo (porque de igual manera el nivel de mi nuestra programación estaba bastante decadente en esos tiempos), eso sí, lo de beta aún no se le quita, "está chavo todavía" diría yo.

Pues así las cosas, si algún javamaniaco quisiera unirse al desarrollo del proyecto ya sabe en donde encontrarme. Con gusto colaboramos.

El repositorio es:



¡Saludos!
@fferegrino :)