viernes, 23 de octubre de 2009

Tipos y eficiencia

La correcta definición de tipos a la hora de programar requiere toda una investigación, es un tema profundo y conocer sus recovecos es bastante productivo.

En mi opinión, podría escribirse un libro sobre el tema, y es un pilar fundamental en la temática de este blog.

Hoy en día hay muchos lenguajes que dan mucha libertad en la gestión de tipos: no hacen falta declararlos y realizan conversiones implícitas.

Esto, en ocasiones, es genial. Necesitamos un pequeño programa y lo resolvemos fácilmente, sin tan siquiera declarar previamente ninguna variable.

Pero a la vez, nos aleja de la perfección. Un buen programador conoce todos los detalles del lenguaje y los administra con sabiduría, para conseguir: Eficiencia, potencia, economía y elegancia. Un programa más rápido con un ordenador más lento, puro conocimiento.

En esta tabla vemos unos datos que reflejan tiempos en segundos y porcentajes.
La columna A, contiene los segundos que tardaron los diferentes tipos en asignar a una variable de dicho tipo un numero. Ejemplo z= 7 , siendo z byte, sbyte etc.
A la derecha de A, qué porcentaje de más tardó en realizar ese tipo la operación con respecto al que menos tiempo invirtió(el que menos tardó siempre está puesto a 0).
La columna B contiene los tiempos que tardo en incrementar y decrementar(consecutivamente) los diferentes tipos
La columna C contiene el tiempo en segundos que tardó en multiplicar esa variable por si misma.
La columna D contiene el tiempo que tardo en dividir la variable entre un número
La columna E contiene lo que tardo en redimensionar un array a 100 elementos y luego borrarlo

Cada una de las acciones anteriores fueron realizadas 10 millones de veces, para que dieran valores en décimas de segundos.
He utilizado Visual Studio .Net, y la propiedad timer para medir los tiempos. Básicamente he implementado una pequeña aplicación que realizaba 5 veces una repetición de 10M y obtenía una media de tiempos para los diferentes tipos.
Evidentemente no tenia ninguna otra aplicación abierta para que no afectara a los tiempos.
He repetido la prueba dos veces y se obtenían los mismo resultados.

Saquen conclusiones:
Tipo A % B % C % D % E
%
byte0,20,00,536,20,317,17,7468,99,30,0
sbyte0,20,00,416,40,431,47,6460,010,210,0
short0,22,70,418,30,433,47,9487,420,2117,7
integer0,22,00,40,00,30,07,4450,421,3129,6
long0,336,60,543,61,6492,511,7765,239,0320,3
single0,24,01,8401,40,34,41,41,523,4152,4
double0,211,11,8404,10,33,91,40,041,1342,9
decimal2,81199,625,96995,97,72731,020,71435,6 ----
----
object1,5594,715,94247,92,6851,08,9555,630,7230,3

jueves, 22 de octubre de 2009

Analizator 1.0 by Parser

Según la ParserPedia

Analizator 1.0
Programa creado por Parser, especialmente diseñado para una medición estadística específica:
-Un recuento de apariciones, de ciertas palabras que toma como entradas, en las 1000 primeras webs que google lista según una búsqueda determinada.

La búsqueda: "Blog personal", Analizator pregunta al servidor Google.com y recibe un listado de webs(1200 para ser exactos), discrimina las 200 últimas y realiza un recuento de apariciones según un listado de palabras(un array unidimensional con los términos a estudiar)

La lista de palabras y los resultados:
crisis 1087
futbol|fútbol 572
moda 451
iglesia 429
obama 401
iran|irán 397
sexo 235
programacion|programación 231
zapatero 192
vivienda 145
cielo 137
sgae 97
hambre 95
algoritmo 36
rajoy 26
infierno 25
marginacion|marginación 4
Ahmadineyad 1

Este programa se basa en un sencillo pero potente algoritmo que da una idea bastante fiel de lo que se habla en los blogs, los blogs más importantes según PageRank de Google.

Podemos inferir:
La crisis o "crecimiento negativo" es el término que más aparece en estos momentos, seguido del término fútbol. Ánimo señores economistas, si las cosas siguen así, es posible que esta palabra actúe como una cortina de humo en la sociedad.
Sexo, la palabra que no cumplió sus espectativas, simplemente empezó con fuerza y fue cuestión de tiempo que incluso iglesia superara sin dificultad y por goleada.
Obama, este es tu año, incluso en blogs hispanohablantes no dudas en poner contra las cuerdas a Zapatero y Rajoy(incluso sumados)
Mucha gente se atreve a opinar sobre Irán pero casi nadie se atreve al titánico esfuerzo de documentarse sobre el nombre correcto de su dirigente: Ahmadineyad
En una loable actitud mental positiva confiamos plenamente en una segunda y eterna vida en el cielo antes que en el infierno.

Bueno, y...¿Qué tiene esto que ver con eficiencia computacional?

Sencillo, esto nos situa en un hipotético caso:
Imaginemos que alguna corporación quiere analizar en que "zonas" de internet se habla más o menos de ellos para posibles inversiones, esto requiere en muchos casos un estudio estadístico previo que señale con precisión la zona de incidencia. Mucho dinero en juego.

Sigamos, los anteriores datos con los que trabajé están llenos de impurezas.
Errores 404, meses sin actualizaciones, errores Forbidden...

En este caso sería razonable que un equipo de dos o tres personas en apenas dos días pudieran comprobar "in situ" que sitios son válidos. Pero... ¿y si quieren analizar 50.000?

Continuará

domingo, 18 de octubre de 2009

Yo, Parser

¿Qué instrucción consume menos recursos?, ¿Qué sucesión de pasos es más eficiente?, ¿Qué algoritmo resuelve de manera más económica y segura un determinado problema?.

Soy un verdadero apasionado del código, en la vida diaria pienso hasta la locura en trasladar el universo de lo real a código. Veo el mundo como Clases, en ocasiones heredadas. En el fondo hay muchos como yo... es un sentimiento de placer por la resolución de problemas, una sensación de satisfacción en la busqueda de alternativas mejores.

En el fondo, hay muchos como yo... pasa, este es tu sitio.