sábado, 27 de marzo de 2010

Google File System (GFS)

Google quién no lo usa y se da cuenta que es muy rápido, es que google como una verdadera empresa de Ciencia de la Computación en realidad sabe innovar como es en cada aplicación que desarrollada , es verdaderamente fascinante lo que gracias a google avanzo la computación que hoy en dia es el gran competidor de Microsoft =).

Bueno la historia anterior casi la mayoria lo sabe. Lo que les comentaré es sobre el Google File System ; es tanto lo que avanzo Google que puede manejar petabytes de almacenamiento algo increible en verdad q hace unos 6 a 8 años atras ni pensabamos que llegariamos a esa cantidad de datos.

Su modelo el GFS es tan interesante que practicamente tiro al tacho todas las teorias de SFD(System File Distributed) pues no tiene comparación ni con NFS ("Networking File System") ni con AFS ("Andres File System") .

En la última revista de ACM , tiene un articulo interesante que nos comenta sobre como evoluciono su sistema de archivos en si es una conversación en la que los dos autores empiezan a narrar, lo anecdótico es que iban prácticamente chancando cada vez que agregaban un nuevo app de google.

En este link se encuentra la entrevista y en este otro en version pdf.

Nos vemos :D

sábado, 20 de marzo de 2010

Configurar OpenMesh en Linux / Configure Open Mesh in Linux



Este semestre que llevo computación gráfica 2, la verdad deja mucho que desear, mis ideas pa este ciclo era hacer mallas, tanto fue mi obsesion que lei CGAL un monton y nada no me salio :S.
Asi que ya de tanto buscar encontre OpenMesh =), una libreria para manipulación de mallas y polygonos.

Ahora describere como lo instale en mi computador :
  • Descargas la librería desde aquí .
  • Descomprimelo con el gestor de archivadores en el lugar que desees.
  • Ahora ejecuta cmake-gui como superusuario. Y rutea desde donde descomprimistes y a donde se compilara. Presiona configure y esperas q termine con exito y cierras.


  • En la carpeta donde se compilo. Ingresa en la carpeta buil. Entonces abre un terminal como superusuario y ponerle "cmake .."


  • Ahora regresa a su raiz y compila com el comando make.


  • Esperamos un momento que termine.


  • Terminado nos dirigimos a la carpeta /bin donde se compilo y ejecutamos QtViewer , para probarlo descargamos el dragon de standford de este link . Abirmos el archivo y esperamos que carge esto demorara un poco :D.



  • Espero seguir con esto de computación gráfica aunque tenga un pesimo profesor. Hasta otro post

    viernes, 12 de marzo de 2010

    Code jam Minimum Scalar Product/Menor producto escalar



    //Problema: Menor producto escalar
    //Desarrollado por: Marks Calderon Niquin

    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>


    using namespace std;



    int main()

    {
    ifstream in;
    ofstream out;
    in.open("A-large-practice.in",ifstream::in);
    out.open("salida.out");
    int n,n1;
    vector<long long> p,q;
    long long temp;
    in>>n;
    for(int i=0;i<n;i++)
    {
    in>>n1;

    for(int k=0;k<n1;k++)
    {
    in>>temp;
    p.push_back(temp);
    }
    for(int k=0;k<n1;k++)
    {
    in>>temp;
    q.push_back(temp);
    }
    sort(p.begin(),p.end()); //sort in two vectors
    sort(q.begin(),q.end());
    temp=0;
    for(int l=0;l<n1;l++) //multiplicate
    temp+=(p[l]*q[q.size()-1-l]);
    out<<"Case #"<<(i+1)<<": "<<temp<<endl;
    p.clear();
    q.clear();
    }
    in.close();
    out.close();


    return 0;

    }

    100-3n+1

    The famous problem 3n+1 is a problem NP. Try to improve my time


    /*

    Judge : Uva
    Number: 100
    Name : 3n+1
    Time: 0.028
    */

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 1000001
    #define SWAP(a, b) { a ^= b;b ^= a;a ^= b;} /*swapping*/

    unsigned long conta[MAX];

    unsigned long tres(unsigned long n)
    {
    if(n<MAX)
    {
    if(conta[n]==0) conta[n]=(n&1)?1+tres(3*n+1):1+tres(n>>1);
    return conta[n];
    }
    else
    {
    if(n%2) return 2+ tres((3*n+1)>>1); /*how n is > MAX */
    else return 1+ tres(n>>1);
    }

    }
    int main()
    {

    unsigned long a,b,c,d,maximo,i,temp;
    for(i=0;i<=MAX;i++) //init table
    conta[i]=0;
    conta[1]=1;
    while(scanf("%lu%lu",&a,&b)==2)
    {
    c=a;
    d=b;
    if(a>b) SWAP(a,b);
    maximo=0;
    for(i=a;i<=b;i++)
    {
    if(conta[i]==0)
    conta[i]=tres(i);
    if(maximo<conta[i])
    maximo=conta[i];
    }
    printf("%lu %lu %lu\n",c,d,maximo);
    }
    return 0;
    }

    lunes, 8 de marzo de 2010

    488-Wave Triangle /Onda de Triangulos



    /*
    488-Triangle Wave
    Judge: UVA
    time: 0.332
    */
    #include <cstdio>

    #include <iostream>
    using namespace std;



    int main()

    {


    int a,f,i,j,l,n,k;
    scanf("%d",&n);
    for(k=1;k<=n;k++)
    {
    scanf("%d%d",&a,&f);
    for(i=0;i<f;i++) //frecuencia
    {

    for(j=1;j<=a;j++) //amplitud
    {
    for(l=0;l<j;l++)
    {
    printf("%d",j);
    }
    printf("\n");
    }

    for(j=a-1;j>0;j--)
    {
    for(l=1;l<=j;l++)
    {
    printf("%d",j);
    }
    cout<<endl;
    }
    if(k<n||i<f-1)
    printf("\n");
    }
    }

    return 0;

    }


    10189 - Minesweeper / Buscamina


    /*

    10189 - Minesweeper
    Judge : UVA
    time:0.004
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    char entrada[MAX+1][MAX+1];
    int salida[MAX+2][MAX+2];

    int main(int argc,char **argv)
    {
    int m,n,i,j;
    int cont=0;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
    if(m==0||n==0)
    break;
    if(cont>0)
    printf("\n");
    cont++;
    for( i=0;i<m;i++)
    {

    scanf("%s",entrada[i]);


    }
    for(i=0;i<=m+1;i++)
    for(j=0;j<=n+1;j++)
    salida[i][j]=0;

    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    {
    if(entrada[i-1][j-1]=='*')
    {
    salida[i-1][j-1]++;
    salida[i-1][j]++;
    salida[i-1][j+1]++;
    salida[i][j-1]++;
    salida[i][j+1]++;
    salida[i+1][j-1]++;
    salida[i+1][j]++;
    salida[i+1][j+1]++;


    }
    }
    printf("Field #%d:\n",cont);
    for(i=0;i<m;i++)
    {

    for(j=0;j<n;j++)
    {
    if(entrada[i][j]!='*')
    printf("%d",salida[i+1][j+1]);
    else printf("*");

    }
    printf("\n");
    }

    }
    return 0;
    }

    domingo, 7 de marzo de 2010

    Comenzando a entrenar para ACM-ICPC

    Bueno este años si o si mi universidad tiene que ir al concurso de programación mas prestigioso del mundo el ACM-ICPC ("International Collegiate Programming Contest " de ACM). Mi universidad tiene alguna de las posibilidades de tener una subsede para este concurso el nivel regional-.

    Esta competencia es muy dura tiene problemas que hasta ahora no se han resuelto U_U, la idea mia y de unos amigos es participar, bueno como primer año que iremos no pensamos llegar a la final mundial. Pero si se daria el caso porque no hacerlo ;). En si queremos tener un buen desempeño en el concurso y ya con años posteriores esto se mejore y poruqe no algún día ver a mi universidad en la final mundial =).

    Lo más difícil de todo es siempre comenzar y creo q a mi grupo nos toco eso, por ahora no tenemos coach ni nada que se le paresca, pero nuestras ganas de ir al concurso pueden mas xD. Aunque me parece que esto cambiara muy pronto =). Sino seremos el tema 5ach xD jajaja!!!.

    Ahora con el casi tener sede en mi región tengo q entrenar casi a diario, lo cual no me molesta porque son interesantes los problemas.

    Asi que comenze como todos por el inicio en le juez virtual de la UVA , programe el primer problema para los que inician estas competencias en si el mas chicha para hacer un resta "10055 Hashmat the Brave Warrior".

    Aunque el tiempo que yo hize es 0.064 hay gente q logro hacer menos de una milésima de segundo wao en verdad me intriga que alguien pueda optimizar tanto el código para una simple resta xD. Así que sigamos con esto esperemos programar a diario y mejorar ;)

    El codigo de ese algoritmo fue el siguiente:

    Esta echo en C:


    #include <stdio.h>

    int main()
    {

    long long a, b;
    while(scanf("%ld%ld", &a, &b) == 2)
    {
    printf("%ld\n",(a>b)? (a-b):(b-a));

    }

    return 0;
    }

    nos vemos hasta otro post xD