La canción de la semana
Escuchala mientras lees los artículos del blog

Mar 8
Articulos programación Sphinx es un motor para la búsqueda de textos open source (licencia GPLv2). Está desarrollado en C++ lo que lo diferencia claramente de su competidor Lucene que está desarrollado en java. El nombre Sphinx es un acrónimo inglés que significa SQL Phrase Index (índice de frase de SQL).

Sphinx es un paquete de software independiente que proporciona búsquedas en textos rápidas y relevantes. Como su nombre índica ha sido especialmente diseñado para integrar información almacenada en bases de datos SQL, y para ser fácilmente accesible por lenguajes de script (guión). Sin embargo, Sphinx no depende o requiere de ninguna base de datos específica para su funcionamiento y puede emplear otras fuentes de datos, como por ejemplo XMLs.

Las aplicaciones pueden acceder al servicio de búsqueda (llamado searchd) usando diversos métodos: API nativa (SphinxAPI), una implementación propia del protocolo de red de MySQL (empleando un subconjunto de instrucciones mySQL llamadas SphinxQL) o mediante un servidor MySQL empleando su propio motor de almacenamiento (SphinxSE)

Existe implementaciones nativas oficiales para PHP, Perl, Ruby y Java que están incluidos en el paquete de distribución pero ha sido portado a más lenguajes (Perl, C#, Haskell, Ruby-on-Rails, ...etc).

Sphinx soporta de manera nativa información procedente de MySQL, PostgreSQL y XML



Publicado por Abraham Covelo

Feb 26
Articulos programación Existen muchos puntos fuertes para el desarrollo de aplicaciones para móviles empleando PhoneGap. Pero los más interesantes son estos dos:

1) Phonegap te permite desarrollar en diferentes plataformas móviles y tablets empleando prácticamente el mismo código: Android, iPhone, iPad, Windows mobile, Bada, blackberry, symbian, ...
2) Phonegap no emplea nuevos lenguajes, simplemente utiliza javascript (interacción), html5, css3 (presentación).

Cualquier desarrollador web podría comenzar a crear aplicaciones móviles multiplataforma sin que supusiera un gran handicap. Además el desarrollador podría emplear la API del móvil pudiendo tener acceso a la geolocalización, camara, multimédia, vibrador, acelerómetros, brújula, contactos del móvil, archivos, redes, notificaciones, vibrador, etc

Además existen ya varios frameworks que te ayudarán a salvar las diferencias entre la web y la aplicación móvil en cuanto a interacción, presentación y usabilidad como por ejemplo xuijs, jQTouch y jQuery Mobile.

Para comenzar a utilizar phonegap basta con tener listo el SDK para el desarrollo para móviles de tu plataforma favorita. Para android por ejemplo basta con tener instalado eclipse 3.4 o posterior junto con una copia del SDK para android (http://developer.android.com/sdk/index.html) y el complemento ADT de eclipse.

A continuación hay que descargarse phonegap y comenzar un proyecto android en el eclipse.

1) Se crean los directorios /libs y /assets/www
2) De phonegap descargado se copian los archivos phonegap.js en /assets/www y phonegap.jar en /libs
3) En la clase Activity inicial del proyecto debe cambiar el extend Activity por extend DroidGap
4) Sustituir setContentView() por super.loadUrl("file:///android_asset/www/index.html");
5) Añadir el principio del fichero el import : import com.phonegap.*;
6) Añadir los permisos que vayas a utilizar para la aplicación (En el archivo AndroidManifest.xml debajo de versionName)
7) Colocar el archivo plugins.xml de phonegap en la carpeta /res/xml/

Y listos para programar en tu fichero index.html en /assets/www

Si tienes problemas y no quieres liarte con crear entornos de desarrollo para todas las plataformas puedes empezar a desarrollar directamente empleando PhoneGap build en http://build.phonegap.com/
Aquí puedes enviar tu código y recibir una aplicación lista para publicar en Market, ya sea IOS, Android, webOS, Symbian, BlackBerry, Windows Phone u otros dispositivos.


Para empezar a programar basta entender una lista de nuevos eventos y API que permiten acceder a las funcionalidades del móvil empleando sólo javascript

Como ejemplo, en phonegap está disponible el evento onDeviceReady:

<script type="text/javascript">
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady()
{
//llamada inicial a la API de phonegap
}
</script>


Este evento índica que se ha cargado el DOM del documento HTML y ya podemos comenzar a ejecutar nuestro código. Además tenemos estos nuevos eventos javascript disponibles en phonegap

backbutton
deviceready
menubutton
pause
resume
searchbutton
online
offline

Que permiten detectar los eventos propios asociados a un móvil para poder actuar en consecuencia. Creo que los nombres son bastante autoexplicativos.

Para acceder a toda la funcionalidad del móvil basta con estudiar la documentación de la API http://docs.phonegap.com/en/2.4.0/index.html (cuando escribí este articulo era la 2.4.0). Donde puedes ver como acceder a todo las funcionalidades del móvil empleando solamente javascript.

Espero que este artículo te sirva para atreverte con esta nueva tecnología


Robot volador logo de phoneGap

Publicado por Abraham Covelo

Ago 22
Articulos programación A pesar de que php es un lenguaje con un tipado débil. Esto significa que, para los tipos primitivos de datos, estos son convertidos automáticamente para poder operar con ellos sin que el programador tenga que hacer nada. Por lo tanto en la mayoría de las ocasiones esta operación de convertir int a string no es realmente necesaria. Sin embargo es posible que nos encontremos con algunos casos en la que si lo sea. Existen varias posibilidades para realizar esta operación:

Type casting

Basta con forzar la conversión empleando el cast (string). Exemplo:

$a = (string)345;
var_dump($a);

Funcion strval:

Directamente convierte una variable (no tiene porque ser un entero) en un string

$a = strval(354);
var_dump($a);


Conversión forzada
Forzar la conversión a cadena (string) empleando alguna operación que lo requiera

Podemos encontrar diversos ejemplos de esta técnica

$a = 456.""; //concatenación de cadenas

$b = 567;
$a = "$b"; //formación de cadenas


Benchmark

Haciendo un benchmark de todos estos métodos con una version de php 5.2.5

Este sería el código empleado:

<?php

echo 'PHP version: '.phpversion()."\n\n";

$microtime = microtime(true);
for($i=0;$i<1000000;$i++) $a = (string)567;
echo 'Método cast: '.(microtime(true)-$microtime)." segundos\n";


var_dump($a);

$microtime = microtime(true);
for($i=0;$i<1000000;$i++) $a = strval(343);
echo 'Función strval: '.(microtime(true)-$microtime)." segundos\n";


var_dump($a);


$b = 456;
$microtime = microtime(true);
for($i=0;$i<1000000;$i++) $a = $b.""; //concatenación de cadenas
echo 'Concatenación de cadenas: '.(microtime(true)-$microtime)." segundos\n";

var_dump($a);

$b = 567;
$microtime = microtime(true);
for($i=0;$i<1000000;$i++) $a = "$b"; //formación de cadenas
echo 'Formación de cadenas: '.(microtime(true)-$microtime)." segundos\n";


var_dump($a);
?>

Y estos los resultados obtenidos en mi caso:

PHP version: 5.2.5

Método cast: 6.115082025528 segundos
string(3) "567"
Función strval: 6.3874759674072 segundos
string(3) "343"
Concatenación de cadenas: 6.1379280090332 segundos
string(3) "456"
Formación de cadenas: 6.1571230888367 segundos
string(3) "567"


El método cast es el más rápido y la función strval la más lenta quizás debido a que este método tiene más funcionalidades. Los otros métodos parecen ligeramente inferiores en rapidez.

Tenemos otra artículo relacionado con este por si estas interesado en la conversión de int a string en java. Java es un lenguaje con el tipado más estricto que php por lo que conocer esta conversión de tipos para este lenguaje puede serte útil también.






Publicado por Abraham Covelo

Jul 11
Articulos programación Git es un sistema de control de versiones distribuido. Los clientes de Git no se descargan la última versión de los ficheros de un proyecto: sino que se bajan el repositorio completamente. Git también permite tener más de un repositorio remoto.

Git almacena los datos como instantáneas (snapshots) del proyecto a lo largo del tiempo. Para ganar en eficiencia, si los ficheros no cambian, Git no almacena el fichero otra vez -- simplemente un enlace a la versión idéntica y anterior que ha sido almacenada previamente. Git no almacena los "deltas" de los ficheros cambiados. Almacena el fichero cambiado entero.

Casi todas las operaciones en Git son locales ya que toda la información histórica está en el repositorio local.

Git verifica la integridad de ficheros empleando sumas de verificación (checksums) (empleando el algoritmo SHA-1, que devuelve una representación de 40 caracteres hexadecimales en minúscula)

Casi todas las operación simplemente añaden datos a la base de datos de Git. Es muy difícil hacer que el sistema haga algo que no se pueda deshacer.

Los 3 estados
Git tiene 3 estados principales para los ficheros que tiene bajo control: entregado (committed), modificado (modified) y (preparado) staged

Entregado (commited) - los datos han sido almacenados y están seguros en la base de datos local.
Modificado (modified) - El fichero han cambiado pero no se ha entregado todavía
Preparado (staged) - Significa que has marcado un fichero modificado en su versión ACTUAL para ser entregado en la siguiente instantánea (snapshot).

Esto nos lleva a las 3 versiones principales de un proyecto Git: el directorio Git, el directorio de trabajo y el área de preparación (staging area)

Directorio Git - es donde los metadatos y los objetos de la base de datos es almacenado (directorio .git)
El directorio de trabajo - es una de las versiones de los ficheros del proyecto (instantanea) donde el usuario generalmente modifica los ficheros
El área de preparación (staging area) es un simple fichero, generalmente contenido en el directorio Git que almacena toda la información sobre la siguiente entrega de ficheros.

Así que un fichero puede estar entregado (en el directorio Git), preparado (en el área de preparación) o modificado (solo en el directorio de trabajo)

Continua leyendo "Tutorial Git (recetario)"

Publicado por Abraham Covelo

(Página 1 de 37, en total 145 entradas)