Mostrando entradas con la etiqueta Tecnología. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tecnología. Mostrar todas las entradas

domingo, 18 de mayo de 2014

Emprendedurismo social en Costa Rica y su relación con empresas de Tecnologías de la Información y Comunicación

Como parte de los requisitos que se me solicitaron para mi reciente graduación como MBA de la ULACIT, estuvo el desarrollo de un proyecto de Investigación Empresarial Aplicada, me parece muy provechoso escribir aquí un extracto de dicha investigación cuyo título es compartido por esta entrada del blog, además de que me parece que es un tema interesante e introduce un poco de aportes a raíz de mi formación como tecnólogo:

El término emprendedurismo social, se asocia con la acción de los emprendedores, identificándose estos por poseer iniciativas muchas veces creativas o innovadoras que terminan en la creación de nuevas empresas o de un proyecto concreto. Este último punto es muy importante, ya que un emprendedor, para ser considerado como tal, debe ser proactivo y poner en marcha las buenas ideas e intenciones que posee. Asimismo, en cuanto al concepto de emprendedor social, es posible partir de la definición anterior y determinar que un emprendedor social es alguien que posee iniciativas, muchas veces creativas e innovadoras, las cuales culminan en el desarrollo de una nueva empresa o un proyecto concreto, siempre orientado a lo social. Por esto último, se entiende que su fin es ayudar a la sociedad o al medio ambiente y a la vez velar no solo por los intereses propios, sino también por los comunes. Una definición muy interesante es la dada por Álvaro Ramírez (2008, p. 1), del Departamento de Creación de Empleos y Desarrollo de la Empresa Organización Internacional del Trabajo (OIT), en una entrevista ofrecida de cara al concurso “Emprendedor Social del Año – América Central 2008”.

En dicha entrevista, Ramírez manifiesta que no existe una definición única y universal, sin embargo, afirma que todo emprendimiento social debe reunir al menos tres elementos clave: “un objetivo social, una innovación transformadora y un modelo de negocios sostenible“. Dicha definición es muy certera, sencilla e interesante, pues engloba los conceptos del emprendedurismo en cuanto a innovación y, por supuesto, al hecho de ser sostenible- ningún emprendimiento se puede considerar exitoso si no logra ser sostenible-. Dicha definición incluye, además, el “objetivo social” propio de este tipo de emprendimientos.

En la presente investigación, se trató de partir de este concepto y enfocarlo espacialmente hacia Costa Rica. Si bien se podría decir que el emprendedurismo social es un concepto relativamente joven, ya ha tenido cierto impacto mundial y abundan los casos de su utilización. Quizá el más conocido de entre varios casos anónimos es el del “Banco de los pobres”, formalmente Grameen Bank de Bangladesh, el cual puso en marcha el concepto de “Microcréditos” creados específicamente para ayudar a los más pobres a emprender sus proyectos Esta iniciativa, impulsada por Muhammad Yunus, lo hizo acreedor del Premio Nobel de la Paz en el año 2006. El propósito de enfocar el estudio en el país es determinar la existencia de este tipo de iniciativas locales, más específicamente en la industria de las tecnologías de la información y la
comunicación.

Según autores como Merino, A; Ballesteros, C; Bilbao, P; Carrero, I; Contreras, D; Díaz, E; Labajo, V; Linares, P y Varlos, C (s.f.) la tecnología es un punto esencial para la puesta en marcha de los emprendimientos sociales. En su “Guía del Emprendedor Social”, el uso de la tecnología ofrece ventajas tales como transparencia, escalabilidad de la solución, distribución, rapidez, conexión directa, mayor internacionalización, conectividad, eliminación de barreras y prejuicios y accesibilidad. Además, da paso a la optimización de recursos, maximización del impacto social, ajuste de la inversión necesaria y localización de las barreras de la comunicación a través de herramientas como la Internet, los teléfonos móviles inteligentes y los protocolos de comunicación.

Después de la presente investigación se llegaron a las siguientes conclusiones:

1. En términos generales y según la posición de emprendedores, académicos y afines del área de las tecnologías de la información y comunicación, así como también aquellos individuos relacionados con emprendimientos en el país, los casos de emprendedurismo social en Costa Rica son escasos. Lo anterior se debe a varios motivos, entre los que destacan una cultura muy poco orientada al emprendedurismo, en términos generales, por aspectos como la gran cantidad de oportunidades de empleo, especialmente en el área de las tecnologías de la información y comunicación, una cultura muy orientada al individualismo, la falta de información y formación en las universidades y centros de estudios y al escaso apoyo por parte del gobierno y las entidades financieras.

2. Realmente, las tecnologías de la información pueden ser un gran aporte para emprendimientos, tanto comerciales como sociales. Por muchos años, ha existido la percepción, que en ocasiones se torna real, de que los recursos relacionados con las TIC resultan costosos. Sin embargo, con eventos tan importantes como la apertura en las telecomunicaciones y el consiguiente “boom” en la venta de dispositivos móviles y APPS, así como el surgimiento de tecnologías en la nube, el desarrollo de nuevos emprendimientos en este ámbito ha resultado más aprovechable o al menos lo ha sido el aporte de este tipo de tecnologías para el desarrollo de emprendimientos sociales.

3. Algunos casos de emprendimientos sociales en nuestro país son el INBio Parque, la clínica de especialidades médicas Asembis, la Asociación Costarricense para Organizaciones de Desarrollo Empresarial (Acorde), FUNDECOPERACION, FUPROVI, ADAPTE, AMPO, Costureras del Obelisco, Dogood, Reciclarte y Fundación Acción Joven, entre otros muchos casos un poco más anónimos por la misma naturaleza de enfocarse en ayudar antes de darse a conocer. Casos como la universidad CENFOTEC o ASIS (Asociación para la Innovación Social) pueden considerarse como emprendimientos sociales en el área de las tecnologías de la información y comunicación, ámbito en que dichos casos son más escasos.

4. En general, la visión de los futuros emprendedores en el área social es un poco más alentadora que su actual desarrollo en el país. Si bien se identifican los mismos problemas que se dan en la actualidad, tales como la falta de apoyo y de información en los procesos formativos, sí consideran que los proyectos con fin social pueden ser rentables, a la vez que estarían dispuestos a pagar de más por este tipo de emprendimientos.

viernes, 27 de noviembre de 2009

Load Balancing

Load Balancing o Balanceo de Carga, es una técnica aplicada a través de software o hardware (routers, switches), para la distribución de trabajo entre dos o más dispositivos, con el fin de maximizar el rendimiento, este es un término que muchas veces se confunde con Clustering, para aclarar un poco este punto, las técnicas de Clustering son mayormente aplicadas para asegurar una alta disponibilidad y confiabilidad, y se da principalmente en los que respecta a bases de datos; en cuanto al balanceo de carga, es un concepto que es mejor conocido en aplicaciones Web, en donde se desea mejorar el rendimiento de la aplicación a través de una distribución del procesamiento a través de N servidores, conformando lo que se conoce también como granja de servidores (Web Farm).

Uno de los grandes temas cuando se habla de balanceo de carga en aplicaciones Web, es lo concerniente al manejo del estado, como es bien sabido, un sitio Web es una aplicación Stateless (o sea que no mantiene información de estado por sí sola), para esto han existido innumerables técnicas ya sean desde el lado del cliente o el servidor, donde podríamos decir que la más popular es una técnica de servidor denominada Session State. El Session State consiste el almacenar en la memoria del servidor Web información de estado por cada cliente. En un ambiente de granjas esto puede acarrear inconvenientes, debido a que si un cliente hizo una solicitud al sitio que se procesó por el Nodo X, puede ser que la siguiente solicitud se haya procesado por el Nodo Y, y al ser estos dos nodos servidores diferentes, cada uno con su memoria propia, es imposible para ellos compartir dicha información, por lo que se perdería. Algunas de las técnicas utilizadas para solventar esto es la Persistencia, que consiste en que una vez que se ha creado una sesión para un cliente, el balanceador debe ser responsable de manejar los siguientes requests en el mismo servidor que lo atendió hasta que la sesión del mismo haya expirado. Talvez los dos principales inconvenientes achacados a esta técnica son las siguientes: primero, que si el servidor que estuvo atendiendo al cliente, falla, toda la información del mismo se perdería; y segundo, que no se estaría explotando el concepto de balanceo, sobre todo en aplicaciones que manejen pocos usuario que realizan muchos requests, aunque este último caso conformarían un escenario realmente atípico. Volviendo al primer inconveniente, igualmente en un ambiente en el que no existiese balanceo de carga, el problema de pérdida de sesión en caso de fallo se daría, por lo que esta situación no es achacable al uso de un balanceador. Una técnica de balanceo muy conocida que es propietaria de Microsoft es el NLBS (Network Load Balancing Service), esta técnica es por software y maneja persistencia a través del concepto de Afinidad del Cliente (Client Affinity), la cual se puede manejar por cliente (Para Intranet) o por dirección IP de clase C (para Internet).

Otra opción para evitar el problema de pérdida de información de estado, es almacenar dicha información en un servidor dedicado; ya sea este una base de datos, otro servidor Web, o un servidor con algún tipo de servicio o demonio, accesado a través de un puerto. Principalmente con la solución de base de datos se resuelve el problema de la pérdida de información en caso de fallo. Con las otras técnicas la caída de un servidor Web no acarrearía la pérdida de información, pero sí la caída del servidor dedicado, a no ser que dicha información no se almacene en memoria, si no en algún repositorio de información persistente como un archivo o una base de datos.

Un tema interesante al que se le puede seguir el rastro es el concepto de Application Delivery Controller, que ha sido nombrado Next Generation Load Balancer (balanceador de carga de la siguiente generación), el cual consiste en un dispositivo de red que a la hora de asignar un servidor busca el servidor más rápido que esté disponible y maneja aspectos tales como caché y seguridad.

viernes, 20 de noviembre de 2009

Tracing en ASP.Net

Por muchos es bien conocido las herramientas de diagnóstico y tracing de Microsoft ASP.Net. En este contexto teníamos objetos como el Debug y el Trace. Con el objeto Trace la gente tendía mucho a confundirse, ya que existían dos tipos diferentes, el objeto trace de System.Diagnostics que era el que trabajaba con los famosos Listeners (por ejemplo, un archivo de texto, el Event Viewer, o un tipo custom, para guardar por ejemplo en una base de datos) y que tenía métodos como el “TraceInformation”, “TraceError”, “Write”, etc; y estaba el objeto Trace del contexto de la página con métodos como el “Write” y el “Warn” (que escribía un texto en rojo).

Una buena forma de tracear información tocando lo menos posible la aplicación y haciendo una combinación de estos dos objetos trace es la siguiente; en el archivo de configuración de la aplicación habilitar el trace a nivel de página dentro de la sección “system.web”:


< trace enabled="true" writeToDiagnosticsTrace ="true" pageOutput="false" traceMode="SortByTime" requestLimit="20"/>


Con valor de “false” en el atributo “pageOutput“, se evita ver la información de traceo en cada página, para utilizar la página genérica, http://servidor/directorioRaizApp/Trace.axd. Aquí el atributo clave es “writeToDiagnosticsTrace”, el cual lo estamos asignando a “true” con el fin de que todo lo que procese por el Trace de la página, se redireccione a los listeners de System.Diagnostics, que dicho sea de paso, aunque se pueden agregar por código, también se pueden agregar por archivo de configuración, dentro de la sección “configuration”, como se muestra a continuación:


< system.diagnostics>
< trace autoflush="true" indentsize="2">
< listeners>
< remove name="Default"/>
< add name="EventLogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MiSource"/>
< add name="LogFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\TraceInfo.txt" />
< /listeners>
< /trace>
< /system.diagnostics>


Con esto estaríamos viendo la información, tanto en el Trace.axd, como en el archivo de texto y el Event Log respectivo. Y enviar información adicional sería tan fácil como utilizar la siguiente línea de código:


Trace.Warn(string.Format("Paso anterior al proceso a las {0}", DateTime.Now.Ticks));


Por supuesto esto se puede combinar también con un Switch para también contolar a través de archivo de configuración de la aplicación si se va a instrumentar o no, a través del siguiente código dentro de la sección “configuration” dentro del archivo de configuración de la aplicación, se muestra cómo hacer esto:


< system.diagnostics>
< switches>
< add name="SwitchApp" value="4"/>
< /switches>
< /system.diagnostics>


En este caso estamos asignando un nivel de “Verbose”. El código de la aplicación sería el siguiente:


TraceSwitch SwitchApp = new TraceSwitch("SwitchApp", "Switch de la aplicación");

if (SwitchApp.Level >= System.Diagnostics.TraceLevel.Verbose)
Trace.Warn(string.Format("Paso anterior al proceso a las {0}", DateTime.Now.Ticks));



Como en el caso anterior, estoy usando un nivel de “Verbose” para tomar la decisión de si instrumento o no. Obviamente este trabajo se puede hacer más simple y reutilizable a través del uso de clases utilitarias.