Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Debates
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-04-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Sé que llego tarde, y que esto está degenerando un poco, pero voy a recuperar el hilo inicial de esta conversación.

Lo de los programas "keygen" que muestran esas impresionantes presentaciones en poco más de 30Ko de ejecutable es herencia de las "tech-demos" que se empezaron a hacer en los '80. En estas se intentaba hacer el programa más impresionante (e inútil, todo sea dicho de paso) en el menor espacio posible.

Yo fui demo-maker en mis tiempos, pero yo lo hacía en MSX y no en PC. Para ahorrar el máximo de memoria las demos se programaban exclusivamente en ensamblador, realizando llamadas directas al BIOS y accediendo a los puertos y a la memoria del sistema de forma directa, sin pasar por el sistema operativo.

Por otro lado, lo que hincha un programa Windows suelen ser los recursos. Si en lugar de crear las ventanas y diálogos con el IDE, arrastrando y soltando componentes con el ratón, lo hacemos a golpe de código podemos reducir considerablemente el tamaño de los ejecutables. Hace ya algunos años hice una demostración con Delphi 6 en el que ahorré una media de 1'5Ko por control (no sólo los visibles como los botones sino también los invisibles como los TQuery, TDialog, etc.) al reproducir un programa RAD a golpe de código. Si un programa tiene 200 componentes, lo cual es bastante común, podemos ahorrar casi 300Ko.

Eso sí, es mucho más difícil diseñar un formulario escribiendo el código directamente en Pascal que utilizando los componentes visuales.
Responder Con Cita
  #2  
Antiguo 26-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
O sea, que de RAD pasó a SAD

// Saludos
Responder Con Cita
  #3  
Antiguo 26-04-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 20
xander Va por buen camino
Cita:
Empezado por Ñuño Martínez
al reproducir un programa RAD a golpe de código. Si un programa tiene 200 componentes, lo cual es bastante común, podemos ahorrar casi 300Ko.

Eso sí, es mucho más difícil diseñar un formulario escribiendo el código directamente en Pascal que utilizando los componentes visuales.
Aver, a ver, ¿quieres decir que si creo mis componentes desde código? al estilo de:

Código Delphi [-]
var
  Form1: TForm1;
  Button1: TButton;
  JvDBGrid1: TJvDBGrid;
  Table1: TTable;
  Jv: TJvCsvDataSet;
  M: TJvMemoryData;
  JvDataSource1: TJvDataSource;

  Form1 := TForm1.Create(Self);
  Button1 := TButton.Create(Form1);
  JvDBGrid1 := TJvDBGrid.Create(Form1);
  Table1 := TTable.Create(Self);
  Jv := TJvCsvDataSet.Create(Self);
  M := TJvMemoryData.Create(Self);
  JvDataSource1 := TJvDataSource.Create(Self);
  with Form1 do
  begin
    Name := 'Form1';
    Left := 0;
    Top := 0;
    Caption := 'Form1';
    ClientHeight := 530;
    ClientWidth := 399;
    Color := clBtnFace;
    Font.Charset := DEFAULT_CHARSET;
    Font.Color := clWindowText;
    Font.Height := -11;
    Font.Name := 'Tahoma';
    Font.Style := [];
    OldCreateOrder := False;
    PixelsPerInch := 96;
  end;
  with Button1 do
  begin
    Name := 'Button1';
    Parent := Form1;
    Left := 32;
    Top := 64;
    Width := 75;
    Height := 25;
    Caption := 'Button1';
    TabOrder := 0;
    OnClick := Button1Click;
  end;
  with JvDBGrid1 do
  begin
    Name := 'JvDBGrid1';
    Parent := Form1;
    Left := 24;
    Top := 112;
    Width := 345;
    Height := 385;
    DataSource := JvDataSource1;
    TabOrder := 1;
    TitleFont.Charset := DEFAULT_CHARSET;
    TitleFont.Color := clWindowText;
    TitleFont.Height := -11;
    TitleFont.Name := 'Tahoma';
    TitleFont.Style := [];
    SelectColumnsDialogStrings.Caption := 'Select columns';
    SelectColumnsDialogStrings.OK := '&OK';
    SelectColumnsDialogStrings.NoSelectionWarning := 'At least one column must be visible!';
    EditControls := <>;
    RowsHeight := 17;
    TitleRowHeight := 17;
  end;
  with Table1 do
  begin
    Name := 'Table1';
    DatabaseName := 'DBDEMOS';
    TableName := 'customers.dbf';
    Left := 24;
    Top := 16;
  end;
  with Jv do
  begin
    Name := 'Jv';
    Changed := False;
    CsvUniqueKeys := False;
    ExtendedHeaderInfo := False;
    CaseInsensitive := False;
    LoadsFromFile := False;
    AutoBackupCount := 0;
    StoreDefs := True;
    Left := 88;
    Top := 16;
  end;
  with M do
  begin
    Name := 'M';
    FieldDefs := <>;
    Left := 160;
    Top := 16;
  end;
  with JvDataSource1 do
  begin
    Name := 'JvDataSource1';
    DataSet := Jv;
    Left := 248;
    Top := 24;
  end;

Mi programa va a medir menos que usando el editor de formularios de Delphi??? Me puedes firmar con tu sangre eso??

Y de ser así, porque es que sucede eso??? al final de cuentas eso es lo que hace el compilador de Delphi al crear el formulario, que no?
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #4  
Antiguo 26-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No estaría yo tan seguro que sea tanto el ahorro, pero sí debe disminuir el tamaño. Todas las propiedades de las componentes y formularios que se establecen en tiempo de diseño (es decir, el DFM), se guardan como recursos dentro del ejecutable. Al hacerlo por código, eliminas ese recurso del ejecutable.

// Saludos
Responder Con Cita
  #5  
Antiguo 26-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por xander
Mi programa va a medir menos que usando el editor de formularios de Delphi??? Me puedes firmar con tu sangre eso??
Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.

Lo malo es que quitando esas clases pasamos, como bien dice roman, de RAD (Rapid application development) a SAD (Slow ??? application development) , es decir, un montón de lineas para crear una ventana, un montón de lineas para crear un boton, etc ...
Responder Con Cita
  #6  
Antiguo 26-04-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 20
xander Va por buen camino
Cita:
Empezado por seoane
Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.
Pero Nuño habla de crear hasta Querys y controles dataaware ahorrando 1.5 kb por control, ahi si me imagino que sería una jodienda crear un IBQuery o ADOQuery por llamadas al API, mas bien le habia entendido que las creaba por código, pero aún asi ahorrarse 1.5 Kb por cada componente no se se me hace muy dificil de creer.
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #7  
Antiguo 26-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
SAD de slow y de

Yo también había pensado que Ñuño se refería a lo que hemos dicho antes: crear formularios a mano, con la API de Windows. Pero aún haciéndolo así, si te pones a usar las unidades DB, DBCtrls, StdCtrls, ExtCtrls, necesarias para lo que menciona (botones, querys, etc) pues viene a ser casi lo mismo: ejecutables de más de 300kb. Por ello, cuando leí el mensaje de xander, pensé que realmente se refería a quitar el dfm del ejecutable. Pero, al igual que xander, estoy escéptico en este punto.

// Saludos
Responder Con Cita
  #8  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cool Regresando al tema.

En definitiva si quieren crear una aplicacion buena de ese tipo (virus?) lo mejor es solo usar las APIs de Guindos... y lenguaje de maquina, ñuño me comprenderá en la idea, el pasarse a 32 bits no creo que le sea mucho lio.

Lo que yo cuido en mis aplicaciones son dos cosas... la primera es no utilizar ningun tipo de concatenacion de cadenas, pues suele ocupar varios Kb. lo mejor es siempre usar vectores concatenados con metodos de movimientos de memoria... lo segundo es no utilizar por ningun motivo la unidad SysUtils pues esa engorda en gran medida al ejecutable...

En algun momento les pasaré algunas de mis aplicaciones de esta clase... tengo como una docena y si realmente estan interesados les pasare parte del codigo, no si este foro lo permite pero si no, les paso por mail (los programas) y el codigo lo hago publico aca mismo.

PD: "uses windows;" y nada mas!!!
Responder Con Cita
  #9  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cool Ahh me olvidaba!

El asunto de lo que comentaba roman de las BDs... este tema de los "keygens" en definitiva es "bajar de nivel" lastimosamente estamos muy acostumbrados a utilizar lo que el IDE nos dá a primera vista... pero alguna vez hicieron Ctrl+Click... vieron todo lo que hay por debajo? y que pasa si se nos ocurre realizar nuestra propia interfaz con una base de datos creada por nosotros mismos? entonces si logramos menos de 100 Kb. con una BD.

Si hablamos de KeyGens y parecidos, necesariamente hablamos de bajo nivel y no es necesario hacer uso de las interfaces de BDs DBxxxx.pas
Responder Con Cita
  #10  
Antiguo 27-04-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por seoane
Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.

Lo malo es que quitando esas clases pasamos, como bien dice roman, de RAD (Rapid application development) a SAD (Slow ??? application development) , es decir, un montón de lineas para crear una ventana, un montón de lineas para crear un boton, etc ...
No, no, utilizaba las mismas clases VCL/CLX. Sólo asignaba las propiedades que utilizaba, dejando la mayor parte de los valores con su valor "por defecto" (por ejemplo: name, color, font, etc.), y eliminando todo lo posible de las cláusulas USES.

Es cierto que el ahorro no era mucho, pero siempre hay que valorar si el esfuerzo de hacerlo así merece la pena por el ahorro conseguido.

Eso sí, estuve una temporada aprendiendo a programar GTK+ y ahí sí que se notó un ahorro bárbaro...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Los "ratones" se hacen inteligentes gracias a Logitech Sasuke_Cub Noticias 1 08-10-2005 23:37:50
DBGrid con PickList estilo "Code Templates" sitrico Varios 0 01-07-2005 17:55:34
buscar palabras parecidas (estilo google) - "quiso decir...." ksellas Conexión con bases de datos 10 26-01-2005 00:30:49
Stallman: "La única manera de ser libre es rechazar los programas propietarios" kinobi Debates 12 20-05-2004 16:07:24


La franja horaria es GMT +2. Ahora son las 08:52:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi