sábado, 18 de septiembre de 2010

FreeBSD, Mono y FireBird .Net Provider

Al intentar correr un programa C# compilado en windows, el cual usa el .Net Provider para Firebird me arrojo el siguiente error:

When the FbConnection.Open() method was called, one exception was raised:

Unhandled Exception: System.TypeInitializationException: An exception was
thrown by the type initializer for FirebirdSql.Data.Common.Charset --->
System.ArgumentException: Encoding name 'shift_jis' not supported
Parameter name: name
at System.Text.Encoding.GetEncoding (System.String name) [0x00000]
at FirebirdSql.Data.Common.Charset.GetEncoding () [0x00000]
at FirebirdSql.Data.Common.Charset..ctor (Int32 id, System.String name,
Int32 bytesPerCharacter, System.String systemName) [0x00000]
at FirebirdSql.Data.Common.Charset.InitializeSupportedCharsets ()
[0x00000]



Esto se debe a que la dll del Provider de Firebird (FirebirdSql.Data.FirebirdClient.dll)
fue compilada con el Framework .Net de Windows y por lo tanto encapsula una serie de
CharSet que no existe en nuestro sistema operativo, no solo en FreeBSD, sino
tambien cualquier OS unix. Por suerte en la pagina oficial de FireBird estan dos
versiones de esta dll, una para .Net Windows, otra para Mono. Con esta desaparece el
error* pero me trae uno nuevo:

Unhandled Exception: System.ArgumentOutOfRangeException: Index is less than 0 or more than or equal to the list count.
Parameter name: index
0
at System.Collections.ArrayList.ThrowNewArgumentOutOfRangeException (System.String name, System.Object actual,
System.String message) [0x00000] in :0
at System.Collections.ArrayList.get_Item (Int32 index) [0x00000] in :0
at System.Diagnostics.ProcessModuleCollection.get_Item (Int32 index) [0x00000] in :0
at System.Diagnostics.Process.get_MainModule () [0x00000] in :0
at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_MainModule ()
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.GetProcessName () [0x00000] in :0


En un sistema operativo basado en Linux nunca lo veremos este error, ya que las
funciones encapsuladas en el System.Diagnostics.Process hace un llamado a un
recurso propio del OS: "/PROC"

En FreeBSD no viene habilitado por defecto a diferencia de Linux, asi que lo debemos
de activar agregando la siguiente lineas en el /etc/fstab :
proc /proc procfs rw 0 0

Luego de reiniciar el sistema estara activado. Pero si no deseamos esperar a
reiniciar el sistema, pues montamos el proc directamente:

mount -t procfs proc /proc

Nuevamente probamos nuestro programa y funciona !

*Nota: para los que le sirva la informacion, en Ubuntu 10 no me funciono el .Net Provider de Firebird para Mono,
ya que me dio otro mensaje de error buscando otro CharSet diferente (EUC-JP),
en este caso la solucion es un poco mas trabajosa, intentar de activar/registrar este
charSet en Ubuntu o compilar los fuentes del .Net Provider en Ubuntu y utilizar la dll generada, esta ultima opcion fue la que yo tome para resolver el error.

jueves, 2 de septiembre de 2010

Que cosas no puede hacer Firebird?

Entre las primeras cosas que un experto de una particular base de datos se debe preocupar, son sus limitaciones, es decir, hasta donde puede llegar la misma.

Obviamente Firebird tiene sus excepciones también, las cuales debemos de conocer bien al momento de embarcarnos en un proyecto.

Firebird es una base de datos que no tiene de que envidiarle mucho a otras, es "casi perfecta", pero no quiero hablar de sus cualidades sino de sus carencias en este post, pero a decir verdad no tiene mucha cola que pisarle.

En sentido general, las mas populares e importantes base de datos del mercado siempre carecen de una que otra cosa que quizas no sean del todo determinantes, pero entre este grupo de base de datos "elite", digase MS SQL Server, Oracle, DB2, PosgreSQL y MySQL (aunque no me gustaria agregar a la lista esta ultima), Firebird carece de dos grandes prestaciones que son vitales en ambientes corporativos y/o críticos que nunca podrian faltar:

- Conexiones seguras: se crean para que nuestras aplicaciones transmitan su informacion cifradas (encriptadas), despreocupándonos del temor que intrusos puedan interceptar nuestra informacion por la red para su provecho ya que no podrían descifrar los datos capturados.

- Clustering: es determinante para tener una "alta disponibilidad" en nuestros sistemas críticos.

La pregunta seria: nuestros proyectos podrían ser viables sin estas dos características "casi" elementales en entornos donde la seguridad y la disponibilidad son las prioridades principales?

Lamentablemente el tema del clustering quizas sera un apartado que los desarrolladores de FireBird nunca tocaran, ya que uno de los propósitos fundamentales del proyecto FireBird es de disponer de una base de datos libre de mantenimiento y de facil uso. Las implicaciones de tener un servicio de base de datos sobre un cluster lo hace una tarea ardua de llevar a cabo (configuración, instalación, monitoreo, etc.). El tema de las conexiones seguras si se podría abordar en un futuro, pero por los momentos no tenemos noticia de eso.

viernes, 27 de agosto de 2010

Instalar Firebird 2.1.3 en FreeBSD 8

La ultima versión de Firebird en la lista de los ports de Freebsd8 es la 2.0.3, sin embargo la ultima versión estable de firebird liberada es la 2.1.3 ya hace casi un año. La verdad es que no entiendo porque han tardado tanto en portar esta ultima versión y quizas no lo hagan por mucho mas tiempo, pero no puedo seguir esperando para poderla utilizar.

Teóricamente utilizando los fuentes de la ultima versión de firebird puedo compilarlo en FreeBSD asi que vamos a obra:

Necesitamos descargar e instalar todas las dependencias de Firebird manualmente, pero cuales son estas? pues las dependencias de la versión 2.0.3 son las mismas que la 2.1.5, asi que solo visualizamos el paquete de la 2.0.3:

B-deps: autoconf-2.62 autoconf-wrapper-20071109 automake-1.9.6_3 automake-wrapper-20071109 bison-2.4.1,1 gettext-0.17_1 gmake-3.81_3 icu-3.8.1_2 libiconv-1.13.1 libtool-2.2.6a m4-1.4.13,1 perl-5.8.9_3 R-deps: icu-3.8.1_2

Si ya tenemos el servidor 2.0.3 instalado con anterioridad, pues nos ahorramos esto, solo desintalamos el servidor y el cliente con pkg_delete

Descargamos el código fuente de la versión 2.1.3 a nuestro equipo, este viene empaquetado en formato tar.bz2

Una vez descomprimido en nuestro equipo comenzamos a instalar: make && make install && make clean

Nuestro primer error:

Error expanding embedded variable.

Esto se debe a que debemos compilar los fuentes con: gmake && gmake install.

Siguiente error:

vi.c:919:74: error: macro "__weak_reference" requires 2 arguments, but only 1 given vi.c: In function 'get_alias_text': vi.c:919: error: expected declaration specifiers before '__weak_reference' vi.c:924: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:954: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:999: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:1055: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:1104: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:919: error: parameter name omitted vi.c:1125: error: expected '{' at end of input ...
`/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline/src' gmake[4]: *** [all-recursive] Error 1 gmake[4]: Leaving directory `/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline' gmake[3]: *** [all] Error 2 gmake[3]: Leaving directory `/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline'

En este punto debemos de compilar el firebird sin utilizar esta librería "editline", al parecer no funciona bien FreeBSD.

./configure --without-editline
gmake
gmake install

Siguiente error:

mkdir: /usr/local/firebird/UDF: File exists find: ./firebird/examples/v5: No such file or directory Example files have not been built! chmod: examples/*.fdb: No such file or directory gmake[2]: Leaving directory `/usr/home/erick/Firebird-2.1.3.18185-0/gen'

Realmente no es un error, simplemente son los últimos mensajes que aparecen después de la instalación lo cual no me convence, es como si terminara a medias. Revisando el script que realiza la instalación "install.sh" señala que ciertamente esto es todo!

Los mensajes que presenta de que no pudo encontrar algunos archivos, realmente no es nada importante ya que se trata algunos archivos de ejemplos, asi que procedo a probar mi servidor después de recargar los servicios inetd.

Intentando conectarme desde una aplicación remota no logro establecer la conexion sin obtener algun mensaje de error claro. En el mismo servidor Freebsd verifico si el puerto 3050 de firebird esta escuchando con el comando "sockstat" y todo esta en su lugar. Proceso a utilizar el isql y desde que intento de ejecutar el comando veo el siguiente mensaje de error:

/libexec/ld-elf.so.1: Shared object "libicuuc.so.30" not found, required by "libfbembed.so.2.1"

Al parecer algunas librerías no se copiaron en donde deberían de estar en el proceso de instalación, asi que lo hago manual ya que todas ellas se encuentran en el firebird compilado.

Dentro de la carpeta de los fuentes se crea una carpeta nueva llamada "gen", aqui se deposita el binario del servidor, dentro de la carpeta "lib" estan nuestros archivos, procedemos a copiarlos en las rutas que son necesitados:
cp -v libicu* /libexec/ cp -v libicu* /usr/local/firebird/lib

Volvemos a probar isql y este accede sin problemas, ahora tratare de conectar mi aplicación externa a mi nuevo servidor y se produce un nuevo mensaje de error:

CHARACTER SET ISO8859_1 is not installed.

En caso de que nuestra aplicación y base de datos no este usando ningun "character set", probablemente no surgiría ningún mensaje de error.

Los diferentes character set estan registrados en un archivo llamado fbintl.conf, al revisar mi instalacion dicho archivo no existe, pero si esta en el compilado, entramos al forder gen/firebird/intl procedemos a copiarlo:

cp -v fbintl.conf /usr/local/firebird/intl

Nuevamente entro a mi aplicación externa y pruebo... pasa la prueba ! hago algunas inserciones, modificaciones y consultas complejas, todo en orden :)

Sin poseer la instalación portable oficial para FreeBSD se hace muy tedioso el aventurarnos a instalar un paquete por medio de los código fuentes, ya que nos pueden mostrar un sin fin de inconvenientes en el proceso.

miércoles, 25 de agosto de 2010

Cual es el mejor servicio webhosting en la internet?

Hace algunos años atrás buscaba un buen servicio de hosting compartido para alojar unos pocos proyectos, deseaba buenas prestaciones (features) y aceptable precio, busque mucho por la internet y la verdad que me encontré con todo un mundo de publicidad de empresas que ofrecen hosting, muchas tentativas y otras no tanto, una situación muy difícil de elegir entre tantas jugosas opciones.

Entre todas las posibles empresas de webhosting del momento habían tres que ofrecían las más tentativas prestaciones, y me decidí por una de ella ya que esta mostraba casualmente un cuadro de comparación de ventajas con relación a sus más cercanos competidores y definitivamente era la que ofrecía más a casi el mismo precio: IXWEBHOSTING.COM

Espacio ilimitado en disco !!!
Trafico de ancho de banda ilimitado !!!
Alojamientos de dominios ilimitados !!!
IP publicas asignadas !!!
Registro de dominios gratis !!!

Sobre todo quería contratar un paquete Windows que son más caros que los convencionales (Linux)... después de dos años el resultado fue catastrófico! Cometí un error de principiantes, me deje llevar de un espejismo que ofrecía todo a menor costo, pero lo barato sale caro.

El problema de IXwebhosting al igual que otras compañías de hospedaje del mismo calibre, es que ofrecen tantas maravillas a un precio tan accesible y poseen una agresiva publicidad que les favorece en la internet, lo que trae como resultado una superpoblación en sus servidores de servicio compartido, esto causa que tengamos fluctuaciones constantes en el servicio, como la pagina no responde en momentos determinados, cargas demasiadas lentas por presentar cualquier pagina hosteada, gran lag de respuesta, sobre todo en páginas con conexión a base de datos. Recuerdo que cuando me conectaba al sqlmanager del ms-sqlserver, podía ver la lista completa de todas las base de datos que tenía el servidor en cuestión, habían centenares y centenares de base de datos, esto me ponía los pelos de punta, para hacer un backup de una base de datos de 100mb dure casi una hora.

Esta experiencia me ayudo a madurar al momento de seleccionar un hosting:

1. No dejarnos llevar por las prestaciones y la economía, la mayoría que ofrecen "mucho" lo dan a menor calidad
2. Cuando tengamos una posible empresa que deseemos contratar sus servicios, debemos visitar websites que se dedican a valorar y posicionar las compañías de hospedaje, algunos no son objetivos, pero la mayoría sí. Busquemos siempre los website con review de los clientes y detengamosno a leerlos. Solo tenemos que escribir en google "hosting reviews"
3. Por lo general los mejores servicios provienen de compañía de hospedaje que ofrecen limitaciones reales en sus prestaciones.
4. No contratar servicios de revendedores, irnos directamente con la empresa que provee el servicio. Los revendedores por lo general contratan los servicios más económicos de las empresas de hospedaje saturadas
5. Contratar servicios de empresas norteamericanas para los que vivimos en occidente (continente americano y Europa occidental). Los estándares de calidad del servicio son más exigente allí, precios más razonables, personal técnico mas capacitados, lag de respuesta en sus servidores menores y un etcétera de beneficios que casi ningún país se le puede igualar.

Basado en mis investigaciones, experiencia personal y de conocidos no recomiendo los siguientes website:

ixwebhosting
iweb
godaddy
yahoo
mihosting
bluehosting
lunarpages
dreamhost

Y me gustaría mencionar una larga lista de hosting muy populares con supuestos servicios ilimitados de disco, tráfico y otros menesteres mas. Aunque algunos pocos tengan una buena crítica, podemos caer en la mala suerte de estar en uno de sus servidores sobrepoblados o tener problemas con una pronta respuesta de soporte. Entre estas compañías de hospedaje de "ilimitadas prestaciones" me gustaría solo sacar una que al parecer es la mejorcita hostgator.com

Debemos estar claro que este marketing de "Ilimitadas prestaciones" no son reales, todo tiene su límite, sencillamente saben que más del 90% de sus clientes nunca almacenaran más de 500 megas entre pagina web y base de datos, el real problema para estas compañías es la carga de CPU, ya que el acceso dinámico a base de datos y una considerable cantidad de visitas de muchos website simultáneos en un mismo equipo trae como consecuencia un alto consumo de recursos que relentiza todas las operaciones. Muchas veces estas compañías sacan de circulacion algunos website con la excusa de "no están bien programados / desarrollados" porque generan un consumo excesivo de recursos, recomiendan a los dueños de los mismos a que reformulen su website o contraten un servicio superior como por ejemplo un "servidor dedicado".

Existen muchas personas que prefieren contratar hosting locales, es decir, en su pais de origen, pero nunca he compartido esta opinion por algunos motivos:

1. Muchos son revendedores
2. Soporte mediocre
3. Pocas prestaciones
4. Generalmente los precios de las companias locales duplican y triplican a los precios reales norteamericanos, ya que los costos de los servicios locales para mantener un servidor activo con una conectividad al internet de altas prestaciones 24/7 son muchos mas elevados y en algunos casos los precios son "abusivos"

En este ultimo punto me gustaria exponer un "descarado" caso en mi pais, La compañia mas grande de telecomunicaciones local de nombre "Codetel", entre su amplio paquete de servicios ofrece tambien alojamiento web, pero las prestaciones y el precio que tienen me parece una falta de respeto total a mi inteligencia y la de cualquier ser humano que trabaja en este medio tecnologico. Veamos, de su propia pagina oficial extraigo los siguientes datos:

Servidor dedicado:
1 ip fija
80gb de disco "SATA"
1gb de memoria ram
Trafico ilimitado (por lo menos algo bueno)
100 cuentas de correos de maximo 100mb cada una
SQL Server - 2GB de datos y capacidad para crear 100 base de datos
Windows 2003 server

Aunque no señalan el tipo de equipo que es el servidor, dedusco que por tener un disco SATA y no SCSI, con tan solo 1gb de memoria, con una version vieja de SQL Server, no se trata de un equipo nada moderno y rapido, ni si quiera de un servidor serio, creo que cualquier computador casero se mete en los bolsillos a este "servidor".

Precio: para contratar el servicio hay que pagar una "activacion" por un costo de 340 dolares, y una renta mensual de 340 dolares, asi que el primer año con nuestro servicio sera de 4420 dolares !!! es acaso un chiste?

Ahora veamos el alojamiento compartido "shared hosting" que tienen:

Espacio en disco 250mb (basico) y 500mb (empresarial) !!!
Cuentas de correo 20 (basico) y 60 (empresarial) de 10mb cada una
windows 2003 server
SQL Server no tiene para ningun plan, pero el plan empresarial puede contratar el servicio de modo opcional

Precios: pago por activacion 23 dolares (para ambos planes), renta mensual de 18.5 dolares plan basico y 23 dolares plan empresarial. Nuestro primer año de servicio costara 245 dolares (basico) y 300 dolares (empresarial). Si queremos añadir soporte de base de datos al plan empresarial debemos pagar pero no esta claro cuanto dinero mas, pero estoy seguro que no es poco. Creo que solo con el pirrico espacio en disco y el precio anual que se debe pagar es un descaro de los mas vil.

Todo esto sin mencionar que a presar de ser la compañia mas grande de telecomunicaciones del pais es la que mas fluctua con el servicio de internet, incluso las caidas de este servicio han estado varias veces presente en la prensa local como noticia, por lo tanto no creo que tengamos garantizado una disponibilidad de 24/7/365 de nuestro hospedaje contratado con ellos.

domingo, 22 de agosto de 2010

Consultas frizadas / colgadas en Firebird 2.1

La verdad que este es un suceso lo he visto en repetidas ocasiones, lanzo una simple o compleja consulta SQL que con anterioridad he lanzado obteniendo los resultados deseados, pero un dia la misma consulta se cuelga en un limbo interminable. Que sucede? no he realizado ningun cambio de estructura en las tablas en cuestion, quizas existen mas registros que otros dias, pero no sera este el motivo?... Por supuesto que no... El problema es "corrupción en la base de datos" !!!

Por lo general existe una tabla corrupta para ser especifico, haciendo una simple consulta y recorriendo todos los registros de cada una de las tablas en cuestion, daremos con una que no permitira recorrer todos los registros, quedándose colgada.

La unica solucion a este problema por suerte es la mas sencilla de todas, hacer un backup / restore de la base de datos. Todavia no me he topado con el caso que me lleve a soluciones mas extremas.

Como observación, he visto que este tipo de corrupción mayormente aparece cuando intento de insertar cantidades masivas de registros a múltiples tablas.

Las empresas de software internacionales desplazan a las empresas dominicanas en su propia tierra

Cuando se ven artículos en periódicos digitales y/o nacionales con los títulos “Sube comercio entre Costa Rica y República Dominicana”, “Compañías de software de Costa Rica y República Dominicana realizan ronda de negocios”, “Presidente Leonel Fernández lanza industria software”, y se conoce el trasfondo de todo esto, uno se siente que le están tomando el pelo y pasándolo por idiota, pero para los que no están muy empapados de la situación, pues aquí les va:

Al leer estos artículos a simple vista pensamos que se trata de buenas iniciativas y que las compañías de software dominicanas conocerán nuevos mercados internacionales para expandirse y crecer, pero si investigamos un poco nos damos cuenta que es absolutamente todo lo contrario.

El gobierno dominicano desde hace algunos pocos años atrás se ha empeñado en convertir al país en un “gran exportador de tecnología” tomando como ejemplos países pobres que lo han logrado (La India), pero tomaron el rumbo equivocado. En vez de reunir a todas las empresas locales, otorgarles incentivos y darles nuevas oportunidades de negocios internacionales lo que ha hecho es traer empresas extranjeras a que se instalen en el país dándole todas las facilidades habidas y que estas empresas absorban el mercado nacional. Todas estas empresas llamadas “dominicanas” que vemos que se reúnen en los encuentros con el gobierno, realmente son todas de capital extranjero con pocos años en el país, y las que se pueden decir que son dominicanas 100%, solo son asociados de estas empresas extrajeras para que representen sus productos en el territorio dominicano.

La idea “sana” del gobierno es generar empleos locales y crear zonas francas de software para exportar productos tecnológicos “locales” al extranjero produciendo así entradas de divisas al país. Pero la verdad es que esta idea del gobierno es totalmente errónea, no se si es que tan muy mal asesorados o como siempre hay algún funcionario haciéndose rico con todo esto.

Primero, una empresa desarrolladora de software nunca cuenta con una planilla gigante de empleados (desarrolladores / programadores), en cantidad de empleados se le puede considerar una empresa pequeña o en escasos casos mediana. Es decir, que los empleos a producirse serán muy mínimos y por lo general muchas de estas empresas ya cuentan con su personal capacitado traídos del extranjero, generando así muy pocos nuevos empleos.

Segundo, todas las ganancias generadas por estas empresas, su gran grueso son repatriadas, es decir, las famosas divisas no se quedan en el país, solo somos un puente. El dinero invertido localmente son gastos menores, como pago de local, pago de una pequeña nomina, suministros y otros servicios marginales.

Tercero, los productos a comercializar tampoco son locales, la gran mayoría de los software ya fueron acabados en su país de origen, solo hacen pequeños ajustes para “climatizar” sus productos en el país para ser vendidos.

Cuarto y mas importante, terminan de hundir mas de lo que están a las empresas locales, ya que se encuentran en una competencia desleal, compiten con empresas de mucho mas capital y con respaldo del gobierno que como si no fuera poco les entregan grandes proyectos tecnológicos gubernamentales con el pretexto de “dinamizar” este nuevo renglón productivo y por tratarse de empresas con mas historial de éxito y experiencia.

Es increíble como el gobierno convierte un suceso de impacto negativo en una noticia positiva disfrazando todo con un juego de palabras, es sorprendente lo que puede hacer la propaganda partidista gubernamental :)

Realidad de las empresas de software dominicanas

Las empresas desarrolladoras de software (EDF) dominicanas de gran envergadura ya “casi” no existen. Los principales clientes de las grandes EDF dominicanas eran algunos bancos, empresas grandes tipo consorcios, multinacionales y sobre todo el gobierno, ya que son los únicos que podían costear proyectos de cifras millonarias y pagar por un servicio de calidad. Pero por la difícil situación económica que se vio el país en los años de la hiperinflación y otros factores similares, estos clientes comenzaron a invertir mas en reforzar su personas “IN HOUSE”, y limitar mas las asesorias, comprar productos extranjeros acabados, obligando así a las EDF a desaparecer o convertirse en empresas mas pequeñas con otras orientaciones. Solo salvándose aquellas que mantuvieron al gobierno de su mano (algunos funcionarios públicos son socios o beneficiarios de estas) y recibiendo proyectos grandes.

Las únicas EDF que continuaron con su trabajo habitual fueron las pequeñas y mediana que siempre han comercializado software de baja gama, de bajo y mediano costo con productos sin altos atributos de calidad y con un soporte mediocre. Pero también siempre han exisistido los desarrolladores informales, que trabajan por su cuenta, llamados también “freelance”, los cuales se han beneficiado mucho por la falta de un mercado real de EDF en el país.

Obviamente que en un país en donde el sector productivo del software esta casi diezmado, en donde no existen grandes competidores dominicanos y no hay un apoyo por parte del gobierno, pues surge una gran oportunidad de negocio para las empresas extranjeras.

La pirámide de las EDF en la republica dominicana queda así en la actualidad

Aquí clasifico en orden categórico los tipos de EDF según sus ingresos:

En la cima: Empresas extranjeras, obtienen proyectos millonarios por parte del gobierno gracias a licitaciones que están hechas a la medidas para ellos (los términos de las licitaciones exigen experiencia demostrable en proyectos “mega gigantes” similares, ingresos millonarios, etc.), tienen productos acabados de alta calidad, pueden presentar propuestas millonarias a corporaciones grandes nacionales gracias a su portafolio de trabajo de su país de origen.

Muy por debajo: EDF medianas y pequeñas, luchan día a día por seguir existiendo, no pueden ofrecer productos y servicios de calidad por poseer personal muy rotativos ya que no pueden pagar sueldos suficientemente remunerados, muchos de ellos poseen productos acabados extranjeros que a veces no conocen mucho y que solo buscan vender e implementar a duras penas. Se sostiene el negocio gracias a una clientela fija (no muy grande) a los cuales apenas dan abasto para darle un servicio medianamente.

En el ultimo escalafón pero pisándole los talones a los anteriores: los freelance, grupo de individuos particulares que se han beneficiado del inestable mercado de software local, para satisfacer a los clientes de empresas pequeñas y medianas que no encuentran viable comprar un producto de una empresa extrajera por su alto costo, ni están por enliarse con los enliados EDF medianas y pequeñas, ya que los freelance pueden ofrecer un soporte mas personalizado y rápido por un precio igual o mas económico.