domingo, 16 de febrero de 2014

Seleccionar un registro aleatoriamente con MySQL

Si necesitamos obtener una fila aleatoria de una tabla MySQL, es muy probable que si no conocemos sus problemas, optemos por la función RAND().


SELECT * FROM tabla ORDER BY RAND() LIMIT 1;


Éste es una de esas funciones que suenan muy bien a primera vista y donde muchos programadores suelen caer. Sin embargo se trata de una función lenta y que utiliza muchos recursos del servidor ya que MySQL tiene que generar una tabla temporal completa con todos los datos de la tabla original reordenados aleatoriamente.

Si realmente necesitas obtener un registro aleatorio hay mejores formas de hacerlo y así prevenir un cuello de botella que aumentará a medida que aumenta el número de registros de la tabla.

   $res = mysqli->query("SELECT count(*) FROM tabla");
   $fila = $res->fetch_row();
   $rand = mt_rand(0, $fila[0] – 1);
 
   $res = mysqli->query("SELECT * FROM tabla LIMIT $rand, 1");

Web service SOAP con PHP

SOAP es un protocolo de intercambio de datos entre diferentes procesos basado en XML. Una definición bastante completa la podéis encontrar en wikipedia. Una vez dicho esto vamos a empezar a ver cómo creamos un web service básico en PHP y que use dicho protocolo.
Lo primero que necesitaremos será descargar NuSOAP a nuestro proyecto. Se trata de un pequeño toolkit que nos facilitará la vida con varias clases para trabajar con este protocolo en PHP. Una vez descargado y descomprimido dentro de una carpeta de nuestro proyecto, simplemente la deberemos incluir en el archivo PHP que va a funcionar de web service.
A continuación veremos un ejemplo básico. A nuestro fichero le llamaremos test.php y lo que hará será recibir dos números enteros, multiplicarlos y devolver el resultado.

require_once("nusoap.php"); 

$server = new soap_server();

$server->register('multiplicarNumeros'); 

function multiplicarNumeros($valor1, $valor2){ 
 $res = $valor1 * $valor2; 
 return $res; 
} 

$server->service($HTTP_RAW_POST_DATA);
A continuación nos hará falta un cliente del web service al que llamaremos cliente.php. Lo que haremos será en el constructor llamar a la url del servidor y mediante la función call() llamar al método que nos multiplicarla los números. Los parámetros de la función los pasaremos en forma de array.

require_once("nusoap.php"); 

$cliente = new nusoap_client("http://localhost/test.php");

$error = $cliente->getError(); 
if ($error){ 
 echo "Error: $error"; 
} 

$res = $cliente->call("multiplicarNumeros", array("valor1" => "10", "valor2" => "15")); 

$error = $cliente->getError(); 
if ($error){ 
 echo "Error: $error"; 
} else { 
 echo "Resultado: $res"; 
}
Hasta aquí tendríamos un cliente y servidor básico pero para que sea un web service más correcto nos haría falta definir el WSDL en la parte del servidor y así tener una definición de los métodos y parámetros que contiene. Para que NuSoap nos lo genere deberemos cambiar un poco la parte del servidor y nos quedaría de la siguiente forma.

require_once("nusoap.php"); 

$server = new soap_server(); 

// Configuramos el namespace y el WSDL 
$ns = "test"; 
$server->configureWSDL('test', $ns); 
$server->wsdl->schemaTargetNamespace = $ns; 

// Cambiamos la llamada para añadirle los parámetros de entrada y salida y el namespace 
$server->register('multiplicarNumeros', array('valor1' => 'xsd:integer', 'valor2' => 'xsd:integer'), array('return' => 'xsd:integer'), $ns); 

function multiplicarNumeros($valor1, $valor2){ 
 $res = $valor1 * $valor2; 
 return $res; 
} 

$server->service($HTTP_RAW_POST_DATA);
Ahora simplemente debes acceder a tu navegador y llamar a la URL http://localhost/test.php?wsdl y verás el WSDL que se ha generado.

Ranking de lenguajes de programación más usados. Índice TIOBE febrero 2014

VB.NET accede por primera vez al top 10

Visual Basic .NET ha entrado por primera vez al top 10 de índice TIOBE. Se trata de una noticia bastante sorprendente por dos razones: VB.NET es el sucesor del clásico Visual Basic 6.0. Sin embargo desde que VB.NET se pasó a la plataforma .NET de Microsoft el lenguaje cambió drásticamente. Muchos de los desarrolladores rechazaron tener que migrar el código de Visual Basic 6.0 a VB.NET. El otro motivo ha sido que Microsoft apenas haya desarrollado el lenguaje en los últimos años.

Así, el índice de los 20 primeros lenguajes en el mes de febrero quedan de la siguiente forma:

Feb 2014Feb 2013ChangeProgramming LanguageRatingsChange
12C18.334%+1.25%
21Java17.316%-1.07%
33Objective-C11.341%+1.54%
44C++6.892%-1.87%
55C#6.450%-0.23%
66PHP4.219%-0.85%
78(Visual) Basic2.759%-1.89%
87Python2.157%-2.79%
911JavaScript1.929%+0.51%
1012Visual Basic .NET1.798%+0.79%
1116Transact-SQL1.667%+0.89%
1210Ruby0.924%-0.83%
139Perl0.887%-1.36%
1418MATLAB0.641%-0.01%
1522PL/SQL0.604%-0.00%
1647F#0.591%+0.42%
1714Pascal0.551%-0.38%
1836D0.529%+0.23%
1913Lisp0.523%-0.42%
2015Delphi/Object Pascal0.522%-0.36%

domingo, 2 de febrero de 2014

Ranking de lenguajes de programación más usados. Índice TIOBE enero 2014

Transact-SQL es el lenguaje de programación del 2013

Transact-SQL aparece como el lenguaje de programación que más subió en el pasado año 2013 al ganar un 0.98% de popularidad, seguido de cerca por Objective-C (+0.81%) y F# (+0.53%). Sin embargo resulta curioso que haya sido el que más haya ganado y sin embargo su mayor campo de aplicación, el sistema gestor de bases de datos de Microsoft, SQLServer, vaya perdiendo popularidad.

A continuación os dejamos cómo queda el índice TIOBE para este mes de Enero de 2014.

Jan 2014Jan 2013ChangeProgramming LanguageRatingsChange
11C17.871%+0.02%
22Java16.499%-0.92%
33Objective-C11.098%+0.82%
44C++7.548%-1.59%
55C#5.855%-0.34%
66PHP4.627%-0.92%
77(Visual) Basic2.989%-1.76%
88Python2.400%-1.77%
910JavaScript1.569%-0.41%
1022Transact-SQL1.559%+0.98%
1112Visual Basic .NET1.558%+0.52%
1211Ruby1.082%-0.69%
139Perl0.917%-1.35%
1414Pascal0.780%-0.15%
1517MATLAB0.776%+0.14%
1645F#0.720%+0.53%
1721PL/SQL0.634%+0.05%
1835D0.627%+0.33%
1913Lisp0.604%-0.35%
2015Delphi/Object Pascal0.595%-0.32%