Archive for Geek

El agujero negro gigante de la Vía Láctea despertó de su letargo hace 300 años

Un grupo de científicos japoneses, usando satélites para la detección de rayos-X, encontró que hace unos 300 años el agujero negro central de la Vía Láctea emanó una poderosa llamarada. Estos descubrimientos ayudan a explicar un misterio que duró varios años: por qué es tan tranquilo el agujero negro de la Vía Láctea; si bien posee 4 millones de veces la masa del Sol la radiación que emite es miles de millones de veces menor que la emitida por agujeros negros en otras galaxias.

“Nos preguntamos por qué el agujero negro de la Vía Láctea parece un gigante aletargado,” dice Tatsuya Inui, líder del proyecto. “Sin embargo ahora nos damos cuenta de que fue bien más activo en el pasado. Quizás sea sólo un descanso luego de un gran arrebato.”

Las observaciones se efectuaron sobre una nube de gas que rodea al agujero negro a la que los rayos-X emanados desde el centro demoran 300 años en llegar; en particular se registró una intensa variación en el brillo de esa nube de gas a lo largo de 5 años. “Al observar cómo esta nube se iluminó y apagó a lo largo de 10 años podemos trazar la actividad del agujero negro hace 300 años” dijo Katsuji Koyama, uno de los miembros del equipo. “El agujero negro era un millón de veces más brillante hace tres siglos. Debe haber liberado una llamarada increíblemente potente.”

Todavía no hay una explicación al por que de la variación de la actividad del agujero negro en el centro de la Vía Láctea. Koyama sostiene que una posibilidad sea que una supernova (uno de los estados que atraviesa una estrella antes de su extinción) haya sido fagocitada por el agujero negro, despertándolo de su letargo y por eso se vio un gran aumento en su actividad hace unos 300 años. Hace unos años se había detectado una gran emisión de Rayos-X desde el centro de la galaxia, hacía unos 50 años, sin embargo ese fenómeno fue 10 veces menos brillante que el de hace 300 años.

Via ScienceDaily(en inglés) || Genciencia

Comments

Vinton Cerf ¿quién era?

De bien seguro que muchas de las personas que lean el titular del post se llevarán las manos a la cabeza, pero otros muchos dirán: “¿y quién era ese Vinton Cerf?”.

Bueno, a decir verdad como ya muchos habrán imginado Vinton Cerf en efecto es una persona, pero ¿por qué es importante esta persona?.

Podriamos decir que Vinton Cerf es uno de los “padres” de internet, de hecho ahora vereis por qué:

Vinton Cerf era un informático (también conocido como cientifico de la computación) que nacio en Estados Unidos. Se graduó en Matemáticas y ciencias de la Computación. A principios de los años 70 trabajo con Robert Kahn para desarrollar un conjunto de protocolos de comunicación para ARPANET ( una red militar ). Lo suyo era crear una red muy grande, para interconectar diferentes redes del Departamento de Defensa de EEUU (que religiosamente todas funcionaban de forma distinta y con distintos Sistemas Operativos y con diferentes tipos de línea).

Después de mucha investigación diseñaron un conjunto de protocolos (que hoy se conocen con el nombre de Transmission Control Protocol/Internet Protocol alias TCP/IP) que evidentemente fue presentado por Vinton Cerf y Robert Kahn en el 72.

Este buen hombre, no solo hizo esto sino que ademas, trabajando en DARPA fue uno de los primeros en desarrollar sistemas de transmision por radio y satélite de paquetes a parte de ser el responsable del proyecto Internet y diversos programas de investigación de seguridad en la red.

No solo eso, sino que Vinton Cerf diseñó MCI MAIL (el primer servicio de tipo comercial de correo electrónico que se conecta mediante Internet).

Comments

Programa electoral : para contar votos y qué votos ha tenido en cada barrio

Bueno, aquí viene otro programa hecho en C con su respectivo código fuente.. El programa lo que hace es que pide nombres de partidos politicos y de barrios segun especificados en las constantes del principio del programa y calcula el número de votos totales y el repartimiento de regidores ( hay 10 ).
Si hay algún tipo de duda no dudeis en hacer un comentario.


Licencia:

Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.

/*

Autor: Imydes
Data:11/03/2008
Descripció Programa de les eleccions.

*/

#include

/******************
Definicions
******************/
#define MAXLL 16
#define MAXP 2
#define MAXB 2

/******************
Tipus
******************/
typedef char Tnom[MAXLL];
typedef int Tvots[MAXP][MAXB];
typedef Tnom Tnp[MAXP];
typedef Tnom Tnb[MAXB];

/******************
Capcelera
******************/
void Demanar_noms_partits(Tnp partits);
void Demanar_noms_barris(Tnb barris);
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots);
int buscar_guanyador(Tvots vots);
void Dir_guanyador(Tnp partits, int pguanyador);
int buscar_barri_guanyador(Tvots vots, int guanyador);
void dir_barri_guanyador(Tnb barris, int barriguanyador);
void repartir_regidors(Tvots vots, Tnp partits);

void main(void) {
Tnp partits;
Tnb barris;
Tvots vots;
int guanyador; //aquí guardarem la posició del partit guanyador.
int barriguanyador;

Demanar_noms_partits(partits);

Demanar_noms_barris(barris);

Demanar_vots(partits,barris,vots);

guanyador = buscar_guanyador(vots);

Dir_guanyador(partits, guanyador);

barriguanyador = buscar_barri_guanyador(vots,guanyador);

dir_barri_guanyador(barris,barriguanyador);

repartir_regidors(vots, partits);

}

// Demanar noms dels partits.
void Demanar_noms_partits(Tnp partits) {
int p=0;
while(p < MAXP) {
printf("Insereix el nom del %i partit\n",p+1);
gets(partits[p]);
p++;
}
}

// Demanar nom dels barris.
void Demanar_noms_barris(Tnb barris) {
int b=0;
while(b < MAXB) {
printf("Insereix el nom del %i barri\n",b+1);
gets(barris[b]);
b++;
}
}

// Demanar els bots segons el partit i el barri.
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots) {
int p, b;
for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
printf("Diguem el nombre de vots del partit %s al barri %s\n", partits[p], barris[b]);
scanf("%i", &vots[p][b]);
}
}
}

// Cerquem el partit guanyador i retornem la seva posició.
int buscar_guanyador(Tvots vots) {
int p, b, votstemp;
int pguanyador = -1;
int pvotsguanyador = -1;

for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
votstemp = vots[p][b];
}
if (votstemp > pvotsguanyador) {
pguanyador = p;
pvotsguanyador = votstemp;
}
}
return pguanyador;
}

// Mostrem un missatge de qui és el guanyador.
void Dir_guanyador(Tnp partits, int pguanyador) {
printf(”Ha guanyat el partit %s\n”, partits[pguanyador]);
}

int buscar_barri_guanyador(Tvots vots, int guanyador) {
int b;
int bguanyador, bvotstemp;
bguanyador = bvotstemp = -1;

for (b=0; b < MAXB; b++) {
if (bvotstemp < vots[guanyador][b]) {
bvotstemp = vots[guanyador][b];
bguanyador = b;
}
}
return bguanyador;
}

// Mostrem el barri guanyador.
void dir_barri_guanyador(Tnb barris, int barriguanyador) {
printf("Ha guanyat el barri %s\n", barris[barriguanyador]);
}

// Repartir regidors
void repartir_regidors(Tvots vots, Tnp partits) {
int totalvots,votspartittemp;
int npartits, barris;
int votspartit[MAXP];
totalvots = 0;

for (npartits = 0; npartits < MAXP; npartits++) {
votspartittemp = 0;

for (barris = 0; barris < MAXB; barris++) {
votspartittemp = votspartittemp + vots[npartits][barris];
}

totalvots = totalvots + votspartittemp;
votspartit[npartits] = votspartittemp;
}
//a partir d'aqui esta malament
for (npartits = 0; npartits < MAXP; npartits++) {
printf("El partit %s ha tret un total de %f regidors.\n", partits[npartits], ((float)votspartit[npartits]/(float)totalvots)*10);
}
}

En teoria si tienes las librerias de ANSI C instaladas y un compilador de C (como gcc en *NUX y Visual C++ en Windows) debería funcionar perfectamente.

Comments

Hola mundo ocultos.

¿Nunca habeis soñado con Hola Mundo’s ocultos en vuestros programas? pues ahora ya podreis implementarlo de una forma fácil y sencilla. Acabo de ver unos Hola Mundo muy bien elaborados en la web de fitzrovian. Son casi como códigos ocultos xD.

Ahí va el primero:

int n[]={0×48,
0×65,0×6C,0×6C,
0×6F,0×2C,0×20,
0×77,0×6F,0×72,
0×6C,0×64,0×21,
0×0A,0×00},*m=n;
main(n){putchar
(*m)!=’\0′?main
(m++):exit(n++);}

Este me gusta más:

#define _________ }
#define ________ putchar
#define _______ main
#define _(a) ________(a);
#define ______ _______(){
#define __ ______ _(0×48)_(0×65)_(0×6C)_(0×6C)
#define ___ _(0×6F)_(0×2C)_(0×20)_(0×77)_(0×6F)
#define ____ _(0×72)_(0×6C)_(0×64)_(0×21)
#define _____ __ ___ ____ _________
#include
_____

Este es el amo!:
#include
main(){
int x=0,y[14],*z=&y;*(z++)=0×48;*(z++)=y[x++]+0×1D;
*(z++)=y[x++]+0×07;*(z++)=y[x++]+0×00;*(z++)=y[x++]+0×03;
*(z++)=y[x++]-0×43;*(z++)=y[x++]-0×0C;*(z++)=y[x++]+0×57;
*(z++)=y[x++]-0×08;*(z++)=y[x++]+0×03;*(z++)=y[x++]-0×06;
*(z++)=y[x++]-0×08;*(z++)=y[x++]-0×43;*(z++)=y[x]-0×21;
x=*(–z);while(y[x]!=NULL)putchar(y[x++]);
}

Con este solo se puede decir una cosa… ¿ein?
#include
#define __(a) goto a;
#define ___(a) putchar(a);
#define _(a,b) ___(a) __(b);
main()
{ _:__(t)a:_(’r',g)b:_(’$',p)
c:_(’l',f)d:_(’ ‘,s)e:_(’a',s)
f:_(’o',q)g:_(’l',h)h:_(’d',n)
i:_(’e',w)j:_(’e',x)k:_(’\n’,z)
l:_(’H',l)m:_(’X',i)n:_(’!',k)
o:_(’z',q)p:_(’q',b)q:_(’,',d)
r:_(’i',l)s:_(’w',v)t:_(’H',j)
u:_(’a',a)v:_(’o',a)w:_(’)',k)
x:_(’l',c)y:_(’\t’,g)z:___(0×0)}

Un saludo y espero que hayas pasado un buen rato.

Comments (1)

Codigo fuente de mi programa: Juego de la Vida

Bueno, como seguramente ya sabreis mi objetivo es ser un programador y estoy estudiando eso, informática y en mi blog espero ir compartiendo los programas que escriba.

Generalmente use C para escribir los programas aunque no descarto algunos otros lenguajes como PHP o Python (o quizás perl).

Aquí va el codigo fuente de un juego de la vida (cualquier duda podeis dejar un comentario y lo responderé lo más rápido posible):


Licencia:

Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.

WordPress no me permite poner todo el código del programa así que adjunto el fichero .c que podeis descargarlo dándole click aquí:

joc de la vida.c
/*

Autor: Imydes
Descripció: Joc de la vida
Data: 21/02/2008
*/

#include

/*****************************
* Definicions *
****************************/
#define MAX_COOR 7

/*****************************
* Tipus *
*****************************/

typedef int Tterreny[MAX_COOR][MAX_COOR];

/*****************************
* Capcelera de les funcions *
******************************/

void preparar_terreny(Tterreny &original, Tterreny &temporal);
void inserir_habitants(Tterreny &original);
void mostrar_terreny(Tterreny &original);
int obtenir_generacions(void);
void resoldre_terreny(int generacions, Tterreny &original, Tterreny &temporal);
void copiar_terreny(Tterreny &original,Tterreny &temporal);

int main() {

int generacions;
Tterreny original, temporal;

printf(”Introduce los habitantes mediante coordenadas, la tabla es de 5×5\n”);

preparar_terreny(original, temporal);

inserir_habitants(original);

mostrar_terreny(original);

generacions = obtenir_generacions();

resoldre_terreny(generacions, original, temporal);

return 0;
}

/* Copiar Terreny */
void copiar_terreny(Tterreny &original,Tterreny &temporal) {
int fila, col;
for (fila = 1; fila < MAX_COOR-1;fila++)
for (col = 1; col < MAX_COOR-1; col++)
original[fila][col] = temporal[fila][col];
}

/* Gestió d'habitants del terreny */
void resoldre_terreny(int generacions, Tterreny &original, Tterreny &temporal) {
int g, fila, col;
int contador;
for(g=0;g printf("GENERACION %i\n",g+1);
for (fila=1;fila for (col=1;col contador = 0;
contador = original[fila-1][col-1]+original[fila-1][col]+original[fila-1][col+1];
contador = contador+original[fila][col-1]+original[fila][col+1];
contador = contador+original[fila+1][col-1]+original[fila+1][col]+original[fila+1][col+1];

/* Decidim si creem o eliminem un habitant */

if (original[fila][col] == 1) {
if (contador == 2 || contador == 2 ) {
temporal[fila][col] = 1;
}
else {
temporal[fila][col] = 0;
}
}
else {
if (contador == 3) temporal[fila][col] = 1;
else temporal[fila][col] = 0;
}
printf("%i",temporal[fila][col]);
}
printf("\n");
}
copiar_terreny(original,temporal);
}
}

/* Preparació del terreny */
void preparar_terreny(Tterreny &original, Tterreny &temporal) {
int fila, col;
for (fila=0;fila for (col=0;col original[fila][col] = 0;
temporal[fila][col] = 0;
}
}
/* Sistema d'insersió d'habitants */
void inserir_habitants(Tterreny &original) {
int fila, col;
do {
scanf("%i",&fila);
scanf("%i",&col);

if (fila > 0 && fila < MAX_COOR-1 && col > 0 && col < MAX_COOR-1)
if (original[fila][col] == 1)
printf("Ya tienes un habitante en la casilla %i:%i\n",fila,col);
else
original[fila][col] = 1;
else
if (fila != 0 || col != 0) printf("El terreno es de 1x5 x 1x5\n");
}while(fila != 0 || col != 0);
}

/* Obtenim el nombre de generacions */
int obtenir_generacions(void) {

int generacions;
printf("Dime el numero de generacions que quieres que haga (valor positivo)\n");

do {
scanf("%i",&generacions);
printf("\n");
}while(generacions < 1);
return generacions;
}

/* Mostrem el terreny amb els habitants */
void mostrar_terreny(Tterreny &original) {

int fila, col;

for (fila=1;fila for (col=1;col printf("%i",original[fila][col]);
printf("\n");
}
}

En teoria si tienes las librerias de ANSI C instaladas y un compilador de C (como gcc en *NUX y Visual C++ en Windows) debería funcionar perfectamente.

Un saludo y espero que os haya gustado!!

Comments (5)

8 megas de telefónica por menos de 10 €, en el reino unido, of course

Leo en level007 que telefónica ofrecerá 10 megas por menos de 10 € al mes. Antes de nada me gustaría felicitar a los británicos por este puntazo, ojalá estuviera aquí en España (yo estoy con telefónica por 3 megas y paso de pagar ya más). Como dice en artículo, lástima que aquí haya habido tanto monopolio por parte de telefónica, eso nos hizo tirar muy atrás…
De todas formas, siendo un poco optimista, yo pienso que la tendencia empezará a ir cambiando poco a poco (requiere tiempo y dinero, como todos los proyectos de gran tamaño).

Espero algún día poder poner esta noticia pero aquí, para nosotros y no para los británicos.

Comments

Firefox usará el asignador de memoria de FreeBSD

Leo en programming.reddit que Firefox 3 beta utiliza el asignador de memoria dinámica de FreeBSD (jemalloc) en lugar del asignador de la plataforma de ejecución.

Al parecer ha dado buenos resultados en cuanto velocidad y reducción de la fragmentación en los test de rendimiento para las tres plataformas mayoritarias (Windows, Mac OS X y Linux).

Para el que esté interesado en estos temas hay disponible un artículo muy interesante sobre jemalloc: A Scalable Concurrent malloc(3) Implementation for FreeBSD (pdf) en el que se explica su implementación, que coge ideas entre otros de hoard, y ciertamente tiene muy buena pinta. Hablé de hoard hace poco en Problemas de memoria (y algunas soluciones).

Comments

¿Fusión nuclear en cinco años?

Así podemos leerlo en el blog de energias renovables enerenovable. Sin duda es un gran avance ya que permitiría producir electricidad a un bajo coste y sin dependencia del clima (principal inconveniente de las actuales energias renovables).

Ya veremos si esto es real o una simple noticia especulativa por parte de General Fusion

Un saludo

Comments

La policía francesa migrará a Ubuntu

Según leo en este blog de Sun sobre OpenOffice la policía francesa va a migrar sus puestos de Windows XP a Ubuntu en lo que parece una transición lógica, ya que antes migraron otras aplicaciones de privativas a libres (en el año 2005, OpenOffice y en el 2006, Firefox y Thunderbird).

Las razones que dan para el cambio son tres: no depender de una sola compañía, controlar el sistema operativo y, por último, el coste.

Comments

Internet Protocol Subscriber Line exprime el par de cobre

IPSL son las siglas que quieren hacerse un hueco dentro del mundo de las tecnologías de acceso a internet mediante banda ancha.

IPSL exprime al máximo las posibilidades del par de cobre telefónico de toda la vida. Las pruebas efectuadas en redes telefónicas reales fuera del laboratorio muestran unos resultados esperanzadores. 40 Mbps efectivos a 1,7 Km de la central. Para hacernos una idea, el VDSL2 solo es capaz de ofrecer 15 Mbps a esa distancia, lo que ha decepcionado a más de una operadora. Aunque inicialmente el VDSL2 prometía 50 Mbps, la realidad muestra que esto solo es posible en los primeros 100 metros desde la central.


ipsl vs vdsl

Por otra parte, equipar un par de cobre con IPSL cuesta la mitad (PDF) que equiparlo con VDSL.

Esta tecnología ha sido desarrollada por Rim Semiconductor, quien acaba de publicar la versión 1.0 de la especificación IPSL, a la vez que han lanzado el primer procesador, llamado Cupria, capaz de integrarse en módems y routers fabricados por terceras marcas con el fin de que soporten las líneas IPSL.

Según la compañía, las redes IPSL son especialmente adecuadas para que las operadoras puedan ofrecer servicios de IPTV, ya que 40 Mbps dan para ofrecer varios canales en HD además del acceso a internet.

Vía | IPSL

Comments

« Previous entries