jueves, 21 de octubre de 2010

Desactivación de Unity de las máquinas virtuales de VMware Workstation

Al desactivar el unity de las máquinas vituales conseguimos que la carpeta cache que ha aparecido desde la versión 7.1 desaparezca.

En el fichero config.ini hay que introducir/modificar la siguiente línea:

isolation.tools.unity.disable = “true”

En el fichero vmx de la máquina virtual:

unity.enableLaunchMenu = “FALSE”
unity.showBadges = “FALSE”
unity.showBorders = “FALSE”
unity.wasCapable = “FALSE”



Saludos.

jueves, 16 de septiembre de 2010

Lectura de ficheros INI sin secciones con Inno Setup desde código (continuación)

Este post es una continuación del anterior y voy a añadir un nuevo método, el cual se encarga de comprobar si una etiqueta existe en el fichero.

function ExisteEtiqueta (Etiqueta: String): Boolean;
var
    I:        LongInt;
    L:        LongInt;
    S:        String;
begin
    S := Etiqueta + '=';
    L := Length (S);
    For I := 0 to GetArrayLength (ConfigValues) - 1 do
    begin
        if (copy (ConfigValues [I], 1, L) = S) then
        begin
            Result := TRUE;
            Exit;
        end;
    end;
    Result := FALSE;
end;

Saludos.

miércoles, 15 de septiembre de 2010

Lectura de ficheros INI sin secciones con Inno Setup desde código

En este post voy a poner un código de ejemplo en el cual se parsea un fichero INI sin secciones (fichero INI estilo UNIX) desde el Inno Setup.
Para esto hay que crear el código en la sección [Code] de este programa.

[Code]
var
    ConfigValues:    TArrayOfString;

function LeeFicheroConfiguracion (FileName: String): Boolean;
begin
    Result := LoadStringsFromFile (FileName, ConfigValues);
end;

function ObtieneValorEtiqueta (Etiqueta: String; var Value: String): Boolean;
var
    I:        LongInt;
    L:        LongInt;
    S:        String;
begin
    S := Etiqueta + '=';
    L := Length (S);
    For I := 0 to GetArrayLength (ConfigValues) - 1 do
    begin
        if (copy (ConfigValues [I], 1, L) = S) then
        begin
            Value := copy (ConfigValues [I], L + 1,
                Length (ConfigValues [I]) - L);
            Result := TRUE;
            Exit;
        end;
    end;
    Result := FALSE;
end;

function EscribeValorEtiqueta (Etiqueta: String; Value: String): Boolean;
var
    I:        LongInt;
    L:        LongInt;
    A:        LongInt;
    S:        String;
begin
    S := Etiqueta + '=';
    L := Length (S);
    A := GetArrayLength (ConfigValues);
    For I := 0 to A - 1 do
    begin
        if (copy (ConfigValues [I], 1, L) = S) then
        begin
            ConfigValues [I] := S + Value;
            Result := TRUE;
            Exit;
        end;
    end;
    SetArrayLength (ConfigValues, A + 1);
    ConfigValues [A] := S + Value;
    Result := FALSE;
end;

function EscribeFicheroConfig (FileName: String): Boolean;
var
    bRet:    Boolean;
begin
    // FileName -> Backup.
    bRet := FileCopy (FileName,
        ExpandConstant ('{tmp}\' + ExtractFileName (FileName)),
        FALSE);
    if (bRet) then
    begin
        bRet := SaveStringsToFile (FileName, ConfigValues, FALSE);
        if (bRet) then
        begin
            Result := TRUE;
            Exit;
        end else
        begin
            // Maybe the backup file should be copied back here?
        end;
    end;
    Result := FALSE;
end;


Espero que le sirva a la gente que haya tenido el mismo problema que yo.


Saludos.

jueves, 29 de julio de 2010

Crear un mirror de un repositorio de subversion.

Para crear un mirror de un repositorio de subversion se siguen los siguientes pasos.
La mayoria de los pasos se hacen sobre el mirror.

Creamos el repositorio en la máquina del mirror.
Creamos un usuario en ambos servidores para realizar la sincronización (en este ejemplo el usuario creado ha sido: syncuser)
Lanzamos los siguientes comandos en el mirror:
  • svnsync initialize file:///ruta_local_mirror  ruta_servidor_svn --username syncuser --password syncuser
  • svn proplist --revprop -r 0 file:///ruta_local_mirror
  • svn propget svn:sync-from-url --revprop -r 0 file:///ruta_local_mirror
  • svn propdel svn:sync-lock --revprop -r 0 file:///ruta_local_mirror

Con esto ya tenemos el mirror montado y preparado para funcionar. Un comando interesante a ejecutar, aunque no necesario, es el siguiente, el cual se encarga de la sincronización inicial de los repositorios. Como he dicho no es necesario, pero si el repositorio del que vamos a hacer el mirror ya contiene información es recomendable, especialmente si este ya tiene muchos commits realizados.
svnsync --non-interactive sync file:///ruta_local_mirror --username syncuser --password syncuser
Después de esta sincronización inicial es conveniente ejecutar el siguiente comando para que se copien las propiedades del repositorio (sólo es necesario esta primera vez):
svnsync copy-revprops file:///ruta_local_mirror --username syncuser --password syncuser

Después de esto en el repositorio origen del subversion se puede crear un hook para que la sincronización se realice de forma automática, el hook en el que incluir el siguiente comando es el post_commit:
svnsync --non-interactive sync ruta_trabajo_mirror --username syncuser --password syncuser


Saludos.

miércoles, 19 de mayo de 2010

Hacer que el VMware utilice la memoria física y no un fichero en una máquina virtual.

Para conseguir esto hay que modificar el fichero .vmx de la máquina virutal y añadir/modificar las siguientes entradas:

mainMem.useNamedFile = "FALSE"
MemAllowAutoScaleDown = "FALSE"
MemTrimRate = "0"
sched.mem.pshare.enable = "FALSE"

Saludos.

Reseteo del ID y de la MAC de una máquina virtual en VMware

Para resetear el ID de una máquina virtual se han de borrar las líneas que contengan las siguientes entradas:

uuid.location
uuid.bios

Para resetear la MAC de la tarjeta de red hay que borrar las siguientes líneas

ethernet0.generatedAddress
ethernet0.generatedAddressOffset

Además es obligado que esta línea tenga este valor
ethernet0.addressType = "generated".

Saludos.

martes, 4 de mayo de 2010

Activar la cuenta root en Ubuntu

Para activar la cuenta root de Ubuntu se ha de lanzar el siguiente comando.
sudo -u root passwd
y pones el pass del usuario que estas utilizando, después de eso te pedirá el nuevo pass para el root. De esta forma ya esta activado el usuario.
Después de esto ya se puede lanzar el comando
su -
para entrar a nuestra cuenta de root.


Saludos

miércoles, 28 de abril de 2010

Migración de RX Components a JVCL 0

Este post deberia de haber aparecido antes del actual, pero por despiste no lo hice y por tanto lo he etiquetado como 0 y no como II.
Para realizar la migración, esta se puede hacer de forma automática. Esto ser realiza mediante una aplicación que tiene JVCL llamada JVCLConvert, esta se encuentra en la ruta: jvcl\devtools\JVCLConvert.

Para poder realizar la conversión de componentes de forma correcta hay que utilizar plantillas, estas se encuentran en jvcl\converter y las que nos interesan son las siguientes:
  • RxToJVCLApp.dat
  • JVCL3.dat
La primera sirve para realizar la conversión de nombres de clases y la segunda sirve para pasar los nombres de clases de cualquier versión anterior de JVCL a la actual.
Hay que indicar que aunque la segunda no es obligatoria, si que es aconsejable, ya que la plantilla primera podría tener nombres de clases antiguas de JVCL y por tanto la segunda se encarga de actualizar estos nombres.

Otra cosa que no indica la documentación y que si que es recomendable es que una vez transformado el proyecto lo abramos y abramos todos sus formularios ya que puede darse el caso, y a mí se me ha dado, que algún USES se haya quedado sin incluir, ya que esta aplicación cambia nombres, pero no añade y puede que alguna clase no tenga incluido su USES.


Saludos.

martes, 27 de abril de 2010

Migración de RX Components a JVCL I

En estas entradas voy a poner los componentes del RX y su equivalente en JVCL.
En este primer artículo sólo voy a poner el TFormPlacement.
El equivalente a este en JVCL es TJvFormStorage.
Los métodos de ambos son los mismos. El segundo es igual que el primer con más parámetros y métodos, pero los métodos y parámetros del primero estan en el segundo.
La única novedad que hay que señalar es que para que guarde necesitamos un AppStorage, los que hay disponibles son:
  • TJvAppIniFileStorage
  • TJvAppRegistryStorage
  • TJvAppDBStorage
  • TJvAppXMLFileStorage
Con sólo asignar uno de estos AppStorage al TJvFormStorage y configurarlo funciona.
Saludos.

miércoles, 21 de abril de 2010

Presentación

La finalidad de este blog es introducir lo que me parezca, en un principio no va a ser dirigido a ningún tema en especial.