Mostrando entradas con la etiqueta código. Mostrar todas las entradas
Mostrando entradas con la etiqueta código. Mostrar todas las entradas

miércoles, 1 de julio de 2026

mantenimiento forzado, de tractores a impresoras Epson waste reset

Hoy mi impresora me presentó un problema "La almohadilla de impresión a cumplido su vida útil, entre al soporte técnico", al entrar al sitio web la única opción es la compra de una nueva impresora. Ninguna opción a reparación!  

 Esto tiene relación con nuestra entrada (https://barrosjuan.blogspot.com/2024/12/reparacion-y-desarrollo-es-posible.html) sobre las trabas a la reparación en la tierra de las libertades y todo el lobby para contribuir a la obsolescencia programada y al consumismo, hoy me tocó a mí.

Es un registro en la memoria de la impresora que indica un límite alcanzado y se podría requerir mantenimiento o reemplazo total de la impresora. Luego de una búsqueda en internet, encontramos que existen programas en windows (Microslop - Microsoft) que hace el trabajo de alterar dicho el registro en la impresora, pero como uso Linux, la búsqueda se torna hacia proyectos que permitan hacer lo mismo desde este sistema operativo.  

El proyecto necesario es https://github.com/RxNaison/Epson-Waste-Reset  que nos permite crear un ejecutable en Microslop y para Linux. Luego de instalar Cmake y alguna otra cosita por allí, todo queda listo para realizar la prueba. Se siguen los pasos y la impresora vuelve a funcionar. Una vez más el código abierto salva el día (https://barrosjuan.blogspot.com/2019/03/the-linux-foundation-show-me-money.html

Algo que me llamó la atención es la capacidad de aumentar más modelos de impresoras a la lista y permitir cambiar estos tipos de registros, que más se parecen a las restricciones que ponen a los tractores para garantizar el servicio luego de venta (https://barrosjuan.blogspot.com/2012/05/tractores-gnu.html), para ayudar al proyecto se requiere algo de conocimiento de captura de paquetes en el puerto USB (https://barrosjuan.blogspot.com/2018/02/pcap.html

Algunas ocasiones usamos este espacio para guardar información sobre comandos que algún día podremos necesitar. Ver por ejemplo el caso de FFMPEG, (o para Latex https://barrosjuan.blogspot.com/2016/10/latex-doble-bibliografia-con-glosarios.html https://barrosjuan.blogspot.com/2013/07/latexdiff-undefined-control-sequence-dif.html)

O como cuando queremos conectarnos con algún dispositivo mediante los puertos de la computadora. Ver:

https://barrosjuan.blogspot.com/2015/10/avrdude-stk500recv-programmer-is-not.html

https://barrosjuan.blogspot.com/2015/10/waspmote-y-conexion-serial.html

https://barrosjuan.blogspot.com/2015/04/ant-smartphone-dev.html

 En fin, a seguir luchando por nuestro derecho a colaborar y a reparar!

viernes, 30 de enero de 2026

Cómo el improbable ministro digital de Taiwán hackeó la pandemia

Audrey Tang, la ministra digital del gobierno de Taiwán.

Audrey Tang afirma que la tecnología puede generar confianza, combatir la desinformación y fortalecer la democracia. Su plan podría incluso funcionar en Estados Unidos.

Tang, una prodigio de la piratería informática, mujer trans y la persona más joven en ser nombrada para el gabinete de Taiwán, afirma que las herramientas digitales pueden utilizarse eficazmente para construir democracias más fuertes, abiertas y responsables. 


App de mapeo colaborativo de mascarillas en farmacia durante el Covid, tras la publicación del sitio web, Wu recibió una factura de 2000 dólares. Al día siguiente, la cifra ascendió a 26 000. «Seguir por ese camino era inaceptable», escribió Wu en un documento publicado en HackMD, una herramienta de colaboración pública popular en el sector de la «tecnología cívica» de Taiwán: una comunidad poco organizada de hackers y ciudadanos con conocimientos informáticos dedicados a la participación ciudadana.

Tang cree firmemente en los datos abiertos, la gobernanza abierta y la colaboración entre la sociedad civil y el gobierno. 

Aunque Tang es una programadora de software experta con una larga trayectoria de contribuciones significativas a proyectos internacionales de software de código abierto, Para Tang, la importancia del portal del mapa de mascarillas residía en su función como espacio de participación . Recurrió a los principios básicos: el portal era un ejemplo de su enfoque taoísta para la acción política y social.

Ella abre en su monitor el capítulo 11 del Dao De Jing, un clásico de la filosofía taoísta de 2.500 años de antigüedad, y comienza a leer:

“ Ahuecado,
La arcilla hace una olla.
Donde no está la olla
Es donde es útil.

… Así que el beneficio en lo que es
está en el uso de lo que no es ”.

“Lo único que hice fue vaciar la arcilla para hacer una vasija”, dice Tang. “No hice nada después”.

Es seguro decir que la mayoría de los gobiernos no cuentan con funcionarios que tengan mucho en común con Tang, una mujer trans, hacker de software de código abierto, emprendedora y la persona más joven (a los 35 años, en 2016) en ser nombrada miembro del gabinete en Taiwán.

las distopías gemelas del caos informativo de la “posverdad” en Estados Unidos y el régimen totalitario de vigilancia y censura mediado tecnológicamente de China.
Con Audrey Tang como figura simbólica, la nación insular está planteando el argumento radical de que las herramientas digitales pueden utilizarse eficazmente para construir democracias más fuertes, más abiertas y más responsables.

Clásicos sin derechos de autor subidos al Archivo Gutenberg.

En 2014 se retiró del mundo empresarial y comenzó a centrarse principalmente en el compromiso cívico.
vTaiwan, un método para aprovechar lo que Tang llama la “inteligencia colectiva” de la sociedad civil con herramientas de software de código abierto con el fin de generar consenso popular sobre cómo el gobierno debería abordar temas controvertidos.

Para aquellos de nosotros que vivimos el surgimiento de Internet como una fuerza cultural importante en la década de 1990, la experiencia de ver a Tang dar charlas TED o explicar la democracia digital al público, o simplemente escucharla en persona, es como viajar en el tiempo a una era feliz donde la misma palabra "Internet" transmitía promesas utópicas de liberación.

Esto es especialmente cierto cuando Tang habla del movimiento del software libre y de código abierto. A finales de los años 90, el argumento de que compartir código libremente en Internet no sólo era una forma más eficiente de crear software sino también un modelo para una reorganización progresiva de la sociedad en general, tuvo un efecto embriagador para los nerds idealistas. La retórica se disparó: la democracia de código abierto marcaría el comienzo de una nueva era de política progresista. El éxtasis geek estaba al alcance de la mano.

Desde la perspectiva de 2020, la validez del modelo de desarrollo de software de código abierto como método eficiente para escribir código ha quedado bien establecida. La conclusión es difícil de evitar: Internet no ha cumplido sus promesas iniciales.

¿Cómo se pueden implementar herramientas digitales para generar confianza?

"Si ese tipo de diseño de mecanismo participativo eventualmente se convierte en la norma", dice Tang, "entonces veremos un cambio radical y la gente comenzará a pensar en cómo colaborar con diferentes personas, en lugar de presentarlas como otras".

Proceso de Taiwán para regular Uber. Para tener alguna posibilidad de que las prácticas de tecnología cívica funcionen, se necesita una masa crítica de ciudadanos que estén dispuestos y sean capaces de participar.

“Internet y la democracia evolucionaron juntas, se extendieron juntas y se integraron entre sí”, escribió Tang en un manifiesto de 2016.

comunidad de programadores de código abierto que querían involucrarse en temas sociales. "Los hackers cívicos en Taiwán están muy dispuestos a ensuciarse las manos. En Taiwán es algo genial, tanto colaborar con el gobierno como resistirse al gobierno".

La comunidad g0v es la destilación más pura de la intersección de los valores del código abierto, la democracia e Internet en Taiwán. g0v se describe a sí misma como una comunidad descentralizada "que tiene como objetivo utilizar la tecnología para el bien público, permitiendo a los ciudadanos un fácil acceso a información vital y poder para dar forma a la sociedad civil".

En los años posteriores al Movimiento Girasol, los miembros de g0v se han dedicado a hacer que los procesos gubernamentales sean más visibles para el público en general. El hackeo más destacado de g0v es una red de sitios web que ocultan la infraestructura en línea del gobierno. Budget.g0v.tw es una versión independiente del sitio web oficial del ministerio de presupuesto del gobierno taiwanés.

Otro ejemplo de activismo tecnológico cívico derivado de g0v es Co-Facts, una asociación voluntaria de verificadores de datos. Co-Facts se basa en un bot de chat para la aplicación de mensajería LINE que responde instantáneamente cuando los usuarios envían información potencialmente errónea que ya ha sido registrada y verificada. Se dice que Taiwán está sujeto a más desinformación por parte de gobiernos extranjeros que cualquier otro país del mundo, en gran parte debido a su estancamiento de décadas con China, que se niega a reconocer a Taiwán como una nación independiente. Co-Facts es una respuesta del sistema inmunológico del sector tecnológico cívico taiwanés al implacable ataque de desinformación.

vTaiwan fue el primer intento de Audrey Tang de diseñar un espacio de participación que conectaría a la generación en línea de Taiwán con los aspectos prácticos de la formulación de políticas gubernamentales. vTaiwán ayuda en  la regulación: de Uber y de la venta de alcohol en línea.

Tanto Join como vTaiwan están construidos sobre Pol.is, un programa de software de código abierto que se describe mejor como un mecanismo para desarrollar consenso sobre temas en disputa. "Pol.is", dice el cofundador Colin Megill, "es una herramienta para convertir a las multitudes en coherencia".

Pol.is pretende ser un antídoto a la polarización alimentada por el discurso tradicional de Internet. Pol.is es un programa creado específicamente para prevenir guerras incendiarias. "Hay mucho diseño muy intencional que garantiza que las personas solo puedan agregar, pero no restar, ni restar valor a la conversación", dice Tang.

No hay botones de respuesta en Pol.is. Todo lo que puede hacer es estar de acuerdo o en desacuerdo con una afirmación sobre un tema determinado (por ejemplo, ¿debería permitirse a Uber rebajar el precio de las compañías de taxis establecidas?).

Si la interfaz restringe la interacción a simplemente expresar aprobación o desaprobación, los trolls pierden interés.

En Pol.is, el éxito se define por la consecución de grupos de acuerdo. El objetivo, dice Tang, no es la unanimidad, sino más bien un concepto tomado de la comunidad de desarrolladores de software de código abierto: "consenso aproximado".

"El consenso aproximado no es tan fuerte", dice Tang. "Es simplemente algo con lo que los programadores pueden vivir, luego volver atrás y escribir código en ejecución, y dejar de debatir. Ese tipo de consenso aproximado es la clave en la configuración de las normas taiwanesas, porque permite a la gente no desperdiciar su tiempo en lograr un consenso fino, sino ponerse de acuerdo sobre algo con lo que todos podamos vivir".

Megill dice que Tang y CL Kao, cofundador de g0v y ex colaborador comercial de Tang, lo convencieron para abrir Pol.is. Taiwán, dice, ha pulido el software hasta alcanzar su “ejemplo más completo”.

“Sin alguien que quiera introducir prácticas deliberativas en el gobierno”, Pol.is es sólo un martillo, dice Megill. "Audrey es la carpintera".

“En términos de compromiso de la sociedad civil liderado por los ciudadanos con la tecnología para mejorar el bien democrático”, dice Mónaco de ITFT, “Taiwán es el sector de tecnología cívica más activo del mundo”.

Audrey Tang tiene la teoría de que varios accidentes de la historia dieron como resultado un matrimonio feliz entre la tecnología informática y la democracia en Taiwán.

El fin de la ley marcial en Taiwán en 1987, dice, coincidió aproximadamente con la rápida difusión de innumerables clones de la computadora personal IBM y la posterior aceleración del ascenso de Taiwán a una posición dominante como una de las potencias de fabricación de hardware informático más importantes del mundo.

De manera similar, la primera elección presidencial disputada libremente, en 1996 (el mismo año en que Tang abandonó la escuela secundaria), coincidió con el surgimiento de Internet como un fenómeno generalizado. En “Sobre la utopía para la acción pública”, un manifiesto que Tang publicó el día de la toma de posesión de Tsai Ing-wen en 2016, Tang escribió que la razón por la que “hay tantos hackers cívicos en Taiwán que se ofrecen como voluntarios para trabajar por la democracia” es que en Taiwán “Internet y la democracia evolucionaron juntas, se extendieron juntas y se integraron entre sí”.

“En lugar de un grupo de expertos en IT haciendo cosas digitales y otro grupo de personas que estudian administración pública y política haciendo democracia, en Taiwán es literalmente la misma generación”, dice. "Para nosotros no había democracia antes de Internet. La democracia viene con Internet".

“La democracia en sí misma es una tecnología” sujeta constantemente a iteraciones experimentales y mejoras incrementales.

El Movimiento Girasol: “Creo que el beneficio de tener un enemigo tan claramente definido e innegable al otro lado del estrecho es que realmente motiva aspectos del activismo democrático en todos los ámbitos”, dice Waligora. “Al final del día, es más fácil para el gobierno, el sector privado y la sociedad civil alinearse en principios básicos”.

“apoyar una alfabetización digital más amplia de participación cívica”. Tanto como programador de software como funcionario gubernamental, Tang se ha centrado constantemente en construir estructuras que permitan compartir ideas y puntos de vista. Dar una orden unilateral no tiene sentido en ese contexto.

"Mi principal sugerencia es empezar poco a poco y no prescribir nada. No hacer discursos largos. En lugar de eso, simplemente empezar a diseñar espacios para que la gente participe".

Y luego empezó a citar de nuevo el Dao De Jing.
La naturaleza no da largos discursos.
Un torbellino no dura toda la mañana.
Un aguacero no dura todo el día.
¿Quién hace el viento y la lluvia?
El cielo y la tierra lo hacen.
Si el cielo y la tierra no siguen y siguen,
ciertamente la gente no lo necesita.
Las personas que trabajan con Tao
son gente taoísta,
pertenecen al Camino.
Personas que trabajan con poder
pertenecen al poder.

Personas que trabajan con pérdidas
pertenecer a lo perdido.
Entrégate al Camino
y estarás en casa en el Camino.
Entrégate al poder
y estarás en casa en el poder.
Entregate a la perdida
y cuando estés perdido estarás en casa.
Para no dar confianza
es no ganarse la confianza.

 

Resumen 

Cita 51 del capítulo 6 de Nexus; este es mi resumen traducido al español.   

Andrew Leonard, “How Taiwan’s Unlikely Digital Minister Hacked the Pandemic,” Wired, July 23, 2020, www.wired.com/story/how-taiwans-unlikely-digital-minister-hacked-the-pandemic/.

Inicialmente listado en la entrada https://barrosjuan.blogspot.com/2026/01/patron-informacion-moneda-basada-en.html  Lo que queda por hacer es averiguar más sobre el sistema de código abierto Pol.is como herramienta democrática y para evitar troles y troleos (divide y vencerás) en decisiones importantes y basado en la participación ciudadana.

 

lunes, 24 de octubre de 2022

Girar hojas de pdf

Una buena guía para cambiar la orientación de las páginas de un pdf con una herramienta gratuita PDFTK sin recurrir a empresas que cobran por todo está en el siguiente enlace.

https://people.uleth.ca/~daniel.odonnell/blog/rotating-one-or-more-pages-in-a-pdf-in-linux

Anteriormente ya les había contado de las bondades de pdftk en la entrada:

https://barrosjuan.blogspot.com/2017/07/pdftk-y-su-pandilla-pdftops-ps2pdf.html

Y la línea que me salvó hoy fue: 90 grados sentido horario de todo el doc

 

pdftk in.pdf cat 1-endeast output out.pdf

miércoles, 20 de marzo de 2019

The Linux Foundation, show me the money

Hace poco estaba viendo un video de la Linux Foundation.



Me gusta el canal porque permiten ver el contenido de conferencias sobre el tema del código abierto, desde la comodidad de mi hogar, a una velocidad superior si lo deseo, con subtitulos y hasta traducidos en algunos casos.

Todavía no conozco una forma de buscar palabras clave dentro de un video.  Quizás, haciendo reconocimiento del habla y corriendo algún algoritmo de resumen automático.

Sin embargo, en este video se habla de algunos proyecto de código abierto que se deberían revisar:

yocto project: para satelites. 

Hyperledger: mineral tracking o seguimiento en la cadena de transporte y valor.

Let's encript: cifrado de conexiones https

Dronecode y Zephyr OS (Intel drones): sobre proyectos para drones.

Automotive Grade Linux: Vehículos con estándares de comunicación abiertos.

OpenVDB: para aplicaciones de física en cine.
openColorIO: para manejo de colores en películas. Revisar el enlace de la Academia de los Oscar pero para posibles trabajos de software libre  https://www.aswf.io/  (Academy SoftWare Foundation )

FirstNet: aplicaciones que ayudan a comunicar luego de desastres naturales.


jueves, 6 de julio de 2017

pdftk y su pandilla pdftops ps2pdf pdfinfo pdfimages

Existe una discusión entre los ñoños sobre el presente y futuro de los datos. Cómo se debe estructurar desde el punto de vista informático un documento portable (PDF)? La tendencia es tratar de separar el contenido del documento de su presentación. Los datos y su presentación podría estar unidos mediante algún tipo de metadato o alguna técnica de hipertexto (alguien dijo XML?).

Lo importante es que al común de los mortales no le interesa perder su tiempo en una discusión tan vanal como esa y prefiere estar de fisgón sobre la vida de sus amigos, utilizando fb por ejemplo.

En algunas ocasiones el problema no es trivial.  Por ejemplo, hoy debía preparar un documento en formato PDF para poder ser enviado e imprimido en algún otro lugar distante. Y es que el código abierto brinda herramientas para por ejemplo:
- obtener las imágenes de un pdf: pdfimages
- obtener el tamaño en puntos de cada una de las páginas: pdfinfo
- realizar cortes o integraciones, separar solo algunas páginas, en general manipulación: pdftk.
- convertir archivos de imagen en otros de tipo pdf: convert

De hecho, pdftk significa ToolKit PDF. Un conjunto  de herramientas para manipular varios aspectos de un pdf.

El problema que se me presentó hoy fue que tenía imágenes escaneadas y las convertí a archivos pdf. Y mediente pdftk pretendía generar un archivo con todos los subdocumentos seleccionados. Pero luego de realizar la integración, al revisar el documento observé que el tamaño de algunas páginas era mayor con respecto  a otras páginas.  Recuerden, en teoría Internet es su amigo. y tras buscar un poco encontré algunas posibles soluciones, algunas no funcionaron.

La solución que funcionó hoy fue convertir el pdf al formato postScript o ps.

pdftops -paper A4 PagsGrandes.pdf nuevoArchivoA4.ps

y luego

ps2pdf nuevoArchivoA4.ps archivoRegulado.pdf

para comprobar el tamaño de las páginas utilizamos, el viejo conocido:

pdfinfo archivoRegulado.pdf

Ahora podemos unir sin ningún problema los archivos con pdftk.

Espero recordar esta nota la próxima vez que tenga este problema.



Un buen Sandwich

Algunas instituciones de mi país tienen procedimientos muy rigurosos para publicar información. Es así que algunas veces la secretaria redacta un reglamento basándose en alguno anterior. Luego de trabajar durante algún tiempo corrigiendo el texto para capturar lo que el abogado secretario desea plasmar, se obtiene un archivo de texto con la versión final.
Cabe recordar que para poder realizar búsquedas desde una computadora, es este el formato necesario para colgar en un sitio WEB. Pero un reglamento sin firma de responsabilidad no es válido en realidad, bueno entonces se procede a imprimir el reglamento o documento legal, se le coloca la firma de responsabilidad por todos los implicados en este documentosidio y se procede a escanear el documento para esta vez si, poder colgarlo "como debe de ser".  El problema es que ahora en lugar de tener texto buscable con el poder la computación, se tiene una foto en la que no se pueden realizar busquedas sin realizar algún procesamiento previo, pero nadie quiere saltarse los pasos de ley, no es verdad??

Hoy por n-sima vez utilicé linux y programas con licencia GNU para poder pasar de fotos que provienen de un escaner a un texto buscable. Al tratarse del mundo Open-Source, el camino no es sencillo.  De cualquier manera, llevo utilizando para  esta tarea el script llamado pdfsandwich; mismo que solo ejecuta un script de enlace con varias herramientas que hacen la dificil tarea de reconocer el texto (tesseract), previo el uso de una conversión de color a escala de grises, a veces se corrige las inclinaciones del texto, y se coloca el texto por debajo de la imagen del texto (gs o ghostScript), para finalmente obtener una nueva versión del documento pero con texto buscable. Una opción "razonable" cuando nuestra conexión a internet de subida impide enviar los grandes archivos a un servicio en la nube, bueno, y por los problemas de seguridad ue ello implica.

El comando típico que utilizamos sería:

pdfsandwich -lang spa -layout single -o texto  -debug -verbose archivo.pdf

Lang es de language y spa es de spanish
layout es por si se trata de una columna o 2 columnas
-o es de output o salida, para indicar el nombre del archivo de salida
-debug para guardar todos los archivos intermedios por cada página.
-verbose para leer los mensajes y poder saber en qué página se encuentra.
y obvio, el archivo con las fotos a procesar.

La herramienta no es perfecta, pero es gratis y abierta. Entonces si deseas mejorarla solo cierra la boca y dedicate a programar :)


lunes, 6 de junio de 2016

Replicabilidad de resultados

Parte de la academia implica la replicación de los resultados. 
Deseo replicar el experimento realizado en el siguiente artículo.

"Vehicle Detection, Tracking and Classification in Urban Traffic". Zezhi Chen, Tim Ellis, Sergio A Velastin SMIEEE . 2012 15th International IEEE Conference on Intelligent Transportation Systems. Anchorage, Alaska, USA, September 16-19, 2012.


El artículo ocupa y genera librerías en MATLAB para funcionar.  Deseo explorar otras alternativas al software privado. Se pretende usar C++ con openCV o también Java.

Utilizar lo más novedoso del análisis de imágenes para realizar un contador ya sea en ON o en OFF de la utilización del espacio público.  Bueno resulta que la idea ya esta en marcha y hasta empresas están trabajando en el tema. Ver el caso de NUMINA.

https://nextcity.org/daily/entry/counting-bikes-pedestrians-numina-startup

El objetivo es obtener datos reales para argumentar cambios. Ver por ejemplo el informe gringo
http://www.bikeleague.org/sites/default/files/ACS_report_final_forweb_2.pdf

Como se indica en el sitio WEB.
http://www.bikeleague.org/content/new-report-where-we-ride

viernes, 10 de julio de 2015

Comer sockets

Del libro del Sr. Comer sobre Internetworking with TCP/IP se puede encontrar un ejemplo de la utilización de Sockets. También es válido para comunicación entre procesos IPC.
He aquí los dos archivos para el ejemplo:



 /*whoisclient.c -main */  
 #include <stdio.h>  
 #include <stdlib.h>  
 #include <string.h>  
 #include <sys/types.h>  
 #include <sys/socket.h>  
 #include <netinet/in.h>  
 #include <netdb.h>  
 /*_________________________________________________________________  
  * Program: whoisclient  
  *  
  *Purpose: UNIX application program thar becomes a client for the  
  *       Iternet "whois" services.  
  *  
  *Use:   whois hostname username  
  *  
  *__________________________________________________________________  
  */  
 main (argc,argv)  
 int argc;          /*standard UNIX argument declarations */  
 char *argv[];  
 {  
   int s;              /*socket descriptor           */  
   int len;               /*length of received data          */  
   struct sockaddr_in sa;     /*Internet socket addr, structure     */  
   struct hostent *hp;          /*result of host name lookup          */  
   struct servent *sp;          /*result of service lookup          */  
   char *myname;          /*pointer to name of this program     */  
   char *host;               /*pointer to mte host name          */  
   char *user;               /*ponter to mte user name          */  
   myname = argv[0];  
   char buf[BUFSIZ+1];  
   /*  
   * Check that there are two command line arguments  
   */  
 if(argc != 3){  
      fprintf(stderr,"Usage: %s host username\n", myname);  
      exit(1);  
 }   
 host = argv[1];  
 user = argv[2];  
 /*  
  * Look up the specified hostname  
  */  
 if((hp = gethostbyname(host)) == NULL) {  
      fprintf(stderr, "%s: %s: no such host?\n", myname, host);  
      exit(1);  
 }  
 /*  
  * Put host's addres and address type into socket structure  
  */  
 bcopy((char *)hp->h_addr, (char *)&sa.sin_addr, hp->h_length);  
 sa.sin_family = hp->h_addrtype;  
 /*  
  * Look up the socket number for the WHOIS service  
  */  
 if((sp = getservbyname("whois","tcp")) == NULL ){  
      fprintf(stderr,"%s: No whois service on this host\n", myname);  
      exit(1);  
 }  
 /*  
  * Put the whois socket number into the socket structure  
  */  
 sa.sin_port = sp->s_port;  
 /*  
  * Allocate an open socket  
  */  
 if ((s = socket(hp->h_addrtype, SOCK_STREAM,0)) < 0 ){  
      perror("socket");  
      exit(1);  
 }  
 /*  
  * Connect to the remote server ahora (struct sockaddr*)  antes &sa  
  */  
 if(connect(s, (struct sockaddr*)&sa , sizeof(sa)) < 0){  
      perror("connect");  
      exit(1);  
 }  
 /*  
  * Send the request  
  */  
 if(write(s, user, strlen(user)) != strlen(user)){  
      fprintf(stderr, "%s: write error\n", myname);  
      exit(1);  
 }  
 /*  
  * Read the reply and put to user's output  
  */  
 while( (len =read(s, buf, BUFSIZ)) > 0)  
      write(1, buf, len);  
 close(s);  
 exit(0);  
 }  


Y aquí el servidor.

 /* whoisserver.c - main */  
 #include <stdio.h>  
 #include <stdlib.h>  
 #include <string.h>  
 #include <sys/types.h>  
 #include <sys/socket.h>  
 #include <netinet/in.h>  
 #include <netdb.h>  
 #include <pwd.h>  
 /*______________________________________________________________  
  * Program:      whoisserver  
  *   
  * Purpose:   UNIX application program that acts as a server for   
  *          the "whois" service on the local machine. It listens  
  *          on well-known WHOIS port (43) and anwers queries from  
  *          client. This program requires super-user privilege to   
  *          run.  
  * Use:      whois hostname username  
  *  
  *______________________________________________________________________  
  */  
 #define BACKLOG   5                     /* # of requests we're willing to queve */  
 #define MAXHOSTNAME 32                    /* maximum host name length we tolerate */  
 main(argc, argv)  
      int argc;                    /* standard UNIX argument declarations */  
      char *argv[];  
 {  
      int s, t;                    /*socket descriptors               */  
      int i;                         /*general purpose integer          */  
      struct sockaddr_in sa, isa;          /*Internet socket structure          */  
      struct hostent *hp;               /*result of host name lookup          */  
      char *myname;                    /*pointer to name of this program     */  
       struct servent *sp;               /*result of service lookpup          */  
      char localhost[MAXHOSTNAME+1];      /*local host name as character string  */  
      myname = argv[0];  
      /*  
       * Look up the WHOIS service entry  
       */  
      if ((sp = getservbyname("whois", "tcp")) == NULL) {  
           fprintf(stderr, "%s: No whois service on this host\n", myname);  
           exit(1);  
      }  
      /*  
       * Fet our own host information  
       */  
      gethostname(localhost, MAXHOSTNAME);  
      if((hp = gethostbyname(localhost)) == NULL){  
           fprintf(stderr, "%s: cannot get local host info?\n", myname);  
           exit(1);  
      }  
      fprintf(stderr,"localhost: %s \n", localhost); /*BARROS */  
      /*  
       * Put the WHOIS socket number and our addres info  
       * into the socket structure  
       */  
      sa.sin_port = sp->s_port;  
      bcopy((char *)hp->h_addr, (char *)&sa.sin_addr, hp->h_length);  
      sa.sin_family = hp->h_addrtype;  
      /*   
       * Allocate an open socket for incoming connections  
       */  
      if((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) {  
           perror("socket");  
           exit(1);       
      }  
      /*  
       * Bind the socket to the service port  
       * so we hear incoming connections  
       */  
      if(bind(s, (struct sockaddr*)&sa, sizeof sa) < 0) {  
           perror("bind");  
           exit(1);  
      }  
      /*  
       * Set maximum connections we will fall behind  
       */  
      listen(s, BACKLOG);  
      /*  
       * Go into an infinite loop waiting far new connections  
       */  
      while(1) {  
           i = sizeof isa;  
           fprintf(stderr,"i isa: %d , puerto %d , dirección %d\n", i, isa.sin_port, isa.sin_addr.s_addr); /*BARROS */  
           /*   
            * We hang in accept() while waiting for new customers  
            */  
           if((t = accept(s, (struct sockaddr*)&isa, &i)) < 0) {  
                perror("accept");  
                exit(1);  
           }  
           whois(t);               /* perform the actual WHOIS service */  
           close(t);  
      }  
 }  
      /*  
       * Get the WHOIS request from remote host and format a reply.  
       */  
      whois(sock)  
      int sock;  
 {  
      struct passwd *p;  
      char buf[BUFSIZ+1];  
      int i;  
      /*  
      * Get one line request  
       */  
      if((i =read(sock, buf, BUFSIZ)) <= 0)  
           return;  
      buf[i] = '\0';                    /* Null terminate */  
      /*  
        * Look up the requested user and format reply  
       */  
      if((p = getpwnam(buf)) == NULL)  
           strcpy(buf,"User not found\n");  
      else  
           sprintf(buf, "%s: %s\n", p->pw_name, p->pw_gecos);  
      /*  
        * Return reply  
       */  
      write(sock, buf, strlen(buf));  
      return;  
 }  

lunes, 4 de mayo de 2015

ANT+ plugin sampler

Como se indicó en una entrada anterior, deseamos utilizar un estandar de comunicación de bajo consumo para redes sin cable de area personal para una aplicación aún desconocida (LPWPAN).

Se puso apunto el entorno de desarrollo en una computadora X. SDK android y Netbeans con el plugin NB-Android.
1. El primer intento consistía en sólo ocupar el código necesario para recolectar datos del lector de frecuencia cardiaca de marca GARMIN junto con un teléfono inteligente con soporte de ese estandard. Habíamos instalado las aplicaciones S-life para Samsung Galaxy S4 y "ANT+ plugin sampler" para la gama de los sony Xperia Zx.  Los programas corren bien y permiten recolectar o presentar los datos directamente en el teléfono.
2. El segundo paso consiste en encontrar código fuente para poder nosotros mismo manipular el comportamiento del programa.  Para por ejemplo enviar los datos recolectados a un servidor remoto o para realizar algún cálculo.

Para completar el segundo paso se utilizó un segmento de código mínimo pero no lo logramos compilar. Es por eso que tratamos de hacer correr el código dado por ANT+ y luego iremos retirando los segmentos de código no necesarios.

Se generó un ejecutable que no se instalaba en el dispositivo de prueba. Pero no se daba mayor detalle sobre las razones para no poder instalar la aplicación.
El SDK de Android tiene un programa que ayuda a depurar los ejecutables para esa plataforma mediante el cable USB.

Al conectar el dispositivo y ejecutar un adb (se debe habilitar la depuración por USB): y si se trata de Xperia presionar en "about device", y luego 7 veces en número de compilación para convertirse en desarrollador.
 android-sdk-linux/platform-tools$ ./adb -d devices
List of devices attached
????????????    no permissions


Para los permimos buscar en internet como modificar udev
Si logramos solventar este problema probablemente aparezcan otros como por ejemplo:
android-sdk-linux/platform-tools$ ./adb -d devices
List of devices attached
BH90UXUK1L    unauthorized


Ya vamos mejorando, ahora solo estamos des autorizados. para solucionarlo se debe buscar en internet y seguir los pasos para que la conexión se haga correctamente.
Buscar soluciones hasta que se muestre de la siguiente manera:
android-sdk-linux/platform-tools$ ./adb devices
List of devices attached
BH90UXUK1L    device


Desde NetBeans se puede lanzar ya la aplicación directamente en el dispositivo.
Bueno no siempre.  Se nos presentó un error de tipo:
Package deployment failed with: INSTALL_FAILED_VERSION_DOWNGRADE
Una solución interesante se presenta en este blog, pero se debe tener en cuenta las particulariedades de nuestro proyecto. Al parecer existe una copia del mismo software ya instalado en el dispositivo y deseamos instalar una version más antigua y por eso el dispositivo se queja y no permite realizar la instalación.
En el archivo manifiesto del proyecto se hace referencia al nombre del paquete que se va a instalar.
package="com.dsi.ant.antplus.pluginsampler"
Entonces esto no ha cambiado desde el programa que ya  instalamos y nuestro paquete.  Por esto procedemos a cambiar el nombre del paquete y asi será un nuevo software y se podrá instalar.

Finalmente se logra instalar el programa compilado y con posibilidades para ser modificado para nuestros fines.

jueves, 30 de abril de 2015

ANT+ smartphone dev

El protocolo ANT+ es utilizado por varios fabricantes para integrar la recolección de datos de diferentes dispositivos.  Por ejemplo, se podría tener un reloj que utilice este protocolo para obtener los valores de un GPS, banda de frecuencia cardiaca, sensor de velocidad , cadencia de pedaleo, báculas, etc.
Lo interesante es que los teléfonos estan incluyendo soporte para éste tipo de protocolos, dos ejemplos son Samsung (Galaxy S4) y varios modelos de Sony.
En teoría existen muchas aplicaciones que utilizarían muchos de los sensores para diferentes fines.
Queremos desarrollar aplicaciones con android que utilicen datos recolectados mediante el protocolo ANT+.
Un blog que sirve de referencia es
http://community.giffgaff.com/t5/Blog/ANT-Connect-Your-Smartphone-with-Sport-amp-Fitness-Accessories/ba-p/14835939

La aplicación de prueba que utilizaremos se llama "ANT+ Plugin Sampler" y podemos encontrar info sobre el desarrollo en
http://www.thisisant.com/developer/ant/ant-in-android/

viernes, 6 de junio de 2014

sobre los repositorios abiertos

Hace varios años el presidente del Ecuador indicó su disposición para que todo el estado utilice en sus instancias públicas código libre y gratuito. Fue una noticia muy importante en su época.
Y en mi opinión los mandos medios son los que no promocionan estos importantes cambios. Pero no dispongo de pruebas.
Cuando se reciben archivos provenientes de un CT tomografía computarizada, por lo general los datos vienen en un disco compacto que permite re ver dicha información.
Deseaba ver estos archivos desde un sistema operativo linux, pero no existía un software para hacerlo.
Normalmente el disco viene con un programa para Windows el que permite ver y recorrer las imágenes generadas.
Por esta razón comencé a buscar proyectos que realicen la misma tarea.
Para mi sorpresa encontré el repositorio de codigo abierto de Brasil. Ellos disponian de un proyecto en Python para ser el equivalente de esta aplicación para Mac y Microsoft. Pero el proyecto había sido abandonado hace varios años y con la actualización del código de Python dicho proyecto era inservible.

Hoy se presenta el primer repositorio ecuatoriano de código abierto. 
http://minka.gob.ec/ y me pregunto qué es lo que vamos a a hacer para no repetir los errores de Brasil.
Existe una especie de soberanía en estos temas, el dueño del servidor tiene el poder.