3ENGINE

Programación y otros cachivaches

Categoría: Tecnologia

Página 11/45

Tecnologia

Delphi: cómo ordenar un array dinámico (Dynamic array)


Para ordenar un array dinámico (de tipo Array of…) no hay ningun método específico.

Cómo ordenar un array dinámico

Pego un ejemplo muy básico que ordena un array dinámico de tipo Array of THuman donde THuman es una clase con dos atributos. El código hace uso de un TStringList auxiliar y un método sort() para ordenar el array dinámico.

Type
  THuman = Class
  Public
    Name: String;
    Age: Byte;
    Constructor Create(Name: String; Age: Integer);
  End;

Constructor THuman.Create(Name: String; Age: Integer);
Begin
  Self.Name:= Name;
  Self.Age:= Age;
End;

Var
 Human: THuman;
 Humans: Array Of THuman;
 List: TStringList;
Begin

 SetLength(Humans, 3);
 Humans[0]:= THuman.Create('David', 41);
 Humans[1]:= THuman.Create('Brian', 50);
 Humans[2]:= THuman.Create('Alex', 20);

 List:= TStringList.Create;
 List.AddObject(Humans[0].Name, TObject(Humans[0]));
 List.AddObject(Humans[1].Name, TObject(Humans[1]));
 List.AddObject(Humans[2].Name, TObject(Humans[2]));
 List.Sort;

 Human:= THuman(List.Objects[0]);
 Showmessage('The first person on the list is the human ' + Human.name + '!');

 List.Free;
End.



Tecnologia

argparse: módulo de análisis de línea de comandos para Python


El módulo argparse (PEP389) módulo de análisis de línea de comandos que ofrece más funcionalidad que los módulos de análisis de línea de comandos existentes en la biblioteca estándar.

A partir de la versión Python 2.7 y 3.2 el módulo argparse sustituye al módulo optparse. Existe un tutorial que puedes seguir para saber cómo funciona.

módulo de análisis de línea de comandos

Para un aprendizaje rápido de este módulo he creado una ejemplo con los comandos básicos.

Código

# -*- coding: cp1252 -*-
from argparse import ArgumentParser

# ArgumentParser con una descripción de la aplicación 
# (https://docs.python.org/2/library/argparse.html#argumentparser-objects)
parser = ArgumentParser(description='%(prog)s is an ArgumentParser demo')

# Argumento posicional. Los argumentos posicionales son obligatorios.
parser.add_argument('arg1')

# Un argumento posicional con una descripción 
parser.add_argument('arg2', help='help for arg2')

# Un argumento posicional con un tipo definido de tipo int 
# (https://docs.python.org/2/library/argparse.html#type)
parser.add_argument('arg3', help='help for arg3', type=int)

# Argumento posicional con tres opciones posibles 
# (https://docs.python.org/2/library/argparse.html#choices)
parser.add_argument('arg4', choices=['rock', 'paper', 'scissors'])

# Argumento opcional. Si se pametriza, requiere acompañarlo de un valor
parser.add_argument('-opt1')

# Un argumento opcional puede tener varios nombres
parser.add_argument('-opt2', '--option2')

# Argumento opcional con una descripción. Si se pametriza, requiere 
# acompañarlo de un valor de tipo int
parser.add_argument('-opt3', help='help for opt3', type=int)

# Argumento opcional con una descripción. Si se pametriza, requiere 
# acompañarlo de un valor de tipo int. Por defecto el valor es 10
parser.add_argument('-opt4', help='help for opt4', type=int, default=10)

# Argumento opcional. Con 'action' damos valor si el argumento se parametriza 
# (https://docs.python.org/2/library/argparse.html#action)
parser.add_argument('-opt5', '--option5', help='help for opt5', 
action='store_true', default=False)

# Argumento opcional requerido
parser.add_argument('-opt6', required=True)

# Argumento opcional con tres opciones posibles
# (https://docs.python.org/2/library/argparse.html#choices)
parser.add_argument('-opt7', choices=['rock', 'paper', 'scissors'])

# Argumento opcional que requiere dos argumentos
parser.add_argument('-opt8', nargs=2)

# Argumento opcional que requiere de 1 a N argumentos
parser.add_argument('-opt9', nargs='+')

# Argumento opcional que requiere de 0 a N argumentos
parser.add_argument('-opt10', nargs='*')

# Por último parsear los argumentos
args = parser.parse_args()

# Imprimir los parametros
print 'args.arg1:', args.arg1
print 'args.arg2:', args.arg2
print 'args.arg3:', args.arg3
print 'args.arg2:', args.arg4
print 'args.opt1:', args.opt1
print 'args.opt2:', args.option2
print 'args.opt3:', args.opt3
print 'args.opt4:', args.opt4
print 'args.opt5:', args.option5
print 'args.opt6:', args.opt6
print 'args.opt7:', args.opt7
print 'args.opt8:', args.opt8
print 'args.opt9:', args.opt9
print 'args.opt10:', args.opt10

Ayuda básica

>python argcons.py
usage: argcons.py [-h] [-opt1 OPT1] [-opt2 OPTION2] [-opt3 OPT3] [-opt4 OPT4]
                  [-opt5] -opt6 OPT6 [-opt7 {rock,paper,scissors}]
                  [-opt8 OPT8 OPT8] [-opt9 OPT9 [OPT9 ...]]
                  [-opt10 [OPT10 [OPT10 ...]]]
                  arg1 arg2 arg3 {rock,paper,scissors}
argcons.py: error: too few arguments

Mostrar ayuda extendida

>python argcons.py -h
usage: argcons.py [-h] [-opt1 OPT1] [-opt2 OPTION2] [-opt3 OPT3] [-opt4 OPT4]
                  [-opt5] -opt6 OPT6 [-opt7 {rock,paper,scissors}]
                  [-opt8 OPT8 OPT8] [-opt9 OPT9 [OPT9 ...]]
                  [-opt10 [OPT10 [OPT10 ...]]]
                  arg1 arg2 arg3 {rock,paper,scissors}

argcons.py is an ArgumentParser demo

positional arguments:
  arg1
  arg2                  help for arg2
  arg3                  help for arg3
  {rock,paper,scissors}

optional arguments:
  -h, --help            show this help message and exit
  -opt1 OPT1
  -opt2 OPTION2, --option2 OPTION2
  -opt3 OPT3            help for opt3
  -opt4 OPT4            help for opt4
  -opt5, --option5      help for opt5
  -opt6 OPT6
  -opt7 {rock,paper,scissors}
  -opt8 OPT8 OPT8
  -opt9 OPT9 [OPT9 ...]
  -opt10 [OPT10 [OPT10 ...]]

Ejemplo de uso

>python argcons.py  a b 15 rock -opt6 c -opt7 rock -opt8 1 2 -opt9 1 2 3 d e f -opt10
args.arg1: a
args.arg2: b
args.arg3: 15
args.arg2: rock
args.opt1: None
args.opt2: None
args.opt3: None
args.opt4: 10
args.opt5: False
args.opt6: c
args.opt7: rock
args.opt8: ['1', '2']
args.opt9: ['1', '2', '3', 'd', 'e', 'f']
args.opt10: []



Tecnologia

Cómo habilitar aplicaciones de 32 bits en IIS7


Si tienes IIS en un Windows 64 bits y necesitas ejecutar una aplicación que es para 32 bits. No hay problema, sigue estos pasos.

Habilitar aplicaciones de 32 bits en IIS7

1. Abre el administrador de Internet Information Services (IIS). Lo puedes encontrar en el panel de herramientas administrativas. Una vez dentro, vete a Conexiones y haz click en Grupos de aplicaciones

2. En el panel de la derecha selecciona el grupo de aplicaciones que necesites.

3. Finalmente haz click en Configuración avanzada y cambia la opción Habilitar apllicaciones de 32 bits a True

Cómo habilitar aplicaciones de 32 bits en IIS7




Tecnologia

Cómo configurar un CGI en IIS7


CGI viene de Common Gateway Interface. Fueron una de las primeras tecnologías de la WWW que permitia a un navegador web solicitar datos de un programa ejecutado en un servidor web. Hoy en día esta en desuso, pero si por algún motivo necesitas hacerlo funcionar, te explico cómo configurar un CGI en IIS7.

Instalar (o configurar) IIS7

Instalar IIS7 desde la pantalla Activar o desactivar características de Windows que se encuentra en Programas y características de Windows 7. Para poder configurar un CGI es necesario activar las opciones CGI, Extensiones y Filtros ISAPI

Cómo configurar un CGI en IIS7

Edita las restricciones de ISAPI y CGI

Abre IIS7, haz doble click en el nombre del servidor en la parte superior y por último click en la opción Restricciones de ISAPI y CGI

Cómo configurar un CGI en IIS7

Ahora agrega una restricción, selecciona tu CGI (que normalmente tendrá extensión .dll o .exe) y activa la casilla Permitir ejecución de la ruta de extensión

Cómo configurar un CGI en IIS7

Edita tu aplicación Web para permitir ejecutar un CGI

Pero por defecto IIS7 no permite que una aplicación ejecute un CGI. Ahora en IIS7 selecciona tu aplicación y doble click en la opción Asignaciones de controlador

Cómo configurar un CGI en IIS7

Una vez dentro modifica los permisos de características del controlador CGI-exe y activa la casilla Ejecutar

Cómo configurar un CGI en IIS7

 

Reinicia IIS7

Para asegurar que IIS7 queda perfectamente configurado es recomendable reiniciarlo. Esto lo puedes hacer bien desde la propia consola de administración de IIS7 o bien desde la consola de comandos con la orden iisreset
 

Habilitar CGI de 32 bits

Si el CGI es una aplicación de 32 bits y IIS es de 64 bits no funcionará sino habilitas la opción. Si quieres saber cómo hacerlo te explico cómo habilitar aplicaciones de 32 bits en II7