VARIABLES EN PHP

En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.

Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado (underscore), seguido de cualquier número de letras, números y caracteres de

<?php

$var = 'Roberto';

$Var = 'Juan';

echo "$var, $Var";      // imprime "Roberto, Juan"

$4site = 'aun no';      // inválido; comienza con un número

$_4site = 'aun no';     // válido; comienza con un carácter de subrayado

$täyte = 'mansikka';    // válido; 'ä' es ASCII (Extendido) 228

?>

De forma predeterminada, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a una variable, el valor completo de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la otra.

PHP también ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, “se convierte en un alias de” ó “apunta a”) la variable original. Los cambios a la nueva variable afectan a la original, y viceversa.

Para asignar por referencia, simplemente se antepone un signo ampersand (&) al comienzo de la variable cuyo valor se está asignando (la variable fuente). Por ejemplo, el siguiente segmento de código produce la salida ‘Mi nombre es Bob’ dos veces:

<?php

$foo = 'Bob';                // Asigna el valor 'Bob' a $foo

$bar = &$foo;                // Referenciar $foo vía $bar.

$bar = "Mi nombre es $bar";  // Modifica $bar...

echo $bar;

echo $foo;                   // $foo también se modifica.

?>

Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por referencia.

<?php

$foo = 25;

$bar = &$foo;      // Esta es una asignación válida.

$bar = &(24 * 7);  // Inválida; referencia una expresión sin nombre.

function test()

{

   return 25;

}

$bar = &test();    // Inválido.

?>

No es necesario inicializar variables en PHP, sin embargo, es una muy buena práctica. Las variables no inicializadas tienen un valor predeterminado de acuerdo a su tipo dependiendo del contexto en el que son usadas – las booleanas se asumen como FALSE, los enteros y flotantes como cero, las cadenas (p.ej. usadas en echo) se establecen como una cadena vacía y los arrays se convierten en un array vacío.

Ejemplo #1 Valores predeterminados en variables sin inicializar

<?php

// Una variable no definida Y no referenciada (sin contexto de uso); imprime NULL

var_dump($variable_indefinida);

// Uso booleano; imprime 'false'

echo($booleano_indefinido ? "true\n" : "false\n");

// Uso de una cadena; imprime 'string(3) "abc"'

$cadena_indefinida .= 'abc';

var_dump($cadena_indefinida);

// Uso de un entero; imprime 'int(25)'

$int_indefinido += 25; // 0 + 25 => 25

var_dump($int_indefinido);

// Uso de flotante/doble; imprime 'float(1.25)'

$flotante_indefinido += 1.25;

var_dump($flotante_indefinido);

// Uso de array; imprime array(1) {  [3]=>  string(3) "def" }

$array_indefinida[3] = "def"; // array() + array(3 => "def") => array(3 => "def")

var_dump($array_indefinida);

// Uso de objetos

// Imprime: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }

$objeto_indefinido->foo = 'bar';

var_dump($objeto_indefinido);

?>

Depender del valor predeterminado de una variable sin inicializar es problemático al incluir un archivo en otro que use el mismo nombre de variable. También es un importante riesgo de seguridad cuando la opción register_globals se encuentra habilitada. Un error de nivel E_NOTICE es emitido cuando se trabaja con variables sin inicializar, con la excepción del caso en el que se anexan elementos a un array no inicializado. La construcción del lenguaje isset() puede ser usada para detectar si una variable ya ha sido inicializada.

APPSERV

Appserv es una herramienta OpenSource para Windows con Apache, MySQL, PHP y otras adiciones, en la cual estas aplicaciones se configuran en forma automática, lo que permite ejecutar un servidor web completo.

Como extra incorpora phpMyAdmin para el manejo de MySQL.

Inmediatamente después de la instalación está disponible completamente funcional del servidor web Apache, que se ejecuta en el equipo local, que puede ejecutar un número ilimitado de sitios para ser muy eficaz para desarrollar y depurar scripts PHP sin subir archivos a un servidor remoto. El programa se distribuye gratuitamente bajo licencia GNU General Public License y es gratis, fácil de usar web-servidor capaz de servir páginas dinámicas. Con esta configuración, puede implementar rápidamente un equipo hecho y derecho y el servidor web rápido, con acceso desde la red local, sin necesidad de configuración adicional. Puede ser utilizado como un servidor web público en Internet.

Requisitos

Sistema operativo: Se recomienda Linux, Windows NT, Windows 2000, Windows Me, Windows Server 2003, Windows XP Windows Vista, Windows Server 2008 y Windows 7 en las versiones superiores a 2.0. Para las versiones anteriores a 2.0 se recomienda Windows 95, Windows 98

Procesador: Intel® Pentium® III 700 MHz

Memoria Ram: 128 MB

Espacio en Disco duro: 50 MB (70 MB durante la instalación)

SINTAXIS PARA COMENTAR EN PHP

PHP admite comentarios al estilo de ‘C’, ‘C++’ y de consola de Unix (estilo de Perl). Por ejemplo:

<?php

    echo 'Esto es una prueba'; // Esto es un comentario al estilo de c++ de una sola línea

    /* Esto es un comentario multilínea

       y otra lína de comentarios */

    echo 'Esto es otra prueba';

    echo 'Una prueba final'; # Esto es un comentario al estilo de consola de una sola línea

?>

Los comentarios al estilo de “una sola línea” solo comentan hasta el final de la línea o del bloque actual de código de PHP, lo primero que suceda. Esto implica que el código HTML después de // … ?> o # … ?> SERÁ impreso: ?> sale del modo PHP y vuelve al modo HTML, por lo que // o # no pueden influir en eso. Si la directiva de configuración asp_tags está activada, actúa igual que // %> y # %>. Sin embargo, la etiqueta </script> no sale del modo PHP en un comentario de una sola línea.

<h1>Esto es un <?php # echo 'simple';?> ejemplo</h1>

<p>El encabezado anterior dirá 'Esto es un  ejemplo'.</p>

XAMPP

XAMPP es un servidor independiente de plataforma de código libre. Permite instalar de forma sencilla Apache en tu propio ordenador, sin importar tu sistema operativo (Linux, Windows, MAC  o Solaris).

xampp-logo.png

XAMPP incluye además servidores de bases de datos como MySQL y SQLite con sus respectivos gestores phpMyAdmin y phpSQLiteAdmin. Incorpora también el intérprete de PHP, el intérprete de Perl, servidores de FTP como ProFTPD ó FileZilla FTP Server, etc. entre muchas cosas más.

XAMPP es una herramienta de desarrollo que permite probar un trabajo (páginas web o programación por ejemplo) en tu propio ordenador sin necesidad de tener que accesar a internet.

Paquetes que vienen con XAMPP

Paquetes básicos:

  • Apache, el servidor Web más famoso.
  • MySQL, una excelente base de datos de código libre.
  • PHP y Perl: lenguajes de programación.
  • ProFTPD: un servidor FTP.
  • OpenSSL: para soporte a la capa de sockets segura.

Paquetes gráficos:

  • GD (Graphics Draw): la librería de dibujo de gráficos.
  • libpng: la librería oficial de referencía de PNG.
  • libpeg: la librería oficial de referencía de JPEG.
  • ncurses: la librería de gráficos de caracteres.

Paquete de bases de datos:

  • gdbm: la implementación GNU de la librería standard dbm de UNIX.
  • SQLite: un motor de base de datos SQL muy pequeño y cero configuración.
  • FreeTDS: una librería de base de datos que da a los programas de Linux y UNIX la habilidad de comunicarse con Microsoft SQL y Sybase.

Paquetes XML:

  • expat: una librería parser de XML.
  • Salbotron: una toolkit de XML.
  • libxml: un parser C de XML y un toolkit para GNOME.

Paquetes PHP:

  • PEAR: la librería de PHP.
  • Una clase pdf que genera documentos PDF dinámicos con PHP.
  • TURCK MMCache: un potenciador de la performance de PHP.

Otros paquetes:

  • zlib: una librería de compresión.
  • mod_perl: empotra un interprete de Perl en Apache.
  • gettext: un conjunto de herramientas que asiste a los paquetes GNU para producir mensajes multilinguales.
  • mcrypt: un programa de encriptación.
  • Ming: una librería de salida en Flash.
  • IMAC C-Client: un API de correos

TEST DE TURING

CONCEPTO

El Test de Turing nace como un método para determinar si una máquina puede pensar. Su desarrollo se basa en el juego de imitación.

La idea original es tener tres personas, un interrogador, un hombre y una mujer. El interrogador está apartado de los otros dos, y sólo puede comunicarse con ellos escribiendo en un lenguaje que todos entiendan. El objetivo del interrogador es descubrir quién es la mujer y quien es el hombre, mientras que el de los otros dos es convencer al interrogador de que son la mujer.

1.PNG

La variante introducida por Turing consiste en sustituir a uno de los interrogados por un ordenador. Se pueden dar dos casos, que se sustituya al hombre, con lo cual sólo el ordenador tendría que aparentar ser una mujer, o que se sustituya a la mujer, con lo cual tanto el hombre como el ordenador estarían imitando. Aunque esta última opción podría ser un experimento interesante, no se intenta comprobar la habilidad de imitar a una mujer, así Turing cambia el objetivo de conocer el sexo por el de reconocer la máquina. La finalidad de estos cambios es hacer el juego lo más justo posible. Lo primero, es que no tiene que consistir en un concurso de engaños, por lo que uno de los implicados no tendría por qué aparentar ser otra cosa. Otro detalle es que a Turing poco le importa si el ordenador emplea trucos preestablecidos para eludir o manipular las respuestas (por ejemplo, equivocándose en preguntas aritméticas o tardando más tiempo del necesario en responderlas). Supone que el interrogador también les empleará para reconocerle, así que lo importante es lo que resulta del juego, no los métodos que se emplean para jugar ni los mecanismos internos de razonamiento, que, entre otras cosas, también son desconocidos en el ser humano.

Una máquina podría pasar el test de Turing cuando el interrogador no lograra reconocerlo en un número significativo de ocasiones.

OBJECIONES

Nada más aparecer el Test de Turing, también salen a la luz las primeras críticas. La mayoría de ellas estaban basadas en temas éticos y religiosos, y muchas de las posiciones más críticas venían de personas que consideraban que el ser humano era muy especial y que ninguna máquina podría ni siquiera acercarse a las capacidades de este.

Una de las primeras objeciones es matemática. El teorema de Gödel afirma que en un sistema lógico con la suficiente potencia se pueden crear frases que no pueden ser ni probadas ni refutadas dentro de él. Sin embargo, Turing afirma que de los errores o confusiones tampoco está libre la mente humana, y esto merma la capacidad intelectual.

Otra dificultad es la falta de conciencia. Se afirmaba que para que una máquina fuera mentalmente activa debería tener conciencia, tanto de sí misma como de los demás, y generar sentimientos positivos o negativos sobre la información que le llega o las acciones que realiza. El solipsismo es una radicalización de esta idea, que sostiene que la única manera de saber si una máquina piensa es ser esa máquina. El problema es que, siguiendo esta idea, la única manera de saber si otro ser humano piensa es ser ese ser humano, lo que se conoce como el problema de las otras mentes. Turing afirma que, si entre los seres humanos se considera políticamente correcto obviar el solipsismo, también debería hacerse con las máquinas. Y cómo la única forma de resolver el problema de la falta de conciencia es el solipsismo, lo más adecuado es que tampoco se considere.

Con la objeción de Lady Lovelace se quiere mostrar la idea de que las máquinas nunca podrían generar nada nuevo, sorprendente o distinto. Como dice Turing (y como cualquiera que haya utilizado, por ejemplo, un programa de cálculo estructural o simplemente conocidos sistemas operativos de ventanas, podría ratificar), el ordenador, siendo una máquina, puede sorprender continuamente. Aunque esto no puede considerarse como un proceso mental creativo, puede que la creatividad se realice en la mente del observador, y no en el generador. Por ejemplo, tanto puede sorprender un libro como una persona o un coche.

Al problema de que la máquina sea un sistema discreto mientras que la mente humana un sistema continuo (problema de la continuidad del sistema nervioso), Turing responde que cualquier sistema continuo se puede discretizar con suficientes recursos de forma que no se note la diferencia entre uno y otro.

Para finalizar, se puede hablar del problema de la informalidad de la personalidad. El comportamiento humano no puede describirse con un conjunto de reglas útiles en cualquier situación. La respuesta de Turing consiste en que hay diferencias entre reglas de conducta (por ejemplo, con el semáforo en rojo, pare) y reglas de actuación. Las reglas de conducta pueden enumerarse, pero no las de actuación, porque, entre otras cosas, muchas se desconocen. Pero Turing también afirma que aún con unas pocas reglas de actuación en un sistema discreto las respuestas pueden ser totalmente inesperadas y distintas, de forma que, al igual que en un ser humano, no se pueden preveer.

LAS PREDICCIONES DE TURING

El artículo de Turing recoge muchos comentarios audaces sobre las posibilidades de la inteligencia de las máquinas, que en aquel momento muchas parecían de ciencia ficción. Turing creía a los computadores capaces de desarrollar tareas humanas y de un modo humano, que las dificultades de diseñar máquinas pensantes eran principalmente de programación y que las “proezas” que él esperaba de las máquinas serían realizables en un futuro previsible (como ajustar su propio programa o predecir el efecto de alteraciones en su propia estructura).

Lo que en 1950, en términos de velocidad y capacidad en ordenadores era inimaginable, es ahora realidad. Sin embargo, las predicciones de Turing sobre máquinas y el Juego de Imitación, son todavía un desafío (Turing pensó que en unos 50 años habría máquinas que “jugarían” tan bien al Juego de Imitación que un interrogador no tendría una probabilidad mayor al 70 % de realizar la adecuada identificación tras cinco minutos de cuestiones)

DEL JUEGO DE IMITACIÓN AL TEST DE TURING.

AÑOS 1960 Y 1970.

Las primeras alusiones al Test de Turing (TT) fueron mayoritariamente filosóficas.

  1. Comentarios de Keith Gunderson

En su artículo “The Imitation Game” (1964, Mind) enfatiza dos puntos:

Cree que jugar al Juego de Imitación con éxito es un fin que puede ser alcanzado a través de diversos medios y particularmente, sin poseer inteligencia.

Sostiene que pensar es un concepto general y que jugar al Juego de Imitación no es sino un ejemplo de lo que las entidades pensantes pueden hacer

Los dos puntos son claramente críticos con la validez del Juego de Imitación como una medida de la inteligencia.

  1. Réplicas de John G. Stevenson

Lanza varios argumentos contra Gunderson en su artículo “On The Imitation Game” (1976). Una de estas objeciones es que para Gunderson el hecho de ser capaz de jugar al Juego de Imitación es simplemente un ejemplo, cuando no es así, ya que una máquina buena en dicho juego es capaz de hacer cosas impresionantes, dice, aunque no las haga de forma tan exhaustiva como en pensamiento humano.

  1. El Test de Turing como Ciencia Ficción.

Richard Purtill publica en 1971 un artículo en Mind, “Beating The Imitation Game” donde critica ideas de Turing. Piensa que el juego es interesante, pero como parte de la ciencia ficción. Encuentra que es inimaginable construir en un futuro previsible una máquina que juegue al Juego de Imitación, que es un sueño humano. Manifiesta que si algún día las máquinas se comportan como en la ciencia ficción, asentirá que piensan. Los ordenadores no son capaces de “jugar” exitosamente porque, para él, el comportamiento de los seres pensantes no es determinista y no puede ser explicado en términos puramente mecánicos.

Geoffrey Sampson ataca brevemente los argumentos de Purtill en “In Defence Of Turing”. Cree que el comportamiento de los computadores es determinista porque están diseñados por humanos, quienes tienen herramientas que les permiten estudiar cómo se comportan.

AÑOS 1980 Y 1990.

La Habitación China

A principios de los 80 John Searle propone un ejemplo:

Una persona que no sabe ni una palabra de chino es encerrada en una habitación.

Hay una apertura en el cuarto a través de la cual pasamos hojas de papel que contienen frases en chino, que para la persona, son garabatos sin significado. Pero tiene en la habitación un “Libro de Chuletas para el Test de Turing Chino”, de manera que al enviarle un escrito, consulta el libro y puede dar como respuesta cierta secuencia de símbolos chinos, cuyo significado, por supuesto, desconoce. Para la gente de fuera de la habitación parecía que la persona encerrada en la habitación entiende chino perfectamente, pero no es así. Estaría pasando el Test de Turing Chino sin saber nada de dicho idioma. Esto es claramente una crítica al TT y a la visión computacional de la mente.

SOAPUI

soapUI-logo.pngSoapUI es una herramienta de gran alcance diseñada para ayudar en la prueba y el desarrollo de aplicaciones. Permite efectuar el testeo de la web, con docenas de características, incluyendo una interfaz simple, fácil e intuitiva. Permite la utilización de métodos de captura y repetición, siendo una herramienta de gran ayuda en la realización de pruebas de carga de gran alcance, informes detallados, gráficos, etc.

SoapUI trae embebido el navegador Internet Explorer de Microsoft, permitiendo la monitorización y el control de las acciones que en él se producen.

Esto permite:

  • Realizar capturas de los parámetros del cgi, las páginas y los framesets solicitados.
  • Modificar capturas y poder volverlas a ejecutar en cualquier momento sin necesidad de volver a ejecutarlas.
  • Grabar las capturas como scripts y poderlas compartir dentro del entorno de trabajo.
  • Capturar la estadística del funcionamiento mientras se ejecuta una prueba.
  • Realizar pruebas de regresión de áreas enteras de sitios web complejos en un solo clic.

Las principales funcionalidades que aporta la herramienta soapUI son:

  • Soporte a SOAP 1.1 y 1.2.
  • Incorpora un monitor SOAP para capturar y analizar el tráfico.
  • Inspecciona Web Services WSDL y REST (tanto WADL como WADLess) y los visualiza jerárquicamente.
  • Genera automáticamente los tests y las peticiones SOAP de las operaciones definidas en el descriptor WSDL o WADL.
  • Permite verificar la conformidad de un WSDL según los estándares WS-I*.
  • Opcionalmente, puede utilizarse el scripting de Groovy para que el comportamiento de los tests sea dinámico.
  • Soporta varios métodos de autentificación: Basic, Digest, WS-Security y NTLM Web Service.
  • Soporta diferentes tecnologías de ficheros adjuntos: MTOM, SOAP con Attachments, ficheros Inline para WSDL y MIME Attachments para REST.
  • Verificación del contenido de mensajes con Xpath y Xquery.
  • Versatilidad en la configuración del test de carga, pudiendo indicar el límite (en tiempo o peticiones), el número de threads de ataque, el método HTTP de la petición (POST, GET …).
  • Permite exponer Web Services de simulación (o mocking) con el contenido de respuesta personalizable.

Pruebas Funcionales

SoapUI soporta pruebas funcionales de Servicios Web suministrando un caso de prueba con un número de pasos que pueden ser ejecutados en secuencia. En la actualidad, hay seis tipos de pasos que proporcionan muchas posibilidades de prueba. Los casos de prueba están organizados en un grupo de pruebas y, en un mismo proyecto, se pueden crear varios grupos de pruebas.

Las pruebas funcionales, en soapUI, se pueden usar para una variedad de propósitos:

  • Unidad de prueba: valida que cada operación del Servicio Web funciona como se indica.
  • Pruebas de compatibilidad: valida que el resultado devuelto por el Servicio Web es compatible con su definición.
  • Prueba de procesos: valida que una secuencia de invocaciones de Servicios Web ejecuta un proceso de negocio requerido.
  • Pruebas guiadas por datos: valida que cualquiera de los anteriores funciona como requerimiento de datos de entrada procedentes de fuentes externas (por ejemplo, una base de datos u otro servicio Web)

GENERACIÓN DE NÚMEROS ALEATORIOS EN JAVA

La clase Random proporciona un generador de números aleatorios. Es más flexible que la función random de la clase Math. Vamos a ver un repaso de uso de la clase Random con ejemplos y ejercicios resueltos. La generación de números aleatorios adquiere gran relevancia para un programador, pudiendo tener distintas aplicaciones como:

  1. Construcción preliminar de programas, en los que a falta de datos definitivos, introducimos datos aleatorios.
  2. Simulación de procesos aleatorios (número resultante de tirar un dado, elección de un color por parte de una persona, número premiado en un sorteo de lotería, cantidad de personas que entran a un supermercado en una hora…)
  3. Verificación de programas, y en particular lo que en verificación de algoritmos se conoce como verificación aleatoria (probar el programa con distintos supuestos aleatorios).
  4. Otras aplicaciones.

Pasos sintácticos a emplear para crear una secuencia de números aleatorios:

  1. Proporcionar a nuestro programa información acerca de la clase Random. Al principio del programa escribiremos la siguiente sentencia:
import java.util.Random;
  1. Crear un objeto de la clase Random: la clase Random dispone de dos constructores, para crear un objeto. El primer constructor es:
Random  rnd = new Random();

Este constructor crea un generador de números aleatorios cuya semilla es inicializada automáticamente, en base al tiempo actual. Esto conlleva que en cada ejecución la semilla cambie, es decir, que la secuencia de números aleatorios que se genera en cada ejecución siempre será diferente.

El segundo constructor es:

Random rnd = new Random(inicializar_semilla);

Este constructor nos permite inicializar la semilla manualmente con un número entero cualquiera. Si este número es el mismo en cada ejecución, la secuencia de números aleatorios que se genera en cada ejecución será igual.

  1. Llamar a una de las funciones miembro que generan un número aleatorio:

Lo más habitual, para generar un número aleatorio, es usar la función miembro rnd.nextDouble(). El valor devuelto es de tipo double. Un aspecto importante a tener en cuenta, es que el valor devuelto se encuentra en el rango mayor o igual a cero y menor a 1. Es decir, el número devuelto puede ser cero pero no puede ser uno.

    /* Ejemplo uso clase Random() */
    import java.util.Random;
    public class Programa {
        public static void main(String arg[ ]) {
              Random rnd = new Random();
              System.out.println("Número aleatorio real entre [0,1[ : "+rnd.nextDouble());
         }
    }

En el caso de necesitar números aleatorios enteros en un rango determinado, podemos trasladarnos a un intervalo distinto, simplemente multiplicando, aplicando la siguiente fórmula general:

(int) (rnd.nextDouble() * cantidad_números_rango + término_inicial_rango)

donde (int) al inicio, transforma un número decimal double en entero int, eliminando la parte decimal.