domingo, 28 de junio de 2015

Base de datos contribuyentes AFIP

 En el proceso de implementar facturación electrónica en un par de clientes me doy con el padrón de contribuyentes AFIP pero en formato .db (sqlite). El sistema de consultas rápidas que estoy armando almacena en Mysql así que me decidí a migrar los mas de 4 millones de registros.
 La DDL (campos de la tabla padron) seria algo así:

-CUIT.
-Razon Social.
-Impuesto a las ganancias (Activo/No Inscripto/Exento/No Corresponde).
-IVA (Activo/Exento/No Alcanzado/Exento No Alcanzado/ Activo No Alcanzado).
-Monotributo (Categoría/No Inscripto).
-Integrante Sociedad (SI/NO).
-Empleador (SI/NO).
-Actividad Monotributo (Nro).

Aqui el Link



viernes, 20 de febrero de 2015

Arduino en la Industria?

  Llegando de mis merecidas vacaciones y después de no publicar nada en lo que va del 2015, quería compartir una serie de cuestiones referentes a Arduino. Debo decir que la comunidad es grandisima y genial por la diversidad de proyectos, sketchs y documentos que se pueden encontrar, un nuevo triunfo para el conocimiento libre sin dudas.
  Hace unas semanas atrás asistí a un expo de tecnología y automatización muy importante que se realiza anualmente por estos lares, mientras recorría los stands escucho la voz conocida (ronca de fumador empedernido) de un amigo, me detuve a saludarlo y también porque me inquieto su pregunta:

  -Que tienen de bueno los plc que no tengan los pics o las otras boards que hay en el mercado?

 La pregunta se la hizo a un vendedor (técnico) de una multinacional con gran enfoque en automatización y su respuesta textual fue:

-Mira, para que te des una idea estas comparando un iphone 6 contra un nokia 1100, el pic y las otras plaquitas es para cuando vas al cole y soñas con estudiar robotica o algo parecido y queres mover un motorcito o hacer una pequeña tarea de forma automática a muy baja escala y de muy bajo presupuesto, osea algo impensado en ambiente laboral o industrial.

  La respuesta nos resulto muy mezquina a los que en ese momentos estábamos mirando el stand y comenzó una serie de preguntas y respuestas a tal punto que se torno en debate (los 5 que estábamos mirando el stand contra los 5 que atendían), la cuestión es que luego de esta respuesta, medio que me calente y pense por unos instantes (...el forro este sentado en su silla reclinable tomando nespresso responde con esa liviandad!), inmediatamente pregunto:

 -Tengo varias conjeturas en base a tu respuesta...

 primero: si lo que yo quiero es solo hacer llamadas me compro un nokia 1100, vale el 2% de un iphone 6 y te dura 7 días la batería.

segundo: un pic sin meterle gran cantidad de lineas funciona perfectamente en cualquier ambiente, arme un proyecto con pic que controla tarjas de turnos rotativos para los obreros en un lugar que se llama Campo Chico en Oran, donde la temperatura supera ampliamente los 40 grados y hace mas de 3 años que lo usan a diario.

tercero: las "otras plaquitas" que decís, como Arduino por ejemplo, desde hace mas de 3 años que están basadas en arquitectura ARM lo cual, si entendes algo del tema, sabrás que son capaces de manejar interrupciones propias, 32 bits, sistemas operativos nativos, lenguajes propios e interpretados y varias cuestiones mas...

cuarto: Instale un Arduino Mega en un contenedor que es una sala de generadores en la Cordillera de las Andes a mas de 4.000 metros sobre el nivel del mar en una caja estanco alimentado con panel solar + regulador rectificando a 5v, funciona desde  Marzo 2013 con temperaturas que oscilan de -25 a 35 grados centigrados y vientos que llegan a 110 kilómetros por hora conectado a ethernet shield + sensor de temperatura(hace datalogging en sd card cuando pasa umbrales establecidos cada un minuto, grabando temperatura-humedad-fecha-hora) certificado y calibrado + sensor de monoxido de carbono (graba registro en sd card si el valor expresado en particulas por millon es mayor o igual a 30 por un lapso de 45 minutos y mediante la gsm shield envía un sms al de seguridad e higiene y al de mantenimiento) certificado y calibrado + decibelimetro(si los decibeles son mayor o igual a 70 graba en sd) certificado y calibrado+optoacoplador con salida a 220v AC 10A, aquí se conectaron un reflector (exclusivo para tablero principal y 1er tablero segregado aguas abajo) estanco led a 220v 6000 lumenes conectado a switch booleano (sensor de presencia/pulsador) + driver con salida a 220v 30A y motor paso a paso 220v a 6 newton por metro cuadrado (el motor abre/cierra puerta aislante para ambiente controlado donde están los filtros, aceite y una pc touchscreen para control de services preventivos y correctivos de generadores) + higrometro (pequeño sensor que mide presencia de agua, si llego a nivel 2 que sera 1.5 cms graba en sd card y manda sms a personal responsable)  + impresorita térmica arduino con teclado membrana (si la pequeña insulsa esta funciona en el ambiente controlado perfectamente e imprime un reporte de los valores fuera de los umbrales establecidos en temperatura, decibeles, nivel de agua en suelo, humedad y gases).

la ultima acotación que hice fue: Tenemos plcs para manejar bombas trifasicas, agitadores, motores eléctricos grandes, un tablero de transferencia y dos cintas transportadoras medianas + scada que por batch replica a un motor de base de datos (cabe aclarar que el Arduino también replica a un mysql)...TE CUENTO TODO ESTO PARA QUE SEPAS QUE LA IMPLEMENTACION REALIZADA CON ARDUINO SE HIZO EN UN 1/3 DEL TIEMPO QUE PROYECTARON HACER CON PLC E INVERTIMOS MENOS DEL 10 % DE DINERO...

Ergo: 
        -Para grandes tensiones, para grandes corrientes, para grandes volúmenes en gral lo correcto es usar plc sin dudas.

        -No todo lo que implica industria funciona a >=380v o a cientos de amperes.

        -Se pueden usar sensores calibrados y certificados fuera de plc.

        -Zelio no es plc, no es mas que un rele "casi inteligente" (se configura mediante diagrama de bloque, imaginate...).

        -Si Arduino funciona en las inclemencias climáticas que comente...funciona en muchiiiisimos lugares!.




sábado, 27 de diciembre de 2014

Base de datos de paises, provincias y localidades de todo el mundo

  Parámetros muy útiles en el desarrollo de aplicaciones, disponer de tablas relacionadas con países, provincias y localidades...
  La siguiente base de datos esta para mysql, pero funcionaria perfectamente en Oracle, Postgres, Sql Server y demás, esta trimiada (termino vulgar para decir libre de basura), en Español y muy sencilla de entender. Recuerden setear las tablas a UTF8 en vuestro motorcico de base de datos para intepretar acento y eñe.
  La DDL seria algo así (localidades con 2 fk por el tema de cascada en alguno motores):

##paises
paiscod *pk
paisnom

##provincias
provincod*pk
provinnom
paiscod*fk

##localidades
localidcod*pk
localidnom
provincod*fk
paiscod*fk















 Link de descarga

domingo, 14 de diciembre de 2014

Sistema para PyMES gratis

 Sistema bastante completo para ventas, gestión y control de stock, unas de sus principales bondades es que corre perfectamente en computadoras de bajo costo y moderadas prestaciones (probado en pc con 256 de ram, amd sempron 1.8ghz, disco de 40gb y windows xp light ).
 Algunas de las bondades del sistema son:

-Proveedores.
-Clientes.
-Control de caja.
-Reportes.
-IVA compras.
-Manejo de código de barras para los artículos.
-Control de stock e inventarios.
-Control de cajas.
-Manejo de compras y ventas.
-Pagos.
-Control de tarjetas de crédito.
-Cuentas corriente.
-Imputaciones y ajustes.
-Notas de crédito.
-Notas de débito.
-Control detallado de saldos y movimientos.
-Facturación.
-Devoluciones de mercadería.
-Manejo de perfiles/jerarquía de usuarios.
-Centros de costo.
-Listas de precio.
-Señas/adelanto por productos.

  Instrucciones:

    Descomprimir y copiar la carpeta a C:\ el sistema tiene tres archivos ejecutables (compras, caja, stock) hacer acceso directo de c/u al escritorio. El usuario y pass del administrador estan en el archivo de texto. En el caso de que una compu este solo para facturar,  realizar el acceso directo del ejecutable caja.exe y....sale con frita.  











Link de descarga


martes, 9 de diciembre de 2014

Base de datos de marcas y modelos de autos

  Hace varios días que vengo atrasado con una migración y no tuve tiempo de postear nada, en ese proceso encontré una base de datos (sql) de marca y modelos de autos, es de este año así que resulta bastante útil para diferentes usos.
















     Link de descarga

viernes, 5 de diciembre de 2014

Enviar mail desde Linux usando Gmail

   Actualmente estoy usando un servidor Cloud (servidor de nube tipo dropbox pero corriendo localmente y open source...en algún momento voy a compartir un how-to al respecto)  y tenia la necesidad de configurar el servicio smtp en Linux(debian), por lo que voy a compartir como quedo parametrizado:

##instalamos exim
 sudo apt-get install exim4

## seteamos ip estática
sudo nano /etc/network/interfaces

##debera quedar de la siguiente manera
iface eth0 inet static
        address 192.168.10.10
        netmask 255.255.255.0
        network 192.168.10.0
        gateway 192.168.10.1

##declaramos la ip y nombre del servidor en /etc/hosts
##debera ser igual al que tenemos en /etc/hostname
127.0.0.1   localhost
192.168.10.10   servidor03.midominio.local    servidor03

## ahora hay que configurar exim para que envie correos a través de internet
sudo dpkg-reconfigure exim4-config

#Nos aparece un menu, vamos a seleccionar la segunda opcion smarthost

#En nombre del sistema de correo poner el mismo nombre configurado en /etc/hostname

#En Direccion IP de las conexiones entrantes SMTP poner  127.0.0.1

#En la opción Otros Destinos para que acepten correo, dejar en blanco.

#En la opción maquinas para reenviar correo, dejar en blanco

#En Direccion IP o nombre del smarthost poner: smtp.gmail.com::587  (asi tal cual con ::)

#En la opción ocultar el nombre de correo local para mensajes salientes, poner No

#En la opción limitar nro de consultas de DNS, poner No.

#Para el mecanismo de entrega de correo local, elegir /var/mail

#En la opción dividir la configuración en pequeños ficheros, elegir Si.

#Editar el archivo /etc/exim4/passwd.client donde se agregaran estas lineas:
##obviamente con el usuario y password de tu cuenta de mail
gmail-smtp.l.google.com:pepito@gmail.com:p4ssw0rd
*.google.com:pepito@gmail.com:p4ssw0rd
smtp.gmail.com:pepito@gmail.com:p4ssw0rd

##reiniciar exim
sudo service exim restart

#Los logs se podrán consultar en /var/log/exim4/

#Para controlar los mails que hayan quedado en cola:
sudo exim –bp

#Para borrar los mails en cola
sudo exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash

#Enviamos un mail de prueba
mail -s "Esto es una prueba" jaimito@gmail.com

LISTO! ya tenemos funcionando nuestro servicio de mailing desde Linux con una cuenta de gmail, lo cual es bueno ya que nos aseguramos de que lleguen a la bandeja de entrada ;)





miércoles, 3 de diciembre de 2014

Manuales Oracle

 Esta vida que te vuelve mercenario (entiéndase este termino por trabajar con cuestiones comerciales...como lo es Oracle) me llevo a relacionarme con este muy buen motor de base de datos y tuve la suerte de disponer de material de estudio a mas no poder!.
 Varios de estos documentos provienen de Metalink (departamento técnico oficial del soporte Oracle). En este archivo comprimido contiene material sobre:

-Conceptos básicos sobre Oracle database.
-Administración de base de datos Oracle.
-Scripting.
-Tunning(mejorar performance).
-RAC (alta disponibilidad).
-Seguridad en Oracle.
-RMAN(ackup&restore).
-SQL.
-PL/SQL.
-Datawarehouse.
-Datamining.
-Oracle en Linux.
-Dataguard(recuperación de desastres, contingencias).
-Tips para ser un buen DBA Oracle.
-Exámenes Oracle DBA.




















Link ->

martes, 2 de diciembre de 2014

Lenguaje Python para niños

Que geek no soñó con formar un hijo desde pequeño en algo bueno y sustentable como python!. Comparto un manual muy bueno escrito por Jason Briggs y traducido por Jose Miguel Gonzalez














Link manual


Maquina virtual con licencias full de Genexus

Probando un dork en google encontre esto.... una maquina virtual con winxp, genexus 8, 9 evo 1, evo 2 y las licencias full instaladas...
Very cool eh? aqui se ven los license manager de todas las versiones












Impresora Fiscal Hasar con php

  Me llama un flaco (supuesto novio de una prima) de los que piensan que los informáticos somos una especie de chaman que todo lo puede y me cuenta que compro un sistema de gestión + facturación (un afano! mas de 50k le cobraron por un sistema sin terminar...) y el programador nunca pudo hacer andar las impresiones en fiscal Hasar SMH/P 715F.
  Buscando un poco en los foros me doy con que, a simple vista, con hacer un declare IF_WRITE y declarando el puerto ya sale funcionando, en mi opinión se olvidaron de especificar algunas cuestiones, al menos para las impresoras Hasar...
 A continuación los requisitos:

  - Primero que nada la versión de php, la que sin dudas funciona con la librería Hasar es: php version 5.2.1. 

  - Luego copiar la librería php_H715v52ts.dll (mas abajo comparto el link con librería y un ejemplo .php).

  - Reiniciar servicio apache.

  - Asegurarse que la impresora fiscal este conectada al puerto que voy a declarar en mi código php.

Ejemplo:

<?php
  require 'H715PhpApi.php';  
  $port = IF_OPEN("COM8",9600);
  if ( $port == -1) 
  {   echo "impresora ocupada";   return;  }
  $nError = IF_WRITE("@OpenFiscalReceipt|T|T");  
// Argumentos: 
// strVar1 Texto descripción del item (max 20 bytes)
// dblVar2 Cantidad (nnnn.nnnnnnnnnn)
// dblVar3 Precio unitario (nnnnnnn.nn)
// strVar4 Porcentaje IVA (nn.nn)/(**.**) (max 5 bytes)
// byVar5 Calificador de la operación {Mm}
// strVar6 Impuestos internos
// byVar7 Parámetro display {012}
// byVar8 Calificador de monto {TB}
  
  // repetir esta linea sacando del detalle de la venta.
  $nError = IF_WRITE("@PrintLineItem|Mouse Genius XScrol|1.0|1|10.50|M|0.0|0|B");  
  $nError = IF_WRITE("@Subtotal|P|Subtotal|0");  
  // con cuanto paga
  $nError = IF_WRITE("@TotalTender|Efectivo|20.00|T|0");
  $nError = IF_WRITE("@CloseFiscalReceipt");
  $nTiquet = IF_READ(3);
  $err =IF_CLOSE();
?>













Link -> ejemplo + libreria