martes, 14 de septiembre de 2010

Dos casos de como extender módulos de Linux para temas particulares

Router linux: SyncLink + HDLC + Frame Relay?


Alla por el 2000, cuando internet por banda ancha no existia (en gran medida), en el lugar donde trabajaba decidimos contratar una linea dedicada de telefónica.

Para no comprar un costoso router, la idea era conectarla directamente al servidor linux.
Inicialmente desde la empresa de comunicaciones me habían confirmado que era una linea punto-a-punto común, con protocolo PPP, entonces compramos una placa SyncLink serie sincrónica de alta velocidad para conectar al "modem" de telefonica.

Lamentablemente no funcionó, ya que en realidad el servicio se conectaba directamente a la red Frame Relay, por lo que la placa por si sola (un puerto serie), no era suficiente (por algún malentendido no nos habían enviado la información técnica correcta... menos mal que no compramos un router más caro).

Si mal no recuerdo, en su momento, Linux soportaba levantar un canal DLCI de Frame Realy (con hardware especial), pero no había un módulo con la disciplina de linea HDLC para poder hacerlo desde un dispositivo serie.

Afortunadamente, gracias a que todos los fuentes del sistema operativo estan disponibles, no fue dificil armar un controlador que permitiera establecer este tipo de comunicación (mediante una interfaz de red "especial").

Subí este driver (es un par de archivos relativamente simples, incluyendo módulo, herramienta en modo usuario, scripts de configuración y compilación), por si alguien les puede ser de utilidad, pero creo que esto ya esta soportado en el kernel (de una manera más integrada):

hldc_fr_synclink.zip


Mis disculpas por no haber sido más prolijo en su momento y haberlo documentado mejor, incluyendo los créditos completos para los autores originales de cada porción de código tomada como base.

Picotux: "microcomputador" Linux


Allá por 2005, para un proyecto de control de acceso, donde se debía controlar varios dispositivos físicos (barreras, molinetes, sensores) y lectoras de tarjetas, experimenté con Picotux, una minicomputadora con linux embebido para aplicaciones empotradas.

Dicho aparato es bastante útil, sobre todo porque la conexión de red, memoria flash y capacidad de procesamiento superan por lejos a los microcontroladores convencionales, con la ventaja de que al tener GNU/Linux no solo se pueden administrar y programar remotamente, sino que también es posible usar muchos paquetes de software libre/código abierto (servidores web, protocolos de red, lenguajes de programación, etc.).

En mi opinión, la característica más importante fue, nuevamente, poder modificar el kernel de linux (núcleo del sistema operativo), para agregar funcionalidad particular, en este caso, convertir dos puertos "TTL" (GPIO pins) en serie, para poder controlar más de una lectora.
Gracias a tener disponibles las fuentes del sistema operativo y controladores (y varios ejemplos similares), con un poco de esfuerzo fue posible desarrollar un controlador para puertos serie (UART) por software (conocido como bit-banging) a muy bajo costo (comparado a tener que desarrollarlo por hardware).

También, por si alguien les puede ser de utilidad, subí este driver (un archivo bastante sencillo):
netarm_gpio_swuart.c

Conclusión


Mi idea de comentarlo aquí es solo a modo ilustrativo, de como el linux puede hacer una diferencia cuando tenemos que solucionar cierto tipo de temas particulares.

Además, creo que es un buen punto para educación, por ejemplo en materias como Sistemas Operativos y Redes, posibilitando profundizar y mejorar los contenidos teoricos y prácticos, de manera simple, con temas concretos usando software libre.

Si bien con otros sistemas operativos (no abiertos) se puede desarrollar drivers/controladores, en general no se tiene un acceso completo al código fuente para ver como estan hechas soluciones similares o como se debe comportar en determinados casos (o directamente modificar el sistema operativo para cubrir una necesidad particular), lo que puede impactar en el presupuesto y viabilidad de una solución.

viernes, 3 de septiembre de 2010

Se viene el PyDay 2010 Buenos Aires

Este sábado 4 de septiembre es la jornada sobre el lenguaje de programación Python "PyDay Buenos Aires 2010" organizado por PyAr:

http://www.pyday.com.ar/

Entre varias charlas agendadas estaré presentando web2py (una herramienta para desarrollo web simple y poderosa) y seguramente en los espacios abiertos y/o charlas relámpago hablaremos sobre los proyectos PyAfipWs (factura electrónica libre), PySimpleSOAP (webservices), PyFPDF, Gestión Libre, y demás temas generados desde nuestro emprendimiento "Sistemas Ágiles", sin olvidarnos de PostgreSQL y su nueva versión 9.0!

miércoles, 11 de agosto de 2010

Restaurando un GPS chino con software libre

Hace un tiempo me llegó un GPS "chino" (Viutech, hay otras marcas porque son genéricos, internamente vienen con WindowsCE).
Traen un software de navegación LogicGear o Igo8 (no Garmin) y una aplicación multimedia para reproducir musica, video y documentos.

Todo bien, lastima que es bastante frágil, y cada tanto la memoria flash interna (1GB) se corrompe (dañandose los archivos y no pudiendo entrar), por lo que el software de navegación deja de funcionar.


A tal punto se daño que aparecían archivos y directorios estraños, del tipo "ñ}çávèv" que ni siquiera se podían borrar con el explorador desde la PC, ocupando todo el disco sin dejar espacio disponible.

La única solución que encontré fue formatear la memoria interna (ADVERTENCIA: esto puede incapacitar permanentemente el aparato, usar con mucho cuidado bajo su propia responsabilidad)

La buena noticia es que hay herramientas avanzadas de software libre para poder manipular estos dispostivos de "bolsillo": synce y compañía (y en Ubuntu están muy bien soportados).

Para ello hay que agregar como orígen de Software http://ppa.launchpad.net/synce/ubuntu y descargar los siguientes paquetes:
  •  synce-hal
  •  synce-gvfs y gnome-vfs (para explorar los archivos)
  •  synce-trayicon (para poder montar facilmente el dispositivo)

Luego, por línea de comando, una vez conectado el aparato, ejecutar la herramienta para correr programas (en este caso, el explorador) :

synce-prun explorer

Con esto se abrirá el explorador en el aparato, donde podemos ir al "Panel de Control", "Storage Mananger", y ahí desmontar y/o formatear la partición (PELIGRO: seguramente tiene varias particiones y dispositivos, un error en este punto puede incapacitar permanentemente el aparato, usar con mucho cuidado bajo su propia responsabilidad)

Una vez formateada, al reiniciar el aparato se debería reestablecer la memoria interna sin datos, y en ese caso es posible volver a restaurar los archivos originales.  Para ello se puede usar synce-pcp o el navegador visual Nautilus (desde el SynCe Tray Icon, click derecho, WinCe, Explore with Filemanager)

viernes, 6 de agosto de 2010

PySimpleSOAP e integración con web2py

PySimpleSoap es una librería que desarrollamos inicialmente para comunicarse con los servicios web SOAP de Factura Electrónica de AFIP, a la que luego hice varias mejoras generales (desprendiéndola del proyecto original PyAfipWs), incluyendo:
  • Un despachador para construir servidores (similar a xmlrpclib)
  • Soporte para WSDL: instrospección y generación dinámica
  • Serialización y desserialización automática, con una representación de datos simple basada en diccionarios Python
  • Interoperabilidad con .NET, Java Axis y JBoss WS, probado con SoapUi y .Net Web Services Studio, cumpliendo con los estándares WS-I
  • Capacidad de realizar pedidos y respuestas crudas -sin procesar- (útiles para tipos de datos genéricos xsd:anyType u operaciones avanzadas)
  • Documentación WIKI, incluyendo ejemplos WSDL, pruebas básicas de compatibilidad y rendimiento
  • Limpieza y estabilización de la API (incluyendo mejoras a SimpleXMLElement, una forma fácil y rápida orientada a objetos de manipular XML)
A diferencia de otras soluciones, nuestro acercamiento es simple e intuitivo, no requiere complicadas definiciones XML o código autogenerado, flexibilizando el desarrollo rápido de webservices con el dinamismo de Python.

Desde la reciente versión 1.82.1, la integramos con web2py, lo que lo convierte en una plataforma con soporte completo para exponer y consumir servicios web, complementando la infraestructura previa de json y xml_rpc, con un enfoque simple similar.

Esta disponible un servicio online para pruebas, con una página que contiene la descripción y mensajes de ejemplo:
Los comentarios son bienvenidos, sobre todo reportes o casos de prueba, ejemplos, colaboración con otras librarías para mejorar la interoperabilidad, etc.

sábado, 29 de mayo de 2010

Curso de Factura Electrónica y Software Libre

Esta abierta la inscripción para la nueva edición del curso sobre las últimas novedades de Factura Electrónica y Servicios web AFIP, relacionado con la interfaz PyAfipWs de Software Libre hecha en Python:

Curso Facturación Electrónica y Software Libre
Fecha: Viernes 25 de Junio de 2010
Horario: 18 a 20 hs
Lugar: AUBA - Club de Programadores Asociación Civil
Dirección: Auditorio Congreso - Entre Ríos 166 - C.A.B.A.

El temario incluye una introducción a factura electrónica nacional original (WSFE), y los nuevos web services de bienes de capital (WSBFE), seguros de caución (WSSEG), factura electrónica de exportación (WSFEX).
También comentaremos sobre temas relacionados, como ser el Código de Trazabilidad de Granos -Carta de Porte- (WSCTG), depositario fiel (wDigDepFiel) y Remito Electrónico ARBA (COT).

A su vez, presentaremos el aplicativo PyRece (simil RECE - SIAP) libre y gratuito para generar y autorizar facturas electrónicas,
entre otros proyectos relacionados.

La entrada es libre y gratuita, los interesados pueden consultar los detalles e inscribirse en:

http://www.clubdeprogramadores.com/cursos/CursoMuestra.php?Id=600

Más información:

http://www.pyafipws.com.ar

Se agradece difusión,

domingo, 2 de mayo de 2010

PyDay 2010 Rafaela, web2py y más

Está abierta la inscripción para participar de PyDay Rafaela 2010, la primer jornada sobre el lenguaje de programación Python en Rafaela (Santa Fé, Argentina),  a realizarse el día 8 de mayo en la sede de la
Universidad Católica de Santiago del Estero, Departamento Académico Rafaela, ubicada en Hipólito Irigoyen 1502, organizado por PyAr:



Más información en: www.pyday.com.ar


Hay varias charlas agendadas, entre ellas daré una charla de web2py y seguramente en las charlas relámpago comentaré sobre los proyectos PyAfipWs (factura electrónica libre), Gestión Libre y/o nuestro emprendimiento Sistemas Ágiles.

viernes, 9 de abril de 2010

Abierta la inscripción a FLISOL 2010 en González Catán

FLISOL, el Festival de Instalación de Software Libre que reúne a toda Latinoamérica, estará presente en González Catán el sábado 24/04/2010
Podés traer tu computadora y te ayudamos a instalar programas libres, que podés copiar, estudiar, corregir, modificar, compartir y seguir copiando.
Además: charlas informativas y demos para que conozcas más y disfrutes mejor las ventajas del Software Libre.
La entrada es libre y gratuita, sólo necesitamos que te inscribas previamente por nuestra web:

http://www.institutopascal.edu.ar/flisol2010

Participan integrantes de las siguientes comunidades locales, quienes estarán a cargo de las instalaciones, charlas y demostraciones:

viernes, 19 de marzo de 2010

Clase Abierta: Introducción a Python, PythonCard y Web2Py

Invitamos a los interesados en programación, desarrollo de aplicaciones y diseño web a presenciar una clase abierta de la carrera Analista de Sistemas de nuestro instituto, donde analizaremos las virtudes del lenguaje de programación Python, herramienta PythonCard para diseño simple de aplicaciones visuales (GUI) y Web2Py para diseño ágil de sitios interactivos web 2.0.

Fecha: Miércoles 31 de Marzo de 2010
Horario: 18:15 a 22:30
Lugar: Instituto Superior Tecnológico Blaise Pascal
Dirección: Puerto Argentino 4238 - González Catán - Buenos Aires - Argentina
Entrada libre y gratuita previa confirmación por email debido a cupos limitados.
http://www.institutopascal.edu.ar

Temario:

1. Introducción a Python: ¿Que es python?; El Interprete; Estructura Básica; Tipos de datos simples; Tipos de datos compuestos; Control de Flujo; Funciones, Clases y Objetos; Excepciones; Módulos, paquetes y espacios de nombre
2. Introducción a la Biblioteca Estándar: sistema operativo, fecha y hora, expresiones regulares, números decimales, aleatorios, matemática, acceso a sitios web, manejo de email, xml, compresión
3. Interfaces gráficas "visuales" con PythonCard. Similitudes y diferencias con Visual Basic.
4. Desarrollo web 2.0 con web2py. Similitudes y diferencias con PHP. Diseño web HTML/CSS. Interactividad con Ajax (javascript).

Se agradece difusión.

domingo, 14 de febrero de 2010

Factura Electrónica de Exportación y ejemplo soap simple

El Web Service de Factura Electrónica de Exportación (WSFEX) es un nuevo servicio web de la AFIP para autorizar facturas electrónicas de comercio exterior (obtener el CAE).

Para poder usar estos webservices, como se comento en varias oportunidades, desarrollamos interfaces propias hechas en Python debido a la incompatibilidad y complejidad de otras soluciones (.NET, Java, PHP).

A continuación se presenta un ejemplo de cuatro simples pasos, sobre como usar SoapClient y SimpleXmlElement para consultar fácilmente los servicios web de AFIP:

Paso 1: Importar las clases que necesitamos utilizar de nuestras librerias de XML y SOAP:
from simplexml import SimpleXMLElement
from soap import SoapClient

Paso 2: Revisar el wsdl que describe los servicios y extraer URL, acción y espacio de nombres (buscar atributos location, soapAction -sin la operación-, targetNamespace respectivamente):
WSFEXURL = "https://wswhomo.afip.gov.ar/wsfex/service.asmx"
SOAP_ACTION = 'http://ar.gov.afip.dif.fex/'
SOAP_NS = "http://ar.gov.afip.dif.bfe/"

Paso 3: Creamos nuesto cliente SOAP de servicio web:
client = SoapClient(WSFEXURL,action=SOAP_ACTION, namespace=SOAP_NS, trace=True)

Paso 4: Llamamos a la función remota, por Ej. FEXDummy que obtiene el estado de los servidores de la AFIP. Para ello debemos invocar el método "virtual" del objeto client de acuerdo como especifíca el wsdl (se recomienda leer el manual del desarrollador que proporciona AFIP ya que el wsdl no es muy intuitivo). Como respuesta nos devuelve un objeto XML al cual podemos acceder directamente por sus atributos:
response = client.FEXDummy()
result = response.FEXDummyResult
print str(result.AppServer)
print str(result.DbServer)
print str(result.AuthServer)

Esto es todo, si funcionan bien nos debería imprimir el estado de los servidores (OK si estan funcionando).

Notar la simplicidad y dinamismo gracias a Python, sin perder flexibilidad, pudiendo invocar métodos arbitrarios y convertir los tipos de datos según nuestras necesidades.

En este caso el método del servicio web no recibe parámetros, si los tuviera se pasarían como argumentos por nombre (usando valores simples, diccionarios u objetos) de Python, ej.: 
response = client.FEXGetPARAM_MON(Auth={"Token": token, "Sign": sign, "Cuit":long(cuit)})
También puede tomarse como referencia los ejemplos de AFIP hechos en PHP, ya que desarrollamos estas herramientas para que sean similares.

El código completo para utilizar el servicio web de factura electrónica de exportación puede ser descargado de google code

Para más información y novedades sobre estos temas exite un grupo de noticia, el sitio con información general del proyecto y la páginas sobre factura electrónicainformación técnica y la interfaz PyAfipWs.

domingo, 7 de febrero de 2010

web2py: el marco de trabajo web impresionante

Aprovechando el lanzamiento de la lista de correo y sitio web para la comunidad en español de web2py ("el framework web empresarial" que permite el desarrollo rápido de aplicaciones web2.0 profesionales), publico esta traducción de una recomendación que hice en ohloh:

Habiendo trabajado con jsp, php, turbogears y/o django,  cuando conozca web2py no va a querer mirar átras...

Web2Py hace al desarrollo web fácil y más eficiente, permite enfocarse en la lógica del negocio y no en temas técnicos triviales o esotéricos.

Características principales imponentes (por lo menos para mí):
  • Instalación muy simple, practicamente sin configuración (tanto de forma independiente y mod_wsgi)
  • La capa de abstracción a la base de datos (DAL) permite consultas poderosas sin siquiera una única linea de SQL, y no se necesitan complejas clases del modelo (adiós ORMs...)
  • Intuitivo y con curva de aprendizaje muy baja, ideal para ser enseñado en el aula para niveles principiantes
  • Estructura sólida todo-incluido, incluyendo ajax, menús, formularios, caching, GAE, etc. Su diseño limpio y seguro previene los problemas más comunes del desarrollo web.
  • Verdaderamente pythónico: modelos, vistas y controladores dinámicos, simples y explícitos, con un lenguaje de plantillas programable con python y ayudantes HTML.
  • Sin complicaciones de línea de comandos, incluso incluye un entorno integrado de desarrollo y herramientas de administración totalmente en línea, con un editor de código y html web, sistema de tickets de error, subida de archivos, etc.

viernes, 5 de febrero de 2010

Orientar al Software Libre la carrera de Analista de Sistemas (proyecto)

En el Instituto Superior Tecnológico Blaise Pascal (terciario donde trabajo dictando dos materias de la "Tecnicatura Superior en Análisis de Sistemas"), venimos analizando algunas dificultades que se presentan en el desarrollo de la carrera, entre ellas: dispersión de contenidos, problemas para alcanzar los objetivos téoricos y prácticos adecuados, falta de motivación, aislamiento, etc.

Para superar estas dificultades, y teniendo en cuenta el tiempo como un factor limitante (tanto de docentes como de alumnos), una primer medida fue unificar los trabajos prácticos y apoyarlos transversalmente desde distintas materias. Si bien hubo una mejora, también hubo algunas complicaciones. Principalmente, la variedad de proyectos y herramientas fue contraproducente, no alcanzando las horas de clase destinadas a la práctica para abordar correctamente las dificultades planteadas por cada alumno.

Por ello, y para terminar de reforzar los contenidos y superar todas estas dificultades, es donde surge el software libre como solución. Por sus características abiertas y participativas, no solo se unificarían y profundizarían los temas teóricos, generando una continuidad más armoniosa entre las distintas asignaturas (eliminando temas solapados y mejorando el aprovechamiento de los tiempos disponibles), sino que además proveería proyectos concretos y reales para la práctica profesional.
De este modo nació el "Proyecto Curricular Institucional de la Carrera Analista de Sistemas orientado al software libre", inicialmente como un conjunto de ideas planteadas en las distintas reuniones entre docentes, que luego organicé en un documento más formal, con su debida justificación, y esperamos terminar de discutir y aplicar para este ciclo lectivo.

Este proyecto cumple con el plan estudio propuesto por la provincia de Buenos Aires utilizando integramente software libre, y su estructura es similar a los planes que se dictan en universidades nacionales y privadas (en ocasiones también con herramientas libres), aunque la carga horaria y objetivo son sensiblemente diferentes, por ello también la necesidad de optimizar los tiempos y ampliar los horizontes de salida laboral. 
Si bien es un proyecto específico para este instituto (ya que tiene en cuenta la situación y contexto local), puede ser aplicable a otras instituciones, ya que se basa en la resolución provincial que regula la tecnicatura, por lo que cada institución podría adaptarlo según sus necesidades específicas con la correspondiente capacitación docente (para ello se está trabajando desde el nuevo programa INTI-Sol, desde el taller de Educación y Capacitación).

Como eje se plantea tres herramientas básicas principales: GNU/Linux como sistema operativo, Python como lenguaje de programación y PostgreSQL como la base de datos. La elección, que responde a varios criterios detallados en el documento, es la que estimamos más adecuada teniendo en cuenta sus características didácticas, nuestros conocimientos como docentes y la posibilidad de capacitación y desarrollo de los contenidos y objetivos de las asignaturas (y de hecho ya se venía trabajando con dicho software satisfactoriamente).
Seguramente otros docentes pueden estimar que para su problemática se ajustan otras herramientas, bienvenidas sean, en mi opinión la diversidad es una ventaja, no un problema. Igualmente se planea usar o estudiar otras alternativas (Windows, PHP, MySQL, OpenOffice Base/Basic simil Access/VB) para que el alumno pueda comparar y elegir libremente.

Cabe aclarar que además están disponibles herramientas libres para todas las necesidades de la carrera (desde el editor de textos hasta repositorio de código, diagramación, etc.), y de más esta decir que el software libre es maduro, comercialmente viable (usado por las principales empresas y organismos, estatales y privados) y no solo cumple con los contenidos teórico-prácticos sino que también contempla las implicancias éticas de la profesión en el contexto social de nuestro país, y permite al alumno proveer soluciones y servicios diferenciados y competitivos.

La idea es que, en la medida de lo posible, todos los materiales (apuntes, trabajos prácticos, etc.) sean libres (licencia GNU Free Documentation License -GFDL- o similar), garantizando para sus contenidos, exactamente los mismos derechos que tienen los usuarios del software libre sobre las aplicaciones.
Además, creo que es fundamental que estos materiales sean generados dentro de la comunidad (ya sea para compartir recursos y unificar criterios entre los distintos docentes, como para favorecer la investigación y actitud autodidacta de los alumnos). En esto vengo trabajando en los sitios de los grupos de usuarios de PythonPostgreSQL en Argentina, tratando de retribuir generando materiales (apuntes, tutoriales, presentaciones, traducción de documentación, etc.), ya que creo que un punto esencial para elegir estas herramientas es que existan localmente comunidades fuertes y activas.

Desde ya queda abierta la convocatoria para que podamos colaborar entre todos y lograr una enseñanza sustancial y significativa.

Por último, los interesados que deseen revisar el documento de trabajo pueden hacerlo en GoogleDocs:
http://docs.google.com/Doc?tab=edit&dr=true&id=dd9bm82g_428g8zvfvdx
Última Versión Publicada:

Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.