No puedo ocultar lo mucho que me gusta Eve Online, y creo que no es secreto que me fascina programar. Uniendo ambas cosas, ultimamente estoy desarrollando en python pequeñas herramientas de asistencia al juego. Pequeñas herramientas que solo tienen sentido para la forma en que yo juego el juego, entonces no puedo pretender que otro las programe.
En medio de estas pequeñas cosas, a medida que comienzo a unificar algunas y testeo otras para ver si sirven, tuve que interpretar una serie de códigos de región a partir de datos provistos por Eve Online, ya que dentro de las herramientas disponibles para desarrolladores encontraremos volcados de la base de datos que contienen dentro información muy variada.
Así que recurriendo al Python creé una estructura de datos de tipo diccionario, que está formado por una serie de pares de datos, siendo el primero de ellos la clave y el segundo el dato asociado a esa clave. El funcionamiento es muy sencillo, referenciamos al diccionario y una clave y nos devuelve el dato asociado.
Como dato interesante, los diccionarios están ordenados por su clave, y poseen algoritmos de búsqueda por clave muy eficientes. Si bien eso no es necesario para mi desarrollo, lo he usado otras veces con gran volumen de datos y es realmente impresionante la velocidad con la que localizan claves.
La declaración de un diccionario se ve así:
region = {'10000001': 'Derelik',
'10000002': 'The Forge',
'10000003': 'Vale of the Silent',
'10000004': 'UUA-F4',
'10000005': 'Detorid',
'10000006': 'Wicked Creek',
'10000007': 'Cache',
'10000008': 'Scalding Pass',
'10000009': 'Insmother',
'10000010': 'Tribute',
'10000011': 'Great Wildlands',
'10000012': 'Curse',
'10000013': 'Malpais',
'10000014': 'Catch',
'10000015': 'Venal',
'10000016': 'Lonetrek',
'10000017': 'J7HZ-F',
'10000018': 'The Spire',
'10000019': 'A821-A',
'10000020': 'Tash-Murkon',
'10000021': 'Outer Passage',
'10000022': 'Stain',
'10000023': 'Pure Blind',
'10000025': 'Immensea',
'10000027': 'Etherium Reach',
'10000028': 'Molden Heath',
'10000029': 'Geminate',
'10000030': 'Heimatar',
'10000031': 'Impass',
'10000032': 'Sinq Laison',
'10000033': 'The Citadel',
'10000034': 'The Kalevala Expanse',
'10000035': 'Deklein',
'10000036': 'Devoid',
'10000037': 'Everyshore',
'10000038': 'The Bleak Lands',
'10000039': 'Esoteria',
'10000040': 'Oasa',
'10000041': 'Syndicate',
'10000042': 'Metropolis',
'10000043': 'Domain',
'10000044': 'Solitude',
'10000045': 'Tenal',
'10000046': 'Fade',
'10000047': 'Providence',
'10000048': 'Placid',
'10000049': 'Khanid',
'10000050': 'Querious',
'10000051': 'Cloud Ring',
'10000052': 'Kador',
'10000053': 'Cobalt Edge',
'10000054': 'Aridia',
'10000055': 'Branch',
'10000056': 'Feythabolis',
'10000057': 'Outer Ring',
'10000058': 'Fountain',
'10000059': 'Paragon Soul',
'10000060': 'Delve',
'10000061': 'Tenerifis',
'10000062': 'Omist',
'10000063': 'Period Basis',
'10000064': 'Essence',
'10000065': 'Kor-Azor',
'10000066': 'Perrigen Falls',
'10000067': 'Genesis',
'10000068': 'Verge Vendor',
'10000069': 'Black Rise'}
Como verán tenemos un código de región proveniente del juego y el nombre de esa región, proveniente del mismo sitio.
Para usarlo simplemente invocamos el nombre del diccionario[la clave], como en el ejemplo siguiente, basado en Python 3.3
print(region['10000051'])
Al usar esta instrucción, en conjunto con el diccionario declarado, Python muestra 'Cloud Ring'. Tan sencillo como eso, tan potente como eso.
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
domingo, 13 de octubre de 2013
sábado, 14 de septiembre de 2013
Eve Online: Ayudas externas
Una de las particularidades del Eve Online es el grado de respeto que tiene CCP, la compañía, con sus usuarios. A la vez, el juego pose estructura y reglas, pero además de eso es un gran sandbox (arenenro) donde cada cual inveta su juego. Esto se traduce en una base de usuarios tremendamente fiel que además de generar eventos dentro del juego, construye cosas alrededor del juego, afuera del juego.
Para poder construir cosas fuera del juego se necesitan datos del juego, y es allí donde CCP demostró lo que puede generar una muestra de confianza. Lo que hizo la compañía fue liberar una API con acceso a los datos del personaje dentro de la base de datos del juego.
Tal como he explicado en otras ocasiones, una API es una interfase para programación (Aplication Programming inteface), o sea que es un set de funciones, objetos o llamadas a páginas web (mediante webservices) que permiten realizar consultas y devolver respuestas.
Lo interesante es que además de exponer esta API, la están mejorando constantemente. En la actualidad permite generar credenciales de acceso que exponen distintos datos, configurable mediante una página web, que permite el acceso a los datos de nuestro personaje. O sea que podemos siempre decidir cuanto exponer y ante quien. incluso por cuanto tiempo.
No contentos con eso, están ahora probando un segundo tipo de API que permitirá acceso a datos más estadísticos, como por ejemplo cantidad de naves de jugadores destruidas en una determinada zona en las últimas 24 horas, o a eventos, como el torneo de alianzas, donde se podía ver la el equipamiento de las naves usadas.
Ahora bien, ¿que sucede cuando una comunidad que sabe que seguirá jugando por mucho tiempo se encuentra con este tipo de accesos? Se comienzan a desarrollar herramientas externas, que toman datos de las APIs y generan información útil.
Comencemos por lo básico: una de las ayudas necesarias para este tipo de juegos tan complicados es la capacidad de probar conceptos antes de arriesgar las naves. Es allí donde entran programas dedicados a equipar naves fuera del juego y ver como varían los parámetros. Los dos programas más famosos que realizan esto son Eve Fitting Tool (EFI) y Python Fitting Assistant (PyFA) . EFI es el más tradicional de los dos, pero PyFA está consiguiendo cada vez más adeptos, y tiene la ventaja de ser multiplataforma.
Por supuesto, lo interesante de esos dos programas es que nos permiten ver que cosas podemos equipar en nuestras naves y que tan eficaces son con nuestras habilidades, o con las habilidades a grado 5 (V). Esto nos puede ayudar a planificar nuestro entrenamiento, pero si realmente queremos ponernos serios con el entrenamiento, tienen que usar Evemon, el planificador de habilidades que permite planificar meses de habilidades y ponernos nivel por nivel que debemos entrenar para un objetivo determinado.
Vayamos ahora a una de mis favoritas. A mi me encanta trabajar con el mercado y construir items, así que busqué una herramienta que uso a modo de sugerencia y evaluación de ideas, pero no a modo de director de juego. La moneda interna del juego es el Isk, es por eso que este gran programa se llama Isk Per Hour (Isk por hora). Este programa permite, entre varias otras cosas, descargar precios de varias regiones del juego, y evalúa cuanto cuesta construir un ítem basándose en esos precios.
Pero para explicar como Isk Per Hour funciona debo ingresar en otra área. Hasta ahora han visto varias herramientas individuales, pero hay también herramientas comunales. Existe un sitio web llamado Eve-Central, y es un sitio actualizado muy frecuentemente con precios de varias zonas de juego.
Como prueba de la amplitud, vean la búsqueda de datos por el precio del Tritanium, el mineral más básico del juego. Como verán, hay montones de usuarios ofreciendo vender y comprar este mineral, pero cada cual lo hace en una estación espacial en particular, dentro de un sistema estelar, que está dentro de una constelación, que está a su vez dentro de una región.
Ahora bien, mencioné dos cosas: que necesitaba explicar este sitio para mostrar como trabajaba Isk Per Hour, y que este era una herramienta comunal. La primera de las dos cosas es sencilla de explicar, Isk Per Hour se comunica con la página Eve-Central para averiguar los precios en las distintas regiones que le hayamos pedido. En cuanto a la segunda explicación , Eve-Central es un sitio comunal debido a que montones y montones de usuarios han contribuido un acceso API limitado a la página, y cada vez que realizan una consulta al mercado, los dato recibidos son enviado a la página. Esto significa que miles de usuarios contribuyen datos a un sitio que miles de usuarios usan directa o indirectamente.
Este ha sido un recorrido por algunas de las herramientas externas más populares del juego. No puedo dejar de comentar que debido a que la API es una herramienta de programación, ustedes mismos pueden programar un programa que realize algún tipo de operación que ustedes precisen. Por ejemplo, yo estoy comenzando a pensar en desarrollar una herramienta que me envíe un email cada vez que realizo una compra o venta dentro del juego, que tal vez evolucione en un histórico de precios con el tiempo.
Para poder construir cosas fuera del juego se necesitan datos del juego, y es allí donde CCP demostró lo que puede generar una muestra de confianza. Lo que hizo la compañía fue liberar una API con acceso a los datos del personaje dentro de la base de datos del juego.
Tal como he explicado en otras ocasiones, una API es una interfase para programación (Aplication Programming inteface), o sea que es un set de funciones, objetos o llamadas a páginas web (mediante webservices) que permiten realizar consultas y devolver respuestas.
Lo interesante es que además de exponer esta API, la están mejorando constantemente. En la actualidad permite generar credenciales de acceso que exponen distintos datos, configurable mediante una página web, que permite el acceso a los datos de nuestro personaje. O sea que podemos siempre decidir cuanto exponer y ante quien. incluso por cuanto tiempo.
No contentos con eso, están ahora probando un segundo tipo de API que permitirá acceso a datos más estadísticos, como por ejemplo cantidad de naves de jugadores destruidas en una determinada zona en las últimas 24 horas, o a eventos, como el torneo de alianzas, donde se podía ver la el equipamiento de las naves usadas.
Ahora bien, ¿que sucede cuando una comunidad que sabe que seguirá jugando por mucho tiempo se encuentra con este tipo de accesos? Se comienzan a desarrollar herramientas externas, que toman datos de las APIs y generan información útil.
Comencemos por lo básico: una de las ayudas necesarias para este tipo de juegos tan complicados es la capacidad de probar conceptos antes de arriesgar las naves. Es allí donde entran programas dedicados a equipar naves fuera del juego y ver como varían los parámetros. Los dos programas más famosos que realizan esto son Eve Fitting Tool (EFI) y Python Fitting Assistant (PyFA) . EFI es el más tradicional de los dos, pero PyFA está consiguiendo cada vez más adeptos, y tiene la ventaja de ser multiplataforma.
Por supuesto, lo interesante de esos dos programas es que nos permiten ver que cosas podemos equipar en nuestras naves y que tan eficaces son con nuestras habilidades, o con las habilidades a grado 5 (V). Esto nos puede ayudar a planificar nuestro entrenamiento, pero si realmente queremos ponernos serios con el entrenamiento, tienen que usar Evemon, el planificador de habilidades que permite planificar meses de habilidades y ponernos nivel por nivel que debemos entrenar para un objetivo determinado.
Vayamos ahora a una de mis favoritas. A mi me encanta trabajar con el mercado y construir items, así que busqué una herramienta que uso a modo de sugerencia y evaluación de ideas, pero no a modo de director de juego. La moneda interna del juego es el Isk, es por eso que este gran programa se llama Isk Per Hour (Isk por hora). Este programa permite, entre varias otras cosas, descargar precios de varias regiones del juego, y evalúa cuanto cuesta construir un ítem basándose en esos precios.
Pero para explicar como Isk Per Hour funciona debo ingresar en otra área. Hasta ahora han visto varias herramientas individuales, pero hay también herramientas comunales. Existe un sitio web llamado Eve-Central, y es un sitio actualizado muy frecuentemente con precios de varias zonas de juego.
Como prueba de la amplitud, vean la búsqueda de datos por el precio del Tritanium, el mineral más básico del juego. Como verán, hay montones de usuarios ofreciendo vender y comprar este mineral, pero cada cual lo hace en una estación espacial en particular, dentro de un sistema estelar, que está dentro de una constelación, que está a su vez dentro de una región.
Ahora bien, mencioné dos cosas: que necesitaba explicar este sitio para mostrar como trabajaba Isk Per Hour, y que este era una herramienta comunal. La primera de las dos cosas es sencilla de explicar, Isk Per Hour se comunica con la página Eve-Central para averiguar los precios en las distintas regiones que le hayamos pedido. En cuanto a la segunda explicación , Eve-Central es un sitio comunal debido a que montones y montones de usuarios han contribuido un acceso API limitado a la página, y cada vez que realizan una consulta al mercado, los dato recibidos son enviado a la página. Esto significa que miles de usuarios contribuyen datos a un sitio que miles de usuarios usan directa o indirectamente.
Este ha sido un recorrido por algunas de las herramientas externas más populares del juego. No puedo dejar de comentar que debido a que la API es una herramienta de programación, ustedes mismos pueden programar un programa que realize algún tipo de operación que ustedes precisen. Por ejemplo, yo estoy comenzando a pensar en desarrollar una herramienta que me envíe un email cada vez que realizo una compra o venta dentro del juego, que tal vez evolucione en un histórico de precios con el tiempo.
viernes, 4 de enero de 2013
Reserva tu Parallella
La gente de Adapteva ha recibido varias solicitudes de compra de Parallellas, pero hasta hace poco no existían novedades al respecto. Por ahora la empresa está concentrada en la producción de las computadoras Parallella para poder realizar las entregas a todos los participantes del proyecto Kickstarter.
Por suerte para los que se enteraron tarde, hoy abrieron la suscripción vía email en su página. Mediante esta suscripción se generará una lista de espera mediante la cual se irá avisando a la gente a medida que las computadoras estén disponibles. Por supuesto que esto sucederá después de satisfacer los compromisos generados en Kickstarter.
Pero no es esto lo único que está realizando Adapteva, siguen perfeccionando el software, están comenzando a recibir parches (pequeñas correcciones) de la comunidad, y están generando documentación que permita facilitar la entrada a los desarrolladores.
En definitiva, la empresa nos está mimando porque sabe que gran parte de sus posibilidades de éxito dependen de lo que podramos hacer con las Parallellas, de que nos sintamos cómodos, escuchados y considerados. Y cuando las cosas son así, definitivamente no nos podemos quejar.
Por suerte para los que se enteraron tarde, hoy abrieron la suscripción vía email en su página. Mediante esta suscripción se generará una lista de espera mediante la cual se irá avisando a la gente a medida que las computadoras estén disponibles. Por supuesto que esto sucederá después de satisfacer los compromisos generados en Kickstarter.
Pero no es esto lo único que está realizando Adapteva, siguen perfeccionando el software, están comenzando a recibir parches (pequeñas correcciones) de la comunidad, y están generando documentación que permita facilitar la entrada a los desarrolladores.
En definitiva, la empresa nos está mimando porque sabe que gran parte de sus posibilidades de éxito dependen de lo que podramos hacer con las Parallellas, de que nos sintamos cómodos, escuchados y considerados. Y cuando las cosas son así, definitivamente no nos podemos quejar.
lunes, 31 de diciembre de 2012
Parallella: SDK y primeras versiones
Tan solo un día después de escribir el post acerca de la intrigante computadora de nombre Parallella, se han producido grandes novedades, con los primeros vistazos acerca de que nos espera.
Primero que todo, comenzaron los envíos de los prototipos de Parallella, para aquellas personas que aportaron 2500 dolares. Esto da acceso temprano a una plataforma que no tiene la forma final, de hecho es mucho más grande, pero que tiene toda la funcionalidad. Estos son chips en tarjetas de desarrollo, con los componentes más separados y algunas cosas montadas en tarjetas adosadas. No es bonito, pero funcionan. Lamentablemente no puedo enlazar esta noticia porque está en la zona restringida a la gente que aportó al proyecto.
Por otro lado, hoy comenzó la liberación del código fuente de la computadora, de las bibliotecas de programación y del compilador GCC adaptado. En otras palabras, liberaron la SDK, Software Development Kit (Kit para desarrollo de software). Esto, que para muchos no significa nada, implica que podemos comenzar a mirar el código, a experimentar con el, a aprender un poco, e incluso a realizar sugerencias o modificaciones. Esta es una de las razones por las que amo el software libre, el software de código abierto.
Todo esto ya estaba prometido dentro de la propuesta original que Adapteva realizó en Kickstarter, por lo que es muy bueno que hayan comenzado a entregar lo prometido en tiempo y forma. El trabajo continúa para miniaturizar los componentes y crear las matrices necesarias para producir 1000 chips por wafer.
Para que se den una idea, los chips montados en las tarjetas de desarrollo que comenzaron a entregarse hoy están diseñados para 50 chips por wafer. Esto les da una idea de la diferencia de escala que significa este salto. Es esa producción en masa y ese mercado inicial creado en Kickstarter son lo necesario para dar el salto de precio y calidad para producir las primeras versiones reales de Parallella.
Así que ahora comenzaremos a esperar a que lleguen a los domicilios de la gente que aportó más los primeros prototipos, a ver que es lo que reportan y a comprobar cuales son los primeros usos reportados. Por otro lado, somos muchos los que estamos clonando los repositorios GITHUB donde se está liberando el código fuente. Para nosotros comienza una temporada de estudio y espera hasta recibir las computadoras.
Por si no lo saben, Github es un sistema de repositorio centralizado para control concurrente de versiones de código. En otras palabras, sirve para que varias personas puedan realizar contribuciones al mismo tiempo y provee herramientas para coordinar esas contribuciones con la rama principal del código. Basicamente, permite a varios programadores remotos trabajar en lo mismo sin deshacer lo que hacen los demás y sin estar aislados realmente.
Espero que a través de estas lineas puedan percibir la tremenda emoción que me embargó al recibir estas noticias.
Primero que todo, comenzaron los envíos de los prototipos de Parallella, para aquellas personas que aportaron 2500 dolares. Esto da acceso temprano a una plataforma que no tiene la forma final, de hecho es mucho más grande, pero que tiene toda la funcionalidad. Estos son chips en tarjetas de desarrollo, con los componentes más separados y algunas cosas montadas en tarjetas adosadas. No es bonito, pero funcionan. Lamentablemente no puedo enlazar esta noticia porque está en la zona restringida a la gente que aportó al proyecto.
Por otro lado, hoy comenzó la liberación del código fuente de la computadora, de las bibliotecas de programación y del compilador GCC adaptado. En otras palabras, liberaron la SDK, Software Development Kit (Kit para desarrollo de software). Esto, que para muchos no significa nada, implica que podemos comenzar a mirar el código, a experimentar con el, a aprender un poco, e incluso a realizar sugerencias o modificaciones. Esta es una de las razones por las que amo el software libre, el software de código abierto.
Todo esto ya estaba prometido dentro de la propuesta original que Adapteva realizó en Kickstarter, por lo que es muy bueno que hayan comenzado a entregar lo prometido en tiempo y forma. El trabajo continúa para miniaturizar los componentes y crear las matrices necesarias para producir 1000 chips por wafer.
Para que se den una idea, los chips montados en las tarjetas de desarrollo que comenzaron a entregarse hoy están diseñados para 50 chips por wafer. Esto les da una idea de la diferencia de escala que significa este salto. Es esa producción en masa y ese mercado inicial creado en Kickstarter son lo necesario para dar el salto de precio y calidad para producir las primeras versiones reales de Parallella.
Así que ahora comenzaremos a esperar a que lleguen a los domicilios de la gente que aportó más los primeros prototipos, a ver que es lo que reportan y a comprobar cuales son los primeros usos reportados. Por otro lado, somos muchos los que estamos clonando los repositorios GITHUB donde se está liberando el código fuente. Para nosotros comienza una temporada de estudio y espera hasta recibir las computadoras.
Por si no lo saben, Github es un sistema de repositorio centralizado para control concurrente de versiones de código. En otras palabras, sirve para que varias personas puedan realizar contribuciones al mismo tiempo y provee herramientas para coordinar esas contribuciones con la rama principal del código. Basicamente, permite a varios programadores remotos trabajar en lo mismo sin deshacer lo que hacen los demás y sin estar aislados realmente.
Espero que a través de estas lineas puedan percibir la tremenda emoción que me embargó al recibir estas noticias.
domingo, 30 de diciembre de 2012
Parallella: una supercomputadora para todos
Hace poco colaboré en Kickstarter en la finaciación de un nuevo tipo de supercomputadora, llamada Parallella. Es un proyecto muy revolucionario, porque lleva el poder del procesamiento paralelo en forma económica y con bajo consumo a todos aquellos que lo necesiten.
Parallella es una computadora dentro de un circuito impreso de tamaño realmente pequeño. La idea es realmente muy buena. Parte de un par de procesadores ARM (ARM 9) como los que tienen los teléfonos celulares, pero que en este caso están ejecutando Ubuntu Linux. Lo interesante es que esto es solo el frente, lo que está por delante.
Por detrás de estos dos procesadores encontraremos 16 o 64 procesadores RISC altamente paralelos basados en la arquitectura Ephiphany. Esto permite que ciertos tipos de operaciones se ejecuten en forma ultrarápida, al ser descompuestas en 16 o 64 procesos paralelos.
Ahora bien, ¿que es RISC? No puedo explicar que es RISC antes de explicar que es CISC. CISC, Complex Instruction Set Computer (Computadora con set de instrucciones complejo), es lo que estamos usando cada vez que usamos una PC. Son procesadores MUY complejos, con montones de operaciones optimizadas para diversas cosas, que descomponen operaciones complejas en otras más sencillas para procesarlas, pero que no son óptimos para procesar cosas para las que no tienen operaciones optimizadas.
Por el contrario, RISC es otra escuela de pensamiento. RISC Reduced Instruction Set Computer (Computadora con set de instrucciones reducido) significa que los procesadores usados solo tienen un conjunto muy reducido de operaciones básicas, que están todas optimizadas para ejecución ultrarápida. Esto implica por un lado, que hay que programar más, para realizar operaciones más complejas a partir de operaciones básicas, pero que se gana mucho en performance por ciclo.
Los ejemplos de computadoras RISC no abundan, ya que el estándar imperante es el X86, que es una arquitectura CISC. Como ejemplos de computadoras con procesadores RISC podemos citar las UltraSparc, de la famosa Sun, o los PowerPC, de IBM, que fueron, entre otras cosas, el corazón de las computadoras Apple por mucho tiempo.
Otra de las grandes diferencias entre CISC y RISC tiene que ver con que CISC puede ejecutar operaciones entre registros internos y datos en la memoria, mientras que RISC solo permite ejecutar operaciones con datos en registros internos. En primer instancia, esto parecería una desventaja para RISC, pero la verdad es que la diferencia de velocidad entre registros internos y memoria es muy importante, y que lo que hace RISC es cargar datos a registros desde la memoria y procesarlos desde registros. Esto, que puede parecer menor, ayuda a implementar paralelismo de una forma mucho más eficiente que con procesadores CISC.
El proyecto tiene previsto entregar las primeras Parallellas en mayo del 2013, y para esa época ya voy a tener mi propia Parallella de 16+2 nucleos. Ahí comenzaré una etapa de aprendizaje intenso de programación paralela con esa computadora, que a pesar de su gran poder, solo consumirá menos de 3 watts por hora al 100% de ocupación de sus 18 núcleos.
Si les interesa, se está formando ya una linda comunidad donde se están discutiendo bastantes temas en los foros que Adapteva, la empresa tras Parallella, ha armado para nosotros. Hay que reconocer que la comunidad está aportando ideas y que Adapteva parece estar escuchando y respondiendo. Esto es muy importante, porque seremos la primera tanda de gente que adopta esta tecnología en forma temprana, y hay un porcentaje muy alto de desarrolladores con ganas de aprender. Los invito a sumarse para que puedan ayudar a dar forma a una revolución.
También están comenzando a aparecer proyectos relacionados con BOINC, que es un sistema de computación distribuida en forma voluntaria. La idea de ensamblar una supercomputadora a partir de varias Parallelas de 64+2 nucleos está despertando la imaginación de muchos dentro de varias comunidades científicas.
Parallella es una computadora dentro de un circuito impreso de tamaño realmente pequeño. La idea es realmente muy buena. Parte de un par de procesadores ARM (ARM 9) como los que tienen los teléfonos celulares, pero que en este caso están ejecutando Ubuntu Linux. Lo interesante es que esto es solo el frente, lo que está por delante.
Por detrás de estos dos procesadores encontraremos 16 o 64 procesadores RISC altamente paralelos basados en la arquitectura Ephiphany. Esto permite que ciertos tipos de operaciones se ejecuten en forma ultrarápida, al ser descompuestas en 16 o 64 procesos paralelos.
Ahora bien, ¿que es RISC? No puedo explicar que es RISC antes de explicar que es CISC. CISC, Complex Instruction Set Computer (Computadora con set de instrucciones complejo), es lo que estamos usando cada vez que usamos una PC. Son procesadores MUY complejos, con montones de operaciones optimizadas para diversas cosas, que descomponen operaciones complejas en otras más sencillas para procesarlas, pero que no son óptimos para procesar cosas para las que no tienen operaciones optimizadas.
Por el contrario, RISC es otra escuela de pensamiento. RISC Reduced Instruction Set Computer (Computadora con set de instrucciones reducido) significa que los procesadores usados solo tienen un conjunto muy reducido de operaciones básicas, que están todas optimizadas para ejecución ultrarápida. Esto implica por un lado, que hay que programar más, para realizar operaciones más complejas a partir de operaciones básicas, pero que se gana mucho en performance por ciclo.
Los ejemplos de computadoras RISC no abundan, ya que el estándar imperante es el X86, que es una arquitectura CISC. Como ejemplos de computadoras con procesadores RISC podemos citar las UltraSparc, de la famosa Sun, o los PowerPC, de IBM, que fueron, entre otras cosas, el corazón de las computadoras Apple por mucho tiempo.
Otra de las grandes diferencias entre CISC y RISC tiene que ver con que CISC puede ejecutar operaciones entre registros internos y datos en la memoria, mientras que RISC solo permite ejecutar operaciones con datos en registros internos. En primer instancia, esto parecería una desventaja para RISC, pero la verdad es que la diferencia de velocidad entre registros internos y memoria es muy importante, y que lo que hace RISC es cargar datos a registros desde la memoria y procesarlos desde registros. Esto, que puede parecer menor, ayuda a implementar paralelismo de una forma mucho más eficiente que con procesadores CISC.
El proyecto tiene previsto entregar las primeras Parallellas en mayo del 2013, y para esa época ya voy a tener mi propia Parallella de 16+2 nucleos. Ahí comenzaré una etapa de aprendizaje intenso de programación paralela con esa computadora, que a pesar de su gran poder, solo consumirá menos de 3 watts por hora al 100% de ocupación de sus 18 núcleos.
Si les interesa, se está formando ya una linda comunidad donde se están discutiendo bastantes temas en los foros que Adapteva, la empresa tras Parallella, ha armado para nosotros. Hay que reconocer que la comunidad está aportando ideas y que Adapteva parece estar escuchando y respondiendo. Esto es muy importante, porque seremos la primera tanda de gente que adopta esta tecnología en forma temprana, y hay un porcentaje muy alto de desarrolladores con ganas de aprender. Los invito a sumarse para que puedan ayudar a dar forma a una revolución.
También están comenzando a aparecer proyectos relacionados con BOINC, que es un sistema de computación distribuida en forma voluntaria. La idea de ensamblar una supercomputadora a partir de varias Parallelas de 64+2 nucleos está despertando la imaginación de muchos dentro de varias comunidades científicas.
martes, 17 de julio de 2012
Nuevos cursos en Coursera
Coursera, la página web dedicada a cursos a distancia en ingles, acaba de sumar cursos de doce nuevas universidades. Esto eleva la cantidad total de cursos a la fabulosa suma de 111, con algunas duplicaciones ya que algunas universidades ofrecen cursos similares a los ofrecidos por otras.
Junto con la ampliación de cursos se amplía la variedad de los mismos. contándose ahora con cosas como cursos de biología o humanísticos en la amplia oferta. Hay uno en particular sobre fantasía y ciencia ficción que me está tentando, pero no se si me va a dar el tiempo para leer un libro por semana y además realizar un breve ensayo sobre el mismo.
Junto con cada curso se lista lo esperado de parte de los alumnos, es decir que no solo es asistir a lecciones virtuales (generalmente en forma de video), también hay que realizar actividades y estudiar más allá de lo dado por el curso, como en cualquier materia universitaria.
Hay que tener en cuenta que estos cursos son para que nosotros aprendamos cosas o formalicemos conceptos, no son cursos oficiales de las universidades para cursar carreras, son cursos de nivel universitario que sirven para aprender cosas sin cursar carreras. Desde el punto de vista de las universidades participantes son una forma de enganchar a la gente a estudiar la carrera real. O sea que esto cierra por ambos lados.
Debido a que normalmente tenemos ocupado gran parte del día con otras cosas, sugiero que solo cursen un solo curso por mes, en las épocas en las que piensen que van a poder dedicarle al menos dos o tres horas por día. La mayoría de los cursos requieren eso como mínimo.
Por supuesto que además de chequear lo que se pretende de nosotros en cada curso, es interesante notar que también hay una serie de prerequisitos para cada curso. Estos prerequisitos suelen ser en la forma de algún conocimiento o curso previo. No es necesario que ustedes prueben que lo tienen, pero sepan que si no lo tienen tendrán que dedicarle más que 2 o 3 horas por día, ya que además de cursar deberán estudiar los prerequisitos. Por eso es una buena idea cumplir esos prerequisitos antes de cursar.
Yo, por ejemplo, quiero cursar algunas cosas que requieren conocimientos sobe estadísticas, sobre lo que vi algo hace años. Por eso el próximo curso que voy a tomar será el de estadísticas 1, y luego continuaré con cursos más avanzados.
Tengan en cuenta al programar varios cursos que pueden ocurrir demoras, con lo que cursos que en apariencia no se solapan terminan coincidiendo. Planifiquen con cuidado y verán que aprenden mejor y más rápido.
Junto con la ampliación de cursos se amplía la variedad de los mismos. contándose ahora con cosas como cursos de biología o humanísticos en la amplia oferta. Hay uno en particular sobre fantasía y ciencia ficción que me está tentando, pero no se si me va a dar el tiempo para leer un libro por semana y además realizar un breve ensayo sobre el mismo.
Junto con cada curso se lista lo esperado de parte de los alumnos, es decir que no solo es asistir a lecciones virtuales (generalmente en forma de video), también hay que realizar actividades y estudiar más allá de lo dado por el curso, como en cualquier materia universitaria.
Hay que tener en cuenta que estos cursos son para que nosotros aprendamos cosas o formalicemos conceptos, no son cursos oficiales de las universidades para cursar carreras, son cursos de nivel universitario que sirven para aprender cosas sin cursar carreras. Desde el punto de vista de las universidades participantes son una forma de enganchar a la gente a estudiar la carrera real. O sea que esto cierra por ambos lados.
Debido a que normalmente tenemos ocupado gran parte del día con otras cosas, sugiero que solo cursen un solo curso por mes, en las épocas en las que piensen que van a poder dedicarle al menos dos o tres horas por día. La mayoría de los cursos requieren eso como mínimo.
Por supuesto que además de chequear lo que se pretende de nosotros en cada curso, es interesante notar que también hay una serie de prerequisitos para cada curso. Estos prerequisitos suelen ser en la forma de algún conocimiento o curso previo. No es necesario que ustedes prueben que lo tienen, pero sepan que si no lo tienen tendrán que dedicarle más que 2 o 3 horas por día, ya que además de cursar deberán estudiar los prerequisitos. Por eso es una buena idea cumplir esos prerequisitos antes de cursar.
Yo, por ejemplo, quiero cursar algunas cosas que requieren conocimientos sobe estadísticas, sobre lo que vi algo hace años. Por eso el próximo curso que voy a tomar será el de estadísticas 1, y luego continuaré con cursos más avanzados.
Tengan en cuenta al programar varios cursos que pueden ocurrir demoras, con lo que cursos que en apariencia no se solapan terminan coincidiendo. Planifiquen con cuidado y verán que aprenden mejor y más rápido.
sábado, 7 de julio de 2012
Scite: un editor de texto para programadores multiplataforma
Hace ya bastante tiempo que uso SciTE para editar mis programas de Python y Ruby. Por supuesto que hay herramientas más especializadas para hacerlo, pero todas son más pesadas por incluir más cosas o solo cubren alguno de los lenguajes. Además, luego de descubrir la potencia de SciTE como editor de texto, también lo uso en el trabajo para editar todos los archivos de texto que necesito editar o ver su contenido.
Hay que reconocer que en materia de editores de texto plano cada persona tiene sus preferencias. Si además nos metemos en el ámbito de los programadores, veremos que esto puede llegar a transformarse en una guerra casi religiosa. Es que los programadores aprendemos a amar nuestras pequeñas herramientas, y llegamos a admirarlas tanto que transformamos incluso sus fallas en características o personalidad.
Por ejemplo, en el caso de SciTE, además de editar multitudes de formatos de texto plano incluyendo resaltado de palabras clave para los formatos que las tengan, SciTE provee edición normal de texto plano. Cuando trabajo con un archivo en el que tengo que asegurarme que un dato esté en una posición determinada, sucede que SciTE no arranca por defecto con un tipo de letra de espaciado fijo. Si deseo verlo así, entonces debo ajustarlo para que lo haga, lo que lleva un par de clicks. Hay que reconocer que normalmente no lo hago porque el resaltado de texto para programar funciona mejor con el tipo de letra que trae por defecto, pero no deja de ser extraña esta elección.
Una cosa que realmente es fantástica es la capacidad de indicarle mediante configuración donde están ubicados nuestros compiladores o intérpretes, y luego poder ejecutar o compilar programas desde dentro del editor. Para este propósito, SciTE tiene una ventana semioculta a la derecha, donde el borde de la pantalla es doble. Si están acostumbrados a usarlo, es una maravilla, ya que allí veremos la salida del compilador o intérprete. Pero para los que no están acostumbrados se transforma en un dolor de cabeza, porque confunden las dos lineas y quieren agrandar la ventana desde la incorrecta, que evidentemente no se mueve para ese lado.
Es un editor de texto muy liviano, capaz de reemplazar con soltura al vetusto y poco confiable notepad. Pero a la vez, es capaz de abrir padrones de la AFIP, que tienen más de 200 megas de tamaño. O sea que es pequeño y además es potente. Y por sobre todas las cosas, me brinda una interfaz y un comportamiento idéntico bajo Windows en el trabajo o en mi PC con GNU/Linux en casa.
Por supuesto que no es el único editor que uso, para algunas pocas actividades uso otros, como el ínfimo editor nano que tengo en la linea de comandos de Linux para editar archivos de configuración, o el notepad++ bajo Windows, que no es tan cómodo pero que es excelente para comparar dos archivos de texto lado a lado.
Así que ya saben al menos dos cosas: SciTE es un excelente editor de texto y no se metan con los programadores y su elección de herramientas, porque somos muy protectores de esas cosas.
Hay que reconocer que en materia de editores de texto plano cada persona tiene sus preferencias. Si además nos metemos en el ámbito de los programadores, veremos que esto puede llegar a transformarse en una guerra casi religiosa. Es que los programadores aprendemos a amar nuestras pequeñas herramientas, y llegamos a admirarlas tanto que transformamos incluso sus fallas en características o personalidad.
Por ejemplo, en el caso de SciTE, además de editar multitudes de formatos de texto plano incluyendo resaltado de palabras clave para los formatos que las tengan, SciTE provee edición normal de texto plano. Cuando trabajo con un archivo en el que tengo que asegurarme que un dato esté en una posición determinada, sucede que SciTE no arranca por defecto con un tipo de letra de espaciado fijo. Si deseo verlo así, entonces debo ajustarlo para que lo haga, lo que lleva un par de clicks. Hay que reconocer que normalmente no lo hago porque el resaltado de texto para programar funciona mejor con el tipo de letra que trae por defecto, pero no deja de ser extraña esta elección.
Una cosa que realmente es fantástica es la capacidad de indicarle mediante configuración donde están ubicados nuestros compiladores o intérpretes, y luego poder ejecutar o compilar programas desde dentro del editor. Para este propósito, SciTE tiene una ventana semioculta a la derecha, donde el borde de la pantalla es doble. Si están acostumbrados a usarlo, es una maravilla, ya que allí veremos la salida del compilador o intérprete. Pero para los que no están acostumbrados se transforma en un dolor de cabeza, porque confunden las dos lineas y quieren agrandar la ventana desde la incorrecta, que evidentemente no se mueve para ese lado.
Es un editor de texto muy liviano, capaz de reemplazar con soltura al vetusto y poco confiable notepad. Pero a la vez, es capaz de abrir padrones de la AFIP, que tienen más de 200 megas de tamaño. O sea que es pequeño y además es potente. Y por sobre todas las cosas, me brinda una interfaz y un comportamiento idéntico bajo Windows en el trabajo o en mi PC con GNU/Linux en casa.
Por supuesto que no es el único editor que uso, para algunas pocas actividades uso otros, como el ínfimo editor nano que tengo en la linea de comandos de Linux para editar archivos de configuración, o el notepad++ bajo Windows, que no es tan cómodo pero que es excelente para comparar dos archivos de texto lado a lado.
Así que ya saben al menos dos cosas: SciTE es un excelente editor de texto y no se metan con los programadores y su elección de herramientas, porque somos muy protectores de esas cosas.
jueves, 5 de julio de 2012
Las nuevas vías de los desarrollos independientes de videojuegos
Hace mucho, mucho tiempo, los programadores podían programar solos o con ayuda de muy poca gente sus propios videojuegos. Eran tiempos de gráficos y sonidos más simples, de programar para el assembler de la máquina donde se fuera a ejecutar un juego.
Eran esos mismos programadores los que grababan los cassettes para distribuir los programas, lo que hablaba de pequeñas tiradas y distribuciones locales. Con el tiempo comenzaron a aparecer empresas que además de programar y distribuir sus propios juegos, también distribuían juegos de otros programadores. De ahí al nacimiento del publicista puro fue solo un pequeño paso.
Con el surgimiento del mercado de las PCs esto comenzó a cambiar, porque a medida que las máquinas ganaban potencia lo necesario para producir un juego que aprovecha al máximo la generación actual de computadoras era cada vez mayor, con equipos realmente grandes que no podían cobrar el dinero hasta que el título comenzara a venderse. Esto introdujo otra variable en el sistema de desarrollo de juegos, el financista.
Y es con el financista (que es quien invierte el dinero necesario para desarrollar y publicar) cuando todo comienza a enrarecerse. Además de quienes sacaban juegos originales, cada vez más se comenzaron a ver empresas que sacaban versión tras versión de la misma y probada saga. O juegos que son copias de otros con leves diferencias. O recuperaciones de sagas donde el nombre es lo importante y el juego perdió la esencia. Esto, que tanto mal hace a la industria del videojuego, tiene que ver con el simple hecho de que desde la óptica del financista es más seguro apostar a algo probado que a algo potencialmente mejor pero sin probar.
Es en este momento cuando la escena de programadores independientes (gente que programa sola o pequeños estudios que no recurren a financistas o publicistas), que nunca había muerto, comienza a ganar suma importancia porque es donde sucede la mayor parte de la innovación. Como no dependen de un financista que defina lo que deben programar, programan los juegos que quieren, con la mecánica que quieren, y eso es potencialmente revolucionario.
Por otra parte, el surgimiento expansivo de los juegos flash unido a la posibilidad de desarrollar para teléfonos celulares hicieron renacer la posibilidad de que una persona o un grupo muy reducido de personas puedan desarrollar un buen producto para plataformas que poseen parámetros más limitados que una PC.
Gracias a este tipo de desarrollos que no apostaban a lo seguro hemos disfrutado de joyas como Braid, World of Goo, Machinarium, y un largo etcetera de juegos que, con mayor o menor éxito, con mayor o menor habilidad para desarrollar su visión, nos entregaron horas y horas de entretenimiento realmente fascinante.
En la actualidad, gracias a la posibilidad de las ventas digitales, un desarrollador independiente no precisa un publicista si no lo desea. Luego de que varios Humble Indie Bundles demostraran que hasta dejar que los usuarios fijen su propio precio puede juntar millones de dolares para los independientes, ultimamente estoy viendo otro tipo de posibilidades para quien no quiere depender de un financista.
Gracias a plataformas como Kickstarter, comienzan a aparecer programadores que quieren juntar suficiente dinero como para vivir algunos meses dedicados a su proyecto, o para contratar a un artista para mejorarlo. Mediante este tipo de financiamiento comunal se está consiguiendo que programadores de videojuegos sigan sus motivaciones personales para desarrollar lo que los obsesiona y divierte.
Eran esos mismos programadores los que grababan los cassettes para distribuir los programas, lo que hablaba de pequeñas tiradas y distribuciones locales. Con el tiempo comenzaron a aparecer empresas que además de programar y distribuir sus propios juegos, también distribuían juegos de otros programadores. De ahí al nacimiento del publicista puro fue solo un pequeño paso.
Con el surgimiento del mercado de las PCs esto comenzó a cambiar, porque a medida que las máquinas ganaban potencia lo necesario para producir un juego que aprovecha al máximo la generación actual de computadoras era cada vez mayor, con equipos realmente grandes que no podían cobrar el dinero hasta que el título comenzara a venderse. Esto introdujo otra variable en el sistema de desarrollo de juegos, el financista.
Y es con el financista (que es quien invierte el dinero necesario para desarrollar y publicar) cuando todo comienza a enrarecerse. Además de quienes sacaban juegos originales, cada vez más se comenzaron a ver empresas que sacaban versión tras versión de la misma y probada saga. O juegos que son copias de otros con leves diferencias. O recuperaciones de sagas donde el nombre es lo importante y el juego perdió la esencia. Esto, que tanto mal hace a la industria del videojuego, tiene que ver con el simple hecho de que desde la óptica del financista es más seguro apostar a algo probado que a algo potencialmente mejor pero sin probar.
Es en este momento cuando la escena de programadores independientes (gente que programa sola o pequeños estudios que no recurren a financistas o publicistas), que nunca había muerto, comienza a ganar suma importancia porque es donde sucede la mayor parte de la innovación. Como no dependen de un financista que defina lo que deben programar, programan los juegos que quieren, con la mecánica que quieren, y eso es potencialmente revolucionario.
Por otra parte, el surgimiento expansivo de los juegos flash unido a la posibilidad de desarrollar para teléfonos celulares hicieron renacer la posibilidad de que una persona o un grupo muy reducido de personas puedan desarrollar un buen producto para plataformas que poseen parámetros más limitados que una PC.
Gracias a este tipo de desarrollos que no apostaban a lo seguro hemos disfrutado de joyas como Braid, World of Goo, Machinarium, y un largo etcetera de juegos que, con mayor o menor éxito, con mayor o menor habilidad para desarrollar su visión, nos entregaron horas y horas de entretenimiento realmente fascinante.
En la actualidad, gracias a la posibilidad de las ventas digitales, un desarrollador independiente no precisa un publicista si no lo desea. Luego de que varios Humble Indie Bundles demostraran que hasta dejar que los usuarios fijen su propio precio puede juntar millones de dolares para los independientes, ultimamente estoy viendo otro tipo de posibilidades para quien no quiere depender de un financista.
Gracias a plataformas como Kickstarter, comienzan a aparecer programadores que quieren juntar suficiente dinero como para vivir algunos meses dedicados a su proyecto, o para contratar a un artista para mejorarlo. Mediante este tipo de financiamiento comunal se está consiguiendo que programadores de videojuegos sigan sus motivaciones personales para desarrollar lo que los obsesiona y divierte.
miércoles, 13 de junio de 2012
A estas horas y todavía en la oficina: La vida del programador
Hay cosas que todos los trabajos, o al menos la mayoría de ellos, tienen en común. En cambio algunas cosas parecen ser propiedad de algunos trabajos específicos. Son esas pequeñas cosas las que nos hacen pensar que nuestros trabajos son tremendamente especiales, cuando en realidad suelen ser más las cosas en común que las diferencias.
Por citar casos de peculiaridades, tenemos el caso de los programadores, que suelen tener horarios fijos con tendencia a estirarse. Esto se explica porque en situaciones normales se cumple el horario y listo, pero cuando comienza a llegar la fecha de entrega de un proyecto y hay que coordinar todo mientras se arreglan los errores intentando evitar que esas correcciones produzcan más errores, las horas comienzan a estirarse levemente.
De acuerdo a los tiempos de cada proyecto, esto puede pasar casi sin notarse, con alguna hora extra de alguno de los programadores y nada más, o puede provocar horas extras masivas de grupos enteros de programadores, cuando los tiempos apremian o el error que impide proseguir es especialmente esquivo.
Sin embargo hay una fecha que es la que suele provocar la mayor cantidad de horas extras en un solo día, a veces para nada, a veces trabajando a cuatro manos. Esa es la fecha de entrada en producción, cuando hay que hacer guardias en los teléfonos y ante el email, chat, programa de VOIP y cualquier otra forma de comunicación con el cliente que se les pueda ocurrir, llegando a casos en que hay que estar en las oficinas del cliente.
En esta fecha es cuando el título de este post suele ser más dicho, A estas horas y todavía en la oficina, como hoy. Y como dije, a veces no hay que hacer nada. Recuerdo una vez que estuve 3 horas extra esperando simplemente que nos dijeran 'está todo OK', y se resistían a hacerlo, y luego, al día siguiente, primero de mayo, estuve 8 horas en las oficinas del cliente esperando una incidencia que nunca se produjo. Obviamente que no me aburrí, tenía una computadora adelante después de todo. Pero sigue siendo una exagerada cantidad de horas como para que no suceda nada.
Otras veces algo falla, incluso como hoy, que hubo un fallo que no es responsabilidad de mi equipo. Y aunque no sea nuestra responsabilidad arreglarlo, tenemos que estar igualmente disponibles y demostrar que seguimos participando e intentando arrimar ideas o soluciones. O intentando implementar una solución alternativa mientras se busca como solucionar el problema real, tal como reactivar un programa viejo para que puedan hacer operaciones mientras el otro equipo busca solucionar sus problemas.
No somos la única profesión con fechas límite, ni con aceleramiento antes de esas fechas, ni los únicos que damos soporte luego de esas fechas, pero es en momentos como estos que nos parece que nuestra profesión es absolutamente única. Y no es que por eso me sienta desdichado, simplemente recordé la frase y descubrí que nuevamente tenía algo para escribir en Demasiado Personal.
Por citar casos de peculiaridades, tenemos el caso de los programadores, que suelen tener horarios fijos con tendencia a estirarse. Esto se explica porque en situaciones normales se cumple el horario y listo, pero cuando comienza a llegar la fecha de entrega de un proyecto y hay que coordinar todo mientras se arreglan los errores intentando evitar que esas correcciones produzcan más errores, las horas comienzan a estirarse levemente.
De acuerdo a los tiempos de cada proyecto, esto puede pasar casi sin notarse, con alguna hora extra de alguno de los programadores y nada más, o puede provocar horas extras masivas de grupos enteros de programadores, cuando los tiempos apremian o el error que impide proseguir es especialmente esquivo.
Sin embargo hay una fecha que es la que suele provocar la mayor cantidad de horas extras en un solo día, a veces para nada, a veces trabajando a cuatro manos. Esa es la fecha de entrada en producción, cuando hay que hacer guardias en los teléfonos y ante el email, chat, programa de VOIP y cualquier otra forma de comunicación con el cliente que se les pueda ocurrir, llegando a casos en que hay que estar en las oficinas del cliente.
En esta fecha es cuando el título de este post suele ser más dicho, A estas horas y todavía en la oficina, como hoy. Y como dije, a veces no hay que hacer nada. Recuerdo una vez que estuve 3 horas extra esperando simplemente que nos dijeran 'está todo OK', y se resistían a hacerlo, y luego, al día siguiente, primero de mayo, estuve 8 horas en las oficinas del cliente esperando una incidencia que nunca se produjo. Obviamente que no me aburrí, tenía una computadora adelante después de todo. Pero sigue siendo una exagerada cantidad de horas como para que no suceda nada.
Otras veces algo falla, incluso como hoy, que hubo un fallo que no es responsabilidad de mi equipo. Y aunque no sea nuestra responsabilidad arreglarlo, tenemos que estar igualmente disponibles y demostrar que seguimos participando e intentando arrimar ideas o soluciones. O intentando implementar una solución alternativa mientras se busca como solucionar el problema real, tal como reactivar un programa viejo para que puedan hacer operaciones mientras el otro equipo busca solucionar sus problemas.
No somos la única profesión con fechas límite, ni con aceleramiento antes de esas fechas, ni los únicos que damos soporte luego de esas fechas, pero es en momentos como estos que nos parece que nuestra profesión es absolutamente única. Y no es que por eso me sienta desdichado, simplemente recordé la frase y descubrí que nuevamente tenía algo para escribir en Demasiado Personal.
viernes, 24 de febrero de 2012
Clase de Software as a Service gratuito
Para los interesados, todavía están a tiempo de inscribirse en la clase de Software como Servicio (SaaS) que es brindada por dos docentes de la universidad de Berkeley en Coursera. Lamentablemente para algunos, es una clase en ingles, pero digamos la verdad, si les gusta la programación y no saben ingles están perdiéndose el 70% de los recursos disponibles para los programadores a nivel mundial. Una muy buena inversión para su carrera es aprender ingles.
Tengo que confesar que la clase ya está comenzada, pero recién el lunes comienzan las asignaciones de deberes y las pruebas. Como hay tiempo hasta el 2 de marzo para entregar la tarea finalizada no es mal momento para tomar esta clase. Más tarde es muy tarde.
La clase es muy interesante, sobre todo en conjunto con el libro recomendado para la clase, Engineering Long-Lasting Software: An Agile Approach Using SaaS and Cloud Computing, ya que el libro profundiza los conceptos emitidos en la clase y recomienda prácticas incluso antes de comenzar con los deberes, además de brindar acceso a varios ejemplos en Pastebin y a videos relacionados en Vimeo. Hay algunas quejas al respecto de los videos, sobre todo del audio, pero están en proceso los subtítulos en ingles para poder captar todo.
El curso comienza desde bastante abajo en lo que a SaaS respecta, cubriendo muchos conceptos de internet, aunque pocos en profundidad. Estos conceptos básicos para el curso son cosas como el protocolo TCP/IP, la arquitectura cliente/servidor, el protocolo HTTP, URLs y URIs, el lenguaje HTML y el agregado que representa CSS, la arquitectura de tres capas (capa presentación, capa lógica, capa de persistencia), modelo/vista/controlador, SOA, y varias cosas similares.
Todo esto es la base necesaria para nivelar un poco al grupo, hasta llegar al tema real, SaaS y su aplicación en el lenguaje de programación Ruby mediante el framework Rails. El curso se centra en la metodología de desarrollo Agile, que implica iteraciones rápidas y servicios individuales que respetan SOA, que al juntarse forman el servicio real.
Durante el curso, que es la mitad de lo normal por tratarse de una prueba que hacen los docentes, se mostrarán herramientas e impartirán conocimientos para implementar Agile programming, y se realizaran prácticas sobre una máquina virtual descargable en forma gratuita.
Para hacer la cosa un poco más interesante, se anunció hace poco que entregarán un bono de 100 horas (por alumno que curse y entregue las tareas a tiempo) para Amazon Ec2, el super cluster de computadoras escalable que Amazon alquila para SaaS, la famosa Elastic cloud. Además están en tratativas para elevar gratuitamente (aunque en forma temporal) las cuentas de github para poder identificar a los alumnos. Ambos bonos son muy interesantes, sobre todo cuando se trata de un curso gratuito.
Tengo que confesar que la clase ya está comenzada, pero recién el lunes comienzan las asignaciones de deberes y las pruebas. Como hay tiempo hasta el 2 de marzo para entregar la tarea finalizada no es mal momento para tomar esta clase. Más tarde es muy tarde.
La clase es muy interesante, sobre todo en conjunto con el libro recomendado para la clase, Engineering Long-Lasting Software: An Agile Approach Using SaaS and Cloud Computing, ya que el libro profundiza los conceptos emitidos en la clase y recomienda prácticas incluso antes de comenzar con los deberes, además de brindar acceso a varios ejemplos en Pastebin y a videos relacionados en Vimeo. Hay algunas quejas al respecto de los videos, sobre todo del audio, pero están en proceso los subtítulos en ingles para poder captar todo.
El curso comienza desde bastante abajo en lo que a SaaS respecta, cubriendo muchos conceptos de internet, aunque pocos en profundidad. Estos conceptos básicos para el curso son cosas como el protocolo TCP/IP, la arquitectura cliente/servidor, el protocolo HTTP, URLs y URIs, el lenguaje HTML y el agregado que representa CSS, la arquitectura de tres capas (capa presentación, capa lógica, capa de persistencia), modelo/vista/controlador, SOA, y varias cosas similares.
Todo esto es la base necesaria para nivelar un poco al grupo, hasta llegar al tema real, SaaS y su aplicación en el lenguaje de programación Ruby mediante el framework Rails. El curso se centra en la metodología de desarrollo Agile, que implica iteraciones rápidas y servicios individuales que respetan SOA, que al juntarse forman el servicio real.
Durante el curso, que es la mitad de lo normal por tratarse de una prueba que hacen los docentes, se mostrarán herramientas e impartirán conocimientos para implementar Agile programming, y se realizaran prácticas sobre una máquina virtual descargable en forma gratuita.
Para hacer la cosa un poco más interesante, se anunció hace poco que entregarán un bono de 100 horas (por alumno que curse y entregue las tareas a tiempo) para Amazon Ec2, el super cluster de computadoras escalable que Amazon alquila para SaaS, la famosa Elastic cloud. Además están en tratativas para elevar gratuitamente (aunque en forma temporal) las cuentas de github para poder identificar a los alumnos. Ambos bonos son muy interesantes, sobre todo cuando se trata de un curso gratuito.
sábado, 11 de febrero de 2012
Un concepto que puede volarnos la cabeza
Estoy leyendo un libro realmente muy interesante, aunque se que no les va a gustar a todos. Se trata de una metodología de desarrollo de software basada en iteraciones rápidas, conocido como agile programming. En particular se titula Engineering Long-Lasting Software: An Agile Approach Using Saas & Cloud Computing, escrito por Armando Fox y David Patterson, docentes de la universidad de Berkeley.
Dentro del libro encontré un concepto realmente interesante acerca del tiempo necesario para realizar pruebas de software realmente exhaustivas que contemplen todas las posibilidades. El caso presentado es un caso improbable, pero que realmente demuestra la imposibilidad de realizar pruebas realmente completas.
Supongamos que tenemos un programa que se ejecuta en un milisegundo, y que podemos automatizar para que se ejecute nuevamente una vez que finalizó la prueba anterior. Este programa tiene una sola entrada: un simple valor de 64 bits. Como cada bit puede tener dos estados, 0 y 1, y la posición de cada bit en el valor de entrada es importante, la evaluación de cada posición implica evaluar 2 elevado a la 64 potencia.
Con una calculadora podemos realizar algunos simples cálculos. La cantidad total de variaciones a probar es igual a 1.8446744073709551616e19, o sea una bestialidad de milisegundos, porque recordemos que cada ejecución del programa dura 1 milisegundo. Aclaremos que esto equivale a decir 1.8446744073709551616 multiplicado por 10 elevado a la 19 potencia.
Eso quiere decir que para obtener segundos deberemos dividir el número por mil, siendo el resultado 1.8446744073709551616e16, una bestialidad de segundos. Cada minuto está formado por 60 segundos, por lo que dividimos por 60 y obtenemos minutos. 3.07445734561825860267e14 minutos.
Para pasar a horas tenemos 60 minutos por hora, 5.12409557603043100444e12 horas, y 24 de ellas forman un día, 2.13503982334601291852e11. Finalmente, 365 días forman un año (no es exacto, pero es una buena aproximación). Esto nos da 5.84942417355072032471e8 años, o sea más de 500.000.000 años. La verdad es que es una cifra que impresiona.
Esta es la razón por la que la inmensa mayoría de los programas solo son probados con un conjunto de casos limitado, porque la verdad es que una prueba total es realmente imposible. Obviamente, programas con entradas más triviales llevan menos tiempo, porque cada prueba lleva más tiempo (1 milisegundo es solo para programas MUY simples), pero son menos combinaciones.
El problema es que a medida que aumenta la complejidad del software comenzamos a incorporar controles que pueden ocasionar problemas si se los activa en distintas combinaciones, y si tenemos 64 controles que pueden estar prendidos o apagados, tenemos esta bonita situación para probarlos todos.
Dentro del libro encontré un concepto realmente interesante acerca del tiempo necesario para realizar pruebas de software realmente exhaustivas que contemplen todas las posibilidades. El caso presentado es un caso improbable, pero que realmente demuestra la imposibilidad de realizar pruebas realmente completas.
Supongamos que tenemos un programa que se ejecuta en un milisegundo, y que podemos automatizar para que se ejecute nuevamente una vez que finalizó la prueba anterior. Este programa tiene una sola entrada: un simple valor de 64 bits. Como cada bit puede tener dos estados, 0 y 1, y la posición de cada bit en el valor de entrada es importante, la evaluación de cada posición implica evaluar 2 elevado a la 64 potencia.
Con una calculadora podemos realizar algunos simples cálculos. La cantidad total de variaciones a probar es igual a 1.8446744073709551616e19, o sea una bestialidad de milisegundos, porque recordemos que cada ejecución del programa dura 1 milisegundo. Aclaremos que esto equivale a decir 1.8446744073709551616 multiplicado por 10 elevado a la 19 potencia.
Eso quiere decir que para obtener segundos deberemos dividir el número por mil, siendo el resultado 1.8446744073709551616e16, una bestialidad de segundos. Cada minuto está formado por 60 segundos, por lo que dividimos por 60 y obtenemos minutos. 3.07445734561825860267e14 minutos.
Para pasar a horas tenemos 60 minutos por hora, 5.12409557603043100444e12 horas, y 24 de ellas forman un día, 2.13503982334601291852e11. Finalmente, 365 días forman un año (no es exacto, pero es una buena aproximación). Esto nos da 5.84942417355072032471e8 años, o sea más de 500.000.000 años. La verdad es que es una cifra que impresiona.
Esta es la razón por la que la inmensa mayoría de los programas solo son probados con un conjunto de casos limitado, porque la verdad es que una prueba total es realmente imposible. Obviamente, programas con entradas más triviales llevan menos tiempo, porque cada prueba lleva más tiempo (1 milisegundo es solo para programas MUY simples), pero son menos combinaciones.
El problema es que a medida que aumenta la complejidad del software comenzamos a incorporar controles que pueden ocasionar problemas si se los activa en distintas combinaciones, y si tenemos 64 controles que pueden estar prendidos o apagados, tenemos esta bonita situación para probarlos todos.
lunes, 22 de agosto de 2011
Codecademy: Cursos interactivos de programación para principiantes
Acabo de visitar un sitio que no conocía: Codecademy, un sitio dedicado a enseñar programación de una forma más natural. Antes de seguir me gustaría aclarar algo: el sitio está integramente en ingles, aunque no usa un ingles avanzado sino más bien un ingles técnico. Es lamentable para muchos, pero el contenido solo es aprovechable con un dominio al menos básico del ingles.
Codecademy ofrece por el momento 8 lecciones de un curso de programación que comienza desde un punto muy pero muy básico y va avanzando lentamente. De momento el único curso disponible es para aprender a programar en JavaScript, que no es el lenguaje más popular que existe pero debido a sus capacidades es lo elegido en el modelo de programación de páginas Web llamado AJAX, o sea la base de la así llamada Web 2.0.
Las lecciones son interactivas, lo que implica que les va a pedir algo y va a esperar su respuesta, en una consola interactiva al principio, y luego en un editor embebido en la página Web. Esto permite ver en tiempo real como se van resolviendo las cosas que vamos programando.
Cada lección está compuesta por una serie de pasos. Una vez resuelto un paso, el curso avanza al siguiente, pero es posible volver a elegir el anterior si nos quedaron dudas, o si queremos exprimir un poco más el concepto o hacer algo para probar si funciona. Por supuesto se pude hacer lo mismo si queremos visitar una lección pasada.
Si bien los cursos comienzan a avanzar en forma lenta, en esas 8 lecciones se cubren conceptos tales como variables, sentencias de control y bucles. No es un arsenal impresionante para realizar tareas avanzadas, pero si alcanza para que cualquiera comience a entender de que va eso de la programación y tenga los bloques básicos para hacer montones de pequeñas cosas interesantes.
Además Codecademy ofrece un leve enfoque social, al incluir una serie de medallas de reconocimiento y la posibilidad de mostrar cuanto de los cursos hemos cumplido con éxito. Si ya saben programar sigue siendo un recurso válido para ver como hace algunas cosas básicas un lenguaje como JavaScript.
De más está decir que ya hice las 8 lecciones disponibles del curso, me resultaron entretenidas aunque algo básicas para mi nivel. Pero no dejo de reconocer que el enfoque tiene muchas posibilidades, por eso hice algo que les recomiendo: dejé mi dirección de correo electrónico para que me avisen sobre novedades.
Y hay una opción más a tener en cuenta: si se consideran capacitados pueden crear un curso o lección ustedes mismos y dejarlo disponible para el resto de la gente.
domingo, 1 de mayo de 2011
Python: Numeros decimales a romanos
La semana pasada publiqué un pequeño programa en Python que convierte números romanos a decimales, así que ayer, apenas pasada la medianoche, me puse a pensar y programar la contraparte.
Este programa fue levemente más complicado de pensar, debido a la complicación añadida por el sistema de numeración romano que incluye algunas particularidades para los números 4 y 9, 40 y 90, etc.
Las soluciones posibles son, a grandes rasgos, dos: armar una rutina especial para todo lo que incluya 4 o 9, o hacer un uso más creativo del diccionario de datos y declarar los casos especiales además de los casos comunes.
Debido a la baja cantidad de casos especiales, considerando que el sistema romano básico llega solo desde 1 hasta 3999, he elegido el método de agregar datos en el diccionario. Es levemente más trabajo incluir esos datos ahí, y la simplificación del código es evidente.
Como adicionales, el programa intenta usar un controlador de expresiones regulares para verificar que lo ingresado sea numérico, y verifica que el dato ingresado sea menor que 4000, ya que es muy dificil representar en una linea de comando los números que siguen.
Para que se den una idea, los romanos usaban una raya arriba de sus numerales para indicar multiplicación por mil, dos rayas para un millon. Si bien el sistema es relativamente simple de implementar a nivel programación, la salida de dato con consola está pensada para no depender de ningún sistema operativo en particular, por lo que es casi imposible implementar ese tipo de linea superior en forma que sea coherente.
#!/usr/bin/python
import sys, re
def checks(argum,patron):
#http://docs.python.org/library/re.html
#re.search returns None if no position in the string matches the pattern
if re.search(patron, argum):
print 'Error: lo ingresado no es un numero decimal'
sys.exit(2)
arg = len(sys.argv)
if arg == 1:
print 'Modo de uso: Dec2Roma.py numero_decimal menor a 4000'
sys.exit(1)
roma = {1000: 'M',900:'CM',500:'D',400:'CD', 100:'C',90:'XC', 50:'L',40:'XC',10: 'X',9:'IX',5: 'V',4:'IV',1:'I'}
claves = sorted((roma.keys()))
claves.reverse()
patron = r'[^\0-9]'
checks(sys.argv[1],patron)
numero = int(sys.argv[1])
if numero >= 4000:
print 'Error: numero demasiado grande para conversion'
sys.exit(3)
salida = ''
for clave in claves:
while clave <= numero:
salida = salida + roma[clave]
numero = numero - clave
print salida
Noten que debido al ancho del blog la linea del diccionario está dividida en dos lineas, pero realmente es una sola linea. Voy a tener que buscar alguna otra alternativa para postear código para que quede presentable.
Otro detalle interesante es que además de tener el diccionario para la búsqueda, podemos usar el método keys() del diccionario para extraer las claves, que luego de ser ordenadas en forma decreciente pueden ser usadas para el bucle principal del programa, lo que simplifica mucho la declaración de datos.
Para que lo entiendan los interesados en como funciona la programación en forma interna, en Python todo es un objeto. Esto provoca que al definir algo, este algo sea incorporado a un tipo de datos en particular, o sea agregado como instancia de un tipo de objeto en particular. En este caso roma es un diccionario, o sea es una instancia del objeto diccionario. Es por eso que tan solo con declarar el diccionario este hereda todos sus métodos en forma transparente para el programador.
Como verán, es a través de la implementación de pequeños programas triviales que avanzamos en el dominio de cualquier lenguaje de programación. Cada vez usamos algo más, cada vez queremos probar algo más, y así es como vamos armando de a poco una idea de la totalidad del lenguaje en nuestras cabezas. No es tan difícil, solo es cuestión de empezar en algún punto.
viernes, 22 de abril de 2011
Python: Numeros romanos a decimales
Hoy mi hermana me preguntó por una fecha en números romanos, y después de recordar las reglas básicas me decidí a realizar un pequeño programa en Python para automatizar la conversión.
No es tremendamente complicado, de hecho no verifica la validez del formato del número ingresado, sino que solo verifica que no haya caracteres extraños. Funciona desde linea de comando, usando el parámetro número 1 para el ingreso del dato.
Lo más interesante que tiene, para los que están aprendiendo, es el uso de un simple diccionario, llamado roma en este programita, para convertir directamente las letras en números, cosa que simplifica muchísimo la lógica del programa.
Lo segundo interesante es el uso de upper() para no tener que duplicar las entradas del diccionario para mayúsculas y minúsculas. No es que fuera un esfuerzo muy grande en este caso, pero es una técnica que les puede servir mucho para desarrollos más complejos.
Noten que además de tomar la entrada desde linea de comando también devuelve dos estados diferentes de salida de error. Esto hace que a futuro sea sencillo agregar una interfase gráfica que use este mismo programa para realizar la conversión, ya que no solo puede recibir el resultado sino consultar el estado de error para verificar si tiene que mostrar eso o informar algo al usuario.
Por supuesto que estos chequeos pueden agregarse en la interfase gráfica, pero al agregarlos a nivel del programa de linea de comando se facilita que el programa pueda usarse de las dos formas, y en ambos casos emita resultados correctos o errores.
#!/usr/bin/python
import sys
arg = len(sys.argv)
if arg == 1:
print 'Modo de uso: Romanos.py numero_romano'
sys.exit(1)
roma = {'M': 1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
romano = sys.argv[1].upper()
letras = list(romano)
resultado = 0
anterior = 0
for letra in letras:
if letra in roma:
if roma[letra] > anterior:
resultado = resultado - anterior * 2
resultado = resultado + roma[letra]
else:
resultado = resultado + roma[letra]
anterior = roma[letra]
else:
print 'Letras desconocidas'
sys.exit(2)
print resultado
martes, 13 de octubre de 2009
Bash desde Python
Hoy tuve que ajustar un programa hecho en python que me manda información automáticamente, y, entre otras cosas, me informa mi propia IP externa por email. Anteriormente usaba comandos python para bajar una página web e interpretar sus lineas. Esta vez, sin embargo, ya que tenía que modificar justo esa parte, decidí implementar algo distinto.
Para eso tuve que realizar la investigación de como usar bash desde dentro de un programa Python. Encontré dos alternativas, una con os y otra con commands. Hay más, creo que una es popen, pero como command implementa una interfase para popen, me pareció suficiente.
Vayamos primero por la opción que usé primero, que no fue la que terminé usando finalmente.
import os
resultado = os.system("ls")
Este comando guarda en resultado un cero si el comando ejecutado se ejecutó con éxito, y un valor distinto a cero si no lo hizo. La salida del comando se produce por la consola, y no podemos traer el resultado a Python. Esto fue lo que hizo que lo descartase, ya que yo justamente precisaba el resultado real, y no el valor de éxito del comando.
Entonces tuve que usar la otra alternativa
import commands
resultado = commands.getoutput("ls")
Este comando no trae un cero en caso de éxito, sino que devuelve un string con el resultado del comando ls, que lista el directorio. Por supuesto que hay comandos especiales para manipular archivos y directorios sin recurrir a comandos bash, ls es solo usado a modo de demostración. Una aclaración importante: el módulo commands solo funciona bajo Linux. Como mi programa no necesita ser portable, lo he usado. Si sus necesidades son diferentes, tal vez lo solucionen con popen.
Por último, les dejo una perlita que encontré en la red y que estuve analizando para ver si me servía, determinando finalmente que si. Este es el comando BASH que, consultando una página web, devuelve nuestra propia IP externa.
lynx -dump http://checkip.dyndns.org/ | grep IP | awk {'print $4'}
Bonito ¿no es cierto?
Para eso tuve que realizar la investigación de como usar bash desde dentro de un programa Python. Encontré dos alternativas, una con os y otra con commands. Hay más, creo que una es popen, pero como command implementa una interfase para popen, me pareció suficiente.
Vayamos primero por la opción que usé primero, que no fue la que terminé usando finalmente.
import os
resultado = os.system("ls")
Este comando guarda en resultado un cero si el comando ejecutado se ejecutó con éxito, y un valor distinto a cero si no lo hizo. La salida del comando se produce por la consola, y no podemos traer el resultado a Python. Esto fue lo que hizo que lo descartase, ya que yo justamente precisaba el resultado real, y no el valor de éxito del comando.
Entonces tuve que usar la otra alternativa
import commands
resultado = commands.getoutput("ls")
Este comando no trae un cero en caso de éxito, sino que devuelve un string con el resultado del comando ls, que lista el directorio. Por supuesto que hay comandos especiales para manipular archivos y directorios sin recurrir a comandos bash, ls es solo usado a modo de demostración. Una aclaración importante: el módulo commands solo funciona bajo Linux. Como mi programa no necesita ser portable, lo he usado. Si sus necesidades son diferentes, tal vez lo solucionen con popen.
Por último, les dejo una perlita que encontré en la red y que estuve analizando para ver si me servía, determinando finalmente que si. Este es el comando BASH que, consultando una página web, devuelve nuestra propia IP externa.
lynx -dump http://checkip.dyndns.org/ | grep IP | awk {'print $4'}
Bonito ¿no es cierto?
domingo, 30 de agosto de 2009
El Salón de la Vergüenza
Mucha gente conoce la licencia GPL (General Public License, Licencia pública general), la licencia de código abierto y software libre más famosa, distribuida, y que más programas protege y libera. Lo que no mucha gente sabe es que cualquier cosa que enlaces con la GPL tiene que ser GPL también, y eso es lo que muchos critican.
Pero también existe otra licencia, hermana de la licencia GPL, llamada LGPL (Lesser General Public License, Licencia pública general menor) que funciona igual que la GPL para la cuestión libertades, pero que permite enlazar código protegido con código LGPL. Esta distinción, en apariencia tan simple, es vital para el desarrollo de ciertas categorías de código abierto, como por ejemplo las bibliotecas (mal llamadas librerías, por venir del ingles Library).
¿Que es una biblioteca? Es una colección de llamadas a funciones (pequeñas porciones de código) que suelen estar relacionadas por el tipo de operaciones que realizan. Por ejemplo, las bibliotecas QT contienen funciones para la manipulación de ventanas, entonces en lugar de programar todo un sistema de ventanas, un programador puede usar esa biblioteca, llamando a las funciones que crearán las ventanas, y puede así centrarse en escribir el resto de la lógica del programa sin tener que además inventar un sistema de ventanas. Este sistema de bibliotecas es también muy común en lenguajes como Java, Python o todo el conjunto de lenguajes de la plataforma .net.
¿Cual es entonces la importancia de la LGPL? Sencillamente, mientras yo declare en la página y en archivos adjuntos del programa que uso bibliotecas LGPL y de enlaces para su descarga (aunque más no sea, a la página principal del proyecto), y mientras libere las modificaciones hechas al código de la biblioteca (no al mío), soy libre de usarlas en cualquier tipo de proyecto. De esta forma tanto los desarrolladores de la biblioteca como yo nos beneficiamos.
Es tan trivial realizar este tipo de cuestiones que no puedo entender las razones por las que compañía tras compañía se niegan a dar el crédito correspondiente y continúan utilizando código LGPL sin dar el crédito y los enlaces correspondientes. En unos pocos casos, puede deberse a ignorancia, o a algún programador que no informó lo que usaba, pero en otros es un uso descarado de algo gratuito en forma ilegal.
Una de esas situaciones está sucediendo con las bibliotecas FFmpeg, un set de funciones y programas dedicadas a mostrar y transformar video. Incluso puede manipular streams de video de entrada y de salida. Esta biblioteca es usada en montones de programas y dispositivos de reproducción de video, ya que provee las funciones base, dejando que los programadores se preocupen por implementar la interfase. Por ejemplo, es la biblioteca usada, entre otras, por el genial reproductor VLC (VideoLan). En este enlace pueden ver como la página del VLC da enlaces para las bibliotecas que usa, es tan simple como eso, con eso alcanza para cumplir con los requisitos de la LGPL.
Pero además de los programas o dispositivos que informan y dan los enlaces, hay un grupo bastante grande de empresas a las que se les ha detectado el uso de la biblioteca FFmpeg y no cumplen los requisitos. En lugar de hacer una demanda, como haría una empresa, la gente del software libre suele realizar pedidos a las empresas para que cumplan los requisitos, así todos obtienen lo que desean y nadie tiene que entrar en el sistema legal. Ante la profusión de estos casos y la negativa de algunas empresas, se ha comenzado una campaña llamada Hall of Shame (Salón de la Vergüenza).
Esta campaña consiste en publicar los nombres y enlaces a las compañías que se encuentran en falta, sacándolos cuando ya cumplen los requisitos. Es por eso que se solicita la publicación de enlaces a esta lista en la mayor cantidad de sitios posibles, para hacer una campaña de concientización. Agradezco a el sitio Pillate Un Linux por informarme acerca de esta campaña.
martes, 9 de junio de 2009
Scripting en Android
Ayer Google me sorprendió con una noticia extremadamente grata. Acaba de agregar soporte para lenguajes de scripting a su plataforma Android. Esto, que para celulares es extremadamente útil, es aún más importante si consideramos que se están consiguiendo grandes éxitos en el uso de Android en netbooks.
Vayamos entonces por las aclaraciones. Un lenguaje de scripting es un lenguaje generalmente interpretado (en oposición a un lenguaje compilado) que se utiliza para automatizar tareas o desarrollar pequeñas utilidades. O sea que lo que han hecho es liberar lo necesario para que los usuarios hagan pequeñas modificaciones a sus aparatos.
Por ahora el soporte está limitado a los lenguajes Lua, Python y BeanShell. En el futuro se piensa ampliar este soporte a otros lenguajes, siendo Ruby y JavaScript los mencionados como candidatos más probables. Notese que lenguajes como Python son de propósito general, por lo que no están limitados solo a tareas de scripting.
Estos lenguajes de scripting están acompañados por ASE (Android Scripting Enviroment, entorno de scripting de Android). Mediante ASE no solo se pueden ejecutar estos scripts por una vez o dejarlos corriendo como proceso de fondo, sino que se consigue acceso a un API (Aplication Programing Interface, interfase de programación de aplicaciones) que expone montones de controles, características y capacidades. Este entorno es usable indistintamente por cualquiera de estos lenguajes.
Como característica adicional, aquellos lenguajes que, como Python, poseen interprete en linea de comandos tendrán acceso a este tipo de interprete interactivo. Y en el particular caso de BeanShell, tendrá acceso a mucho más, ya que al ser Android una aplicación JAVA corriendo en una máquina virtual JAVA sobre un nucleo GNU/Linux, BeanShell provee acceso directo a la API JAVA de Android, con lo que consigue un acceso a nivel más bajo que el resto de los lenguajes, cosa que será útil para algunos tipos de desarrollo solamente.
Estoy empezando a pensar seriamente en incluir algo con Android en mi vida en un futuro relativamente cercano.
viernes, 22 de mayo de 2009
Los programas de la afip
Durante los últimos años me he tenido que pelear contra los programas de la afip una vez por año para hacer declaraciones de impuestos. Este año, sin embargo, los necesito para hacer un trámite bastante más largo, ylo que era normalmente molesto es ahora irritante y obstaculiza el trabajo.
Sucede que los programas están realizados en un arcaico Visual Basic, lo que no solo los hace dificiles de correr bajo Linux, sino que los hace incompatibles con Vista de una forma muy odiosa: no les deja grabar la salida de sesión que les permite recordar el estado en que quedaron, con lo que cada vez que se los inicia hay que cargar montones de datos iniciales nuevamente, datos que, de permitirse la grabación del estado no habría que cargar.
Más allá de eso, están pensados desde la óptica de un contador, no de un usuario, con lo que la interfaz, además de excesivamente técnica y confusa, entorpece como para asegurar que un contador que esté trabajando no pierda datos, a costa de trabar la entrada de datos impidiendo un uso agil.
Pero lo más grave de todo es que estos programas hacen que para la mayoría de la gente sea necesaria si o si una máquina con Windows para realizar su declaración de impuestos, con lo que se esclaviza bajo el yugo de una empresa privada a montones de persona, incluso llegando a favorecer indirectamente la piratería con tal de cumplir obligaciones legales.
Y no nos olvidemos que, cuanto más modernas sean las máquinas y el sistema operativo que usen, más dificil será usar estos programas. ya que no hay compilación para diferentes arquitecturas ni para sistemas operativos de 64 bits.
Una verguenza que en pleno siglo 21 nos hagan usar estas cosas.
jueves, 26 de marzo de 2009
Poesía Ejecutable
Un amigo mío, llamado Lucas, ha sido vencido por el gusanillo de los blogs. Si, ahora que mucha gente huye, el comienza. Y es correcto que así sea, ya que no depende de la moda sino de cuando sintió la necesidad de expresar algo.
Es un blog que nace dedicado por completo a temas de programación, de ahí su nombre, Poesía Ejecutable. El nombre nace de un comentario, pueden leerlo en el blog, pero no puedo dejar de añadir algo que solo los programadores pueden entender verdaderamente, y está levemente relacionado con esto: el código bien escrito es bello a los ojos.
Por ahora no hay una cantidad excesiva de contenido, solo 4 temas, uno de los cuales casi no cuenta por ser la apertura del blog. Pero los otros 3 temas comienzan a demostrar una forma de escribir sobre programación que encierra una forma de pasión, una voluntad pedagógica y irónicos toques de humor.
Es entonces un buen momento para comenzar a leerlo, y luego poder decir que estuvieron ahí desde practicamente el comienzo, cuando los temas estaban frescos y los comentarios se podían contar con una mano.
Es por todo esto que les recomiendo que le den una buena oportunidad a Poesía Ejecutable durante este tiempo de formación y generación de identidad. Lo que ya se ve es, sencillamente, impagable.
Una nota especial: Recomiendo este blog especialmente para Adrian Paredes, y a mi amigo lucas le recomiendo especialmente El blog del frasco. No escriben sobre lo mismo, ni con el mismo estilo, pero sin embargo creo que a ambos le va a gustar lo que hace el otro.
Es un blog que nace dedicado por completo a temas de programación, de ahí su nombre, Poesía Ejecutable. El nombre nace de un comentario, pueden leerlo en el blog, pero no puedo dejar de añadir algo que solo los programadores pueden entender verdaderamente, y está levemente relacionado con esto: el código bien escrito es bello a los ojos.
Por ahora no hay una cantidad excesiva de contenido, solo 4 temas, uno de los cuales casi no cuenta por ser la apertura del blog. Pero los otros 3 temas comienzan a demostrar una forma de escribir sobre programación que encierra una forma de pasión, una voluntad pedagógica y irónicos toques de humor.
Es entonces un buen momento para comenzar a leerlo, y luego poder decir que estuvieron ahí desde practicamente el comienzo, cuando los temas estaban frescos y los comentarios se podían contar con una mano.
Es por todo esto que les recomiendo que le den una buena oportunidad a Poesía Ejecutable durante este tiempo de formación y generación de identidad. Lo que ya se ve es, sencillamente, impagable.
Una nota especial: Recomiendo este blog especialmente para Adrian Paredes, y a mi amigo lucas le recomiendo especialmente El blog del frasco. No escriben sobre lo mismo, ni con el mismo estilo, pero sin embargo creo que a ambos le va a gustar lo que hace el otro.
miércoles, 25 de febrero de 2009
Consecuencias del Hardware y Software Abiertos IV: Pistola laser, parte final
Anteriormente escribí acerca de las partes I y II de este proyecto de pistola "láser" que está siendo publicada en la sección de proyectos abiertos que IBM pone a disposición de la comunidad.
Esta vez, les traigo la parte 3, la final de la serie, nos muestran como montar los componentes, un ejemplo de como ponerles un armazón apropiado para que parezca una pistola láser, y está incluido el resto de la programación, lo que permite terminar el proyecto.
Es destacable que durante todo el proyecto hay suficientes explicaciones como para que una persona que no sabe de electrónica o una persona que no sabe de programación pueda aprovechar esto no solo para usarlo, sino también para comenzar a interesarse en estas cosas.
Para mi, lo que hizo que todo este proyecto fuera tremendamente fantástico, fue una explicación de óptica donde nos muestran que, si bien esto no es realmente un láser, en cortas distancias tiene varias de sus propiedades mediante el apropiado uso de lentes.
Recuerden que deben poseer una cuenta gratuita en la página de IBM para poder ver los enlaces de descarga. Que lo disfruten.
Esta vez, les traigo la parte 3, la final de la serie, nos muestran como montar los componentes, un ejemplo de como ponerles un armazón apropiado para que parezca una pistola láser, y está incluido el resto de la programación, lo que permite terminar el proyecto.
Es destacable que durante todo el proyecto hay suficientes explicaciones como para que una persona que no sabe de electrónica o una persona que no sabe de programación pueda aprovechar esto no solo para usarlo, sino también para comenzar a interesarse en estas cosas.
Para mi, lo que hizo que todo este proyecto fuera tremendamente fantástico, fue una explicación de óptica donde nos muestran que, si bien esto no es realmente un láser, en cortas distancias tiene varias de sus propiedades mediante el apropiado uso de lentes.
Recuerden que deben poseer una cuenta gratuita en la página de IBM para poder ver los enlaces de descarga. Que lo disfruten.
Suscribirse a:
Entradas (Atom)