martes, 5 de enero de 2016

Robot buscador de objetos - Reconocimiento de colores

"Hace mucho que no andaba por aquí. Al parecer, la entrada anterior de migraciones a PostgreSQL le ha servido a muchos, y estoy muy contento por eso. He recibido muchas consultas, pero por escasez de tiempo no puedo contestar todos (sabrán disculpar la vida de un informático). Sin embargo, mi vida no solo son base de datos."

Aquí les dejo un video de mi proyecto de grado. Se trata de un robot que busca objetos en una habitación y los reconoce mediante su color. Fue realizado con las herramientas Robotics Studio de Microsoft y el robot Create de iRobots (similar a las aspiradoras que se venden en el mercado) y un servicio programado en C# que consume la librería de AForge.Net.

Enjoy it!



Dudas, sugerencias y consultas,estaré dispuesto a responder (si me esperan ;)

lunes, 18 de noviembre de 2013

Conexión con Impresoras Fiscales HASAR - El driver es gratuito - No se deje engañar!!

"La verdad que estoy bastante enojado, Resulta que cuando voy a implementar un sistema de gestión de ventas me doy con que la impresora fiscal imprimía en el nombre de los artículos *DEMO, por lo cual el ticket queda inutilizable"

Hay una empresa, bastante conocida, (es más si uno busca "driver fiscal" o "driver hasar" en google es indexada en los primeros resultados) que ofrece drivers de impresoras fiscales de las marcas más conocidas, tales como Hasar y Epson.

Sin embargo el driver que se puede descargar es una versión de prueba! Si se quiere que funcione correctamente (no aparece *DEMO en el ticket) hay que pagarlo. Pagar qué?

Los drivers tanto de Epson como de Hasar están disponibles en sus respectivas páginas web con sus tutoriales y ejemplos!!

Hasta que descubrí esto tuve que volver a programar todo con los nuevos comandos del driver original de Hasar (que en realidad son más fáciles de entender y usar que los que venden en esa página) significando para mí una pérdida de tiempo.

La ida de este tutotorial es que otros no pierdan el tiempo como yo.

El driver de Hasar que estoy usando es: Fiscal051122.Ocx

Lo podemos bajar desde http://www.grupohasar.com/sites/default/files/Tiqueadoras.zip

En el .zip se encuentran ejemplos y descripción de los métodos y además un spooler para poder usar la impresara desde la red (todavía lo estoy investigando, cuando logre hacerlo andar lo posteo)

Simplemente, debemos registrar la ocx para que nuestra herramienta de desarrollo lo detecte como un componente ActiveX

Para ello abrimos la consola de windows y ejecutamos:

regsvr32 c:\pathdelarchivo\Fiscal051122.Ocx

Nos saldrá un cuadro de diálogo afirmando que el registro fue correcto y listo, ya estamos en condiciones de trabajar de manera full.

En mi caso, uso la herramienta WinDev. Les dejo un ejemplo de código actualmente funcionando para imprimir facturas A y B:

PROCEDURE ImprimirTicket()
WHEN EXCEPTION IN
HReadSeek(setup,set_id,1)
AX_Ticketera>>Baudios(setup.set_velserial)
AX_Ticketera>>Puerto(setup.set_serial)
AX_Ticketera>>Comenzar() 
AX_Ticketera>>PrecioBase(False)
//Tipo de factura para abrir comprobante
AX_Ticketera>>TratarDeCancelarTodo
nTipofactura is int
IF STC_Factura="Factura A" THEN
nTipofactura=65
ELSE IF STC_Factura="Factura B" THEN
nTipofactura=66
END
//escribir
HReadSeek(cliente,cli_id,STC_Id_Cliente)
nCondfiscal is int
IF cliente.cli_condfiscal=2 THEN
nCondfiscal=73
ELSE
nCondfiscal=67
END
AX_Ticketera>>DatosCliente(cliente.cli_nombre,cliente.cli_cuit,67,nCondfiscal,"Domicilio")
AX_Ticketera>>AbrirComprobanteFiscal(nTipofactura)
AX_Ticketera>>ImprimirTextoFiscal("Detalle de su compra")
IF SC_Tablero.EDT_PagaConTarjeta>0 THEN
AX_Ticketera>>ImprimirTextoFiscal("Pago con tarjeta")
END
FOR EACH ROW OF TABLE_VentaRepuestos
AX_Ticketera>>ImprimirItem(TABLE_VentaRepuestos.COL_Nombre,TABLE_VentaRepuestos.COL_Cantidad,TABLE_VentaRepuestos.COL_Precio_Venta,21,1)
END
AX_Ticketera>>ImprimirPago("Efectivo",SC_Tablero.EDT_PagaConEfectivo)
AX_Ticketera>>CerrarComprobanteFiscal()
AX_Ticketera>>Finalizar()
DO
Error("Error al conectar con la impresora fiscal")
RETURN
END


Espero que le sirva a alguien, recuerde NO SE DEJE ENGAÑAR. 

Cualquier duda me escriben. Estoy aquí para ayudar, responder y discutir si es que se quiere. Saludos

martes, 17 de septiembre de 2013

Importar/Exportar datos de tablas de PostgreSQL usando .CSV desde Windows - COPY


El comando COPY nos sirve para generar archivos .CSV, allí hacemos la copia de los datos y luego la leemos. En la documentación de postgres nos recalca que, bajo Windows, debemos utilizar para el path los caracteres E'path', sino lo toma como un path relativo. Otro dato a tener en cuenta es crear una carpeta con los permisos de lectura/escritura. En este caso, yo cree una car

peta tmp en la raíz de C.

En este ejemplo lo usamos para copiar toda la tabla, sin embargo, también podemos filtrar los datos a copiar mediante una consulta SQL. Ver>


Abrimos la consola, ejecutamos psql desde la base de datos origen y escribimos

copy nombre_tabla to E'path' USING delimiters ';';

Luego, en otra consola, ejecutamos psql y nos conectamos a la base de datos destino y tipeamos

copy nombre_tabla from E'path' USING delimiters ';';

Ejemplo: copy usuario from E'C:\\tmp\\usuhoy.csv' USING delimiters ';';

*Nótese del uso de \\ como separador

*delimiters representa al caracter que usamos para separar las columnas. Si entramos a editar el archivo CSV, veremos que en este caso están separados por ; (puntos y comas)
Ej CSV:
               1;Ford;Azul;15000
               2:Chevrolet;Rojo;25000

Espero haber clarificado un poco lo que está en la red

lunes, 24 de junio de 2013

Cómo migrar de SQL Server (MS SQL) a PostgreSQL | Tablas + Datos | Tutorial paso a paso

"Luego de un largo período de inactividad y de depresión porque pensé que había perdido todos los screen shot del paso a paso que había hecho para este post, que fue lo que me llamó a armarme un blog, estoy de vuelta. Parece que mi escritorio estaba bastante desordenado porque al instalar Win8, mágicamente encontré una carpeta llamada IMG con todos los screen shot para este post, así que tomé valor para volver a escribir. 
Bueno, mucho bla bla, ahora vamos al grano. La verdad no encontré (o busqué muy mal) ningún sitio web que me explique cómo migrar de SQL Server a Postgres. El fin de este post no es explicar los motivos o razones para migrar (de eso hay mucho para ampliar, recomiendo leer SQL Server vs PostgreSQL, entre tantos otros), cada usuario tendrá lo suyo: postgres ofrece una mayor estabilidad, extensibilidad, es multiplataforma (corre en Win y Linux), otro tipo de licencia, no me gusta microsoft, etc. En fin, empecemos de una vez"

Siendo este un post destinado a un nivel intermedio-avanzado no me voy a detener en pasos sencillos como crear BD, manejar la consola de Windows, cambiar extensiones de archivo, etc. Existen otros tutoriales para eso.


Requisitos iniciales:

Tener instalada en el mismo Windows los motores SQL Server 2008 y PostgreSQL.

  • Descargar el driver JDBC de SQL Server (lo pueden hacer gratuitamente desde la página oficial de Microsft        - Driver JDBC SQL Server.
  • Descargar el Toolkit Migration de PostgreSQL, para lo cual comenzaré explicando la serie de pasos

Pasos:

Dentro del grupo de aplicaciones que nos instala PostgreSQL 9, encontramos Application Stack Builder,que nos permite agregar o quitar herramientas extras para manejar el motor. Lo ejecutamos:




Cliqueamos next y activamos el check de Migration Toolkit, para descargarlo e instalarlo debemos registrarnos en www.enterprisedb.com

 En la carpeta lib debemos copiar el driver JDBC de SQL Server que descargamos en pasos anteriores.
Antes que nada debemos crear una nueva base de datos (vacía) en PostgreSQL, será nuestro target, es decir, hacia donde se migrará la BD de SQL Server, nuestra BD destino.

Vista con PgAdmin

Ahora configuraremos los parámetros de conexión. Editaremos el archivo toolkit.properties con el bloc de notas o agregando la extensión .txt (recordar dejarlo con .properties).


Prestar atención a los parámetros, deben estar TAL CUAL, se ven en la siguiente imágen. Lo único que deben modificar son:

  • nombreBD: Nombre de la base de datos a migrar (en mi caso llamé a las de los dos motores por igual)
  • Usuarios y contraseñas source y target: Las dos conexiones deben estar autenticadas con usuario y contraseña (los usuarios y contraseñas por defecto de estos motores son lo que se muestran a continuación).


Abrimos la consola de Windows(Ejecutar cmd) y nos ubicamos en el path del migration toolkit.
Si tiramosun runMTK.bat -help veremos la ayuda de todos los parámetros posibles.

 Ahora bien los que usaremos para copiar tanto las tablas como los datos es el siguiente:

Ver últimas 2 líneas, lo anterior corresponde a otro proceso.

Pasado en limpio:


runMTK.bat -sourcedb type sqlserver -targetdbtype postgres -allTables -targetSchema public dbo

 Presionamos nuestro amigo el "enter" y...



 Más de 9400 filas han sido copiadas en la tabla turnohis!

Si señores, nuestra migración ha sido realizada con éxito. En este caso usé una base de prueba en SQL Server 2008 que contenía campos tinyint que no son permitidos en PostgreSQL, ya que quería mostrar el resúmen final. Por lo que de 168 tablas me migró 150, como vimos.
Podemos visualizar los resultados en los archivos log que se generan automáticamente...

Para corroborar, ejecutamos una consulta en nuestra base de datos destino, ya sea con PgAdmin o consola, como más les guste:



Felicidades! La migración ha sido exitosa. Tenemos nuestras tablas y datos en PostgreSQL!


Espero poder haber sido de ayuda, cualquier cosa me consultan.

Testeado con W7 - SQL Server 2008 - PostgreSQL

Saludos nerdianos!


--------------------------------------------------------------------------------------------------------
17/07/2014

Solución al error: java.lang.Exception: Network error IOException: Connection refused: connect

https://cgsrv1.arrc.csiro.au/blog/2010/05/24/java-sql-sqlexception-network-error-ioexception-connection-refused-connect-sql-express/

jueves, 31 de enero de 2013

Cómo desactivar plan de datos 3g en Andriod (cualquier empresa)

"A mucha gente le pasa que, cuando adquiere su primer Andriod, el primer día de uso se queda sin crédito, provocando el bloqueo de la línea, o aún peor (dependiendo del plan) tiene cientos de pesos de crédito a pagar a nuestra querida empresa proveedora de servicio móvil.
El problema radica que, al ser un SO que va a tener su primer uso y fue creado hace unos meses o quizás años (si vivís en el tercer mundo como yo) tiene instalada aplicaciones desactualizadas y Android se pone a actualizarlas automáticamente, sumado a que las compañías telefónicas nos brindan el chip que también, automáticamente al ingresar el chip configura la red telefónica, el centro de SMS y MMS y el plan de datos.
Qué bien no? O qué vivos no? Ustedes se imaginan la cantidad de dinero que hicieron, hacen y harán con nuestro primer día de uso del nuevo juguetito de cada uno de nosotros??? Hay mucha gente que no está relacionada con las nuevas tecnología (y no tiene por qué), y me da algo de bronca que les hagan estas cosas.  Después de esta pequeña intro muestro a ustedes la solución más sencilla a mi criterio."

Desactivar plan de datos (3g) en Android


Vamos a

Menú > Ajustes > Redes inalámb. y redes > Redes móviles > Puntos de acceso

Una vez ubicados en el Menú APN, veremos el nombre del APN (vendría a ser nuestra configuración plan de datos o 3g), por ejemplo, en el caso de Personal veremos:


  • Argentina:Personal:WAP (gprs.personal.com)
  • Argentina:Personal:MMS (mms)


El que nos interesa a nosotros es el 1. Veremos que tiene el círculo verde (significa que está usando esa configuración), y el problema es que no podemos desactivarlo por cuántas veces apretemos nuestro pobre dedito en el círculo verde.

Ahora va el truquito:

Presionamos nuestra tecla de menú de android: 




Tecleamos APN nuevo

En nombre le ponemos: Sin internet (o cualquiera que lo identifique, es irrelevante, pero no debe quedar vacío)
En APN le ponemos: Sin internet (o cualquiera que lo identifique, es irrelevante, pero no debe quedar vacío)

Lo que hacemos es "engañar" a nuestro android como si estaría usando otro APN pero no le pasamos ningún parámetro de configuración, o sea que cuando vaya a buscar la conexión no va a haber nada!! ;)

Tecleamos menú de vuelta y finalmente guardar.

Ahora veremos

  • Argentina:Personal:WAP (gprs.personal.com)
  • Sin internet
  • Argentina:Personal:MMS (mms)


Lo único que nos queda es seleccionar (dejar con el círculo verde) donde dice Sin internet o el nombre que le pusieron y listo!!! 

Lo bueno de ésto es que no eliminamos la configuración de nuestro proveedor, por lo tanto, el cambio es reversible. 

Nos quedará como un switch (interruptor),cuando quieramos usar internet de nuestro plan seleccionamos el de nuestra empresa (ej: Argentina:Personal:WAP ) si no queremos que nos consuma internet volvemos a elegir Sin internet.


Espero realmente que les sirva!! (y lo lean antes de prender su primer Andriod!!) Saludos compañeros!!


Nota: Estos pasos solamente desactivan 3g, podemos utilizar internet a través de redes Wi-Fi sin ningún inconveniente







Usando timer para ejecutar un procedure en el server - WebDev 17


"Estoy entrando al mundo de la programación con las herramientas de PCSoft, especialmente ahora enfocado en un proyecto en WebDev 17. Todavía estoy acostumbrándome a dividir el código en Navegador y Servidor, lo cuál no se si es tan bueno como parecía cuando lo leí el manual, ya que existen algunas funciones que no son compatibles en server y browser. Como todavía somos muy pocos los "WebDeveros" que hablan español, lo comparto con ustedes."


Finalmente hice andar un Timer en Web con el código que encontré en un foro francés (como verán, previo curso rápido de francés, jajaja) que te permite "engañar" a WinDev para ejecutar código en el Server, ya que la función Timer,como sabrán, solo te deja ejecutar procedures en el Browser. Les dejo el código y espero que a alguien le sirva, saludos!

1 - Código en el Load (Onload) de la page (Browser)

Timer("ProcTimer",100)

ProcTimer es es el nombre de un procedure browser al que llamaremos en el punto 2
100 es el tiempo de espera para que se vuelva a ejecutar el procedure (= 1 segundo)

2 - Procedure local (Browser)

PROCEDURE ProcTimer()
PageValide("",BTN_Timer)

En el procedure hacemos que se ejecute el código del botón que está en la page, en este caso se llama BTN_Timer.


3 - Code clic en el botón (Server)

Trace(HeureSys())

Ahora si ya podemos ingresar código que se ejecuta en el servidor"!!! Lo verificamos haciendo un trace...

Ejemplo útil: Si cambiamos Trace(HeureSys()) por EDT_Reloj=TimeSys() siendo EDT_Reloj un control campo de texto tenemos un reloj en nuestra página web actualizándose cada 1 segundo!


Si no fui claro o tienen dudas no duden en preguntarme, saludos compañeros!!    Javier

Cómo editar un archivo .PPS de Power Point?

"En algunas circunstancias, resulta que nos envían un archivo Power Point en formato presentación y queremos editarlo o ver algunas diapositivas en particular. En realidad, la duda surge en mi clase de la universidad, mi profesora (Analista en Sistemas), sin desmerecer su trabajo ya que es una excelente profesora, mientras daba su clase de ingeniería del software mostraba sus interminables presentaciones PPS y cada vez que empezaba una nueva clase debía ir a la última diapositiva del día anterior. Ahora tengo que ver sus diapositivas como guía de estudio, y buscando un poco encontré en "San Google" una solución muy sencilla que me pareció importante compartir. En fin, pateo al centro."

Para editar un PPS únicamente debemos cambiarle la extensión al archivo por PPT.


Para ello debemos tener desactivado la opción de ocultar las extensiones de archivos conocidos.

Como desactivarla? (En Windows 7*)


  • Abrir un explorador (cualquier carpeta), presionar la tecla 'Alt', veremos la barra de menú, clic en menú "Herramientas" y luego en "Opciones de carpeta".
  • Desactivamos la opción "Ocultar las extensiones del archivo para tipo de archivos desconocidos"(ver imágen de abajo) y aceptamos.



  • Esos pasos para poder ver y modificar las extensiones de los archivos. Ahora lo único que nos queda es cambiar la nuestra. Renombramos nuestro archivo mipresentacion.pps por mipresentacion.ppt y confirmamos la operación con un "Si".


Antes                                                                                         Después



Ejecutamos y sorpresa! Entramos a Power Point, y agradecemos Microsoft por hacerlos compatible!


                                                         Si no fui claro o tienen dudas no duden en preguntarme, saludos compañeros!!    Javier