Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - farresito

#1
Ultimamente, el uso de sistemas de control de versiones ha crecido muchisimo. Diria yo que servicios como Github han ayudado muchisimo. Y visto que en este foro hay muchos proyectos libres, podriamos fomentar la participacion con la formacion de un sitio para la creacion de repositorios aqui dentro de elHacker.

Es verdad que es un tema complicadito, basicamente porque elHacker es un foro y tal, pero sistemas como Git o Mercurial (SVN ya esta pasadito. Los repositorios ocupan demasiado en comparacion con Git o HG) ocupan poco, no se comen practicamente bando de ancha (no creo, vamos, por la naturaleza de ambos) y son distribuidos. Y esto lo digo porque hay proyectos en la Wiki que se han medio perdido por la falta de colaboracion y actualizacion.

Repito, no es facil, pero quizas con Git + CGit (visor de repositorios online) se puede llegar lejos. A parte que su aprendizaje es relativamente facil, desde mi punto de vista.

No se que pensais. Yo creo que es algo que con el tiempo, y de un modo bien administrado, puede llegar lejos.

Por cierto, es verdad que hay servicios online como Github, pero el problema que le veo yo es que no esta centralizado. Se podrian registrar todos los usuarios, pero faltaria ese toque de sal.

Es una simple propuesta. Si no gusta, pues ningun problema.
#2
Muy buenas a todos,

Pues nada, que despues de un buen tiempo programando en escritorio y teniendo olvidado el PHP se me ocurrio mirar el ruby on rails y aprenderlo. me gustaria escuchar vuestras opiniones. desde fuera la verdad es que aparentemente se ve fantastico. el tema de los gems (ruby) lo veo muy bueno y con el rails, por lo que he leido, puedes desarrollar aplicaciones completas en muy poco tiempo. a parte que el tema de la escalabilidad esta practicamente resuelto.

No se que tal se integra con otros lenguajes como C (aunque creo que es posible programar plugins en C).

Si pudierais contarme vuestras experiencias la verdad es que me vendria genial. Temas de escalabilidad y tiempo de desarrollo si es posible. Aprenderlo creo que va a ser facil, ya conozco otros lenguajes.

un abrazo!

PD: Y si es posible (y sin meternos en una guerra), que ventajas tiene respecto PHP (aunque rails es un framework y php un lenguaje) y que desventajas. Solo una orientacion.
#3
Este es el mejor libro que hay actualmente de Linux y os recomiendo que lo bajéis. Está en inglés. Muchos dicen que es la futura referencia de Linux, y no es para menos. Está supercompleto. Desde sockets a pipes, pasando por la creación de daemons... Y con poco texto pero entendible totalmente.

Basta ver en amazon las valoraciones para ver lo bueno que es. Lo he estado usando y para navidades me compro el que está en papel porque un libro como este se debe tener.



Uploaded with ImageShack.us


http://uploading.com/files/5bbd75c2/The%2BLinux%2BProgramming%2BInterface.pdf/

Disfrútenlo. Si le hacen un buen uso, no duden en comprarlo. Son muchas páginas y el autor debe ser remunerado ;)
#4
Holas a todos,

Llevo bastante tiempo con un error que me da y no lo logro resolver. NO ES DE COMPILAR, porque me compila sin errores, sino que cuando ejecuto el programa me marca 'error en BIND', que es el IF que tengo puesto, pero creo que todo está bien. El código no está terminado del todo, porque estaba haciendo pruebas en aplicar la estructura storage en vez de una _in normal, pero hasta bind no deberia haber problema

Les dejo el código a ver si pueden ver algun error.

Código (cpp) [Seleccionar]
#include <iostream>
#include <signal.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int main()
{
    int desc_serv, desc_cliente //Descriptores;
    int rv //Comprueba el estado de GETADDRINFO;
    struct addrinfo structserv //Estructura usada en GETADDRINFO;
    struct addrinfo *resultados //Estructura resultante de GETADDRINFO;
    struct addrinfo structcliente //Estructura del CLIENTE;

    memset(&structserv, 0, sizeof (structserv));


    structserv.ai_family = AF_UNSPEC;
    structserv.ai_socktype = SOCK_STREAM;
    structserv.ai_flags = AI_PASSIVE;

    //GetAddrInfo
    if ((rv = getaddrinfo(NULL, "16969", &structserv, &resultados)) != 0)
    {
        cout << "Error en GETADDRINFO" << endl;
        exit(1);
    }

    //Socket
    if ((desc_serv = socket(resultados->ai_family, resultados->ai_socktype, resultados->ai_protocol) == -1))
    {
        cout << "Error en SOCKET" << endl;
        exit(1);
    }

    //Bind
    if (bind(desc_serv, resultados->ai_addr, resultados->ai_addrlen) == -1)
    {
        cout << "Error en BIND" << endl;
        exit(1);
    }

    //Listen
    if ((listen(desc_serv, 10)) == -1)
    {
        cout << "Error en LISTEN" << endl;
        exit(1);
    }

    //Accept
    if ((desc_cliente = accept(desc_serv, structcliente.ai_addr, 0)) == -1)
    {
        cout << "Error en ACCEPT" << endl;
        exit(1);
    }
    else
    {
        cout << "¡Funciona!" << endl;
    }
}


Un abrazo!
#5
Acabo de empezar con Sockets y generalmente entiendo todo, pero no logro arreglar un error en accept(), aun habiendo leído otros ejemplos. Agradecería muchísimo a quien pudiese echarme una mano, pues llevo un tiempo y no se que pasa. El ejemplo está ordenadito, así que no debería ser un problema entenderlo.

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <stdio.h>


using namespace std;

int main()
{
    //Estructuras
    struct sockaddr_in servidor;
    struct sockaddr_in cliente;

    //Otras variables
    int desc_cliente, desc_servidor;
    int puerto = 3550, max_conex = 2, size;

    //Funcinn SOCKET
    if (desc_servidor = socket(AF_INET, SOCK_STREAM, 0) == -1)
    {
        printf("Hubo un error en SOCKET");
        exit (-1);
    }

    //Estructura SOCKADDR_IN
    servidor.sin_family = AF_INET;
    servidor.sin_port = htons(puerto);
    servidor.sin_addr.s_addr = INADDR_ANY;
    memset(servidor.sin_zero, 0, 8);

    //Funcion BIND
    if (bind(desc_servidor, (struct sockaddr*) &servidor, sizeof(struct sockaddr)) == -1)
    {
        printf("Error en BIND");
        exit(-1);
    }

    //Funcion listen
    if (listen(desc_servidor, max_conex) == -1)
    {
        printf("Error en LISTEN");
        exit(-1);
    }

    //Bucle + accept
    while (1)
    {
        size = sizeof(struct sockaddr_in);
        if (cliente = accept(desc_servidor, (struct sockaddr *) &cliente, &size))
        {
            printf("Error en ACCEPT");
            exit(-1);
        }

        printf("Tienes una conexión de %s \n", inet_ntoa(cliente.sin_addr));

        send(desc_cliente, "Bienvenido al servidor \n", 22, 0);
        close (desc_cliente);
    }

}


Los errores que me marca son los siguientes:
Código (txt) [Seleccionar]
/home/farresito/Documentos/project/main.cpp||In function 'int main()':|
/home/farresito/Documentos/project/main.cpp|25|warning: suggest parentheses around assignment used as truth value|
/home/farresito/Documentos/project/main.cpp|55|error: invalid conversion from 'int*' to 'socklen_t*'|
/home/farresito/Documentos/project/main.cpp|55|error:   initializing argument 3 of 'int accept(int, sockaddr*, socklen_t*)'|
/home/farresito/Documentos/project/main.cpp|55|error: no match for 'operator=' in 'cliente = accept(desc_servidor, ((sockaddr*)(& cliente)), ((socklen_t*)(& size)))'|
/usr/include/netinet/in.h|226|note: candidates are: sockaddr_in& sockaddr_in::operator=(const sockaddr_in&)|
||=== Build finished: 3 errors, 1 warnings ===|


Otra cosilla, porque se hace el bucle? Para que hasta que no haga un accept no termine? No acabo de entenderlo...

Un abrazo de antemano. Muchas gracias por el soporte que me habéis dado hasta ahora.

Saludos
#6
Veréis,

Como el Visual c++ 2010 me daba problemas y me sentía mejor con CodeBlocks, decidí esta mañana probar pero no soluciono nada. El código es simple:

Código (asm) [Seleccionar]

int numero = 0x12345;

    asm (".intel_syntax noprefix");
    /*Instrucciones*/
    asm ("mov eax, numero");
    asm ("mov ebx, [numero]");
    asm ("lea ecx, numero");
    asm ("lea edx, [numero]");
    /*Finalizacion instrucciones*/
    asm (".att_syntax noprefix");


El error que me da es el siguiente:
UNDEFINED REFERENCE TO 'NUMERO' (lines 12, 13, 14, 15)

Agredeceria un poco de ayuda por su parte. Se que estoy siendo algo pesado con algunas preguntitas pero es que no logro salir ¬¬

Un abrazo!

PD: Solo me da esos errores. Si pruebo en vez de numero un registro ningun problema :)
#7
Programación C/C++ / Listas en C++
9 Marzo 2011, 15:01 PM
Hola a todos,

Tengo una pequeña duda que no acabo de resolver; es muy simple, pero es por quitármela de encima. Tengo este código, que funciona perfectamente, pues lo he quitado del libro del que estoy estudiando, pero no logro entender una cosa concreta. El el código siguiente, cuando se declara la estructura STRUCT T_NODO *PRINCIPIO, si solo es un puntero que indica el inicio de toda la lista, no podria declarar una variable puntero normal que guardase la direccion de memoria del lugar donde se inicia la la lista?. Esto es lo que tengo

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;

struct t_nodo
{
    int numero; // Almacena los datos del nodo
    t_nodo *siguiente; // Variable puntero a otra estructura t_nodo
};

struct t_nodo *principio = NULL;


int main (void)
{
    //Declaro la funcion; lo podria haber puesto todo junto pero da igual
    void insertar_al_principio (struct t_nodo *&p);

}

void insertar_al_principio (struct t_nodo *&p)
{
    struct t_nodo *nuevo_nodo;

    // Creamos nuevo nodo

    nuevo_nodo = new struct t_nodo;

    // Rellenamos los campos de datos

    cout << "Escriba un numero: " << endl;
    cin >> nuevo_nodo->numero;

    /* Insertamos el nuevo nodo al principio de la lista */
    nuevo_nodo->siguiente = p;
    p = nuevo_nodo;
}


Gracias de antemano. Un abrazo!
#8
ASM / Gas Inline con Síntaxis Intel
7 Marzo 2011, 22:37 PM
Holas,

Estuve trasteando un poco con los ensambladores y la creación de OS y leyendo sobre el ensamblador GAS leí que si usas síntaxis intel en vez de AT&T los opcodes no estan tan optimizados en algunas ocasiones. Sabeis algo acerca de eso? La página a la que me refiero es la siguiente:

http://wiki.osdev.org/GAS

Un abrazo!
#9
Holas a todos,

Llevo unos días pensando en una cosilla que me tiene hasta ahí. La cosa es que por internet hay muchos VS entre tal ensamblador o tal otro. Si bien he leído mucho acerca de ello, mi pregunta es más concreta.

Cuando se ensambla con un ensamblador u otro ¿hay diferencia alguna entre el resultado de cada uno? Es decir, el resultado en binario será el mismo en todo los ensambladores o habrá alguno que difiera un poco.

¿Se puede 'optimizar' un ensamblador? Por ejemplo, supongamos que tenemos éste código, sacado de una web:
Game Port

;  GAMEPORT.ASM
;

        .MODEL TINY

        .DATA

        yes     DB      13,10,"Game port is installed.",13,10,"$"
        no      DB      13,10,"Game port is not installed.",13,10,"$"

        .CODE
        ORG 100h

start:  mov     al, 1           ;value to write to port
        mov     dx, 201h        ;port number
        out     dx, al          ;write to port
        mov     cx, 0F00h       ;# of loops

port_loop:
        in      al, dx          ;read from port
        and     al, 0Fh         ;if jstick present, then AL should be
        cmp     al, 0Fh         ; 0Fh after ANDing with 0Fh.
        je      jstick_exists
        loop    port_loop
        mov     dx, OFFSET no   ;gameport not installed
        jmp     SHORT done

jstick_exists:                 
        mov     dx, OFFSET yes  ;gameport installed

done:   mov     ah, 9h
        int     21h

        mov     ax, 4c00h
        int     21h

END     start


El resultado en binario será el mismo en cada ensamblador (usando, por supuesto, el mismo linker)?

Es este aspecto el que hace un ensamblador 'mejor' o 'peor' que otro o solo es los formatos que acepta, los macros... etc.

¡Un abrazo! Agradezco de antemano sus respuestas :)
#10
ASM / Punteros ensamblador 16 bits
27 Agosto 2010, 03:08 AM
Holas de nuevo,

Se ve que mi aprendizaje en ensamblador va muy justito, y vuelvo a tener problemas  :-\

Es muy sencilla mi pregunta, espero no molestaros:

En el libro comentan que el puntero, lógicamente está compuesto por la dirección y el desplazamiento, que ambos tienen un tamaño de 16 bits (sigo teniendo dudas sobre como usar el desplazamiento ). En este caso con solo usar el puntero normalmente ya vale pero en el caso de 16 bits, no se podria usar (mas bien dicho mover) directamente, pues solo transfeririamos una de las dos cosas, si no me equivoco. En el me proponen este ejemplo:

mov bx, pnum
mov ax, pnum+2
mov ds, ax


Que es lo mismo que la que lleva a cabo LDS, LFS... Pero quiero quitarme las dudas. Porque se efectua +2? Que le pasa a la memoria?

Gracias! Saludos!
#11
ASM / Direccionamiento indexado ASM
19 Agosto 2010, 17:28 PM
Veréis, me estoy iniciando en ensamblador, pues creo que es fundamental. Ya conozco otros lenguajes, asi que pensé que era hora de meterme en ello.

Compré el libre de Francisco Charte Ojeda, llamado Lenguaje Ensamblador (El Pequeño) y en general, todo bien, se va entendiendo, pero tengo un pequeño problema, no llego a entender un modo de direccionamiento (estuve buscando por google y todavía lo entiendo peor; será que soy tonto). Es el llamado "Indexado" (me pasa lo mismo con el escalado que es parecido). Ahi explica que se le puede sumar desplazamiento. A que se refiere esto? Un ejemplo del que me muestra es el siguiente:
MOV AL, [BX+SI+4]

Me podriais explicar que ocurre en este ejemplo? Que es exactamente lo que se transfiere al registro AL?

También os muestro el primer ejercicio práctico que me propone hacer(esto es el resultado, es decir, la solución), por si necesitais un poco más de contexto de código (no es necesario que me lo expliqueis, no os preocupeis):

#include <stdafx.h>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
struct Incidencia {
char carretera[8];
short kilometro;
char descripcion[128];
};
Incidencia hoy[] = {
{ "A44", 32, "Nieve"},
{ "A6", 173, "Accidente"},
{ "M30", 8, "Retenciones" }
};
char *via, *problema;
short altura;
__asm {
                     ;EBX apunta al inicio del vector
lea ebx, hoy
                       ; y esi tiene tamaño por elemento
mov esi, SIZE Incidencia

                     ; se recupera puntero a la cadena carretera
lea eax, [ebx+esi*2]
mov via, eax

                       ;se recupera dato 16 bits que indica kilometro
mov ax, [ebx+esi*2+8]
mov altura, ax
                      ; se recupera puntero cadena descripcion
lea eax, [ebx+esi*2+10]
mov problema, eax
}
cout << problema << " a la altura del KM " << altura << " en la " << via << endl;
return 0;
}


Saludos! Gracias de antemano. Se que os he metido un rollazo, pero es que no puedo avanzar y alli me quedaré si alguien no me lo soluciona...  :(
#12
ASM / Assembler PowerPC
3 Agosto 2010, 23:20 PM
Alguien conoce algun ensamblador para PowerPC? Y si no es mucho pedir, algun manual para este?

Gracias, les gradeceré! Quiero iniciarme en este aspecto, y si lo hago, mejor comenzando con PPC.

Saludos!
#13
ASM / Libreria en ensamblador (FASM)
2 Agosto 2010, 22:11 PM
Soy un poco novato en este aspecto, pero quizás a muchos les sea útil para adjuntar librerias a sus programas.

Yo, de hecho llevaba tiempo buscando como crear una DLL en FASM, y toqué con el código para hacerlo. Asi podrán usar FASM, que es un ensamblador inmejorable, sin escusas.

; DLL creation example

format PE GUI 4.0 DLL
entry DllEntryPoint

include 'win32a.inc'

section '.code' code readable executable

proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
ret
endp

; VOID ShowErrorMessage(HWND hWnd,DWORD dwError);

proc ShowErrorMessage hWnd,dwError
  local lpBuffer:DWORD
lea eax,[lpBuffer]
invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
invoke MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
invoke LocalFree,[lpBuffer]
ret
endp

; VOID ShowLastError(HWND hWnd);

proc ShowLastError hWnd
invoke GetLastError
stdcall ShowErrorMessage,[hWnd],eax
ret
endp

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
  user,'USER32.DLL'

  import kernel,\
GetLastError,'GetLastError',\
SetLastError,'SetLastError',\
FormatMessage,'FormatMessageA',\
LocalFree,'LocalFree'

  import user,\
MessageBox,'MessageBoxA'

section '.edata' export data readable

  export 'ERRORMSG.DLL',\
ShowErrorMessage,'ShowErrorMessage',\
ShowLastError,'ShowLastError'

section '.reloc' fixups data discardable


Espero que les sea útil. Este código se encuentra entre uno de los ejemplos de FASM. Las funciones exportadas, en este caso son ShowErrorMessage y ShowLastError.

Saludos!

PD: Si ya sabian hacer esto, porfavor, no critiquen. Comparto lo que puedo a la comunidad; a algunos les será util, a otros quizás no.
#14
Programación C/C++ / MinGW
2 Agosto 2010, 03:14 AM
Hola,
Perdonen mi ignorancia pero tengo una pequeña duda respecto a MinGW. Es MinGW un compilador distinto a GCC o es el mismo pero adaptado a windows?

Saludos! Gracias!
#15
Hardware / Disco Duro: Pérdida Datos
8 Julio 2010, 13:18 PM
Hola,

Lo que pregunto ahora es mera curiosidad. Leí por un sitio que los discos duros si no los enciendes cada cierto tiempo, no se si era medio año, perdían datos.

Alguien ha leído algo por el estilo que pudiera responderme? Por favor, intenten abstenerse de 'creo que'. Si alguien tiene una hipótesis contundente exponerla-

Gracias y saludos!