jueves, 24 de abril de 2014

Julia, un lenguaje de programación ¿con lo mejor de todos los mundos?

Según la Wikipedia, Julia es un lenguaje de programación dinámico, de alto nivel y alto rendimiento para cálculos científicos y técnicos con una sintaxis similar a la de otros entornos de computación similares. Dispone de un compilador avanzado, mecanismos para la ejecución en paralelo y una extensa biblioteca de funciones matemáticas. La biblioteca, desarrollada fundamentalmente en Julia, también contiene código desarrollado en C o Fortran.
El lenguaje fue creado por Stefan Karpinski, estudiante graduado de la Universidad de California, que estaba involucrado en una herramienta simulación de redes que requería el uso de varios lenguajes de programación diferentes. Curiosamente, ninguno de los lenguajes usados podía hacer toda la tarea, todo el proceso. Por ello, Karpinski, junto con su compañero de universidad Viral Shah y Jeff Bezanson del MIT, decidieron resolverlo diseñando un nuevo lenguaje que fuera compatible con prácticamente cualquier tarea. La meta de Karpinski y su equipo es construir un lenguaje único que haga todo bien.
En este lenguaje, bautizado como Julia, las bibliotecas están escritas en Julia y se integra lo mejor del código de C y Fortran en los siguientes rubros: álgebra lineal, generación de números al azar, procesamiento de señales y procesamiento de strings (cadenas de caracteres). Además, la comunidad de desarrolladores de Julia ha contribuido con una serie de paquetes externos en muy poco tiempo. IJulia es una colaboración de IPython y las comunidades de Julia, lo cual le da un navegador con una interfaz gráfica basada en Julia,
Los programas de Julias se organizan definiendo funciones y sobrecargando las mismas para diferentes combinaciones de tipos de argumentos, los cuales pueden ser definidos por el usuario.
Un resumen de las características de Julias son:
Posibilidad de definir el comportamiento de una función con una combinación de tipos de argumentos
Sistema dinámico de tipos: tipos para documentar, optimizar y ejecutar rutinas. Buen desempeño, el cual se aproxima (estadísticamente) a lenguajes como C manejador de paquetes interconstruido. Macros como en LISP y otras metafacilidades de programación. Se pueden llamar funciones de Python vía llamadas a PyCall
Llamada a funciones de C directamente. No se necesita nada más. Capacidades poderosas de Shell para manejar otros procesos. Diseñado para computación distribuida y en paralelo.
Tipos definidos por el usuario que son rápidos y compactos como si fuesen interconstruidos.
Generación automática de código especializado, eficiente, de acuerdo al tipo de argumentos que de pasan
Conversiones elegante y extensibles así como promoción de tipos numéricos y otros tipos
Soporte para Unicode
Licencia MIT : libre y de código abierto
La cuestión es si esta idea tendrá éxito. Los programadores tienden a irse a lenguajes más que probados, amén de tener un soporte generalizado. Desde luego que en esta selva de lenguajes de programación, hay para todos, pero falta ver si Julia puede madurar y convencer a los programadores de sus bondades.



miércoles, 9 de abril de 2014

Los diferentes modelos de negocio de una API y sus desarrolladores

Quizás aún no se haya llegado al punto de madurez suficiente para considerar las APIs monetizables como una fuente más de ingresos. Muchas empresas ofrecen acceso a sus APIs públicas sin apenas restricciones y sin ningún coste a los desarrolladores, sólo se fijan limitaciones por número de peticiones de uso, usuarios, tokens, etc…
Aunque actualmente es mínimo, existen distintos modelos de negocio en el ecosistema de las APIs entre desarrolladores y empresas que presentan un panorama bastante interesante.
  • API abierta/pública. En este nivel las empresas ofrecen, por regla general, una API abierta con métodos limitados en comparación a los que se usan internamente. Los desarrolladores pueden crear cualquier aplicación usando este API cumpliendo los acuerdos de licencia y uso. No se espera una fuente de ingresos, sino que sirva para captar tráfico a través de las aplicaciones y webs creadas entorno al API.
  • Asociados (Associate). Cierto desarrolladores que han demostrado un uso más avanzado del API tienen acceso a funcionalidades extras. El contacto entre los desarrolladores que usan el API y la empresa es más directo y reciben un soporte personalizado. Además de seguir un proceso de aprobación, la empresa puede promocionar las aplicaciones creadas en torno al API. Incluso, certificarlas de alguna forma con una marca que demuestre a los usuarios que siguen unas pautas de calidad.
  • Partners. En este caso, hablamos de desarrolladores que están usando el API de una forma exitosa en la que obtienen beneficios por su cuenta y aportar valor a la empresa. Las necesidades de uso del API son elevadas por lo que requieren de cuotas especiales, lo que implica el pago por uso y la reserva de recursos que provee el API para garantizar su estabilidad. La relación entre la empresa y el desarrollador es más cercana a la de socios estratégicos.
  • Incubadoras de aplicaciones. En este caso, las empresas proveedoras del API ofrecen recursos adicionales a los desarrolladores, además de un cierto mentoring a cambio de la participación en el futuro negocio. Es una apuesta, en muchos casos, a largo plazo y en mercados en los que se juega a experimentar en busca de nuevas oportunidades.
Sin duda, nos espera un vibrante futuro entorno al uso de APIs por los desarrolladores, en el que ya no sólo se jueguen con ellas sino que puedan construirse negocios estables, las startups de la próxima generación.

Si quieres estar al día de nuestras novedades visita nuestra Web www.asociacionaepi.es y siguenos en las redes sociales

miércoles, 2 de abril de 2014

Mozilla nos trae su nuevo lenguaje de programación llamado Rust



Rust es un nuevo lenguaje de programación multiparadigmático que está siendo desarrollado por Mozilla. Según se puede leer en su sitio oficial, el objetivo de este nuevo lenguaje es diseñar e implementar un lenguaje de sistemas seguro, concurrente, práctico y estático.

El desarrollo del lenguaje, fue empezado en 2006 por Graydon Hoare, y en 2009, la fundación Mozilla, se involucró en el proyecto. Además de Hoare, hay otros desarrolladores detrás como son el miembro del comité Ecma, Dave Herman, y el CTO de Mozilla y creador de JavaScript, Brendan Eich.

Por ahora se conoce poco sobre el código, pero se puede ver algo de sintaxis en la FAQ de Rust. Os pongo un trozo de código.


iter pairs() -> tup(int,int) {
let int i = 0;
let int j = 0;
while (i <10) {
put tup(i, j);
i += 1;
j += i;
}
}
fn main() {
let int i = 10;
let int j = 0;
for each (tup(int,int) p in pairs()) {
log p._0;
log p._1;
check (p._0 + 10 == i);
i += 1;
j = p._1;
}
check(j == 45);
}

Las características que nos aportará este nuevo lenguaje, han sido resumidas por los desarrolladores de Mozilla.

Orientado a seguridad

Memoria de seguridad, para evitar bugs que sirvan como brechas de seguridad. Gestión automática de guardado.
Control de las modificaciones. Inmutables por defecto. El estado de mutabilidad no se comparte entre tareas.
Ejecución dinámica de seguridad: errores, registros, etc.
Capacidad para definir invariantes complejas

Orientado a la concurrencia

Control de la memoria explícita. Control de localización y de etiquetas.
Tareas de peso muy ligero. Facilidad para convertir miles en millones.
Stack iterators
Compilación nativa y estática. Emite archivos ELF / PE / Mach-o
Una interfaz simple y directa para C.

Orientado a la práctica

Multiparadigmático, totalmente funcional, concurrente, OO
Funciones de primera clase con vínculos
Multiplataforma. Desarrollado para Windows, Linux, OSX
Cadenas UTF8
Funciona con cadenas nativas existentes. GDB, Balgrind, Shark, etc
Permite romper normas en la práctica, si es explícito dónde y cómo

Como se ha comentado, es un proyecto aún en desarrollo, por lo que no podemos ofrecer mucha más información, solo esperar a que por parte de Mozilla vayan sacando más información al respecto.