Novedades en la categoría Herramientas

Ayer me llegó la cuenta para usar los servicios de la Google App Engine, tengo un par de ideas para desarrollar, pero por ahora vamos a investigar, observar, aprender de otros.

Estoy construyendo un prototipo, pero va a tomar tiempo, lamentablemente sólo le puedo dedicar mi tiempo libre, y está bastante escaso. Si les interesa integrarse al proyecto, por favor escribanme, o dejenme un comentario, la idea es preparar alguna aplicación Web 2.0 de nicho, social, por supuesto.
Requisitos: saber python, o tener habilidades de diseño gráfico (o tener mucho dinero para invertir ;)

Para una introducción a la Google App Engine les sugiero ver los videos de Google.

googleappengine0.jpg

Parece que la tendencia de las futuras startup será usar la nube (the cloud), así que hay una motivación profesional para emprender este proyecto, aprender a dominar esta nueva tendencia de desarrollo de servicios, la que tiene una componente un tanto espeluznante, puesto que al parecer son muy pocos los players que tienen la capacidad de ofrecer estos servicios (Google, Amazon), me extraña que Microsoft no esté pensando en el cloud computing, pero no lo subestimen, que puede despertar y tiene la capacidad para dar este servicio.

Fortran

| | Comentarios (2) | TrackBacks (0)

Aprendí Fortran en la Universidad de Chile, cuando era mechón. Aunque normalmente el curso se hacía con Ratfor, y al año después se empezó a hacer con Pascal, a mi, por razones que no recuerdo, me tocó hacer Fortran.

Acostumbrado a programar en Basic, no fue dificil para mi aprender este venerable lenguaje de programación.Hoy leí una reseña que en realidad nos muestra un Fortran bastante más moderno del que me tocó, Watfor-77.

Ahora se cumplen 50 años de Fortran, en el mismo año que su creador falleción, John Backus.

John_Backus.jpg

Backus además inventó la forma Backus-Naur, que es el formato en que se describen los lenguajes formales, en particular los lenguajes de programación.

No se cuantos programadores pueden decir que han inventado su propio lenguaje de programación, pero yo he inventado varios, y en los 90, junto con Marco Zúñiga alcanzamos a vender licencias y hacer cursos de un pequeño lenguaje de programación, inventado por él, y que después expandí, se trataba Sanscript.

Trabajamos por lo menos 2 años con este lenguaje, en diversos proyectos de telecomunicaciones, y tuvo un éxito modesto dentro de la industria nacional, tenía su propia máquina virtual, y correspondería a lo que hoy llaman lenguajes de dominio específico (DSL).

Algo de Fortran había en ese mini lenguaje, así que puede que sin Fortran no podría haber habido sanscript, y tampoco un memorable momento de mi vida.

Precisión

| | Comentarios (2) | TrackBacks (0)

Esta nota está "impulsada" por algunos comentarios a mi post anterior con respecto al Bug de Excel 2007, el primero es un enlace a una discusión en Kriptópolis sobre la precisión numérica de javascript. El segundo es para preguntarme si sabía que Visual Basic rendondea hacia abajo.

La verdad es que no sé cómo redondea Visual basic, porque afortunadamente nunca he tenido que programar en ese lenguaje ;).

Pero lo que me sorprende es leer otros comentarios que demuestran una ignorancia sobre la precisión de los computadores que es sorprendente en profesionales de la informática.

Todo programador debería saber que la precisión de las operaciones matemáticas está dada por la manera en que se representan los números.

Hoy en día la forma más aceptada para el almacenamiento de números es la representación estándar IEE de Punto Flotante, o IEE754.

Esta representación, a pesar de ser bastante buena y precisa, no permite representar todos los números reales posibles, los que son infinitos.

Como no podemos tener infinitos dígitos para representar un número, debemos adoptar alguna convención, y para eso usamos una cantidad de bits para almacenar los números.

La representación típica usa 64 bits para almacenar un número real. Excel y muchos programas que requieren alta precisión, usan la denominada "representación doble extendida", en que cada número se representa en 80 bits.

Esta representación tiene algunas propiedades curiosas, como por ejemplo, que hay 1.000 veces más números entre 0 y 0,5 que entre 0,5 y 1,0. Es decir, la precisión es mayor cuando más nos acercamos a 0.

float1.jpg

Hay consecuencias asociadas a la decisión de usar esta representación. Una de las más impactantes es la no asociatividad de los números.

Si recuerdan del colegio la asociatividad es una propiedad que nos permite decir que podemos agrupar 3 o más números de distintas maneras y los resultados van a ser los mismos.

Por ejemplo, si tenemos los números 0,1;0,56 y 0,78 para sumarlos los podemos agrupar de las siguientes maneras: (0,1+0,56)+0,78 o 0,1+(0,56+0,78). En general, da lo mismo como los ordenemos, el resultado va a ser el mismo.

Sin embargo esto no ocurre en los computadores.

Por ejemplo, este código en javascript demuestra lo que digo:

var n = new Array(1001);
var i;
for (i = 1; i <= 1000; i++) {
n[i] = i * 1.19;
}

s0 = 0;
for (i = 1; i <= 1000; i++)
{
s0 = s0 + n[i];
}

s1 = 0;
for (i = 1000; i >= 1; i--) {
s1 = s1 + n[i]
}

delta = s1 - s0;

alert('s0 = ' + s0 + ' s1 = ' + s1 + ' s1-s0 = ' + delta);

Pueden probar este código en esta página

Lo que hace este código es crear un arreglo de 1000 numeros, desde 1 a 1000, donde cada numero es multiplicado a su vez por 1,19 (esto es como aplicarle el IVA a cada numero).

Luego suma los numeros en orden ascendente (s0) y luego en orden descendente (s1).

Al final muestra el resultado de ambas sumas, y la diferencia entre ambas (delta).

Lo interesante es que delta, es decir, s1-s0 debería ser 0, pero como la suma no es asociativa el resultado no es el esperado.

Esta diferencia puede parecer insignificante, pero la verdad es que me he topado con muchas aplicaciones prácticas en que esta diferencia se nota.

Cuando uno empieza como programador se topa con problemas del tipo: "sume el monto de 1.000 facturas aplicándoles el IVA."

Tradicionalmente para sumar un arreglo de N cifras usamos el siguiente algoritmo:

def Suma(A[1..N])
suma := 0
for i := 1 to N do
suma := suma + A[i]
return suma

Sin embargo esta no esa la manera más precisa de hacer este cálculo.

Una mejor manera de sumar es usando la Fórmula de Kahan:

def SumaKahan(A[], 1 a N)
S := A1;
C := 0;
for j := 2 to N do
Y = A[j] - C;
T = S + Y;
C = (T - S) - Y;
S = T;
return S

Esta formula tiene una precisión altisima1.

Para los que estén interesados en experimentar en la continuación de este artículo hay un programa en C que demuestra la precisión de este algoritmo.

Este es sólo un ejemplo de las cosas que todo programador debe saber sobre punto flotante.

[1] Los detalles se pueden encontrar acá, la perturbación en el algoritmo es del 2*epsilon, mientras que en el algoritmo tradicional es proporcional a N*epsilon, donde epsilon es el error de aproximación dado por la representación numérica.

Se acuerdan de la página del millón de dolares?
Pues bien, ahora salió un script que permite construir tu propia página del millón de dolares: http://www.milliondollarscript.com/.

Bueno, ahora falta crear el hosting del millón de dolares, es decir, un servicio que ofrezca instalar tu propia página del millón de dolares.

¿Qué es exactamente una aplicación Web 2.0?

Hay muchas ideas de lo que es y de lo que no es, pero creo que PInvoke.Net es un gran ejemplo de lo que una aplicación Web 2.0 debe ser. En esta caso se trata de un servicio orientado a los programadores.

¿Qué es PInvoke.Net?

La definición de lo que es está en su propio sitio:

PINVOKE.NET intenta disminuir la dificultad de invocar funcionalidades (APIs) de Win32 u otro tipo de codigo no manejado desde aplicaciones que escritas en código manejado (en lenguajes como C# y VB .NET). Definir las firmas de una función para usar PInvoke (también conocido como sentencias de declaración en VB) es un proceso propenso a error que puede introducir bugs (errores) extremadamente sutiles. Las reglas son complejas, y su usted comete un error probablemente corromperá la memoria.

En términos simples, los programadores de .Net tienen que llamar ciertas funciones disponibles en windows, para hacerlo se debe seguir un estricto protocolo, cuya declaración es compleja y propensa a errores.

En este sitio, lo que se hace es que los programadores que ya hayan resuelto una de estas llamadas publican el código adecuado para que otros lo puedan usar. La comunidad de programadores usa el Wiki como herramienta para compartir experiencia de programación.

Firefox 1.5

| | Comentarios (0) | TrackBacks (0)

La verdad es que por mi trabajo debería usar cuanto browser hay en el mercado, pero me concentro en Internet Explorer y Firefox, que son los más populares.
Por lo general si tus aplicaciones o sitios corren en ambos browsers entonces es poco probable que tengas problemas con los otros.

El problema son las versiones. Es común que uno encuentre en el log de sus sitio que hay muchos usuarios con IE 5.0 o versiones anteriores! Lo cual explica porque prolifera tanto virus, algunos andan diciendo por ahí que Chile es uno de los paises más vulnerables a virus. No se, puede que sólo sea una estrategia publicitaria, pero si uno se fija en los logs, y ve que tanta gente usa versiones antiguas, no sería de extrañar.

Como sea, tenemos una nueva versión de Firefox, a mi me gusta mucho Firefox, lo uso más que IE, por eso que aviso cuando hay problemas, afortunadamente el equipo de Firefox responde rápido, el poder de la comunidad.

Por ahora voy a ver si esta versión mejora el consumo de la memoria.

CD ROM Virtual

| | Comentarios (3) | TrackBacks (0)

Seguramente les pasa que bajan un .iso desde internet y tienen que quemar un CD para leerlo. O, bajan un .iso de un DVD, y no tienen grabador de DVD.

En Linux hacer esto es super fácil:

mount -o loop /path/to/file.iso /path/to/mount/point

Es decir, se monta en el sistema de archivos como un dispositivo en loopback.

Para Windows, bueno, ahí la cosa es un poco más complicada...
Como me aburrí hace mucho tiempo de tener que quemar CDs, que se juntan y terminan convirtiendose en chatarra, y como no pienso comprarme un grabador de DVD, la solución es una aplicación gratis provista por Microsoft (sí, leyeron bien).

Se trata de Vistual CD Control Panel, sugiero bajarlo de SoftPedia.

Sobre este archivo

Esta página es un archivo de las entradas recientes en la categoría Herramientas.

General es la categoría anterior.

Humor es la siguiente categoría.

Encontrará los contenidos recientes en la página principal. Consulte los archivos para ver todos los contenidos.

Technorati

Technorati search

» Blogs que enlazan aquí

Creative Commons License
Este weblog está licenciado bajo una Licencia Creative Commons.

BloGalaxia website stats
Google
Encuentro Blogpower 2008