28 noviembre 2006

Lo que mató a Alexander Litvinenko mata a muchos todos los días, pero poquito a poco

Cosas de espías

Como ya sabemos, o se tiene casi total certeza, el polonio 210 mató a Alexander Litvinenko, el expía ruso que molestaba y al cual fulminaron la semana pasada. Pues bien, leo un artículo en El país que indica que el polonio 210 es uno de los componentes del tabaco (no es que se lo pongan a drede, es que los fertilizantes fosfatados lo tienen y la planta lo absorve, a saber lo que nos meten en los tomates, lechugas,...). Pasa que para palmarla a base de cigarros como el ruso, pelón y destrozado por dentro, uno se tiene que fumar cientos de miles de cajetillas en pocos meses, cosa poco probable e imposible. Sin embargo, en estudios realizados sobre animales, el polonio 210 es el principal responsable del cancer de pulmón a largo tiempo. Yo no fumo. ¿Qué tendrá de bueno esa mierda para que uno no se pueda desenganchar?

22 noviembre 2006

Los microprocesadores de 2 núcleos son más que eso

Tecnología

Que nadie piense que Code Duo, Core 2 Duo, etc... son microprocesadores de 2 núcleos y nada más. La microarquitectura que implementan ofrece ciertas mejoras que a los "estudiosos" de las arquitecturas de computadores les puede interesar. Aquí dejo un enlace a una presentación flash con las mejoras que presenta la microarquitectura Intel Core, que es en la que están basados los nuevos microprocesadores Intel de doble núcleo.

21 noviembre 2006

Pregunta a los que trabajan...

Me corroe la duda:

¿soy yo el único estúpido engreido que cree que tiene más formación y más cualidades que su jefe o son ilusiones mías?


17 noviembre 2006

14 noviembre 2006

Estados de bajo consumo de los microprocesadores

Tecnología

Antiguamente un microprocesador estaba funcionando completamente incluso cuando estaba ocioso. Hoy día existen varias tecnologías para "apagarlo" (por partes o completamente) si no tiene una carga de trabajo grande. Vamos a estudiar brevemente las tecnologías que implementan esta mejora.

C1E enhanced halt state

Esta tecnología fue introducida en la serie 500J de Pentium 4 y reemplaza la antigua C1 que usó Pentium 4 y la mayoría de microprocesadores x86. El estado C1 es invocado cuando un proceso ocioso del sistema operativo ejecuta el comando HALT, cosa que Windows realiza constantemente cuando no está a plena carga. Al ejecutar este comando la CPU cortará el consumo de potencia. El nuevo estado C1E de Intel tambien invoca comandos HALT pero la frecuencia y el voltaje se ajustan al trabajo que esté realizando el microprocesador. Este estado requiere menos potencia que el C1 y es más robusto.

Enhanced SpeedStep

SpeedStep modula la frecuencia y el voltaje de la CPU dependiendo de la carga, al igual que C1E, pero el mecanismo por el que se invoca es distinto. Tanto el sistema operativo como la BIOS intervienen. El sistema operativo puede pedir cambios de frecuencia a través del ACPI, siendo estas variaciones mucho más precisas y eficientes.

TM2 thremal throttling

Todos los Pentium 4 incluyen la posibilidad de desacelerarse ellos mismos cuando empiezan a sobrecalentarse. Esta característica se llama Thermal Monitoring 1 (TM1) y consiste en que disminuye a la mitad su frecuencia, aunque externamente siga funcionando a la frecuencia habitual. Este mecanismo es efectivo pero tiene importantes desventajas. El resto del sistema no sabe cómo actuar ante esta situación, el subsistema de memoria puede caer en una iteración contínua que cause su sobrecalentamiento y el rendimiento general del sistema puede caer en picado. TM2 es una mejora de TM1, evitando los ciclos contínuos de memoria.

12 noviembre 2006

Ni puta idea de ordenadores, pero tengo eMule

Cosas de la Informática

Hoy día la Informática nos invade por todos lados, de eso no hay duda. Edificios, ciudades, empresas,...todo está gobernado por 0's y 1's. En un mundo informatizado no todo el mundo entiende el funcionamiento de un ordenador o los entresijos de la algorítmica pura, y por supuesto que no todo el mundo tiene por qué saber de todo, faltaría más. La expansión de Internet ha creado nuevas formas de comunicación y de vida y pocos pueden escapar ya a su influjo. Las posibilidades de Internet son enormes, pero la realidad es otra. Es una pena que los últimos en llegar se sumen al carro de las nuevas tecnologías para descargarse el último disco de Bisbal.

A mi parecer es así. Internet se colapsa de auténticos pinchateclas cuyo único fin es poner el eMule a reventar. Compran máquinas potentes que no utilizarán ni a su 10% de potencia y contratan anchos de banda exagerados con un único objetivo: llenar el disco duro de música, pelis y porno. Hay gente que incluso no apaga el ordenador en meses y descarga cosas que ni le interesan, es un afán por descargar y descargar.

Ojo, que no soy de la SGAE ni estoy a favor de DRM ni en contra de eMule, aMule y otras variedades torrent. Yo también descargo, sobre todo música, pero solo cuando hay algún disco que me interese. No soy nadie para decir lo que se puede y no se puede hacer. Simplemente me da pena que Internet sea colapsado a base de pirateo, habiendo cosas tan interesantes que leer y descubrir. Es normal que ideas como Internet 2, esa Internet paralela y de uso más "productivo", sea más que una posibilidad a nivel global.

09 noviembre 2006

Programa en C para reventar discos duros

Test de rendimiento

Supongo que nadie quiere destrozar (o intentarlo) su disco duro, pero en mi trabajo es importante comprobar su fiabilidad. Por eso he escrito un programa en C (que ejecuto en Windows, aunque tengo que compilarlo en Linux y supongo que con pequeñas variaciones estará listo) con este fin, comprobar si los discos son realmente duros.

Este programa genera ficheros de 1 GB y los copia en el disco duro hasta llegar al tope de Gigabytes indicados. Este proceso se repite desde 1 hasta infinitas veces, según deseemos.

¿Por qué lo pongo aquí? Por que con el he reventado 2 discos duros Seagate ST3160211AS. Con HD Tach 2.61, una aplicación para comprobar la tasa de transferencia en lectura y escritura, al llegar a los 65 GB aproximadamente la escritura baja a niveles irrisorios (ver línea verde de la gráfica), síntoma de que algo falla. Obviamente la prueba con HD Tach antes de pasar el test que he creado fue correcta.

Os dejo el código por si lo quereis utilizar. Perdonad si no sale tabulado.

-------------------

/*********************************************************************
El programa copia bloques de 1GB en el disco duro hasta que llegue
a GB. En este punto borra todos los bloques y
continua iteraciones.

Si es 0 realizará infinitas iteraciones hasta que el
programa sea cortado con Control-C
*********************************************************************/

#include
#include

using namespace std;

void informacion_entrada()
{
printf("\nError: no introdujo los parametros correctos\n\n");
printf("\n \n\n");
printf(" -> Por ejemplo, c:, d:,...\n");
printf(" -> GigaBytes maximos a copiar (por ejemplo 100, 110,...)\n");
printf(" -> Iteraciones a realizar, 0 para infinito\n\n");
printf("Ejemplo de ejecucion: h: 110 5\n");
}

/**************************************************************************
Envejecimiento con n iteraciones
**************************************************************************/
void envejecimiento_n(char* filename,int maximo_a_copiar,int iteraciones)
{
FILE *destino;
double total_copiados_iteracion=0.0,total_copiados=0.0;
unsigned long bytes_copiados=0;
char nombre_fichero[5];
char* numero=(char*)malloc(sizeof(char)*2);
int ficheros;

printf("\nEnvejecimiento de unidad %s, se moveran %d GB aproximadamente\n",filename,maximo_a_copiar*iteraciones);
printf("--------------------------------------------------------------\n");

for(int iter=0;iter!=iteraciones;iter++)
{
total_copiados_iteracion=0.0;
ficheros=0;
do
{
strcpy (nombre_fichero,filename);
numero=itoa(ficheros++,numero,10);
strcat (nombre_fichero,numero);

if (!(destino=fopen(nombre_fichero,"w")))
printf("No pude abrir el fichero de destino.\n");

do
{
fputs("abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij",destino);
bytes_copiados+=100;
}
while (bytes_copiados!=1000000000);

fflush(destino);
fclose(destino);

total_copiados_iteracion+=0.931322;
total_copiados+=0.931322;
bytes_copiados=0;

printf("%f GB copiados\n",total_copiados);
}
while ((total_copiados_iteracion+0.931322)
//BORRA FICHEROS
for (--ficheros;ficheros>=0;ficheros--)
{
strcpy (nombre_fichero,filename);
numero=itoa(ficheros,numero,10);
strcat (nombre_fichero,numero);

destino=fopen(nombre_fichero,"w");
fputs("",destino);
fclose(destino);
}
}
}

/**************************************************************************
Envejecimiento infinito
**************************************************************************/
void envejecimiento_infinito(char* filename,int maximo_a_copiar)
{
FILE *destino;
double total_copiados_iteracion=0.0,total_copiados=0.0;
unsigned long bytes_copiados=0;
char nombre_fichero[5];
char* numero=(char*)malloc(sizeof(char)*2);
int ficheros;

printf("\nEnvejecimiento infinito de unidad %s, finalice con Control-C\n",filename);
printf("----------------------------------------------------------------\n");
while (true)
{
total_copiados_iteracion=0.0;
ficheros=0;
do
{
strcpy (nombre_fichero,filename);
numero=itoa(ficheros++,numero,10);
strcat (nombre_fichero,numero);

if (!(destino=fopen(nombre_fichero,"w")))
printf("No pude abrir el fichero de destino.\n");

do
{
fputs("abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij",destino);
bytes_copiados+=100;
}
while (bytes_copiados!=1000000000);

fflush(destino);
fclose(destino);

total_copiados_iteracion+=0.931322;
total_copiados+=0.931322;
bytes_copiados=0;

printf("%f GB copiados\n",total_copiados);
}
while ((total_copiados_iteracion+0.931322) //BORRA FICHEROS
for (--ficheros;ficheros>=0;ficheros--)
{
strcpy (nombre_fichero,filename);
numero=itoa(ficheros,numero,10);
strcat (nombre_fichero,numero);

destino=fopen(nombre_fichero,"w");
fputs("",destino);
fclose(destino);
}
}
}

/************************************************************************
Main
************************************************************************/
int main(int argc, char *argv[])
{

char unidad[4],iteraciones[4],capacidad[4];

printf("\nBurn Storage Devide 1.0\n\n");

printf("Introduzca la unidad a verificar (por ejemplo, c: ) --->");
scanf("%s",unidad);
printf("Introduzca las iteraciones, 0 para infinitas ) --->");
scanf("%s",iteraciones);
printf("Introduzca la capacidad maxima de la unidad en GB (por ejemplo, 100 ) --->");
scanf("%s",capacidad);

if (atoi(iteraciones)!=0) envejecimiento_n(unidad,atoi(capacidad),atoi(iteraciones));
else envejecimiento_infinito(unidad,atoi(capacidad));

system("PAUSE");
return EXIT_SUCCESS;
}

Core 2 Quad: el inicio

Tecnología

No acaban de aterrizar los Core 2 Duo de Intel y la multinacional norteamericana ya ha presentado el primer modelo de microprocesador con cuatro núcleos: el Core 2 Quad QX6700.

Estructuralmente este microprocesador son 2 Core 2 Duo juntos (2 x 2 = 4 núcleos), tiene socket LGA 775, una frecuencia de reloj de 2.66 Ghz por cada núcleo y se relaciona con el sistema a 1066 Mhz (FSB).

Lo que menos me gusta de este microprocesador es que vuelve a consumir los 130W que consumían los Pentium D, por lo que una de los grandes avances de Intel en los Core 2 Duo se ha esfumado.

Podeis leer una completa review aquí.

06 noviembre 2006

¿All in Wonder? ¡Ya sabemos lo que es!

Tecnología

Hay un componente hardware que tiene una serie de productos llamados All in Wonder. Tal vez vayais un día a una tienda y os lo ofrezcan, así que no estaría mal saber de qué se trata. ¿Alguien podría explicar de qué estamos hablando?

ACTUALIZADO

En los comentarios se ha dado con la tecla. All in Wonder se refiere a una serie de productos de tarjetas gráficas que, además, son capturadoras de video, sintonizadoras de televisión y sintonizadoras de radio. Podeis ver un ejemplo de la marca Powercolor aquí. ¿Vendrá All in Wonder de All in One? Se parecen.

05 noviembre 2006

Programando

El estado natural de un Informático...

Ahora mismo estoy creando una aplicación para el trabajo. Nadie me la ha pedido pero sé que es necesaria. Se trata de una aplición Web para almacenar/consultar los resultados de rendimiento de los componentes hardware que probamos. La combinación es la típica: PHP+MySQL.

En todo programa en donde intervienen permisos y claves hay que solucionar la forma de afrontarlos. Yo lo he hecho de una manera correcta (a mi parecer) pero estaría bien saber cómo lo harían los demás. ¿Cómo haríais...?
  1. Control de sesiones y autenticación de usuarios a lo largo de la sesión
  2. Almacenamiento de la clave de usuario en la base de datos