Feb
09
2010
0

Idean un sistema que detecta minas antipersona de plástico

La detección de minas antipersona de plástico es una labor compleja. A diferencia de otro tipo de minas, como las antitanque, apenas están compuestas de metal y los detectores de este tipo son incapaces de localizarlas. A este hecho se suma su escaso precio. La fabricación de este tipo de explosivos supone un coste cercano a los dos euros, por lo que son ampliamente utilizadas en países de Oriente Medio y África donde se han originado conflictos.

En la actualidad la búsqueda de las minas antipersona de plástico para su desactivación se realiza de forma rudimentaria, aunque

existen alternativas basadas en el uso de radar o las imágenes de infrarrojo. En esta última línea, Fernando Pardo seco, ingeniero del Departamento de Tecnología Electrónica en la Universidad de Valladolid ha desarrollado un novedoso sistema de detección. “La mina tiene distintas propiedades térmicas que el suelo, entonces cuando se toman distintas imágenes de infrarrojo del terreno a intervalos regulares la mina produce una perturbación, lo que nos indica que hay algo enterrado”, explica el científico.

Después, el software específico que ha creado genera mapas térmicos del suelo en tres dimensiones. “Utilizando un algoritmo, somos capaces de detectar si lo que hay enterrado es una mina y no una piedra u otro objeto, y a que profundidad se encuentra”, precisa. El trabajo, realizado en colaboración con la Universidad de Santiago de Compostela y La Sapienza de Roma (Italia), ha centrado la tesis doctoral de Fernando Pardo. Paula López, investigadora de la universidad gallega, ha sido quien ha obtenido el algoritmo de detección.

Menos tiempo

Una de las mejoras que introduce el sistema desarrollado es la reducción de tiempos. “Con otros algoritmos analizar una porción de suelo de un metro cuadrado podía durar una hora y desde el punto de vista práctico esto no es muy eficiente. Lo que nosotros logramos es reducir estas cuatro horas a diez minutos, que ya es un tiempo más razonable”, asegura el experto. En cuanto a la superficie que el método de detección es capaz de abarcar señala que, al alejar la cámara infrarroja para analizar un terreno mayor, “se pierde resolución”. Por ello, examinan el suelo en porciones de un metro cuadrado. “Si se coloca la cámara más alta para abarcar más terreno las minas van a ser unos pocos píxeles y no se va a poder detectar nada”, aclara.

Finalmente, cuando se detecta una de las minas de plástico lo que se hace es desactivarla, frente a otros procedimientos de explosión controlada. De este modo, relata Fernando Pardo, se evitan problemas de contaminación del suelo. “En el caso de las minas antitanque lo único que interesa es despejar el terreno, por lo que se explotan, pero quedan restos”, señala, tras añadir que en el caso de las minas antipersona “esto no interesa porque sino la tierra no se puede utilizar en agricultura”.

Con el sistema implementado, además de detectar minas se pueden localizar otros objetos. Sólo es necesario conocer su propiedad térmica, según apunta el investigador. Así, los infrarrojos se utilizan en “técnicas de evaluación no destructiva”, como por ejemplo para analizar piezas en una fábrica y controlar si cuentan con algún tipo de defecto.

Artículo publicado en Servicio de Información y Noticias Científicas (SINC).

Written by Jp Neira in: Tecnología |
Feb
09
2010
0

Tejados blancos reducen el efecto “isla de calor”

Según un modelo informático se podría reducir la temperatura de las ciudades si se pintarán de blanco todos sus tejados.

Foto
Fuente: American Geophysical Union, Maria-José Viñas.

En vista del inmenso problema climático que se nos avecina se han llegado a proponer toda clase de ideas locas. Las más descabelladas versan sobre geoingeniería, que básicamente tratan de tomar el control sobre el clima, algo que la Tierra ha venido haciendo de forma automática desde hace miles de millones de años, y que pasaría a estar en manos de los humanos. Es sin duda una inmensa responsabilidad.
Algunas de estas propuestas tratan de conseguir que llegue al suelo una menor cantidad de luz solar a través de algún tipo se sombrilla espacial o aumentando el albedo de la Tierra, es decir de aumentar la cantidad de luz reflejada por la Tierra. Esto podría conseguir rebajar en unos grados la temperatura media mundial, aunque no de manera adecuada para cada lugar y sin detener la acidificación de los océanos, que es un problema de igual magnitud que el aumento de la temperatura.
Hace un tiempo se propuso una variante de esta idea consistente en pintar de blanco los tejados de los edificios. Su efecto sería similar al de los casquetes polares, pero además se conseguiría ahorrar energía (y por tanto emisiones de dióxido de carbono) en verano al haber menos necesidad de usar el aire acondicionado. Aunque a primera vista parecía una broma, no lo es tanto.
Ahora, un grupo de científicos del National Center for Atmospheric Research de EEUU ha demostrado con un modelo informático que el sistema sería útil, al menos en las ciudades.
Según ellos, pintar los tejados de blanco es un método efectivo de reducir el calor urbano. Aunque dicen que habría que trabajar más en la idea, necesitándose más investigación al respecto antes de imponer algo así. El estudio ha sido publicado en Geophysical Research Letters.
Las ciudades son particularmente vulnerables al cambio climático porque son más cálidas que las áreas rurales. El negro asfalto, los tejados alquitranados y otras superficies absorben mucha luz solar y se calientan, creando un efecto de isla de calor que hace elevarse la temperatura de 1 a 3 grados o más respecto al campo. Los tejados blancos pueden compensar en parte este efecto.
El modelo computacional sobre el que estos investigadores han trabajado simula la cantidad de luz solar que es absorbida y reflejada en áreas urbanas de una ciudad prototipo en diversas localizaciones en el mundo. Los resultados obtenidos indican que si se pintaran de blanco los tejados se podría reducir el efecto de isla de calor en un 33%, algo bastante interesante, sobre todo en los días más calurosos del verano.
Los autores del estudio advierten que el modelo es sencillo y que las ciudades que se tienen en cuenta están idealizadas y no representa ciudades reales específicas. En una ciudad real, además, se va acumulando polvo o suciedad que reduce el efecto a lo largo del tiempo.
Como resultado de este efecto, y dependiendo del clima local, la temperatura dentro de los edificios también disminuye, por lo que se ahora energía y emisiones. Los investigadores indican que unas ciudades se beneficiarían más que otras de este efecto dependiendo de la densidad de tejados, del tipo de construcción y de la localización de la ciudad. Al parecer el efecto es más importante en latitudes medias de clima templado.
¿Podemos hacer algo a nivel individual? En una entrevista concedida a la NPR hace unas semanas, el investigador que propuso esta idea decía que depende de si nuestro tejado lo pintamos nosotros mismos o le pagamos a otro para hacerlo. Si es lo segundo la inversión no se amortiza en nuestra cuenta de electricidad, pero si somos nosotros los que le damos a los arreglos caseros entonces sí. En edificios de nueva construcción siempre se amortiza, y desde el punto de vista climático es siempre bueno.
Pero hay un factor que a veces se olvida: puede que la idea sea menos efectiva en invierno en esas mismas zonas templadas donde un tejado pintado de blanco es tan efectivo en verano. Al absorber menos luz solar puede que gastemos más en calefacción con tejados blancos. ¿Terminaremos por reconfigurar nuestras casas según la estación del año en la que nos encontremos?

Copyleft: atribuir con enlace a http://neofronteras.com/?p=2999

Fuentes y referencias:
Nota de prensa del National Center for Atmospheric Research.

Written by Jp Neira in: Ecología & Medio Ambiente |
Feb
09
2010
0

¡La idea del Alma!

Es verdaderamente meritoria la idea del Alma, una idea poderosa que hace posible la esperanza en el “más allá”, la vida después de la muerte.  Todos podemos ver como el cuerpo se destruye cuando se muere, sin embargo, el Alma invisible, puede dejar el cuerpo y etérea flotar hasta los cielos (si hemos sido buenos) o a los infiernos (si hemos sido malos).

Mirando la Historia y lo que ahora mismo nos rodea, si eso es así ¿cómo tendría que ser de grande el infierno?

Verdaderamente, la noción de “Alma” podría ser considerada como una de las ideas más grandes de la Humanidad, ha sido muy bien manejada por las religiones para poder dirigir y atemorizar a los pueblos que, ignorantes, estaban a merced de la amenaza divina que en boca de los sacerdotes del momento, fustigaban sin piedad sus conciencias llevadas, a un callejón sin salida de una culpabilidad inexistente que las hacía vulnerables.

Sí, algunos dirán que es más poderosa la idea de Dios que también es más universal, y,  algunos se preguntarán si ambas ideas no se sobreponen.  Y así es, la idea de Dios ha sido una idea poderosísima  a lo largo de la Historia, y continúa siéndolo en gran parte del planeta.  Al mismo tiempo, sin embargo, hay dos buenas razones para pensar que el Alma ha sido (y sigue siendo) una idea más influyente y fecunda que la idea misma de la divinidad.

Una razón es que, con la invención de la otra vida (una idea que no todas las religiones comparten, pero sin la cual una entidad como el Alma tendría mucho menos sentido), se abrió el camino – como antes comentaba- para que las religiones organizadas controlaran las mentes de los hombres para su propio beneficio, hay que tener presente que, por ejemplo la Iglesia, sólo nos da bendiciones, sin embargo, siempre está dispuesta a coger todo lo que pueda.  Si el  pueblo llano conociera las posesiones y riquezas de la Iglesia, el boato y suntuosidad de sus grandes representantes que, impasibles, ven morir a miles y decenas de miles de criaturas en los distintos lugares de la Tierra, sin mover ni un dedo para remediarlo, sin conocieran esto digo, muchos de ellos no pisarían más una iglesia.

Durante la antigüedad tardía y la Edad Media, la tecnología del Alma, dio un juego excelente para sacerdotes y religiones.

Su relación con la “otra vida”, con la divinidad y, en especial, con el clero, permitió a las autoridades religiosas ejercer un poder extraordinario.

No se puede negar que, la idea del Alma, enriqueció inmensamente la mente de los seres humanos a lo largo de los siglos, pero tampoco se puede negar que también es cierto que durante ese mismo tiempo mantuvo a raya el pensamiento y la libertad. ¿Os acordáis de Galileo? Aquello retrasó el progreso y contribuyó a mantener al pueblo (en su mayor parte) ignorante y sometido al clero educado y culto.

Sólo tenemos que pensar en la desfachatez con que el fraile Tetzel afirmaba que era posible comprar indulgencias para las “almas” del purgatorio, y que estas saldrían volando al cielo tan pronto como las monedas golpearan el plato.  Los abusos como estos, aún persisten hoy en día, nada más claro como ejemplo el ver la cantidad de ancianos y viudas que solos en la vida y enfermos, dejan sus fortunas a la Iglesia que, por cierto, tienen situadas sus propiedades en los mejores enclaves de las ciudades.

Los abusos a que se prestaba lo que algunos llaman “tecnologías del alma” fueron uno de los principales factores que condujeron a la Reforma, la cual, a pesar de lo ocurrido con Juan Calvino en Ginebra, fundamentalmente despojó al clero del control de la fe e impulsó la duda y el descreimiento.

Las diversa transformaciones del alma (la idea de que estaba contenida en el semen en la Grecia de Aristóteles,  el alma tripartita del Timen platónico, la concepción medieval y renacentista del Homo duplex, la idea del alma como mujer, o como ave, el diálogo entre el alma y el cuerpo de Marvell, “las monadas” de Leibniz) pueden resultar hoy bastante pintorescas, pero en su época fueron cuestiones muy serias, y constituyeron importantes etapas en la ruta hacia la idea moderna del ser.

En mi anterior trabajo os hablé de manera bastante extensa sobre estas cuestiones del ser, el alma, la conciencia y, en definitiva, del cerebro que es habitad natural de todas estas cuestiones.  La filosofía y la metafísica están presentes haciendo compañía a lo que entendemos por ser consciente.

Las profundidades del ser (nuestro complejo de interioridad) se manifestó en la llamada Era Axial, en términos aproximados, entre los siglos VII y IV a. de C.

Por aquella época, más o menos de manera simultánea, ocurrió algo similar en Palestina, la India,  China, Grecia y muy posiblemente también en Persia.  En cada uno de estos casos, la religión establecida se había vuelto en extremo ritualista y exhibicionista.  En particular, en todas partes habían surgido sacerdotes que se habían adjudicado una posición de altísimos privilegios, con lo cual, Vivian de manera totalmente opuesta a lo que predicaban.

Aquella casta privilegiada, controlaba el acceso a Dios o a los Dioses (según los casos), y se beneficiaba de su elevado estatus que, sobre todo, ponían al servicio de los poderosos de turno.

Pero en todas estas culturas, surgieron profetas molestos que, al pregonar la salvación del Alma desde otro prisma distinto, dejaban al descubierto las mentiras interesadas de estos sacerdotes y falsas religiones.

Surgieron profetas (en Israel) u hombres sabios (Buda y los autores de los Upanishads en la India, Confucio en China,  etc.)  Que denunciaron al clero y recomendaron la introspección, a sostener que la ruta hacia la auténtica santidad implicaba algún tipo de abnegación y de estudio íntimo.  Platón sentó las bases de la supremacía de la mente sobre la materia.

Todos estos hombres mostraron el camino a través del ejemplo personal, y su mensaje es muy similar al que más tarde predicaron Jesús y,  más tarde, San Agustín y algún otro.

De éstos auténticos hombres buenos  que incluso sacrificaron sus vidas para dedicar todo su esfuerzo al bien de los demás, se han aprovechado, desde tiempos inmemoriales, la legión de desaprensivos que amparados y enmascarados en las distintas religiones han utilizado toda esa bondad para el propio lucro, engañando a los fieles de buena fe de manera inmisericorde y en ausencia total de conciencia, moral y ética.

¡Que gentuza!

Via | blog Emilio Silvera

Written by Jp Neira in: Historia, Pensamiento Crítico / Reflexión |
Feb
08
2010
0

El inabarcable universo de los sabores o tu imposibilidad de distinguir Pepsi de Coca Cola

Hay dos mundos que me fascinan por su complejidad y minuciosa nomenclatura. El primero es el de los colores, al que un día le dedicaré un post para explicaros los miles y miles de nombres que existen para diferentes tonos de color, dejando el abanico cromático del arcoiris como un dibujo naïf de niño pequeño.

El segundo mundo es el de los sabores. No sé si habéis visto Ratatouille. Quizá creáis que la pompa y el boato de los grandes chefs a la hora de elaborar sus platos, así como la liturgia de los críticos a la hora de consumirlos, son en gran parte impostura, exageración. Os puedo asegurar que no es así. Al menos no del todo.

El mundo de los sabores es inmenso, y nosotros tenemos unos paladares demasiado atrofiados para distinguirlo. Si no, os desafío a distinguir entre dos vasos de bebida de cola qué es Coca Cola o qué es Pepsi. ¿Os creéis capaces? Seguro que sí. Pero al final de este artículo, os demostraré que no es así. Paciencia, primero he de explicaros algo más sobre el universo de los paladares exquisitos.

(más…)

Written by Jp Neira in: Ciencia |
Feb
08
2010
0

Tutorial rápido de PHP

Este tutorial me sirvio mucho a la hora de editar las plantillas de mi theme de wordpress

Introducción

PHP es un lenguaje de script, multiplataforma, publicado bajo una licencia libre, que se suele utilizar del lado del servidor para crear páginas web dinámicas. A día de hoy es el tercer lenguaje más popular del mercado según el índice TIOBE, sólo por detrás de Java y C.

Creado por Rasmus Lerdorf en 1995, su nombre es (actualmente) un acrónimo recursivo de “PHP: Hypertext Preprocessor” (Preprocesador de Hipertexto PHP).

La última versión estable a la hora de escribir estas líneas, la cuál se puede descargar desde su página web, es la 5.3.1, de Noviembre de 2009.

Ya explicamos hace tiempo cómo instalar Apache, y cómo instalar PHP y MySQL en Windows. También es posible descargar aplicaciones que instalen las 3 herramientas rápida y fácilmente (no recomendado para entornos de producción), como WampServer o XAMPP.

Primer programa en PHP

Creemos una primera pequeña página web dinámica, que mostrará la fecha y hora actual.

  1. <html>
  2. <head><title>Fecha y hora</title></head>
  3. <body>
  4. <?php
  5. // Esto imprime la fecha
  6. echo “Hoy es ”, date(“d/n/Y”);
  7. echo “<br/>”;
  8. // Y esto la hora
  9. echo “Son las ”, date(“h:m:s”);
  10. ?>
  11. </body>
<html>
<head><title>Fecha y hora</title></head>
<body>
<?php
// Esto imprime la fecha
echo "Hoy es ", date("d/n/Y");
echo "<br/>";
// Y esto la hora
echo "Son las ", date("h:m:s");
?>
</body>

Además de usando la sintaxis anterior, <?php .... ?>, que es lo más común y recomendable, también se puede insertar código PHP en documentos HTML usando:

  • <script language="php"> .... </script>
  • <? .... ?> si está activada la opción short_open_tag en php.ini
  • <% .... %> si está activada la opción asp_tags en php.ini

Esto no es Python: cada instrucción termina con ‘;’ (no es necesario si es la última instrucción).

Para los comentarios se puede utilizar:

  1. /* varias
  2. lineas */
  3. // una linea
  4. # una linea
/* varias
   lineas */

// una linea

# una linea

Aunque no es una característica integrada en el lenguaje, para comentarios de documentación se suele utilizar PHPDoc, el equivalente al JavaDoc de Java en PHP.

  1. /**
  2. * Ejemplo de documentación de una función
  3. * @param int $foo un entero cualquiera
  4. */
/**
 * Ejemplo de documentación de una función
 * @param int $foo un entero cualquiera
 */

Para imprimir datos por pantalla se puede usar, entre otros, echo, print, printf o print_r.

A echo se le pasa una cadena que imprimirá. No es necesario utilizar paréntesis porque no es una función. También se le puede pasar varias cadenas, separadas por comas, y este las imprimirá todas unas detrás de otra, sin dejar espacios entre ellas:

  1. echo “Hola ”, “mundo ”, “en PHP”;
echo "Hola ", "mundo ", "en PHP";

print funciona de forma similar a echo, pero no puede tomar varios argumentos, y devuelve un valor de retorno. Debido a esto es algo más lento que echo.

  1. print “Hola mundo”;
print "Hola mundo";

A diferencia de echo y print, printf sí que es una función. Se comporta de manera similar a la función del mismo nombre de C, es decir, se pueden utilizar especificadores de formato. En el siguiente ejemplo $nombre y $edad serían variables con el nombre y la edad de una persona, y su valor se embebería en la cadena en las posiciones indicadas por %s (especificador de cadena) y %d (especificador de entero).

  1. printf(“%s tiene %d años”, $nombre, $edad);
printf("%s tiene %d años", $nombre, $edad);

print_r es una función que podemos utilizar para la depuración. Su función es la de imprimir variables de forma legible para las personas. Por ejemplo, si le pasáramos una matriz, imprimiría sus claves y valores

print_r($matriz);

Variables

El nombre de las variables debe comenzar siempre con ‘$’.

PHP tiene tipado dinámico: al crear una variable no se especifica el tipo, sino que el intérprete de PHP lo determina en tiempo de ejecución según el contexto.

  1. $texto = “Hola mundo”;
$texto = "Hola mundo";

En PHP tenemos como tipos simples los booleanos (boolean), números enteros (integer), números en coma flotante (float) y cadenas (string). Como tipos compuestos tenemos matrices (array) y objetos (object). Además tenemos un par de tipos especiales: resource, enteros que se usan para referenciar recursos; y NULL, el tipo nulo.

Para obtener el tipo de una variable se puede utilizar gettype($var)

  1. $texto = “Hola mundo”;
  2. echo gettype($texto);
$texto = "Hola mundo";
echo gettype($texto);

Para obtener el tipo y otra información sobre la variable, como los valores para un array o las propiedades de un objeto, se puede utilizar var_dump($var)

  1. $texto = “Hola mundo”;
  2. echo var_dump($texto);
$texto = "Hola mundo";
echo var_dump($texto);

El tipo de una variable puede cambiar según el valor que almacenemos en ella.

  1. $variable = “Hola mundo”;
  2. echo gettype($variable), “<br/>”;
  3. $variable = 22;
  4. echo gettype($variable);
$variable = "Hola mundo";
echo gettype($variable), "<br/>";
$variable = 22;
echo gettype($variable);

Además las variables tienen tipado débil, y su tipo puede cambiar según el uso que queramos hacer de ellas.

  1. $variable = “22″;
  2. echo $variable / 2;
$variable = "22";
echo $variable / 2;

Para comprobar si una variable es de un cierto tipo se pueden utilizar las funciones is_tipo, como is_bool($var), is_string($var), is_object($var), is_float($var)

Para comprobar si una variable tiene un valor asociado se puede utilizar la función isset($var).

Para crear constantes se usa la función define. Al no ser variables propiamente dichas, no se utiliza el caracter $ al principio.

  1. define(“PI”, 3.14159);
  2. echo “Pi es ”, PI;
define("PI", 3.14159);
echo "Pi es ", PI;

Como hay un carácter que identifica las variables, podemos introducirlas directamente en una cadena, y PHP la sustituirá por su valor. No tenemos por qué hacer algo como

  1. $usuario = “Juan”;
  2. echo “Hola ”, $usuario“;
$usuario = "Juan";
echo "Hola ", $usuario";

sino que podríamos hacer simplemente

  1. $usuario = “Juan”;
  2. echo “Hola $usuario”;
$usuario = "Juan";
echo "Hola $usuario";

Si necesitamos indicar el final del nombre de la variable explícitamente se pueden utilizar llaves. En el siguiente código, por ejemplo, si no utilizáramos llaves el intérprete buscaría una variable de nombre $productos.

  1. $producto = “Donut”;
  2. echo “Le gustan los {$producto}s”;
$producto = "Donut";
echo "Le gustan los {$producto}s";

También se puede utilizar la misma sintaxis para hacer cosas más complejas, como llamar a funciones dentro de la cadena:

  1. echo “Ha comprado {$objeto.contar()} platos”;
echo "Ha comprado {$objeto.contar()} platos";

Operadores

Los operadores aritméticos son la suma (+), resta (-), multiplicación (*), división (/) y módulo (%).

Operadores de comparación

Operador Descripción
== true si ambos operandos son iguales
!= true si ambos operandos son distintos
=== true si ambos operandos son iguales, no sólo en valor, sino también en tipo
!== true si ambos operandos son distintos, en valor o tipo
< true si el primer operando es menor que el segundo
> true si el primer operando es mayor que el segundo
<= true si el primer operando es menor o igual que el segundo
>= true si el primer operando es mayor o igual que el segundo

Operadores lógicos

Operador Descripción
and / && true si se cumplen ambas condiciones
or / || true si se cumple una de las condiciones
xor true si se cumple sólo una de las condiciones
! true si no se cumple la condición

Booleanos

Las variables de tipo booleano pueden tener como valor true o false. Son equivalentes a false el 0, una cadena vacía, un array vacío y NULL.

Arrays

Para crear un array se utiliza la función del mismo nombre.

  1. $codigos = array(0 => “España”, 1 => “Italia”);
$codigos = array(0 => "España", 1 => "Italia");

Como clave se pueden usar números, como una matriz normal, o cadenas, para crear un diccionario o array asociativo.

  1. $codigos = array(“ES” => “España”, “IT” => “Italia”);
$codigos = array("ES" => "España", "IT" => "Italia");

Si no se especifica una clave se usa el último índice + 1, o bien 0 si no se ha especificado ningún índice aún:

  1. $codigos = array(“España”, “Italia”);
  2. $dias = array(1 => “Lunes”, “Martes”, “Miércoles”);
$codigos = array("España", "Italia");
$dias = array(1 => "Lunes", "Martes", "Miércoles");

También se puede crear una matriz usando los corchetes, elemento por elemento:

  1. $matriz[0] = “Hola ”;
  2. $matriz[1] = “mundo”;
$matriz[0] = "Hola ";
$matriz[1] = "mundo";

Si no se especifica la clave ocurre lo mismo que con la función array; se usa el último índice + 1, o 0 si no se ha especificado ningún índice todavía:

  1. $matriz[] = “Hola ”;
  2. $matriz[] = “mundo”;
$matriz[] = "Hola ";
$matriz[] = "mundo";

Para modificar un valor, también se usan los corchetes:

  1. $matriz[0] = “Hello ”;
$matriz[0] = "Hello ";

Para eliminar un par clave-valor se puede usar la función unset($var)

unset($matriz[0]);

unset es una función que sirve para eliminar una variable dada, así que podríamos eliminar la propia matriz haciendo

unset($matriz);

Para contar el número de elementos en el array se puede usar la función count($var), que también se puede usar con los objetos para contar el número de propiedades que tiene.

Para ordenar los elementos de la matriz se puede usar

  • sort($array)
  • rsort($array), ordena en orden inverso
  • array_multisort($array), para arrays multidimensionales
  • asort($array), ordena manteniendo la asociación de índices
  • arsort($array), ordena en orden inverso, manteniendo la asociación de índices
  • ksort($array), ordena por clave
  • krsort($array), ordena por clave en orden inverso
  • natsort($array), ordena usando un algoritmo de “orden natural”
  • uasort($array), ordena usando una función definida por el usuario, mateniendo la asociación de índices
  • uksort($array), ordena usando una función definida por el usuario usando las claves
  • usort($array), ordena usando una función definida por el usuario

Para comprobar si un determinado elemento está dentro de un array se usa in_array. PHP indexa todos los valores de los arrays, así que es mucho más rápido usar esta función que un bucle que compruebe uno por uno.

  1. in_array(“pepe”, $usuarios);
in_array("pepe", $usuarios);

Cadenas

Las cadenas se pueden delimitar de 4 formas. Con dobles comillas, en cuyo caso se pueden utilizar caracteres especiales, como \n o \t, y se sustituyen las variables por sus valores:

  1. $usuario = “Juan”;
  2. $mensaje = “<pre>Hola\n$usuario</pre>”;
  3. echo $mensaje;
$usuario = "Juan";
$mensaje = "<pre>Hola\n$usuario</pre>";
echo $mensaje;

comillas simples, en las que se NO se pueden utilizar caracteres especiales, ni se sustituyen las variables por sus valores. Debido a esto dan un rendimiento marginalmente mejor que las dobles comillas:

  1. $usuario = “Juan”;
  2. $mensaje = ‘<pre>Hola\n$usuario</pre>’;
  3. echo $mensaje;
$usuario = "Juan";
$mensaje = '<pre>Hola\n$usuario</pre>';
echo $mensaje;

sintaxis heredoc, en las que, como en las dobles comillas, se pueden utilizar caracteres especiales y se sustituyen las variables por sus valores. No se necesitan escapar las comillas si queremos imprimirlas, y se puede escribir el texto en varias líneas:

  1. $mensaje = <<< IDENTIFICADOR
  2. Ejemplo de cadena
  3. que ocupa
  4. varias líneas
  5. IDENTIFICADOR;
  6. echo $mensaje;
$mensaje = <<< IDENTIFICADOR
Ejemplo de cadena
que ocupa
varias líneas
IDENTIFICADOR;
echo $mensaje;

sintaxis nowdoc, similar a heredoc, pero no se sustituyen las variables por sus valores:

  1. $mensaje = <<< ‘IDENTIFICADOR’
  2. Ejemplo de cadena
  3. que ocupa
  4. varias líneas
  5. IDENTIFICADOR;
  6. echo $mensaje;
$mensaje = <<< 'IDENTIFICADOR'
Ejemplo de cadena
que ocupa
varias líneas
IDENTIFICADOR;
echo $mensaje;

Una vez creada se puede acceder a posiciones de la cadena como si de una matriz se tratara

  1. $cadena = “Hola mundo”;
  2. echo $cadena[5];
$cadena = "Hola mundo";
echo $cadena[5];

e incluso modificar posiciones de igual forma

  1. $cadena = “Hola amigo”;
  2. $cadena[9] = “a”;
  3. echo $cadena;
$cadena = "Hola amigo";
$cadena[9] = "a";
echo $cadena;

Se pueden concatenar cadenas con el operador ‘.’:

  1. $conc = “Hola ” . “mundo”;
  2. echo $conc;
$conc = "Hola " . "mundo";
echo $conc;

Para obtener el número de caracteres que tiene una cadena se utiliza la función strlen($cadena).

Para obtener parte de una cadena se utiliza la función substr($cadena, $inicio, $tamanyo)

  1. $cadena = “Hola mundo”;
  2. echo substr($cadena, 5, 3);
$cadena = "Hola mundo";
echo substr($cadena, 5, 3);

Para reemplazar una subcadena por otra se puede utilizar substr_replace($cadena, $reemplazo, $inicio, $tamanyo)

  1. $cadena = “Hola mundo”;
  2. echo substr_replace($cadena, “Arman”, 5, 3);
$cadena = "Hola mundo";
echo substr_replace($cadena, "Arman", 5, 3);

Para reemplazar todas las ocurrencias de una cadena por otra se puede utilizar la función str_replace($subcadena, $reemplazo, $cadena, &$ocurrencias)

  1. $cadena = “Hola mundo”;
  2. echo str_replace(“o”, “a”, $cadena);
$cadena = "Hola mundo";
echo str_replace("o", "a", $cadena);

Se puede dividir una cadena en partes utilizando un cierto delimitador con la función explode($delimitador, $cadena, $limite)

  1. $cadena = “Hola mundo”;
  2. $palabras = explode(“ ”, $cadena);
  3. print_r($palabras);
$cadena = "Hola mundo";
$palabras = explode(" ", $cadena);
print_r($palabras);

Para buscar una subcadena dentro de la cadena se puede utilizar la función strpos($cadena, $subcadena, $offset)

  1. $cadena = “Hola mundo”;
  2. $subcadena = “m”;
  3. $posicion = strpos($cadena, $subcadena);
$cadena = "Hola mundo";
$subcadena = "m";
$posicion = strpos($cadena, $subcadena);

Control de flujo

Condicionales

  1. if ($condicion) {
  2. echo “Se cumple la primera condición”;
  3. elseif ($condicion2) {
  4. echo “No se cumple la primera condición, pero sí la segunda”;
  5. else {
  6. echo “No se cumple ninguna de las 2 condiciones”;
  7. }
if ($condicion) {
    echo "Se cumple la primera condición";
} elseif ($condicion2) {
    echo "No se cumple la primera condición, pero sí la segunda";
else {
    echo "No se cumple ninguna de las 2 condiciones";
}
  1. switch($usuario) {
  2. case “admin”:
  3. echo “Bienvenido Dr. Falken”;
  4. break;
  5. case “zootropo”:
  6. echo “Hola Raúl”;
  7. break;
  8. default:
  9. echo “Lo siento Dave, me temo que no puedo hacer eso”;
  10. break;
  11. }
switch($usuario) {
    case "admin":
        echo "Bienvenido Dr. Falken";
        break;
    case "zootropo":
        echo "Hola Raúl";
        break;
    default:
        echo "Lo siento Dave, me temo que no puedo hacer eso";
        break;
}

Bucles

  1. for ($contador = 0; $contador < 10; $contador++) {
  2. echo “Contador vale $contador<br/>”;
  3. }
for ($contador = 0; $contador < 10; $contador++) {
    echo "Contador vale $contador<br/>";
}

Para recorrer los valores de un array es útil la construcción foreach, que recorre cada valor de la matriz uno por uno, incluidos los valores cuya clave asociada no es un número

  1. foreach ($_SERVER as $var){
  2. echo “$var<br/><br/>”;
  3. }
foreach ($_SERVER as $var){
    echo "$var<br/><br/>";
}

También se puede hacer que nos de tanto la clave como el valor:

  1. foreach ($_SERVER as $key => $var){
  2. echo “<strong>$key</strong> = $var<br/><br/>”;
  3. }
foreach ($_SERVER as $key => $var){
    echo "<strong>$key</strong> = $var<br/><br/>";
}
  1. $contador = 0;
  2. while ($contador <= 10) {
  3. echo “Contador vale $contador<br/>”;
  4. $contador++;
  5. }
$contador = 0;
while ($contador <= 10) {
    echo "Contador vale $contador<br/>";
    $contador++;
}
  1. $contador = -1;
  2. do {
  3. echo “Contador vale $contador<br/>”;
  4. $contador++;
  5. while ($contador <= 10);
$contador = -1;
do {
    echo "Contador vale $contador<br/>";
    $contador++;
} while ($contador <= 10);

Se puede usar continue para continuar con la próxima iteración del bucle y break para salir del bucle. Una curiosidad es que se puede usar break 2, por ejemplo, y eso haría que se saliera de dos bucles que estuvieran uno dentro del otro.

Funciones

La palabra clave para definir una función en PHP es function.

  1. function saludar() {
  2. echo “Hola”;
  3. }
function saludar() {
  echo "Hola";
}

Para devolver un valor se utiliza return

  1. function obtenerCuadrado($numero) {
  2. return $numero * $numero;
  3. }
function obtenerCuadrado($numero) {
  return $numero * $numero;
}

Por defecto los parámetros de la función se pasan por valor. Para pasarlos por referencia se añade & antes del nombre de la variable en la lista de argumentos:

  1. function obtenerCuadrado(&$numero) {
  2. $numero = $numero * $numero;
  3. }
  4. $valor = 4;
  5. obtenerCuadrado($valor);
  6. echo $valor;
function obtenerCuadrado(&$numero) {
    $numero = $numero * $numero;
}

$valor = 4;
obtenerCuadrado($valor);
echo $valor;

Se puede especificar valores por defecto para argumentos con la sintaxis:

  1. function saludar($nombre=“Raul”) {
  2. echo “Hola $nombre”;
  3. }
function saludar($nombre="Raul") {
    echo "Hola $nombre";
}

Para crear funciones con un número de parámetros variable se deja la lista de argumentos vacía y se usan las funciones func_get_args() para obtener una lista de los parámetros pasados, func_num_args() para obtener el número de parámetros y func_get_arg($num_argumento) para obtener un parámetro a partir de su índice.

  1. function sumar() {
  2. $suma = 0;
  3. foreach(func_get_args() as $param)
  4. $suma += $param;
  5. return $suma;
  6. }
function sumar() {
    $suma = 0;
    foreach(func_get_args() as $param)
        $suma += $param;
    return $suma;
}

PHP posee características de los lenguajes funcionales: se puede utilizar las funciones como si de otro tipo de variable cualquiera se tratara.

También se pueden crear funciones anónimas:

  1. $lambda = function($num1, $num2){ return $num1 + $num2;};
  2. echo $lambda(1, 2);
$lambda = function($num1, $num2){ return $num1 + $num2;};
echo $lambda(1, 2);

Orientación a objetos

Una clase se declara con la palabra clave class seguida del nombre de la clase.

class MiClase {
}

El constructor es una función con nombre __construct(), y el destructor, __destruct.

  1. class MiClase {
  2. function __construct() {
  3. echo “Estamos creando un objeto de tipo MiClase<br/>”;
  4. }
  5. }
class MiClase {
  function __construct() {
    echo "Estamos creando un objeto de tipo MiClase<br/>";
  }
}

Para instanciar un nuevo objeto a partir de una clase se usa la sentencia new.

  1. $objeto = new MiClase();
  2. $objeto2 = new MiClase;
$objeto = new MiClase();
$objeto2 = new MiClase;

Para acceder a las propiedades y métodos se usa “->” en lugar del típico “.”

  1. class MiClase {
  2. function __construct() {
  3. echo “Dentro del constructor<br/>”;
  4. }
  5. function saludar() {
  6. echo “Hola<br/>”;
  7. }
  8. }
  9. $objeto = new MiClase();
  10. $objeto->saludar();
class MiClase {
  function __construct() {
    echo "Dentro del constructor<br/>";
  }

  function saludar() {
    echo "Hola<br/>";
  }
}
$objeto = new MiClase();
$objeto->saludar();

Hay 3 modificadores de acceso: public (por defecto), protected y private.

$this es el equivalente al this de Java o el self de Python.

  1. class Persona {
  2. function __construct($nombre) {
  3. $this->nombre = $nombre;
  4. }
  5. }
  6. $persona = new Persona(“Juan”);
  7. echo $persona->nombre;
class Persona {
    function __construct($nombre) {
        $this->nombre = $nombre;
    }
}

$persona = new Persona("Juan");
echo $persona->nombre;

Las propiedades y métodos estáticos se crean con la palabra clave static. Una peculiaridad es que para acceder a los miembros estáticos se utiliza la sintaxis $objeto::$miembro, y no $objeto->miembro. Además se utiliza self en lugar de $this.

  1. class Persona {
  2. public static $contador = 0;
  3. function __construct($nombre) {
  4. $this->nombre = $nombre;
  5. self::$contador++;
  6. }
  7. }
  8. $persona = new Persona(“Juan”);
  9. echo $persona::$contador, “<br/>”;
  10. $persona = new Persona(“Pepe”);
  11. echo $persona::$contador, “<br/>”;
  12. echo Persona::$contador, “<br/>”;
class Persona {
  public static $contador = 0;

  function __construct($nombre) {
      $this->nombre = $nombre;
      self::$contador++;
  }
}
$persona = new Persona("Juan");
echo $persona::$contador, "<br/>";

$persona = new Persona("Pepe");
echo $persona::$contador, "<br/>";

echo Persona::$contador, "<br/>";

Para heredar de otra clase se usa la palabra clave extends. PHP no soporta la herencia múltiple.

  1. class Empleado extends Persona {
  2. }
class Empleado extends Persona {
}

Tratamiento de errores

En PHP hay dos sistemas de notificación de errores: excepciones, como en Java o Python, y el sistema de reporte de errores del lenguaje. No es muy común ver el uso de excepciones en el codigo PHP, sólo se utiliza en el código más moderno que hace uso de la orientación a objetos.

La captura de excepciones tiene este aspecto:

  1. function dividir($num1, $num2) {
  2. if($num2 == 0)
  3. throw new Exception(‘No se puede dividir entre 0′);
  4. else
  5. return $num1 / $num2;
  6. }
  7. try {
  8. dividir(5, 0);
  9. } catch (Exception $e) {
  10. echo ‘Ocurrió una excepción: ’, $e->getMessage(), “\n”;
  11. }
function dividir($num1, $num2) {
  if($num2 == 0)
    throw new Exception('No se puede dividir entre 0');
  else
    return $num1 / $num2;
}

try {
    dividir(5, 0);
} catch (Exception $e) {
    echo 'Ocurrió una excepción: ',  $e->getMessage(), "\n";
}

En el caso de los errores, podemos lanzar los nuestros propios usando la función trigger_error($mensaje, $tipo). El tipo de error puede ser E_USER_ERROR, E_USER_WARNING o E_USER_NOTICE

  1. trigger_error(“No se pudo conectar a la base de datos”, E_USER_ERROR);
trigger_error("No se pudo conectar a la base de datos", E_USER_ERROR);

También podemos definir nuestro propio manejador para tratar nosotros mismos los errores, en lugar de PHP, utilizando la función set_error_handler.

En desarrollo nos interesa mostrar los errores y avisos de PHP en pantalla. En producción se debería modificar la opción display_errors de php.ini y ponerla a Off para deshabilitarlo. La opción error_reporting permite configurar qué tipo de errores queremos mostrar.

Existe un operador que permite que una cierta sentencia de código no genere errores, @, aunque su uso no está aconsejado.

PHP y MySQL

La mejor forma de utilizar MySQL desde PHP es mediante la interfaz orientada a objetos de la extensión mysqli. Si no estamos seguros de si vamos a tener que cambiar de base de datos también podemos utilizar la extensión PDO (PHP Data Objects), una capa de abstracción incluida por defecto desde PHP 5.1

Primero creamos el objeto correspondiente con new mysqli($host, $usuario, $password, $bbdd)

  1. $mysqli = new mysqli(“localhost”, “root”, “mipassword”, “mibbdd”);
$mysqli = new mysqli("localhost", "root", "mipassword", "mibbdd");

Una vez hecho esto podemos comprobar si ha habido algún error mediante la propiedad connect_error. Este propiedad contiene una cadena describiendo el error que se ha producido, o una cadena vacía si no hubo ningún error.

  1. if (mysqli_connect_errno())
  2. exit(“Se produjo un error: ”, mysqli_connect_error());
if (mysqli_connect_errno())
    exit("Se produjo un error: ", mysqli_connect_error());

Una vez abierta la conexión podemos comenzar a realizar consultas utilizando el método query. Este devuelve true si se llevó a cabo la consulta correctamente.

  1. if ($mysqli->query(“CREATE TABLE Personas(id int, nombre varchar(30))”)) {
  2. echo “Tabla personas creada”;
  3. else {
  4. echo “Error al crear la tabla personas”;
  5. }
if ($mysqli->query("CREATE TABLE Personas(id int, nombre varchar(30))")) {
    echo "Tabla personas creada";
} else {
  echo "Error al crear la tabla personas";
}

En las consultas que modifican tuplas el número de tuplas afectadas se almacena en la propiedad affected_rows

  1. $mysqli->query(“UPDATE Empleados SET prima=2000 WHERE ventas > 5000″);
  2. echo “Primas modificadas: ”, $mysqli->affected_rows;
$mysqli->query("UPDATE Empleados SET prima=2000 WHERE ventas > 5000");
echo "Primas modificadas: ", $mysqli->affected_rows;

Para recorrer las tuplas devueltas por un SELECT haríamos algo así

  1. if ($resultado = $mysqli->query(“SELECT * FROM Empleados”)) {
  2. while($empleado = $resultado->fetch_object()) {
  3. printf(“%s %s<br/>”, $empleado->Nombre, $empleado->Apellidos);
  4. }
  5. }
if ($resultado = $mysqli->query("SELECT * FROM Empleados")) {
  while($empleado = $resultado->fetch_object()) {
    printf("%s %s<br/>", $empleado->Nombre, $empleado->Apellidos);
  }
}

Al finalizar se debe cerrar la conexión utilizando el método close()

$mysqli->close()

Para evitar ciertos ataques de SQL injection es conveniente pasar las cadenas que vengan del usuario por el método mysqli::escape_string($cadena), para escapar los caracteres especiales, o bien utilizar prepared staments.

Para crear prepared staments se utilizar el método mysqli->prepare($consulta), después se llama al método bind_param del objeto stament creado, para introducir los valores correspondientes en los placeholders y, después, execute() para ejecutar la consulta. Por último se llama al método close para cerar el stament

  1. if ($consulta = $mysqli->prepare(“SELECT a FROM b”)) {
  2. $consulta->bind_param($campo, $tabla);
  3. $consulta->execute();
  4. $consulta->close();
  5. }
if ($consulta = $mysqli->prepare("SELECT a FROM b")) {
  $consulta->bind_param($campo, $tabla);
  $consulta->execute();
  $consulta->close();
}

Si necesitas más información sobre MySQL en sí, puedes consultar nuestro Tutorial de MySQL.

Formularios

Al enviar un formulario, si se utiliza el método POST, el valor de cada campo rellenado por el usuario se guardará en una matriz asociativa de nombre $_POST. Si se utiliza GET, se almacenará en la matriz $_GET. Las claves de esta matriz asociativa se tomarán del atributo name de cada campo del formulario.

Si no nos importa el origen de la petición, también se puede usar $_REQUEST["nombre"], que es una mezcla de la información de $_GET, $_POST y $_COOKIE (efectivamente, un array con los valores de las cookies)

Para un select, que tiene varios valores, el valor del atributo name debe acabar con [], como una matriz. PHP creará una matriz con este nombre, que contendrá los valores de los atributos name de las opciones seleccionadas.

  1. <select name=“languages[]“>
  2. <input name=“c”>C</input>
  3. <input name=“c++”>C++</input>
  4. <input name=“php”>PHP</input>
  5. <input name=“perl”>Perl</input>
  6. </select>
<select name="languages[]">
    <input name="c">C</input>
    <input name="c++">C++</input>
    <input name="php">PHP</input>
    <input name="perl">Perl</input>
</select>

$_SERVER['PHP_SELF'] contiene la URL del script actual. Puede ser útil como valor para el atributo action del formulario.

Si la entrada del usuario se va a mostrar en algún lugar del sitio, para evitar vulnerabilidades de XSS, este texto debería pasar antes por la función htmlspecialchars($cadena), que convierte a sus entidades HTML correspondientes los caracteres especiales “, <, >, & y, opcionalmente, ‘, si pasamos como segundo argumento a la función la constante ENT_QUOTES.

  1. echo ‘Hola ’, htmlspecialchars($_POST['usuario']);
echo 'Hola ', htmlspecialchars($_POST['usuario']);

Si el texto se va a utilizar en un atributo de una etiqueta HTML hay que asegurarse de que los valores de los atributos estén entre comillas, y que el tipo de comillas utilizado esté codificado como entidades HTML en la cadena.

También hay que tener cuidado con la codificación de caracteres. Si el atacante utilizara un texto codificado en UTF-7, htmlspecialchars no reemplazaría nada, y si no especificamos la codificación del documento, y el atacante engaña al navegador para hacerle pensar que UTF-7 es la verdadera codificación del archivo, nuestro filtrado no habrá servido de nada. Podemos especificar la codificación de caracteres con una etiqueta meta o usando la cabecera Content-Type:

  1. header(‘Content-Type: text/html; charset=UTF-8′);
header('Content-Type: text/html; charset=UTF-8');

Cookies

Para crear cookies usamos setcookie($nombre, $valor, $expiracion, $ruta, $host, $https)

  1. // Expira 3600 segundos después de haberse creado
  2. setcookie(‘usuario’, ‘raul’, time() + 3600);
  3. setcookie(‘fondo’, ‘#000000′);
// Expira 3600 segundos después de haberse creado
setcookie('usuario', 'raul', time() + 3600);
setcookie('fondo', '#000000');

A las cookies se accede a través de la matriz superglobal $_COOKIE:

  1. echo ‘Bienvenido ’, $_COOKIE['usuario'];
echo 'Bienvenido ', $_COOKIE['usuario'];

Sesiones

Para crear una sesión se llama a la función session_start(), que debe ser la primera sentencia PHP de la página.

Para almacenar datos en la sesión se puede utilizar la matriz superglobal $_SESSION directamente:

  1. $_SESSION['usuario'] = ‘raul’;
$_SESSION['usuario'] = 'raul';

Para acceder a los datos que hemos guardado en la sesión se utiliza el mismo array asociativo:

  1. echo ‘Bienvenido ’, $_SESSION['usuario'];

Visto en | Mundo Geek

echo 'Bienvenido ', $_SESSION['usuario'];
Written by Jp Neira in: Computación / Internet |
Feb
08
2010
0

Lo que Google sabe de ti

El 1 de Febrero pasado Google anunció una inversión de US$5.7 Millones en proyectos de investigación en 4 áreas clave para la empresa. Entre ellas, uno de los temas que más ha dado que hablar a la prensa internacional fue la privacidad de los datos personales. La FTC (Federal Trade Comission de EE.UU.) ha organizado una serie de reuniones con expertos de la academia y del mundo privado para entender qué debería ser materia de regulación y qué no, específicamente en relación con el “Marketing Conductual” (mi mala traducción de Behavioral advertising). Uno de los principales candidatos a culpable por la enorme cantidad de datos personales que maneja, y por el poco o nulo control que entrega a cada persona sobre estos datos: Google.

La respuesta de Google ha sido cauta. Mal que mal, el negocio de Google es precisamente ese: recolectar información de cada persona y ofrecer servicios personalizados a terceros sobre un “destilado” de esa información. Todos los “servicios personales” de Google (Gmail, Calendar, Blogger, Docs) más los “servicios a negocios” (AdSense, AdWords, commercial sites) se basan en la recolección de datos, su almacenamiento y (lo más importante) en su búsqueda y recuperación. Esto se usa, entre otras cosas, para el avisaje y marketing de sitios, ofreciendo productos y servicios “relevantes” para el usuario.

Uno podría creer que el tracking que Google realiza se restringe sólo a las personas que deciden usar sus servicios, pero en Diciembre pasado Google anunció que comenzó a colocar cookies anónimas en los computadores de personas que no tuvieran cuentas para rastrear también sus búsquedas y ofrecer mejores servicios. “Nuestro objetivo es proveer resultados de búsqueda relevantes. Los beneficios que hemos visto para usuarios conectados han sido tan grandes que queremos extender esos mismos beneficios a todos”, dijo Nathan Tyler, un vocero de Google.

Una de las respuestas de Google a las críticas que ha recibido en EE.UU. ha sido generar un “Dashboard” (www.google.com/dashboard), un “punto único para ver todos los datos sobre ti en los variados productos” que Google ofrece a personas, según Shuman Ghosemajumder (business product manager for trust and safety). El dashboard fue anunciado en Noviembre pasado en una conferencia en Europa, y (en mi opinión) no es más que un mal resumen de lo que realmente Google sabe de uno.

Mientras tanto, en Europa el problema para Google es un poco peor, porque posee un porcentaje mayor del “mercado” de las búsquedas a través de Internet (80%) comparado con EE.UU. (65%), y la regulación sobre privacidad en Europa es mucho más restrictiva que en EE.UU. El gobierno de Silvio Berlusconi está proponiendo una ley con la cual los servicios de video online (e.g., YouTube) son punibles en términos de violaciones a la privacidad de las personas, y Google está entablando una demanda por copyright de parte de la empresa de la familia de Berlusconi (Mediaset). En Berlín, manifestantes han salido a la calle con “pulpos gigantes” para protestar contra empresas como Google.

Siempre me han gustado los servicios de Google. Creo que Gmail es el mejor servicio de email gratuito disponible actualmente, y me he acostumbrado tanto a Calendar y a los diferentes gadgets que Google ofrece que me costaría mucho trabajo encontrar un sustituto para lo que actualmente hago con Google. Sin embargo, a pesar de que en este sentido soy bastante práctico (no soy un fundamentalista de la privacidad, en el sentido definido por Alan Westin), lo cierto es que Google maneja una cantidad escabrosa de datos acerca mío: todas las conversaciones que mantengo y con quién las mantengo, tanto en lo personal como en lo profesional (Gmail); todas las reuniones presenciales y todas las clases y charlas a las que asisto (Calendar); todas mis búsquedas en Internet, y muchos de los sitios que visito a diario (Google + Toolbar); todos los links que guardo para visitar frecuentemente, y con qué frecuencia los visito (Bookmarks); todos los lugares que busco porque no sé como llegar a ellos (Maps); e incluso algunos de los grupos de personas que frecuento para objetivos específicos (Groups). Si subiera fotos a Picasa, o me informara a través de Google News, o llevara mis notas a través de Google Netbook, Google sabría incluso más de mí.

Images: dannysullivan @Flickr (CC), y fuente propia.

Autor: Cristian Bravo-Lillo

Via | Manzana Mecanica

Feb
08
2010
0

Los próximos dos años del LHC del CERN y del Tevatrón del Fermilab

Anne Hathaway confiesa que disfruta de su tiempo libre aprendiendo física moderna y teoría de partículas elementales. "Estoy leyendo sobre Einstein y sus teorías. Me gustaría entender la teoría de cuerdas." http://tiny.cc/fan928

En diciembre de 2011 el Tevatrón del Fermilab habrá alcanzado 12 fb-1 de colisiones protón-antiprotón a 2 TeV en el centro de masas, y el LHC del CERN habrá alcanzado 1 fb-1 de colisiones protón-protón a 7 TeV. ¿Qué diferencias podemos esperar entre los resultados de ambos aceleradores? Jester, pseudónimo del físico de partículas del CERN autor del blog Resonaances, nos cuenta la diferencia en “How much is one inverse femtobarn?,” 3 February 2010. Por otro lado, Tommaso Dorigo, físico de partículas del CDF (Tevatrón) y del CMS (LHC), autor del blog A Quantum Diaries Survivor, nos cuenta las posibilidades de que el Tevatrón restringa la masa del bosón de Higgs entre 120 y 180 GeV en los próximos dos años en “Tevatron Higgs Searches: Past And Future,” February 5th 2010. Finalmente, Matthew Chalmers nos habla sobre las posibilidades de encontrar al Higgs en el LHC a sólo 7 TeV en “Higgs hunters face long haul,” Feb 4, 2010.

Antes de nada, recordaros lo que significa el inverso de un femtobarn (fb-1), que mide la efectividad de un colisionador de partículas. El área efectiva (sección transversal) de la colisión de dos haces de partículas se mide en barns (un barn son 10-28 m2 y un femtobarn son 10-43 m2). La luminosidad es proporcional a la efectividad de los detectores, es decir, al número de colisiones que son detectadas por los detectores del acelerador. La efectividad del colisionador se mide por el producto de la luminosidad integrada en el tiempo por la sección transversal de las colisiones y su unidad es el femtobarn. La luminosidad del LHC es mucho mayor que del Tevatrón, aún así alcanzar 1 fb-1 en el LHC (unos 10 billones de colisiones protón-protón) se estima que requerirá entre 18 y 24 meses.

Tevatrón: 10.000; LHC: 11.000. Número de bosones de Higgs producidos (que no detectados) suponiendo una masa de 120 GeV. Ambos experimentos tienen una sensibilidad similar a un bosón de Higgs de baja masa. En el LHC se explorarán algunas desintegraciones que no están al alcance del Tevatrón, como la desintegración de un Higgs en dos fotones, pero aún así son sucesos muy raros (0,2 % de las veces). Para diciembre de 2011 es muy difícil que un bosón de Higgs de baja masa sea observado de forma concluyente tanto en el LHC como en el Tevatrón. Eso sí, salvo que tenga una masa del orden de 160 GeV o que haya procesos más allá del modelo estándar que amplifiquen sus probabilidades de desintegración.

Tevatron: 80.000; LHC: 130.000. Pares de quarks top producidos. Tanto el LHC como el Tevatrón obtendrán un número bastante similar, por ello los tests de precisión del modelo estándar que se podrán desarrollar en ambas instalaciones darán resultados muy similares (a fecha de diciembre de 2009).

Tevatron: 15; LHC: 300. Cuarta generación de quarks con masa de unos 500 GeV (caso de que existieran). Los 7 TeV del LHC, unas 3,5 veces los 2 TeV del Tevatrón, implican una luminosidad mucho más alta en procesos de física más allá del modelo estándar con energías 3,5 veces la masa del quark top.

Tevatron: 5; LHC: 25. Bosón vectorial Z’ con una masa de 1 TeV que se acople al modelo estándar vía el isospín. El Tevatrón ha descartado un Z’ con una masa menor de 800 GeV, sin embargo, por encima de 1 TeV sus datos no son concluyentes. Si existiera un bosón Z’ con una masa de 1,3 TeV, la cuenta sería Tevatron: 0; LHC: 5. Para el LHC a 7 TeV, la detección de un Z’ es difícil (cuando alcance plena potencia, 14 TeV, podrá descartar un bosón Z’ hasta los 5 TeV).

En resumen, nos dice Jester que el LHC será afortunado en su búsqueda sólo si el Tevatrón es extremadamente desafortunado en la suya (“the LHC can be lucky if Tevatron is extremely unlucky“). Por ello, lo expertos no esperan muchas alegrías en los próximos dos años de física de partículas elementales. Aunque nunca digas nunca jamás.

Para Tommaso (Dorigo) la competición entre el Fermilab (Tevatrón) y el CERN (LHC) vivirá sus momentos más emocionantes en los próximos dos años. Para comprender por qué, hay que explicar la figura de arriba. El eje de abcisas es la luminosidad integrada y el de ordenadas el cociente R entre lo observado y lo esperado según el modelo estándar. Expliquemos esto último. Suponiendo que el bosón de Higgs tiene una masa determinada, el modelo estándar predice cuantos Higgs podrán observarse en un colisionador de partículas, sea N. Si los resultados experimentales son suficientes para observar M bosones de Higgs, pero no observan (detectan) ninguno, se dice que la tasa de producción de Higgs es inferior a R=M/N respecto al valor predicho por el modelo estándar. Un valor de R<1 para cierto valor de la masa del Higgs indica que dicho valor queda excluido (con alta probabilidad). Por otro lado, los resultados del Tevatrón resultan de la combinación de los experimentos CDF y DZERO que tienen sensibilidades similares, por lo que si ambos obtienen un valor de R=2, entonces el valor combinado es R=2/(sqrt(2))= 1,4.

La figura de arriba muestra la estimación (a fecha de noviembre de 2009) del límite R de exclusión para un Higgs con una masa de 115 GeV en el CDF en función de la luminosidad integrada empleada en el análisis (medida en fb-1). La figura muestra que un Higgs de 115 GeV podría ser excluido por el CDF tras acumular una luminosidad entre 15 y 20 fb-1 (aunque el gráfico acaba en 14/fb podemos prolongarlo “visualmente”). Para los dos experimentos del Tevatrón en su conjunto (CDF y DZERO) se estima que serán necesarios entre 7,5 y 10 fb-1 en cada uno. Según Tommaso, para diciembre de 2011 es bastante razonable que ambos experimentos hayan acumulado al menos unos 10 fb-1, con lo que él espera que entonces el Tevatrón habrá sido capaz de excluir un bosón de Higgs en el rango de 120 a 180 GeV.

Excluir el bosón de Higgs, pero no encontrarlo. Tommaso nos recuerda que incluso si el bosón de Higgs tuviera una masa de 120 GeV, sería muy difícil encontrarlo en el Tevatrón en los próximos dos años. Eso sí, se observaría que la región de exclusión (R<1) se resistiría a acercarse al valor de 120 GeV lo que se interpretaría como una evidencia de un Higgs de dicha masa pero nunca como un descubrimiento.

En resumen, para Tommaso la batalla entre Tevatrón y LHC se decanta en los próximos 2 años por el Tevatrón. Un LHC con una energía 3,5 veces más grande no es suficiente para superar la ventaja de 8 años de datos ya acumulados en el Tevatrón. Aún así, Tommaso está entre los que creen que el Higgs se descubrirá en el LHC a partir de 2013 cuando el Tevatrón ya sea historia.

Chalmers coincide con Tommaso en que estamos en uno de los momentos más interesantes de la física de partículas elementales con una fuerte compentencia entre el Tevatrón y el LHC. Aún así, descubrir el bosón de Higgs en el LHC a 7 TeV requiere más del doble de datos que a 10 TeV. Pero operar con dos haces a 5 TeV es mucho más peligroso para la instalación que hacerlo a 3,5 TeV. De hecho, durante el año 2012 habrá que reemplazar las más de 10000 conexiones eléctricas de los imanes superconductores por conexiones más robustas antes de acometer un incremento de energía en los haces de protones. La búsqueda de un Higgs en un LHC a sólo 7 TeV durante dos años, como mucho permitirá excluir la masa del Higgs en el rango de 155 a 175 GeV (algo que seguramente ya habrá hecho el Tevatrón).

Via | Francis(the)mulenews

Written by Jp Neira in: Física |
Feb
07
2010
0

Ciencias naturales VS Ciencias sociales (y III)

Ésta es la gran paradoja de las ciencias sociales: que son más difíciles pero parecen más fáciles que la física o la química. Como dice Edward O. Wilson, esta familiaridad confiere comodidad, y la comodidad engendra descuido y error.

La mayoría de personas cree saber cómo piensa, también como piensan los demás, e incluso cómo evolucionan las instituciones. Pero se equivocan. Su conocimiento se basa en la psicología popular o casera, la comprensión de la naturaleza humana mediante el sentido común (que Einstein definía como todo lo que se ha aprendido hasta los dieciocho años), atravesada por conceptos erróneos y sólo algo más avanzados que las ideas que emplearon ya los filósofos griegos.

Hasta los teóricos sociales avanzados enfocan sus estudios de esta forma, mediante la intuición o la intuición de los que le precedieron, pero ignorando soberanamente, casi con orgullo, los hallazgos de la psicología científica y de la biología.

Ésta es parte de la razón, por ejemplo, por la que los científicos sociales sobrestimaron la fuerza del régimen comunista y subestimaron la fuerza de la hostilidad étnica.

Y es que muchos científicos sociales, sobre todo antropólogos y sociólogos culturales que identifican cada cultura como una entidad única, han llegado incluso a adoptar la posición postmodernista extrema de que la ciencia sólo es otra manera de pensar, una respetable subcultura intelectual en compañía de muchas otras.

Las ciencias sociales todavía no han urdido una red de explicación causal que corte con éxito a través de los niveles de organización que van desde la sociedad a la mente y al cerebro. Por ello carecen de lo que puede llamarse una verdadera teoría científica.

La principal razón es que incluye poco esfuerzo para explicar los fenómenos mediante redes de causación que recorran niveles adyacentes de organización. El análisis es lateral, no vertical.

Consilience Edward O. Wilson

Via |GenCiencia

Written by Jp Neira in: Ciencia, Historia |
Feb
06
2010
0

¿Cómo llegamos a ésto?

Digital Copyright (cover)Digital Copyright, de Jessica Litman (Prometheus Books, 2001), fue uno de los primeros libros que denunció la violenta expansión del derecho de autor en la era digital, intentando explicar cómo se llegó a fines del siglo XX a una situación en que las leyes de copyright atentan contra el bien común y contra la libertad de expresión de las personas.

Las ideas del libro de Litman aparecen en prácticamente toda la literatura actual sobre propiedad intelectual, en particular los capítulos de su libro que se dedican a entender la evolución de las leyes sobre derecho de autor.

¿Cómo se ha ido modificando el copyright?

Históricamente, la legislación en materia de copyright ha sido considerada como un conjunto de leyes que rigen la relación entre varias industrias e instituciones. Estas instituciones incluyen a los sellos discográficos, las editoriales, los colectivos de músicos profesionales, las sociedades de autores, las salas de cine, las productoras de eventos, los fabricantes de reproductores de música y video, las bibliotecas, etc. La forma en que el congreso de los EEUU ha escrito estas leyes es reuniendo a los abogados de las distintas partes y pidiéndoles que se pongan de acuerdo en una legislación que les satisfaga a todos.

US CongressEl resultado de este proceso ha sido legislación que es aprobada en el congreso con poca oposición, pero no responde a los intereses del público, en parte porque el público no está representado en la mesa de negociación. En la práctica, las bibliotecas por ejemplo, que podrían defender a los ciudadanos, siempre se conforman con poco, y muchos diputados y senadores reciben dinero de la industria del derecho de autor y tienden a favorecer a estas industrias.

Pero el problema principal es que una ley negociada así tiende a resolver los desacuerdos mediante listados de excepciones que se dibujan de la forma más específica posible para generar un acuerdo. Por ejemplo, si los proveedores de Internet quieren evitar el riesgo de una demanda por videos posteados ilegalmente en internet, entonces es posible que eso es lo que obtengan de la negociación, y nada más. A la larga, de la ley desaparecen los principios y el resultado son páginas y páginas con listados de prohibiciones y permisos que son directamente atribuibles a las partes que estuvieron sentadas a la mesa de negociación. Pero cuando aparece una nueva tecnología, la ley resulta inaplicable, porque hay solamente casos especiales y no directrices generales.

La negociación entre las partes interesadas actuales, tiende a producir leyes que resuelven disputas existentes entre industrias con lenguaje legal detallado y específico, que rápidamente queda obsoleto [...] Una ley de copyright no puede hacer provisiones sensatas en relación al desarrollo de la tecnología, a menos que incorpore la flexibilidad para hacer ajustes, y principios generales que guíen a los tribunales en la dirección en que éstos ajustes deban ser hechos. El proceso de negociación que ha dominado la revisión del copyright a través del siglo XX, se adapta mal a la generación de dicha flexibilidad. No puede, por lo tanto, esperarse que produzca leyes que mejoren con los años.

Lo único que queda garantizado en este proceso es que la legislación siempre se torne más compleja y nunca se simplifique, y que los intereses de los ciudadanos no sean tomados en cuenta. Litman muestra como evidencia que los mismos argumentos aparecen una y otra vez en los registros de las discusiones en el congreso: en los años 1920s cuando apareció la radio, en los 1960s cuando apareció la televisión por cable, en los 1970s cuando aparecieron los videograbadores, en los 1980s cuando aparecieron los computadores y en los 1990s con Internet. En cada ocasión, el resultado ha sido un acuerdo negociado para que los que son afectados por una tecnología puntual sigan ganando dinero.

Una propuesta de solución

Litman observa que muchas de las disposiciones legales respecto a los derechos de autor son simplemente ignoradas por las personas, en parte porque la gente asume que las leyes en general tienen sentido y las leyes de copyright no lo tienen. Por ejemplo, en EEUU año tras año hay establecimientos comerciales que se niegan a pagar el canon a las sociedades de derechos de autor, porque consideran que no tiene nada de malo poner la radio en una tienda y si la radio ya paga a los autores, ¿por qué tendrían que pagar ellos? La gente asume también que ciertas disposiciones sobre copyright son como las leyes sobre la blasfemia o la sodomía, leyes de otras épocas que todavía no han sido derogadas.

Lo que la industria del derecho de autor querría en esta situación, es que las leyes quedaran como están y que hubieran programas masivos de (re-)educación que hicieran creer a la gente que la ley de copyright actual es balanceada, cuando en realidad no lo es, cuando en realidad nunca ha sido tan contraria a los intereses del público en general cómo lo es ahora.

En realidad, las personas creen que las leyes de derecho de autor se aplican a entidades comerciales. Varios estudios y encuestas independientemente lo han confirmado:

… el público en general parece atribuír bastante significancia a la propiedad intelectual, pero también parecen creer firmemente en una “zona de uso libre” o un área de uso para el cuál los usuarios individuales no necesitan pedir permiso [...] la mayoría de la gente parece creer que la ley de copyright hace una distinción entre la explotación de una obra para un propósito comercial y su consumo para usos personales [...] La gente cree esto a pesar de que nunca ha sido así en la ley …

La propuesta de Litman es simple: convertir el copyright en un derecho exclusivo de explotación comercial. Ganar dinero o intentar ganar dinero usando el trabajo de otra persona sin permiso sería delito, así como intervenir a gran escala con las oportunidades de esa persona para ganar dinero. Nos dejaríamos de preguntar si las acciones de una persona crean una copia (una “objeto material en el cual la obra está fijada”) y nos preguntaríamos si las acciones de una persona afectan las oportunidades de explotación comercial de otra persona respecto a obras sobre las cuáles tiene derechos.

Esta aproximación al problema tiene varias ventajas: (1) sería más simple vigilar el cumplimiento de la ley porque en nuestra sociedad las transacciones comerciales están mejor reguladas que las no-comerciales; (2) los tribunales podrían priorizar los casos buscando un balance y atacando primero a aquéllos que lucran del trabajo de otros; y (3) la ley sería más cercana a lo que el público espera y sería por lo tanto más realista esperar que las personas cumpliesen la ley.

(Recientemente (26/Ene/2010) el escritor Cory Doctorow escribió una editorial en The Guardian precisamente en esta dirección: Copyright, companies, individuals and news: the rules of the road.)

Por supuesto, Litman no espera que una reforma así ocurra en el corto plazo, pero sí cree que podría ocurrir si los ciudadanos ejercen una presión sostenida que obligue a la industria a reconsiderar su posición. La autora considera que la desobediencia civil tiene un papel que jugar (no es el primer caso de un abogado que considera que desobedecer las leyes a veces es parte de la solución):

La gente no obedece leyes en las que no cree. Los gobiernos encuentran difícil aplicar leyes que solamente un puñado de gente obedece. Las leyes que la gente no obedece y que los gobiernos no aplican no ayudan mucho a los intereses que convencieron al congreso de aprobar esas leyes. Si una ley es suficientemente mala, incluso sus defensores estarían dispuestos a abandonarla en favor de una ley diferente que fuera vista como más legítima por las personas sobre las que intenta mandar. Incluso si los dueños de los derechos de autor actuales se rehusan a darle al público un asiento en la mesa de negociación, podrían descubrir que deben comportarse como si así fuera.

En otras palabras, vuelve a ser relevante lo que escribió el abolicionista Frederick Douglas: “El poder no concede nada sin que se le exija. Nunca lo ha hecho, y nunca lo hará.”


Fuente: Jessica Litman: “Digital Copyright“. Prometheus Books, 2001. Dos capítulos del libro están disponibles en línea. Fotos: Wikimedia Commons, Virb.

Via | Manzana Mecanica

Written by Jp Neira in: Pensamiento Crítico / Reflexión |
Feb
06
2010
0

Bolas de fuego y hielo… españolas

Montse Campas

05-02-2010

En 1949 Fred Whipple describió el núcleo cometario como una “bola de nieve sucia” compuesta por una mezcla de hielo y polvo, acepción que ha gozado de gran éxito y que ha sido repetida hasta la saciedad para intentar explicar en qué consisten estos cuerpos celestes. Los cometas siempre han estado adornando mágica y misteriosamente nuestros cielos nocturnos. Existen miles de millones de cometas helados, que se formaron hace unos 4.600 millones de años en una región muy fría, en las afueras del Sistema Solar, por ello son valiosas fuentes de información sobre su origen.

Los cometas han sido históricamente, y todavía son, objetos celestes que inducen a la ensoñación. Además, en el caso de los periódicos siempre vuelven cual brillantes boomerangs y uno puede esperar su próximo paso por las cercanías del planeta, dispuesto a observarlos. Normalmente suelen ser visibles a la salida o a la puesta de Sol, pues su brillo aumenta con la cercanía a la estrella. Las citas cometarias congregan a muchos espectadores, y asisten a ellas no sólo los astrónomos profesionales y aficionados, sino también muchas personas para quienes suponen el primer acercamiento a la curiosidad por el cielo. ¿Quién no recuerda el paso del cometa Halley en 1986? Su nombre es un homenaje a Edmond Halley por vaticinar, sirviéndose de las leyes newtonianas del movimiento, su regreso en 1758 tras sus pasos de 1531, 1607 y 1682. Cuando llegó la fecha prevista, el cometa se presentó a la convocatoria pero no así Halley, fallecido unos años antes.

Encontrar uno nuevo es, sin embargo, la mejor manera de que lleve tu nombre. Tiene que ser ilusionante, y no sólo por la posibilidad de ser inmortalizado en un cuerpo celeste y por la relevancia científica del logro, también por su no sé qué especial vivido por el ser humano desde la Antigüedad. Muchos de los que se conocen han sido, además, hallados por astrónomos aficionados, que hacen de ellos uno de sus principales objetivos. Se tiene noticia de unos mil cometas, de los cuales aproximadamente una quinta parte son periódicos.

En España, tras casi un siglo en dique seco, a finales de 2009 los hallazgos de dos cometas con un intervalo de pocas semanas entre ambos han dado un impulso a la “pasión cometaria”. Y es que ha sido largo el paréntesis desde las primeras contribuciones a este campo realizadas desde el Observatorio Fabra por Josep Comas y Solá.

El Observatorio Fabra, inaugurado el 7 de abril de 1904, era el observatorio de la Real Academia de Ciencias y Artes de Barcelona. Estaba situado en el sudeste de la sierra de Collserola, justo debajo del Tibidabo, de modo que dominaba toda la plana de Barcelona, el Delta del Llobregat y parte del Maresme. Comas y Solá fue su primer director. También fue el primer español en descubrir un cometa, en 1925, conocido en su honor como C/1925 F1–Shajn-Comas Solá. Poco tiempo después, el 5 de noviembre de 1926, repetía la gesta en el mismo observatorio: durante una búsqueda fotográfica de asteroides con un telescopio de 15 centímetros halló el cometa periódico 32P–Comas Solá.

El 32P–Comas Solá, cuya magnitud era de 12, llegó a estar a “sólo” 1,15 au de la Tierra en su punto de máximo acercamiento. Fue el 27 de noviembre, meses antes de posicionarse en el perihelio (el punto más cercano al Sol de su órbita) a 1,77 au de la estrella meses más tarde, el 27 de marzo de 1927. El período, el intervalo de tiempo que tarda en volver a pasar cerca de nosotros, calculado para este cometa es de 8,78 años. En 1932, Rafael Carrasco, desde el Observatorio Nacional, en Madrid, descubrió el cometa C/1932 H1.

Ha llovido mucho desde entonces, y la contaminación lumínica ha empobrecido de estrellas nuestros cielos, al menos en apariencia, ellas continúan estando allí, pero no las vemos. Por suerte la tecnología ha avanzado a pasos agigantados y permite hacer una Astronomía impensable en la época de Comas y Sola.

De hecho, fue desde una sofisticada estación robótica de telescopios que el Observatorio Astronómico de Mallorca (OAM) mantiene en La Sagra (Sierra de Granada) que el 25 de agosto de 2009 se descubrió el cometa P/2009 QG31–La Sagra. Este cometa de corto período, que alcanza cada 6,76 años su máxima aproximación al Sol, se detectó más allá de la órbita de Marte, a unos 170 millones de kilómetros de la Tierra.

Ni dos meses más tarde, desde la misma estación se halló el 13 de octubre otro cometa periódico, el P/2009 T2 – La Sagra, cuyo período es de 20,91 años. Cuando se descubrió estaba a 1 au (150 millones de kilómetros de la Tierra).

Ambos cometas “La Sagra” son de la familia llamada de Júpiter, caracterizada por tener un afelio (punto más alejado del Sol) cercano a la órbita de este planeta gigante. Esta proximidad facilita que sus miembros, como los dos reseñados, sean capturados en las órbitas donde se encuentran por la acción del planeta.

El lugar desde el que estos cuerpos se han hecho visibles para nuestro conocimiento, el Observatorio Astronómico de La Sagra, está dedicado al rastreo de cuerpos menores, principalmente asteroides, que se aproximan a la tierra (NEOs). Destaca por estar obteniendo unos resultados más que satisfactorios, siendo únicamente superado por las grandes surveys (búsquedas) norteamericanas: ya ha realizado más de 750.000 mediciones astronómicas de objetos conocidos y ha descubierto más de 4.000 objetos.

Han tenido que pasar 77 años para que la astronomía moderna española haya descubierto otro cometa, pero parece que ahora existen los medios, y el entusiasmo, para continuar en racha.

Montse Campas es astrónoma aficionada y miembro del Observatorio Montcabrer, MPC 213 (Cabrils, Barcelona).

Via | Caos y Ciencia

Written by Jp Neira in: Astronomía |

Copyleft 2009 - 2010 El Blog de Jp | Mejor con Mozilla Firefox | Powered by WordPress

Theme by: |