Introducción a Perl

Practical Extraction and Reporting Language.There is more than one way to do it Puntos a favor de perl: perl es un lenguaje de alto nivel perl es gratis perl puede escribir y leer archivos binarios perl puede tener múltiples archivos de entra y salida…

Practical Extraction and Reporting Language.

There is more than one way to do it

Puntos a favor de perl:

  • perl es un lenguaje de alto nivel
  • perl es gratis
  • perl puede escribir y leer archivos binarios
  • perl puede tener múltiples archivos de entra y salida abiertos al mismo tiempo
  • Tiene un generador de reportes
  • Maneja expresiones regulares
  • Maneja arreglos lineales y asociativos
  • Es poderoso y simplifica la programación
  • Puede procesar archivos muy grandes sin limites en el tamaño de registro
  • perl incluye un conjunto amplio y poderoso de instrucciones para manejo de cadenas de caracteres y arreglos
  • Cualquier cosa se puede realizar de múltiples formas

Ejemplo de programa en Perl:

# Este sencillo programa copia registros de un archivo
# y agrega un prefijo a cada línea con un numero en secuencia
while (< >){
# while () {} genera un lazo de control que continua mientras el
# enunciado en paréntesis es verdadero.
# la instrucciones en el lazo están dentro de los corchetes {}
# < > es un símbolo especial
# Le dice a Perl que busque en la línea de comando y vea si se
# especificaron algunos archivos.
# Si es el caso, entonces se lee cada uno en turno.
# Si no se especifica ningún archivo entonces se lee de
# la entrada normal (standard input)
# Cualquiera que sea el caso los caracteres que se leen se guardan
# en la variable especial $_
# Cuando <> llega al fin de archivo (end-of-file), regresa un valor de falso,
# lo cual termina el lazo.
print STDOUT ++$i, $_;# print es un método simple sin formato de impresión
# STDOUT es una referencia de archivo normal (standard filehandle)
# para la salida normal (Standard Output).
# Filehandles se especifican en MAYUSCULAS en perl.
# ++$i indica incrementar el valor de $i y dejar el valor disponible
# para la instrucción print
# Todos los valores escalares ( es decir cualquier cosa menos una instrucción,
# un arreglo lineal, un arreglo asociativo, filehandle, o nombre de procedimiento)
# empieza con $ en perl # $_ es el operador de default de cualquier instrucción
# en este caso, $_ contiene el último registro que leyó la instrucción<>
# ; termina cada instrucción en perl
}

Breve revisión de la sintaxis de perl

  • En perl es significativo el caso de los caracteres y se diferencia entre mayúsculas y minúsculas
  • No utilice nombres que empiezen con un numero, ya que estos comúnmente son símbolos especiales para perl, por ejemplo $1, $2, etc.
  • Todas las instrucciones en perl terminan con punto y coma ;
  • Comentarios se pueden insertar en un programa con el símbolo #, y cualquier cosa después de # hasta el fin de línea será ignorado
  • perl identifica cada tipo de variable o nombre de dato con un prefijo. Estos caracteres son:

    Tipo Carácter Comentario
    Escalar $ Un numero o cadena de caracteres
    Vector lineal @ Un arreglo referenciado por un numero índice.
    Subí­ndices entre paréntesis cuadrados [].
    @cosa se refiere al arreglo completo.
    $cosa[1] se refiere al escalar que ocupa la segunda posición en el arreglo
    Vector asociativo % Un vector referenciado por una llave de texto, no necesariamente un número.
    Subí­ndices entre{}.
    %cosa se refiere al vector completo.
    $elemento{“x”} se refiere al escalar que corresponde a la llave “x”
    filehandle UC Los apuntadores se archivo se escriben en mayúsculas
    Subrutina & Una subrutina
    Etiqueta xx: Objeto de goto

  • Valores entre paréntesis () son listas. Las listas se usan frecuentemente como argumentos para una subrutina o llamada a función. No es necesario usar paréntesis si solo se usa un argumento o el programa conoce el limite de la lista.
  • Las variables $x, @x. %x, y &x, no necesitan estar relacionadas entres si, sin mencionar $X, @X, %X y &X.
  • Existen variables especiales, las más importantes son:
    $_
    Es el valor escalar de default. Si no se especifica un nombre de variable en una función donde se usa una variable escalar, se usa $_. Esto se usa bastante en perl
    @_
    Es la lista de argumentos a una subrutina
    @ARGV
    Es la lista de argumentos especificada en la línea de comando cuando el programa se ejecuta

Instrucciones básicas y control

Los corchetes {} se usan para contener un bloque de enunciados. Es posible tener variables locales dentro de un bloque. Bloques se usan como los objetos de la mayoría de los comandos de control

Asignación simple:

  • Asignación escalar
  • Listas de escalares
  • Lista a vector
  • Vector a lista
  • Vectores asociativos necesitan un llave, pero aparte de eso, funcionan como se espera de un vector
  • Al asignar un vector a un escalar se obtiene el numero de elementos del vector

Operaciones aritméticas

if-then-else

  • if( condición ) {  rama verdadera  }  else  {  rama falsa  }

  • if (condición) {instrucciones}  elsif (condición) {instrucciones}

    elsif (condición) {instrucciones}

  • unless (condición)  {  rama verdadera  }

  • La condición tiene una gama amplia de operadores comparativos. Es importante observar la diferencia entre operadores numéricos y de cadenas de caracteres.

    Numérico Cadenas Significado
    = = eq igual
    != ne no igual
    > gt mayor que
    < lt menor que

  • Cadenas de caracteres. que no están compuestas por números tienen un valor de cero.
  • perl cuenta con un conjunto extenso de pruebas de archivo:

    • -T cierto si archivo es de texto
    • -B cierto si archivo es binario
    • -M regresa el número de días desde la última modificación
    • -A regresa el número de días desde el último acceso al archivo
    • -C regresa el número de días desde la creación del archivo

Lazos de control
Los lazos más comunes son for y while

  • for ($i = 0; $i < 10; $i++) { instrucciones }
  • foreach $i (@items) { instrucciones }
  • foreach $i ($first .. $last) { instrucciones }
  • while (condición) { instrucciones }
  • until (condición) { instrucciones }
  • Las instrucciones next, last, redo, y continue se usan para escapar de un lazo.

Entrada/Salida
Abrir
Como en Unix, los tres primeros manejadores de archivos se abren automáticamente y son STDIN, STDOUT, y STDERR. Otros archivos se deben abrir explícitamente. La forma de la instrucción open es la siguiente:
open (FILEHANDLE,XFY);
donde X y Y son caracteres opcionales

X = <
Para abrir archivo F solo lectura
X = >
Para abrir archivo F solo escritura
X = > >
Para agregar datos al final de archivo F
X = |
Para escribir a un tubo (pipe) hacia programa F
Y = |
Para leer a un tubo (pipe) desde programa F

Si solo se da el nombre F, el archivo se abre de lectura/escritura

Lectura
La forma más básica de lectura es poner el manejador de archivos dentro de <>. Si no se provee una variable escalar para el registro, este se guarda en $_.
Escritura
La mayor parte de la escritura se hace usando la instrucción print o printf. Estas instrucciones se utilizan aún si el resultado no se va a imprimir realmente.
Cerrar
perl cierra automáticamente cualquier archivo al salir. Cuando se necesita cerrar un archivo se puede hacer con un cierre explicito.
Mensajes de error:

  • die se usa para imprimir un mensaje de error y terminar la ejecución
  • warn se usa para imprimir un mensaje de error pero continuar

Manejo de cadenas de caracteres:

  • split se usa para extraer fichas (tokens) o campos de una cadena a un vector.
  • sort ordena una lista o vector.
  • study optimiza operaciones de cadenas.

Codificación binaria:

  • pack empaca datos en una cadena usando un machote de formato
  • unpack recupera datos de una cadena usando un machote de formato
  • Existe una larga lista de formatos que se pueden usar
  • Se puede usar más de un formato a la vez

    • l long 32 bit signed integer
    • L long 32 bit unsigned integer
    • s short 16 bit signed integer
    • S short 16 bit unsigned integer
    • f float 32 bit floating point
    • d double 64 bit floating point
    • A ASCII string
    • c char a single byte (character)

Expresiones regulares:

perl añade un conjunto de caracteres al conjunto normal. Uno uso importante de expresiones regulares (RE) es el uso de () para seleccionar subconjuntos de la expresión regular. perl facilita el uso del operador (). Existen dos maneras de usar expresiones regulares en perl: Match y Substitute

Una expresión regular esta contenida en slashes, y el operador =~ evalúa.

Las expresiones regulares son sensitivas a mayúsculas y minúsculas

El operador !~ se usa para detectar diferencias.

Algunos caracteres especiales:

.
Cualquier Carácter menos newline
^
El principio de lí­nea o de cadena
$
El fin de línea o cadena
?
Cero o más del último Carácter
+
Uno o más del último Carácter
[]
Cualquiera de los caracteres dentro de los corchetes []
|
o inclusivo
()
Agrupar
Los caracteres especiales $, |, [, ), , / deben ir precedidos por backslash para usarse en expresiones regulares
$` $& $’
$` , $& y $’ se pueden usar para ver cuales fueron los caracteres que se encontraron antes, durante, y después de un empate

Referencias

Active State

Active Perl

Live tutorials

Distribuciones binarias

Open Perl IDE

Documentación.

Introduction to Perl

La gata revolcada


Windows Mobile 6 Professional and Standard Software Development Kits Refresh

Por largo tiempo la mantra de Microsoft había sido la compatibilidad entre versiones. De hecho una de las razones por la que Windows es el monstruo que es en términos de los recursos que requiere es que cada nueva versión de Windows es un superset de la versión anterior. Pero ahora parece que con un mercado maduro la estrategia es forzar actualizaciones con incompatiblidades inducidas.

Continue reading “La gata revolcada”

La hoja de cálculo


El proceso de planeación financiera puede involucrar una inversión importante de tiempo a fin de mantener en orden objetivos, registros y presupuesto. Existen herramientas que pueden ahorrarnos una cantidad considerable de tiempo, y que nos proporcionan además instrumentos de análisis que pueden resultar muy provechosos. Estas herramientas son las hojas de cálculo y los programas especializados para el manejo de las Finanzas Personales.

La hoja de calculo también se puede usar para enseñar nociones básicas de aritmética y matemáticas.

Google tiene un programa gratuito similar a Excel, lo cual reafirma la estrategia de la compañía en rivalizar con el software empresarial de Microsoft mediante esta incursión. Las hojas de cálculo de Google podrán permitir a los usuarios importar y exportar las hojas de cálculo creadas con Microsoft y, de forma más genérica, los archivos con extensiones .csv. A través del navegador web, los usuarios en localizaciones remotas podrán ver y editar simultáneamente información. El software es una plataforma neutral, lo que significa que las hojas de cálculo podrán ser utilizadas por diversos navegadores Web: Firefox, Internet Explorer o Safari. Actualmente la experiencia de usuario de aplicaciones Web es inferior a la de aplicaciones instaladas en la PC pero solo es cuestión de tiempo para que esta situación se revierta.

Referencias:

El método Lekuona: matemáticas con hojas de cálculo

El Método Lekuona

Hoja de cálculo en la “Era Live”

Los gusanos, el spam, y la mafia


El primer gusano de Internet fue el experimento intelectual de Robert Morris en 1988. Probablemente el primer ataque premeditado de gran escala fue Code Red en julio de 2001 que utilizo una falla de MS IIS para infectar 359000 y orquestar una ataque en el sitio web de la Casa Blanca. Ahora los gusanos son instrumentos de programadores profesionales que secuestran maquinas para vender sus redes, botnets.

Continue reading “Los gusanos, el spam, y la mafia”

Natas; Crónica del virus mexicano


Tomado de http://vx.netlux.org/lib/agm00.html

En 1992 Little Loc se registro en Prodigy para buscar información sobre virii. Little Loc, alias James Gentile, a los 16 años habí­a escrito un virus mutante que se dispersaba rápidamente. El virus, Satan Bug, estaba escrito de manera que el proceso mismo de rastrear un disco en busca de infección infectaba todos los ejecutables en el mismo.

Satan Bug era el nombre de una teleserie de los 70s. Aunque Little Loc nunca vio la serie, vio el nombre en el TVguí­a y le gusto. El icono que inspiro la creación de Satan Bug fue el trabajo de Dark Avenger, un programador búlgaro de virus y su virus Eddie o Dark Avenger. Eddie usaba los mecanismos de rastreo de antivirus para infectar una maquina y gradualmente corrompí­a el disco duro del anfitrión. Una muerta lenta y dolorosa bajo las cuchillas del vengador tenebroso.

Little Loc tenía talento natural para escribir virii, un arte que aprendió sin maestro directo ni entrenamiento formal en programación. Siguiendo el modelo de Eddie, Satan Bug atacaba el command shell al instalarse en memoria. Adicionalmente a los poderes del vengador tenebroso, Satan bug estaba encriptado y se escondí­a en la memoria del computador. Las características de encriptación estaban basadas en la ballena, un virus alemán. La ballena era una pesada navaja suiza de trucos para esconderse de los antivirus.

Little Loc publico el código fuente de Satan Bug en un boletín de noticias y se dedico activamente a diseminar su código. Su motivación era ser reconocido por su habilidad técnica. Eventualmente, en 1993, Satan Bug infecto las maquinas del servicio secreto en Washington D.C. y las saco de servicio por 3 dí­as. El servicio secreto siguió una línea de investigación con la hipótesis de que el virus era un esfuerzo deliberado para atacar maquinas del gobierno de Estados Unidos.

Little Loc cambió su nombre por Priest y escribió Jackal. Jackal fue escrito como un contraataque contra TBClean, un antivirus producido por la compañí­a holandesa Thunderbyte, del investigador de virus Frans Veldman. Un derivado de Jackal fue el Natas. En su espí­ritu de medida retaliatoria, Natas formatea el disco duro cuando detecta la presencia de TBClean.

Los mecanismos de detección de programas antivirus de Jackal los incluyo Priest en Natas (Satan al revés), que llego a la ciudad de México en la primavera de 1994.

De acuerdo a la tradición, un consultor que vendía servicios antivirus en la ciudad de México se encargo de propagarlo vigorosamente. Debido a ignorancia e incompetencia, adicionada con entusiasmo empresarial y poder de convocatoria, este pendejo con iniciativa logro difundir Natas en México tan rápido que la leyendo urbana lo ubica como un software de origen mexicano. Un script tragicómico digno del mejor guionista.

El consultor, al visitar los boletines de noticias dedicados a virii, contamino un diskette con Natas. El software que usaba detectaba el virus en programas, pero no en el sector MBR (Master Boot Record) del disco duro. El consultor iba con sus clientes, corrí­a su software de rastreo de su diskette infectado y detectaba la infección de Natas que el mismo provocaba. Alarmado corría a la siguiente maquina y repetía el proceso, infectando todas las maquinas del lugar. Inmediatamente iba a visitar a sus mejores clientes con la noticia de que había una epidemia de Natas y que más les valía rastrear sus maquinas, con el software que el traí­a, que podía detectar al Natas. Entonces procedía a infectar todas las maquinas y a continuar el proceso con el vecino de al lado. Seguramente penso que eso de Satan iba ne sero cuando despues de formatar las maquinas el virus resurguía de la nada. Espeluznante!

Natas llego a México del sur de California. El consultor era visitante frecuente de BBS en Santa Clarita que tenían el Natas y su código fuente en la revista 40Hex. El buen cuate bajo el virus sin entender que al diablo le puedes vender el alma, pero no pedirla de regreso. En mayo de 1994, un mes después, desesperadamente el consultor buscaba ayuda en los boletines de noticias.

Natas era un programa tí­pico de Priest. Estando en memoria, hace parecer que programas infectados no lo estaban. Copia una copia limpia de MBR y se la muestra al usuario para fintarlo de que todo estaba bien si lo revisa. Natas infectaba diskettes y utiliza el rastreo del antivirus para diseminarse.

Yo en lo personal tuve una experiencia similar a la del cuento. Tenia una Compaq Presario que me estaba dando problemas y solicite la vista de un técnico de Compaq para que revisara la maquina. El técnico se tuvo que retirar sin dar le servicio porque todos sus diskettes con utilerías de diagnostico estaban infectados con un virus.

Diseño y creación de una base de datos

Existen una serie de reglas que se deben seguir para que las bases de datos no sean redundantes y se puedan utilizar eficientemente. La importancia de seguir estas reglas depende del tamaño de la base de datos. Conforme la base de datos va creciendo, se vuelve cada vez más crítico que esta este diseñada correctamente.

Continue reading “Diseño y creación de una base de datos”

Notas históricas sobre las hojas de cálculo electrónicas

Articulo basado en A Brief History of Spreadsheets de D. J. Power

reportes

“…. VisiCalc was also available on the HP85 and 87 in the early 80’s. I found it more useful than the Apple version because it had graph plotting and statistical analysis in the same package. At the time, the HP plotter had just appeared,so we could produce colour charts on paper or transparencies for presentation. The MIS folks were most disturbed because they could see the writing on the wall. The Honeywell that was just installed for $10 million could not do what the HP85 was doing for less than $10K! I can still remember the sad look on the manager’s face when I showed him the colour plots…”

Jim Ho

Continue reading “Notas históricas sobre las hojas de cálculo electrónicas”