Archive

Archive for October, 2010

Installing php-imagick on CentOS 5

October 31, 2010 3 comments

For some reason I find myself having to work with CentOS a lot these days. I hate to say I hate something, but I can’t help saying I don’t like CentOS at all. Its packaging system is just so inconsistent and error prone I can’t understand how this could ever be considered an appropriate server platform for so many hosting companies. Why not use Debian? I don’t get it.

Anyway, installing the ImageMagick extension to PHP can be a challenge. Apparently, in some cases, you can easily get out of that problem issuing this series of commands as root (thanks to the author of this page for that):

yum install ImageMagick.i386
yum install ImageMagick-devel.i386
pecl install imagick

echo “extension=imagick.so” > /etc/php.d/imagick.ini
/etc/init.d/httpd restart

However, in my case I got a little error in the middle of the execution of pecl install imagick:

checking if ImageMagick version is at least 6.2.4… found version 6.2.8
checking for magick-wand.h header file… found in /usr/include/wand/magick-wand.h
checking PHP version is at least 5.1.3… /tmp/tmpi10iXi/imagick-3.0.0/configure: line 3339: test: Usage: /usr/bin/php-config [–prefix|–includes|–ldflags|–libs|–extension-dir|–include-dir|–php-binary|–version]: integer expression expected
configure: error: no. found 5.1.6
ERROR: `/tmp/tmpi10iXi/imagick-3.0.0/configure –with-imagick’ failed

So obviously, although I have PHP 5.1.6, this is not above 5.1.3… go figure.

The problem is complex, because you’re using PECL to download and install the package, and when it fails, PECL cleans its downloaded files, so you can’t directly take it from there (not without a little trickiness). In short, we’ll have to issue a CTRL+C in the middle of PECL’s execution, then go to /tmp/tmpSomething/ and hack the system. The commands below are not to be considered best practices. I am no system administrator nor am I very familiar with compilation nor the way PECL works (I have a good idea, but still).

Go to /tmp/tmpSomething (there shouldn’t be too many of these around)

cd imagick-3.0.0

vim configure

find the string 50103 (for some reason that’s how a version superior to 5.1.3 is looked for) around line 3339

Remove the if … condition (only leave the echo… result: yes. found line). Also remove the fi line. There should only be two lines eventually, both echoing “yes. found” in the middle

Save the file and exit

./configure

make

make install

echo “extension=imagick.so” > /etc/php.d/imagick.ini

/etc/init.d/httpd restart

And all that should make it…

Advertisements
Categories: Documentation, English, php Tags: ,

My personal best apt-get command to install a LAMP dev server on Ubuntu

October 26, 2010 2 comments

This command is to be improved progressively…

sudo apt-get install apache2 libapache2-mod-php5 mysql-server mysql-client php5-mysql php5-xcache php5-gd php5-xdebug screen phpmyadmin php5-imagick mercurial git php-pear php5-dev

Categories: Documentation, English, php, ubuntu Tags: , ,

Installing BigBlueButton 0.64 on CentOS5.5

October 24, 2010 2 comments

The documentation to install BigBlueButton 0.64 on CentOS (and on most other distributions) is really excellent. However, I found that CentOS 5.5 had not been documented yet, so I tried it and run into a few problems. I explain below how to get it all sorted out. I installed CentOS5.5 from a DVD in “server” mode, so without graphical interface. Once installed, I proceeded with the following.

I followed the first directions from http://code.google.com/p/bigbluebutton/wiki/RPMPackaging#How_to_Install_BigBlueButton_on_CentOS_5.4

However, I ran into my first problem: the epel could not be found by the script, so I had to update the script to change epel-release-5-3.noarch.rpm for epel-release-5.4-noarch.rpm, then launch the script again.

Probably because the script had a problem, I had another problem later during the install: /etc/init.d/asterisk conflicted with asterisk14, so I had to remove Asterisk first: “yum remove asterisk14-core-1.4.36-1_centos5.x86-64”, then launch again “yum -y install bigbluebutton”

At this point, bigbluebutton should work fine from the local machine (if you are doing that on a CentOS5.5 server without graphical interface, try installing lynx and launching lynx localhost. If you see text saying BigBlueButton, you’re OK), but accessing this server from another machine might not work (could not connect, error 500, etc). This is (most probably) because your server has an iptables (default firewall) configuration preventing access on port 80 to your server from another computer. The quick solution to try it is to shut down iptables with “/etc/init.d/iptables stop” and try connecting again. If that works, then you’ll have to setup your firewall properly.

Finally, to install the desktop sharing utility, you will have to launch “yum install bbb-apps-deskshare”.

You might also be interested (as a backup- into a guide that explains how to install BigBlueButton on CentOS5.4 step by step: http://code.google.com/p/bigbluebutton/wiki/InstallingBigBlueButtonCentOS

BBB 0.70 seems to install fine on top of the 0.64, but the sound doesn’t work and the whiteboard features are not registering write operations (just showing on screen).

PHPEclipse + Xdebug + Firefox

October 20, 2010 1 comment

There’s a short but great article about setting up PHPEclipse with Xdebug here: http://bogdan-albei.blogspot.com/2010/06/php-remote-debugging-with-xdebug-and.html

I really don’t want to forget this one!

Implementar xCache en su aplicación PHP

October 20, 2010 4 comments

No existe mucha documentación sobre el tema, sin embargo xCache es un sistema de caché de código operativo (opcode) que permite también hacer caché de variables. Esta documentación conviene principalmente para servidores Debian o Ubuntu (lo explico con Apache, pero también funciona con Lighttpd).

Antes de hacer cualquier cosa, sería bueno probar su servidor para asegurarse de como funciona ahora. Una forma simple de hacerlo es probarlo a través de ab, una herramienta de benchmarking de Apache que está incluida en el paquete de Apache. Para usarla, hay unos parámetros posibles. Recomiendo estudiar un poco la documentación, pero lo más simple (imaginando que el servidor para probar está en http://example.com/) es de lanzar:

ab -c50 -n1000 http://example.com/

Esto generará un resultado bastante amplio. Recomiendo copiarlo y guardarlo en un lugar seguro. Servirá al momento de comparar los resultados de las distintas mejoras.

xCache es super fácil de instalar en un servidor Ubuntu o Debian:

sudo apt-get install php5-xcache

sudo /etc/init.d/apache2 restart

Después (o antes) de relanzar el servidor web, se tiene que configurar el xCache. Esta es la parte más obscura. No hay casi nada de documentación (lo que se encuentra en el archivo de configuración mismo ya casi lo suma todo), pero básicamente no hay mucho que saber. Se edita el archivo de configuración con VIM u otro editor:

sudo vim /etc/php5/apache2/conf.d/xcache.ini

Ahí hay dos cosas principales que cambiar (potencialmente).

  1. xcache.size es la cantidad de caché que su sistema permite almacenar (se puede ver con la división por 1024*1024 de: cat /proc/sys/kernel/shmmax). Será algo de 16M, 32M o 64M en muchos casos
  2. xcache.count es la cantidad de procesadores que tiene esta máquina (se puede recuperar con: cat /proc/cpuinfo |grep -c processor)

De ahí es necesario recargar la configuración de Apache

sudo /etc/init.d/apache2 restart

De ahí ya sentirá probablemente una mejora, pero muy ligera.

Para probarlo, de nuevo:

ab -c50 -n1000 http://example.com

Probablemente verá una mejora (subida) en “Requests per second”.

De ahí se puede jugar un poco cambiando los parámetros de xCache como xcache.slots y xcache.size, o xcache.ttl para alcanzar mejores resultados.

Lamentablemente, estas modificaciones simples no permiten mejorar mucho la eficiencia del servidor. Pero sí se puede mejorar mucho todavía, gracias a la gestión de variables de xcache.

Para usarlo, nada más simple:

if (xcache_isset(‘un_nombre_de_variable_para_poner_en_cache’)) {

$variable = xcache_get(‘un_nombre_de_variable_para_poner_en_cache’);

} else {

$variable = query_pesado();

xcache_set(‘un_nombre_de_variable_para_poner_en_cache’,$variable);

}

Dicha gestión funciona para todo el sistema, es decir que la memoria usada por el proceso es compartida con otros procesos… si se tratan de varios usuarios repartidos sobre varios portales, se tiene que ser muy cuidadoso a nivel de la seguridad de la información almacenada, pero también se tiene que diseñar para que no aparezca la información de un portal en el otro.

Para esto, se puede usar, por ejemplo, un prefijo del nombre de variable con el nombre del URL del portal…

Por ejemplo, xcache_set(‘example_com_global_users_online’,$online);

No se recomienda poner ahí ninguna información personal de usuarios. Solamente datos genéricos válidos para todo un portal, y que no necesiten ser refrescados. Por ejemplo, en Chamilo mostramos siempre en la cabecera una cantidad de usuarios en línea. Pues si bien esta cantidad puede variar muy rápidamente, no importa tanto que sea la cantidad exacta, ya que a partir de 100 usuarios empieza a ser difícil saber quienes están o no están conectados.

Por lo tanto, esta información puede ser almacenada en la memoria caché compartida de xCache, y evitamos así un query bastante pesado a la base de datos para cada página refrescada o abierta: una cantidad tremenda cuando 900 usuarios simultáneos se conectan a un portal. Este pequeño cambio dió un resultado tremendo de entre 20 y 75% de respuestas adicionales por segundo en varios servidores, por lo que recomiendo altamente esta pequeña mejora

De la misma forma, información pre-calculada del header o del footer, un marcador de la hora actual, etc, pueden fácilmente ser almacenados para todo un portal por 60 segundos: suficiente para aliviar el servidor de estas pequeñas pedidas que rápidamente suman y lo hacen más lento.

Poniendo algo de 8 variables muy pedidas en caché de esta manera, se obtiene fácilmente 20% de eficiencia adicional, según el Apache Benchmark.

ab -c50 -n1000 http://example.com

Para finalizar, si usted está desarrollando un sistema para grande distribución (por ejemplo una plataforma de software libre), debería pensar bien en los casos de uso posibles, entre otros el alojamiento de varios portales con URLs distintos en un mismo servidor (usar prefijo como arriba) y el uso dentro de muchos scripts y contextos distintos (otro prefijo, puede ser).

Open Source tools for e-learning

October 17, 2010 2 comments

There’s a nice article about open-source tools for e-learning on one of the blogs around eFront (another open-source LMS)

http://blog.efrontlearning.net/2010/10/open-source-authoring-tools-for-e.html

El Gobierno Peruano y su estrategia de Gobierno Digital

October 14, 2010 6 comments

Actualización el 3 de Enero del 2011:

Hoy día el sistema del SEACE no está mostrando ningun resultado del 2010. Al parecer, una consulta a la base de datos ahí está fallando (tomando en cuenta únicamente los elementos del año actual). Me pregunto que empresa habrá implementado este sistema y como el Gobierno ha podido confiar en ella…

Actualización el 5 de Enero del 2011:

Llegué a hablar por teléfono con el equipo del SEACE. Me dijieron que tenía que ir a la página de búsquedas y marcar 2010. Es decir que no se considera un bug que sobre las 200 y tantas oportunidades de negocio con el estado todavía vigentes, solo aparezcan 3 de manera predefinida, que son las que fueron publicadas después del 31 de diciembre del 2010…

Hoy me encuentro con ya una más de estas trampas del Gobierno Peruano, quien orgullosamente llama esto “parte de un esfuerzo de digitalización del Gobierno”: el SE@CE (Sistema Electrónico de Contrataciones del Estado). Me parece fundamental, como consultor experimentado en aplicaciones web, reportar unas faltas impresionantes de usabilidad y de accesibilidad de los sitios del Gobierno Peruano.

Si bien es cierto hay buenas iniciativas, y seguramente todo parte de una buena intención, también es necesario resaltar que algo debe estar mal en el proceso de selección de los proveedores de aplicaciones para el Gobierno, para que lleguemos a una situación tan horrible sin que, al parecer, no le preocupe a nadie mejorarlo.

Las recomendaciones siguientes surgen de un intento en participar en una licitación pública a través del SE@CE. Una simple visita les dará una idea ya de que tan mal organizado puede ser este sitio. En el siguiente análisis, estudiare por partes este grandioso ejemplo de lo que podría ser uno de los peores sitios del año.

Sección Inicio

El barco

Llegar a esta página ya da una sensación visual de mareo. Un texto se mueve de derecha a izquierda, un pequeño banner microscópico muestra que poco esfuerzo se ha puesto en la parte diseño para lograr un aspecto amigable.

Un elemento de navegación en Inglés “Home Page” indica más o menos claramente que estoy en la página principal. Si tengo una pantalla más larga que 1440 píxeles de ancho, el header se corta pero la fecha sigue alineada a la derecha.

En fin, un asombroso ejemplo de hasta que punto se puede negar la necesidad de detalle en la elaboración de un sitio, probablemente debido a que (una clásica en contrataciones del Estado) los responsables no tenían idea de lo que querían antes de tener los bocetos frente a ellos, más tarde que la fecha planeada de entrega porque generaron retraso pidiendo cosas absurdas a medio camino amenazando a medio-palabras de no aprobar el proyecto si es que no se les agregaba una mención del equipo que se encargó del proyecto de una forma “bonita” pero “bien visible” que, por supuesto, no podía estar en una sub-página pero tampoco tenía que impedir la navegación, aunque tenía que ser visible en cualquier página en cualquier resolución.

Vínculos

Los vínculos tienen un icono de decoración un poco feo. Raramente, el icono no hace parte del vínculo, por lo que no se puede clicar. En otras partes, es lo contrario: el icono es el vínculo y el texto no se puede clicar.

Manuales

Los manuales no explican mucho, los video tutoriales se tienen que descargar (en archivos comprimidos) para poder visualizarse en su computadora (si el objetivo fue disminuir la necesidad de descarga para provincia, con 31MB para 8 minutos de buena video donde nos muestra cada uno de los enlaces que se puede seguir, no es realmente el mejor mecanismo de distribución ni la mejor posibilidad de enfoque que se puede dar a un sitio web).

Vintage

Y para terminar, esta primera página nos ofrece (estamos en el año 2010, es decir cerca de 10 años de la parución de IE6) la directiva siguiente como pié de página (después de los 6 logos correspondientes centrados cuando el contenido principal de la página está alineado a la izquierda): Es decir que el Gobierno Peruano obliga el ciudadano honesto a usar un navegador con horribles fallas de seguridad, que obliga al uso de Windows XP o inferior, sistemas operativos con horribles fallas de seguridad, con (para IE) un no-respecto increible de estándares de la web, para poder participar a una licitación pública.

Esto, estimado lector, se llama una gran falta de usabilidad. No digo que no se debe soportar a Internet Explorer 6, pero exigirlo y no permitir el uso de otros (como veremos a continuación) es nada menos que un escándalo y una barrera al libre acceso a los servicios del Estado, que pagamos a través de impuestos para simplificarnos la vida.

Sección Consultas

La sección de consultas el probablemente la más usada ya que permite enterarse de todas las últimas llamadas.

Siempre que cambien de página, tendrán la suerte inmensa de ver un GIF animado de estilo Geocities de los 90’s aparecer y decirles “Espere un momento…”. En realidad, para alguien con una conexión de provincia, probablemente pasa más tiempo esperando que usando la herramienta.

La página de entrada de consultas tiene una apariencia bastante desorganizada (botones y vínculos que permiten llegar a resultados por año u otros criterios) pero presenta, en prácticamente una sola página, todos los vínculos de clasificación de oportunidades de negocio.

Si se toma la pena de agrandar esta captura, se dará cuenta que una gran cantidad de caracteres con tildes simplemente no aparecen, resultando en un vínculo que dice “Click aqu” en lugar de “Click aquí”.

Pero esta primera página no es muy interesante a parte de estos detalles, por lo que avanzamos, dando clic a “Click aqu” de la sección “Oportunidades de negocio”.

Celeridad

Si tiene la suerte de tener una conexión Internet suficientemente lenta, podrá aprovechar del tiempo de carga increible que toma la lista de vínculos por debajo de la página. Veremos más tarde que en realidad el sistema usa una base de datos Oracle, y que probablemente se debe a esto.

RSS

Un segundo detalle, quedándonos en la parte de los vínculos, es que permiten (supuestamente) agregar un feed RSS, pero lamentablemente los desarrolladores pensaron mucho en usuarios de Google y Yahoo, y no mucho en los demás, por lo que solo se puede extraer estos flujos RSS a través de vínculos que lanzan a Google y Yahoo.

La usabilidad de la lista desplegable que aparece por debajo de mi cursos y no me permite seleccionar el vínculo siguiente sin hacer un movimiento de baile con mi cursos es discutable también.

Calendario

Llegamos al calendario. Uno de mis favoritos en  las aplicaciones web, y verá que este no tiene nada que envidiar a los demás.

Si es que no uso Internet Explorer (bueno, es mi culpa, me advertieron), puedo aprovechar de un calendario popup de este tipo. El problema con esto es que no puedo seleccionar una fecha. Tengo que entrarla a mano. Ahí me doy cuenta que en realidad el campo no me indica ningún detalle sobre como llenarlo. Se tiene que “suponer” y probar un tímido “13/10/2010” para ver que sí, se puede!

Búsqueda cuantica

Al seleccionar un criterio más y presionar el botón de búsqueda, uno se da rápidamente cuenta que la búsqueda no es muy eficiente. Pero lo más divertido es probar la misma búsqueda varias veces. Ahí se darán cuenta que es más horrible todavía: la cantidad de resultados para una fecha y un criterio determinados varía de una búsqueda a la siguiente.

He tenido la suerte de tener 14 y 19 resultados según el momento… Esto seguramente no permite tratar todos los ciudadanos igual. Algunos verán la oportunidad de negocio que les interesa, pero otros no la verán!

Sección de registro

Si, a este punto, Ud tuvo la suerte de encontrar una oportunidad de negocio que le interesa, seguramente deseará ir adelante, ver detalles de la licitación y darle clic al botón “Inscribirme en proceso electronico” (parece que las tildes aquí son demasiado peligrosas). Ahí tendrá la sorpresa de obtener un popup de color distinto al resto del sitio (sí, estamos ahora en HTTPS y es un paso muy impresionante para mi ver que, a pesar de toda la maldad que vi hasta ahora, supieron que era necesario ponerle un mínimo de seguridad a este punto).

El problema es que, con este popup, también viene un popup del navegador indicando que uno pasa de un modo no seguro a un modo seguro, que seguramente, combinado con el cambio de estilo, pondrá el usuario en plena confusión, pero bueno… para que diablos podrían querer dar confianza al usuario, a este punto ya no queda nada por rescatar…. Pero no descansé, amigo lector, vienen más sorpresas.

Registro selectivo

A este punto, tendrá que sacar los datos de su código RNP (del Registro Nacional de Proveedores del Estado). Su login es el RUC de su empresa, y la clave es su clave RNP. Pues fijese que, si bien funciona perfectamente su clave en el sitio web del RNP, aquí no es igual (parece que nada es realmente igual).

En realidad, intenté bajo 4 navegadores distintos (incluyendo Internet Explorer 6 y 7), en más de 20 oportunidades antes de tener suerte con un Internet Explorer 7 y ser aceptado. Lo bueno es que no hay ningún mensaje de error para explicar al usuario porque no funciona. Pero si hay un número de teléfono que se puede llamar.

Soporte telefónico invasivo

Antes de llamar al soporte telefónico, es bueno de leer los “Términos y condiciones de uso” ofrecidos al usuario, donde se le recuerda, entre otros, que los usuarios no deberán comunicar su contraseña a nadie, bajo ningún pretexto.

Es bueno recordarselo, porque justamente al indicar al soporte telefónico (accesible después de un promedio de 6 llamadas) que Ud no puede entrar al sistema, ellos les pedirán gustosamente darles el RUC y la contraseña para “probarlo desde ahí”. Vaya, que estupenda contradicción! Bueno, pero por si a caso, no sirve darle el acceso, de toda forma solo es un problema temporal del sistema. No pierda paciencia (y tome el tiempo necesario para subir los documentos de propuesta a tiempo!). Pero bueno, el soporte telefónico es amable y entenderá su queja, por lo que le dará la única solución faltante: escribir un correo electrónico al OSCE.

Botón exclusivo

Finalmente, si no está usando Internet Explorer, su camino se para definitivamente aquí, porque al tener cualquier otro navegador, el botón de “Iniciar Sesion” (sin tilde) genera un error JavaScript que no permitirá a su navegador entender que página cargar a continuación.

Inscripción

Una vez iniciada su sesión (imaginando que tenía Internet Explorer al paso anterior), tendrá acceso a una ventana de búsqueda.

Si es aventurero, no dude… Entre en “Número de proceso” algo así: “AMC – 234- 2010 – Lima”. Ahí tendrá el honor de observar que tan bien ha sido filtrado el código de este formulario, para generar un error Oracle visible al usuario común!

Disponibilidad

Otro punto interesante es el hecho comunmente conocido de que es prácticamente imposible usar el sistema entre las 10am y las 12m, principalmente porque las propuestas se tienen que entregar en general a medio día para todas las oportunidades de negocio, por lo que muchos no pueden mandar su propuesta a tiempo. El sistema simplemente no permite a todos conectarse, favoreciendo los con mayor potencia en su conexión internet, y así dejando de lado lo peor equipados: provincias y proveedores más humildes.

Más allá de la web

Más allá del aspecto puramente técnico de proveer acceso a través de la web, la estrategia de puesta a disposición de licitaciones de este modo, en muchos casos, impide la ejecución realmente neutra del proceso de selección. Por ejemplo, muchas de las licitaciones tienen validéz muy corta (2 días) para entregar una propuesta. Quien tiene la posibilidad de darse cuenta de una oportunidad de negocio, reunir todos los papeles en el medio de su actividad laboral normal, para participar? Es prácticamente imposible, a menos de haber sido advertido antes. Por lo tanto, no es equitable y no permite reflejar un libre mercado.

SUNAT

Si me refiero a “una trampa más” al inicio de este artículo, es porque la aplicación de la SUNAT tiene un estilo muy parecido a este (seguramente el mismo equipo estará detrás de este insulto a la profesión del desarrollo web), por lo que uno tiene que usar Internet Explorer (de preferencia 6) para poder generar recibos por honorarios electrónicos. El problema, nuevamente, surge de una llamada JavaScript que genera un error en otros navegadores.

Finalmente, el recibo por honorario se genera en XML, con un fichero XSLT que permite generar un recibo más o menos parecido a los recibos papel. El problema es que el XSLT no es válido. Se tiene que usar un XSLT modificado para llegar a visualisar el recibo XML (tengo la modificación, si la quieren…)

Puntaje

Aquí va mi puntaje final para el sitio web del SEACE

  • Usabilidad: 7/20 (poco intuitivo, muchas diferencias entre páginas, JavaScript intrusivo)
  • Accesibilidad: 6/20 (Internet Explorer only, ningún esfuerzo particular para facilitar el trabajo de los descapacitados ni para usuarios de celulares inteligentes, RSS poco usables)
  • Utilidad: 14/20 (pues el acceso a licitaciones es muy útil en sí, es una pena que sea tan complicado aprovechar de este recurso)
  • Velocidad: 8/20 (ciertas páginas o componentes de formularios toman un tiempo exagerado para cargar y las funcionalidades se malogran cuando hay más de 500 usuarios conectados)
  • Respecto de estándares: 3/20 (148 errores y 34 warnings en una sola página HTML, 9 errores CSS, , no permite navegar con otros navegadores)
  • Aspecto visual: 2/20 (que feo, ningún diseñador web podría verla sin enfermarse)
  • Seguridad: 8/20 (bueno que hayan implementado HTTPS, pero los errores Oracle demuestran un serio problema de filtración de datos de formularios)

Conclusiones

Si bien el Gobierno Peruano tiene aparentemente ganas de competir con sus vecinos, proveyendo a sus ciudadanos modernos accesos a los servicios del Gobierno, cabe resaltar que hay un defecto serio en la aplicación de estas ganas en la práctica, donde se deja implementar aplicaciones web a iniciantes o personas poco recomendables al momento de hablar de desarrollo web (es una cosa hacer un carrito de compra en Dreamweaver, pero es otra cosa totalmente distinta hacer una aplicación web para miles de usuarios simultáneos que desean consultar una gran cantidad de datos de forma segura).

Esto surge probablemente del proceso de selección de las empresas proveedoras de estas aplicaciones, donde no se cuida suficientemente la *calidad* del trabajo ejecutado anteriormente por los proveedores, usando criterios de accesibilidad y de usabilidad, que deberían ser la primera preocupación de un Gobierno que tiene tanta dificultad para ser ubíquito.

En comparación con la iniciativa de Open Governmente de Inglaterra, los sitios web del Gobierno Peruano son un intento de copia muy defectuoso.

Pero mi intención no es de criticar sin ofrecer soluciones. En BeezNest desarrollamos soluciones web usadas por cientos de miles de personas, que respectan estándares, son multi-navegadores y seguras. Así que gustosos por conversar con representantes del Estado para mejorar esta situación!

Quiero poder usar las aplicaciones del Gobierno con mi aplicación favorita, que respecta estándares, sin estar forzado, para usarlas, de comprar una licencia de un software propietario hecho en EE.UU.! Me parece un colmo tener esta situación. Sin embargo, así es la triste realidad.

%d bloggers like this: