Junio 21, 2018, 02:48:35 am

Autor Tema: Librerias utiles para C  (Leído 16565 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Librerias utiles para C
« en: Octubre 13, 2009, 04:15:56 pm »
Bueno este es un pequeño resumen de algunas librerias que podrian ser utiles, y principalmente multiplataforma para no discriminar a nadie  :P


PROGRAMACION DE JUEGOS Y ANIMACIONES

SDL
You are not allowed to view links. Register or Login
ya se hablo bastante de esta libreria, en resumen es una libreria para crear juegos
Algunas caracteristicas:
  • es multiplataforma
  • tiene implementado un control de la pantalla bastante interesante, ya que te habilita un lienzo donde es posible dibujar practicamente cualquier cosa
  • se puede integrar con OpenGL
  • tambien implementa hilos o threats, muy utiles para los juegos
  • manejo de sonido
  • manejo de teclado y joystick
Creo que esta libreria la mayoria conoce ya que hay varios ejemplos en el foro, tambien hay muchos tutoriales en su pagina, inclusive en castellano!


allegro You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • multiplataforma
  • funciones para graficos
  • funciones para sonido
  • manejo de entrada (teclado, mouse y joystick)
  • funciones 3d
  • funciones para manejo de archivos


cairo You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • multiplataforma
  • funciones para graficos en 2d
  • manejo de varios objetivos de salida (X Window System, Quartz, Win32, image buffers, PostScript, PDF, y SVG file)


OpenGL You are not allowed to view links. Register or Login
OpenGL es muy famosa y no es para menos, es una libreria para hacer graficos en 3D (claro que tambien se puede usar para 2D)
Algunas caracteristicas:
  • es multiplataforma
  • solo implementa algunas pocas primitivas (facil de aprender)
  • existen algunas librerias mas faciles de usar (ej. ogre3D), pero para lograr una gran velocidad lo mejor es openGL
  • no es tan dificil como aparenta, recomiendo el "Libro Rojo" para aprender You are not allowed to view links. Register or Login
  • si alguna vez pensaste en sacarle provecho a tu placa de video en tus programas esta es la forma
junto con SDL son todo lo necesario para programar exelentes juegos


ogre3D You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • para C++
  • Las cosas que con openGL se puede hacer en algunos años, con ogre lleva unos dias
  • tiene implementadas muchas funciones: luces, coliciones, creacion de terrenos, sprites3D, etc
  • para usar no hace tener tanto conocimiento en 3d
  • su punto en contra podria ser que es algo lento (en comparacion con openGL)
  • tiene una muy buena documentacion, en su pagina


INTERFAZ DE USUARIOS
GTK You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • Es multiplataforma
  • muy facil de aprender y usar
  • Hace aplicaciones muy livianas
  • muy buena documentacion
  • muchos ejemplos y aplicaciones opensource disponibles
  • hay un diseñador de interfaz para esta libreria You are not allowed to view links. Register or Login


QT You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • Es multiplataforma
  • para C++
  • muy flexible
  • buena documentacion
  • muchos ejemplos y aplicaciones opensource disponibles
  • hay un diseñador de interfaz para esta libreria You are not allowed to view links. Register or Login


WXwidget You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • Es multiplataforma
  • para C++
  • buena documentacion
  • muchos ejemplos y aplicaciones opensource disponibles
  • hay un diseñador de interfaz para esta libreria You are not allowed to view links. Register or Login


FUNCIONES DE RED
SDL_net You are not allowed to view links. Register or Login
Algunas caracteristicas:
  • multiplataforma
  • simplifica la programación de conecciones de red y transferencia de datos
  • no encontre mucha información de la libreria, pero si unos ejemplos muy didacticos



iremos agregando otras por el camino ...
« Última modificación: Octubre 14, 2009, 10:03:58 am por jep »

Desconectado ralymontes

  • Yo vivo en CPH
  • ***
  • Mensajes: 487
  • Sexo: Masculino
  • Dime "Raly" ... ;-)
    • Ver Perfil
Re: Librerias utiles para C
« Respuesta #1 en: Octubre 20, 2009, 09:30:43 pm »
muy buen aporte, ahora sólo falta aprender  a usar esas librerias y aprovecharlas.

Saludos.
NI UNA INTELIGENCIA SUBLIME, NI UNA GRAN IMAGINACION, NI LAS DOS COSAS JUNTAS FORMAN EL GENIO; ES AMOR, ESO ES EL ALMA DEL GENIO

Desconectado Avoidance25

  • Moderador
  • *****
  • Mensajes: 1248
  • Sexo: Masculino
  • Da gehört eiskrem aber nicht hin xD
    • Ver Perfil
    • sytes
Re: Librerias utiles para C
« Respuesta #2 en: Octubre 25, 2009, 05:56:50 pm »
Muy buen post, tengo una pregunta: ¿Hace falta tener instalado algun programa o incluir una dll para que funcionen las WX en una pc diferente a la donde se compilo el programa que las usa?


Y, estube viendo la pag de OpenGL, pero no encontre el link para descargarlo, ¿de donde me lo puedo bajar?


grax
You are not allowed to view links. Register or Login
por ejemplo, se habla de emprender la You are not allowed to view links. Register or Login con el "fusil de carne" y se insta a una mujer a introducir You are not allowed to view links. Register or Login en su You are not allowed to view links. Register or Login

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Librerias utiles para C
« Respuesta #3 en: Octubre 26, 2009, 05:38:48 am »
creo que no, yo probé en otras maquinas y anda bien.

si usas el dev-c++ está dentro de su lista de paquetes, el visual-c++ se supone que va viene con la libreria istalada (asi me dijeron yo nunca use ese compilador)
de igual forma creo que si tiene que estar en la pag de opengl, lastimosamente ahora mismo, parece que cayó su servidor y no puedo revisar

Para linux, en todas las distros que probe siempre está entre los repositorios, se usa una implementación libre de opengl You are not allowed to view links. Register or Login

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 7316
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Librerias utiles para C
« Respuesta #4 en: Octubre 26, 2009, 01:56:29 pm »

Si los programas se realizan con el wxDev C++ no hay problema. El template y las librerías están preparadas para una compilación estática.

Si te bajas los fuentes y quieres compilar las librerías, verás que puedes conseguir diferentes variaciones de las librerías, combinando lo siguiente: Estaticas/Dinámicas, Debug/Release y ANSI/Unicode

Una buena fuente de información en You are not allowed to view links. Register or Login

En windows aún no es muy común su utilización, aunque creo que uno de los motivos es la falta de linkados dinámicos a archivos, las librerías .dll suelen salir con su número de versión y revisión, cosa que no es muy común en las librerías dinámicas de windows, en otros sistemas se consigue el nombre generico de un enlaces dinámico al archivo de librería dónde el nombré también está formado con el número de versión y la revisión.

Quiero decir que para el linkado dinámico, sería interesante que vieran la forma de conseguir: wxmsw.dll -> wxmsw28.dll para las futuras versiones, o compilar la libería de modo que el resultado sea genérico respecto a su versión.

Hay aplicaciones que linkan con estas librerías en diámico y lo que suelen hacer es acompañar las librerías dinámicas al ejecutable en el mismo directorio. ... seguro que las veremos pronto en su lugar en el sistema como una generalidad :))

SaludOS



Is the truth out there?

Desconectado Avoidance25

  • Moderador
  • *****
  • Mensajes: 1248
  • Sexo: Masculino
  • Da gehört eiskrem aber nicht hin xD
    • Ver Perfil
    • sytes
Re: Librerias utiles para C
« Respuesta #5 en: Octubre 26, 2009, 03:54:34 pm »
Muchas gracias, buena info. De hecho estoy teniendo problemas al compilar (falta un "setup.h", pero creo que lo encontre), asi que no me vendria mal informarme bien en la wiki.


En cuanto a OpenGL, yo uso Code::Blocks, y la manera de instalar las librerias es bajarlas e ir mostrando al programa donde estan los include, las librerias (.a, .lib y creo q .def), los objetos, etc.

 :cura:

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 7316
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Librerias utiles para C
« Respuesta #6 en: Octubre 26, 2009, 04:44:19 pm »

:)) yo tero saber hacer eso :)) lo intenté y ¿no se te hizo complicado?

Saludos

Desconectado Avoidance25

  • Moderador
  • *****
  • Mensajes: 1248
  • Sexo: Masculino
  • Da gehört eiskrem aber nicht hin xD
    • Ver Perfil
    • sytes
Re: Librerias utiles para C
« Respuesta #7 en: Octubre 26, 2009, 04:52:17 pm »
Si, con todas las librerias me tira al menos un error antes de funcionar bien, ya sea porque el programa no encuentra alguna carpeta o porque me falto algun argumento para el linker.

Para SDL por ejemplo tuve que copiar el sdl.dll a la carpeta bin del compilador (codeblocks\minGW\bin\, creo). Ademas es importante no tocar las carpetas de la libreria, en la carpeta SDL necesariamente debe estar la carpeta "include" y la carpeta "lib".

Con la libreria GTK cometi el error de borrar los numeritos de la version, que estaban en los nombres de las carpetas :( .

 :cura:

Desconectado Avoidance25

  • Moderador
  • *****
  • Mensajes: 1248
  • Sexo: Masculino
  • Da gehört eiskrem aber nicht hin xD
    • Ver Perfil
    • sytes
Re: Librerias utiles para C
« Respuesta #8 en: Octubre 28, 2009, 12:53:42 pm »
Busque muchisimo y no encuentro ningun lugar del cual bajar OpenGL, ¿me echan una mano?

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Librerias utiles para C
« Respuesta #9 en: Octubre 28, 2009, 01:09:40 pm »
tambien yo estuve buscando, todavia no encuentro, en algunos tuturiales enlazan a una pagina de opengl parece que no existe mas.
pero de que tiene que haber es seguro, en el peor de los casos vemos como instalar las librerias de dev-c++ en el code::block

EDITADO:
me estuve fijando en los encabezados que usa el dev-c++ y encontré que tambien son una implementación de mesa3d!! oh pensaba que ellos solo daban soporte para los *nix

en su pagina estan disponibles las librerias en codigo fuente,
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
ahora el unico problema va a ser compilar la libreria, eso está explicado aqui: You are not allowed to view links. Register or Login
« Última modificación: Octubre 29, 2009, 02:15:37 pm por jep »

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 7316
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
[DB] Sqlite3 by zrrs
« Respuesta #10 en: Junio 17, 2011, 06:51:23 am »
Hola,

quería preparar un doc sobre cómo utilizar esta librería. Pero me topé con You are not allowed to view links. Register or Login por iNet. Es un trabajo de zrrs, que en un momento nos hace unos gurus en el tema.

No me puedo resistir a publicar aca lo que parece un estupendo trabajo. Felicidades a zrrs su autor.

Utilizando sqlite3.

Ahora pongo unos ejemplos de como realizar las operaciones básicas de las bases de datos mediante instrucciones de sqlite3:

Crear/Conectar una base de datos.

La función You are not allowed to view links. Register or Login (en la versión que vamos a utilizar) recibe dos parámetros: el nombre de la base de datos a abrir y un objeto tipo You are not allowed to view links. Register or Login. En el caso de que la base de datos no exista la función open la creará y establecerá la conexión.

Para la detección de errores utilizaremos You are not allowed to view links. Register or Login que se encarga de recuperar el ultimo error producido en la base de datos, si el número devuelto no es 0 entonces ha habido un error, y para enviar un mensaje con el error producido usaremos You are not allowed to view links. Register or Login que extrae el mensaje de error producido por la ultima operación realizada sobre la base de datos. Estas dos funciones reciben como parámetro el objeto sqlite3*.

Cuando se termine de usar la base de datos usaremos You are not allowed to view links. Register or Login que recibe la variable de tipo sqlite3* en la que se creó la conexión.

Código: (c) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char* argv[]) {
    /* Creamos una variable */
    sqlite3* db;
    /* Establecemos la conexión */
    sqlite3_open ( "basepruebas.db", &db );
    /* Comprobamos errores */
    if ( sqlite3_errcode ( db ) != 0 )
    {
        printf ( "%s\n", sqlite3_errmsg ( db ) );
    }
    /* Cerramos la conexión */
    sqlite3_close ( db );
    return 0;
};

Crear una tabla.

Recordad que siempre que se vaya a usar una la base de datos se tendrá que establecer la conexión con ella y cuando se termine cerrarla como se ha explicado antes.

Para ejecutar cualquier sentencia sql se usará You are not allowed to view links. Register or Login que recibe 5 parámetros:

  • 1. Conexión con la base de datos(variable sqlite*).

  • 2. Sentencia o sentencias sql que queremos ejecutar. Yo recomiendo usa solo una sentencia en cada llamada ya que eso facilitara la lectura del código y nos resultará mas fácil.

  • 3. Función que se encargará de tratar los resultados de la sentencia sql del argumento 2. Esta función la definiremos nosotros y debe recibir:
      
    • 1. Puntero void*
    • 2. Entero que indica el numero de columnas en el resultado.
    • 3. Array de strings (en el ejemplo char**) que contiene los valores de cada columna.
    • 4. Array de strings que contiene los nombres de la columnas.

    Además esta función deber devolver 0 si no ha habido errores.

  • 4. Puntero que se le pasa a la función del argumento 2 como primer parámetro.

  • 5. Array de strings que guardara el error producido en caso de que se produzca. Nosotros , por ahora pondremos esto a NULL ya que la detección de errores la haremos como se ha explicado antes.


Código: (c) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char* argv[]) {
    /* creamos una variable del tipo de bases de datos. */
    sqlite3* db;
    /* establecemos conexión */
    sqlite3_open ( "basepruebas.db", &db );
    /* comprobamos errores */
    if ( sqlite3_errcode ( db ) != 0 )
        printf ( "%s\n", sqlite3_errmsg ( db ) );
    else {
        sqlite3_exec ( db, "create table hdlorean(dni integer not null,"
        "nombre varchar ( 30 ) default ' ' not null,equipo varchar ( 30 ) default ' ' not null,"
        /* como esta sentencia no generara resultados el tercer argumento lo ponemos a null. */
        "primary key ( dni ) );", NULL, NULL, NULL );
        /* comprobamos errores. */
        if (sqlite3_errcode(db)!=0)
            printf ( "%s\n", sqlite3_errmsg ( db ) );
    }
    /* cerramos conexión */
    sqlite3_close ( db );
    return 0;
};

Insertar datos

Como en el caso anterior, la sentencia sql no devuelve un resultado por lo que el tercer parámetro de sqlite3_exec sigue siendo NULL.

Código: (c) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <sqlite3.h>

int main ( int argc, char * argv[] )
{
    /* creamos una variable del tipo de bases de datos. */
    sqlite3* db;
    /* establecemos conexión */
    sqlite3_open("basepruebas.db",&db);
    /* comprobamos errores */
    if ( sqlite3_errcode ( db ) != 0 )
        printf ( "%s\n", sqlite3_errmsg ( db ) );
    else
    {
        sqlite3_exec ( db, "insert into hdlorean values ( 1, 'XX', 'db' );", NULL, NULL, NULL );
        /* comprobamos errores. */
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        else
        {
            sqlite3_exec ( db, "insert into hdlorean values ( 2, XX', 'db );", NULL, NULL, NULL);
            /* comprobamos errores. */
            if ( sqlite3_errcode ( db ) != 0 )
                /* falta una ' en la sentencia sql! */
                printf ( "%s\n", sqlite3_errmsg ( db ) );
        }
    }
    /* cerramos conexión */
    sqlite3_close ( db );
    return 0;
};

Actualizar/Eliminar datos.

Exactamente igual para actualizar datos.

Código: (c) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <sqlite3.h>


int main ( int argc, char * argv [] )
{
    /* creamos una variable del tipo de bases de datos. */
    sqlite3 * db;    
    /* establecemos conexión */
    sqlite3_open ( "basepruebas.db", &db );
    /* comprobamos errores */
    if ( sqlite3_errcode ( db ) != 0 )
        printf("%s\n",sqlite3_errmsg ( db ) );
    else
    {
        sqlite3_exec ( db, "update hdlorean set nombre='Josue' where dni=1;", NULL, NULL, NULL );
        /* comprobamos errores. */
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        else
        {
            sqlite3_exec ( db, "delete from hdlorean where nombre='Josue';", NULL, NULL, NULL );
            if ( sqlite3_errcode ( db ) != 0 )
                printf ( "%s\n", sqlite3_errmsg ( db ) );
        }
    }
    /* cerramos conexión */
    sqlite3_close ( db );
    return 0;
};

Ejecutar una select.

Como tras ejecutar estos ejemplos la base de datos se no has quedado vacía vamos a insertar varias filas para realizar varias selects y ver como funciona sqlite3_exec.

Código: (c) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <sqlite3.h>


int imprime_resultado ( void* paque, int n, char ** re, char ** nomcol )
{
    /* El primer argumento de esta funcion es el 4 de la exec
     * n es el numero de filas devueltas por la query
     * re el contenido de la fila
     * nomcol el nombre de la columna
     */
    printf ( "El %s del componente es: %s\n", nomcol[0], re[0] );
    return 0;
}

int imprime_resultado2 ( void * paque, int n, char ** re, char ** nomcol )
{
    printf ( "El DNI y el nombre del componente: %s, %s\n", re[0], re[1] );
    return 0;
}

int main ( int argc, char * argv[] )
{
    /* creamos una variable del tipo de bases de datos. */
    sqlite3 * db;
    /* establecemos conexión */
    sqlite3_open("basepruebas.db",&db );
    /* comprobamos errores */
    if ( sqlite3_errcode ( db ) != 0 )
        printf ( "%s\n", sqlite3_errmsg ( db ) );
    else{
        /* introducimos varias filas */
        sqlite3_exec ( db, "insert into hdlorean values (1,'XX','db');", NULL, NULL, NULL );
        /* comprobamos errores. */
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        sqlite3_exec ( db, "insert into hdlorean values (2,'ZZ','db');", NULL, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        sqlite3_exec ( db, "insert into hdlorean values (3,'YY','core');", NULL, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        sqlite3_exec ( db, "insert into hdlorean values (4,'WW','core');", NULL, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        /* realizamos una select que solo devolvera un resultado. */
        sqlite3_exec ( db, "select nombre from hdlorean where dni=1;", imprime_resultado, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        /* realizamos una select que devolvera varios resultados. */
        sqlite3_exec ( db, "select nombre from hdlorean where equipo='core';", imprime_resultado, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
        /* realizamos una select que devuelve varias columnas y varios resultados */
        sqlite3_exec ( db, "select dni,nombre from hdlorean where equipo='db';", imprime_resultado2, NULL, NULL );
        if ( sqlite3_errcode ( db ) != 0 )
            printf ( "%s\n", sqlite3_errmsg ( db ) );
    }
    /* cerramos conexión */
    sqlite3_close ( db );
    return 0;
};

Como podéis ver la función del tercer argumento de sqlite3_exec (cuanado la sentencia sql es una select) se repite una vez por cada fila devuelta por la sentecia.

zrrs

SaludOS

Desconectado jucerator

  • Me das tu IP?
  • *
  • Mensajes: 2
  • Sexo: Masculino
  • Hey, no soy un friky
    • Ver Perfil
    • Un sitio donde iniciarse con la librería JUCE
Re:Librerias utiles para C
« Respuesta #11 en: Noviembre 14, 2011, 02:36:27 pm »
Aunque no es muy conocida, JUCE es una de las grandes librerias para trabajar con C++.
Abarca 3D con OpenGL, gráficos 2D, audio, XML, GUI, etc... además es multiplataforma.
Bajo mi punto de vista es bastante superior a las QT/GTK/wxWidgets.
Su web es rawmaterialsoftware.com

En castellano, edito una web en la que tengo tutoriales de cómo utilizarla:
jucerator.eshost.es

Echadle un ojo a ver que os parece :)
Saludos


xx
comandos utiles para linux

Iniciado por crakielos

0 Respuestas
977 Vistas
Último mensaje Junio 29, 2012, 09:11:06 am
por crakielos
thumbup
Comandos Nircmd [Utiles para Batch]

Iniciado por RockoX

5 Respuestas
7411 Vistas
Último mensaje ſeptiembre 08, 2008, 11:58:50 pm
por cypresss
xx
Recopilación de programas útiles para crear web

Iniciado por seth

0 Respuestas
2502 Vistas
Último mensaje Diciembre 27, 2007, 05:22:29 am
por seth
exclamation
Otros comandos útiles para la terminal

Iniciado por Bl@ster25

0 Respuestas
946 Vistas
Último mensaje Febrero 19, 2010, 03:46:28 pm
por Bl@ster25
thumbup
Comandos Utiles para Newbies De Gnu/Linux

Iniciado por Bl@ster25

12 Respuestas
2744 Vistas
Último mensaje Agosto 17, 2008, 11:16:14 pm
por kakshi_sharingan
xx
Descargas utiles para modificaciones en celulares

Iniciado por ..::Lëssiëm Táralóm::..

0 Respuestas
1902 Vistas
Último mensaje Junio 17, 2007, 09:48:50 pm
por ..::Lëssiëm Táralóm::..
xx
algunos truquitos útiles para windows

Iniciado por (B.O.A.O)

0 Respuestas
1241 Vistas
Último mensaje ſeptiembre 30, 2007, 04:21:07 pm
por (B.O.A.O)
question
¿Para que son las librerias? [VB.NET]

Iniciado por Script_B

2 Respuestas
2337 Vistas
Último mensaje Diciembre 05, 2011, 02:31:21 pm
por .:.IlcOn14.:.
xx
Librerias Dinamicas para C/C++

Iniciado por iscdranzer

1 Respuestas
3044 Vistas
Último mensaje ſeptiembre 13, 2007, 04:12:37 pm
por ÄìmBòt
xx
Librerias PERL para PHP

Iniciado por noyco

0 Respuestas
912 Vistas
Último mensaje Julio 21, 2011, 02:40:33 pm
por noyco