Introducción al AdWords API

13:38 Marzo 26th, 2011 por lobo lobo
votar

Para aquellas personas y compañías que hacen uso del sistema AdWords para promover servicios y productos, ya sean propios o de terceros, tarde o temprano surge la necesidad de escalar y buscar alternativas para mejorar y optimizar sus procesos publicitarios.

Con el incremento en el número de anuncios, criterios, ofertas y campañas de publicidad a manejar a través del sistema AdWords, el hacer uso de su interfaz de usuario se va convirtiendo en una tarea cada vez ms difícil y en ciertos casos hasta una pérdida de tiempo debido a la ejecución de tareas repetitivas.

En muchos casos la información a ser utilizada en la publicación de anuncios ya se encuentra en forma digital y debido a la carencia de un sistema automatizado se requiere realizar la copia manual de los datos de un sistema al otro. Este proceso resulta ser más lento y propenso a errores en la transcripción de los datos.

En todos estos casos el uso de la API es la solución, permitiendo la automatización de estas tareas, así como la ejecución de largos volúmenes de transacciones. En otros casos, el uso de la API es la única opción cuando se requiere la ejecución de cambios en tiempo real a sus anuncios. Un ejemplo es cuando es necesario ajustar los precios anunciados de los productos o servicios en el momento en que cambian en su sistema de inventario. En general, el uso de la API brinda una serie de oportunidades en el control de su publicidad, dada sus capacidades de automatización en tiempo real, bondades que no pueden ser aprovechadas haciendo uso de su interfaz de usuario.

(más…)

votar

Crear base de datos en Blackberry

7:00 Enero 4th, 2011 por lobo lobo
votar

A continuación, un pequeño how-to de cómo crear bases de datos en el SQL-Lite de los dispositivos Blackberry.

Importamos las librerías necesarias:

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.database.*;
import net.rim.device.api.io.*;

Creamos el framework para la aplicación mediante la ampliación de la clase UiApplication. Esta clase representa tu aplicación. Proporcionamos un método main() para la nueva clase. En el método main(), creamos una instancia de la nueva clase e invocamos el método enterEventDispatcher() para permitir a la aplicación recibir eventos. Proporcionamos un constructor para la nueva clase. En el constructor, invocamos el método pushScreen() para mostrar la pantalla personalizada para la aplicación.
(más…)

votar

Thumbnails en PHP “On The Fly”

8:00 Diciembre 16th, 2010 por lobo lobo
votar

Algo que resulta muy útil cuando trabajamos con imágenes, por ejemplo, con galerías de imágenes, es crear Thumbnails en PHP para mostrar una matriz de imágenes “en pequeñito”. Además, en muchas ocasiones, es interesante que no queden las imágenes en miniatura guardadas en el servidor.

A continuación, os dejo un pequeño script que nos permite mostrar en el navegador una imagen, cuya ruta se pasa por parámetro HTTP, en tamaño thumbnail “On the fly”, es decir, crea la imagen pequeña sobre la marcha y no la guarda en el disco del servidor. La única dependencia que tiene este script es que el PHP debe estar compilado con las librerías GD.

<?php
// Este script se debe guardar con el nombre thumbnail.php
// Uso: thumbnail.php?im=image.jpg
// Opcional: thumbnail.php?im=image.jpg&amp;maxsize=100

$im      = $_GET['im'];
$maxsize = $_GET['maxsize'];

if ($maxsize == '') {
	$maxsize = 100;
}

// The file
$filename = $im;

// Set a maximum height and width
$width  = $maxsize;
$height = $maxsize;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

if ($width && ($width_orig < $height_orig)) {
	$width = ($height / $height_orig) * $width_orig;
} else {
	$height = ($width / $width_orig) * $height_orig;
}

// Resample
$image_p = imagecreatetruecolor($width, $height);
$image   = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

// Output
imagejpeg($image_p);
imagedestroy($image);
imageDestroy($image_p);
?>
votar

Informacion archivo de audio en Java

7:00 Diciembre 7th, 2010 por lobo lobo
votar

A continuación os dejo una clase en java que nos muestra la información detallada de un archivo de audio.

/*
 *	AudioFileInfo.java
 *
 *	This file is part of jsresources.org
 */

/*
 * Copyright (c) 1999 - 2004 by Matthias Pfisterer
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 |<---            this code is formatted to fit into 80 columns             --->|
 */

import java.io.InputStream;
import java.io.File;

import java.net.URL;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

/**
 * AudioFileInfo Getting information about an
 * audio file
 *
 *

Displays general information about
 * an audio file: file type, format of audio data, length of audio data, total
 * length of the file. 
 *
 *

  java
 * AudioFileInfo  
 *   
 *  
 * audiofile
 *   
 *
 *
  
 * 

use standard input as source
 * for the audio file. If this option is given, audiofile is not required.
 *   
 *

interpret audiofile as filename. If this option is
 * given, audiofile is
 * required.  
 * 

interpret audiofile as URL. If this option is given,
 * audiofile is
 * required.  
 * 

display information provided
 * by AudioInputStream, too  
 * 

display AudioFormat and
 * AudioFileFormat properties  
 * audiofile
 *

the file name or URL of the audio file that information
 * should be displayed for. This is required if  is not
 * given.   
 *
 *

The latest version of this
 * program requires Java 1.5. Some combination of options do not work. Both
 * Sun's implementation and
Tritonus show some information only
 * with option . 
 *
 *


AudioFileInfo.java 
 */
public class AudioFileInfo {
	private static final int LOAD_METHOD_STREAM = 1;
	private static final int LOAD_METHOD_FILE = 2;
	private static final int LOAD_METHOD_URL = 3;

	public static void main(String[] args) {
		if (args.length == 0) {
			printUsageAndExit();
		}
		int nLoadMethod = LOAD_METHOD_FILE;
		boolean bCheckAudioInputStream = false;
		boolean bOutputProperties = false;
		int nCurrentArg = 0;
		while (nCurrentArg < args.length) {
			if (args[nCurrentArg].equals("-h")) {
				printUsageAndExit();
			} else if (args[nCurrentArg].equals("-s")) {
				nLoadMethod = LOAD_METHOD_STREAM;
			} else if (args[nCurrentArg].equals("-f")) {
				nLoadMethod = LOAD_METHOD_FILE;
			} else if (args[nCurrentArg].equals("-u")) {
				nLoadMethod = LOAD_METHOD_URL;
			} else if (args[nCurrentArg].equals("-i")) {
				bCheckAudioInputStream = true;
			} else if (args[nCurrentArg].equals("-p")) {
				bOutputProperties = true;
			}

			nCurrentArg++;
		}
		String strSource = args[nCurrentArg - 1];
		String strFilename = null;
		AudioFileFormat aff = null;
		AudioInputStream ais = null;
		try {
			switch (nLoadMethod) {
			case LOAD_METHOD_STREAM:
				InputStream inputStream = System.in;
				aff = AudioSystem.getAudioFileFormat(inputStream);
				strFilename = "";
				if (bCheckAudioInputStream) {
					ais = AudioSystem.getAudioInputStream(inputStream);
				}
				break;

			case LOAD_METHOD_FILE:
				File file = new File(strSource);
				aff = AudioSystem.getAudioFileFormat(file);
				strFilename = file.getCanonicalPath();
				if (bCheckAudioInputStream) {
					ais = AudioSystem.getAudioInputStream(file);
				}
				break;

			case LOAD_METHOD_URL:
				URL url = new URL(strSource);
				aff = AudioSystem.getAudioFileFormat(url);
				strFilename = url.toString();
				if (bCheckAudioInputStream) {
					ais = AudioSystem.getAudioInputStream(url);
				}
				break;
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
		if (aff == null) {
			out("Cannot determine format");
		} else {
			outputFileFormat(strFilename, aff);
			if (bCheckAudioInputStream) {
				outputAudioInputStream(ais);
			}
			out("---------------------------------------------------------------------------");
			if (bOutputProperties) {
				out("AudioFileFormat properties:");
				Map properties = aff.properties();
				outputProperties(properties);
				out("---------------------------------------------------------------------------");
				out("AudioFormat properties:");
				properties = aff.getFormat().properties();
				outputProperties(properties);
			}
		}
	}

	private static void outputFileFormat(String strFilename, AudioFileFormat aff) {
		AudioFormat format = aff.getFormat();
		out("---------------------------------------------------------------------------");
		out("Source: " + strFilename);
		out("Type: " + aff.getType());
		out("AudioFormat: " + format);
		out("---------------------------------------------------------------------------");
		String strAudioLength = null;
		if (aff.getFrameLength() != AudioSystem.NOT_SPECIFIED) {
			strAudioLength = "" + aff.getFrameLength() + " frames, "
					+ aff.getFrameLength() * format.getFrameSize() + " bytes, "
					+ (aff.getFrameLength() / format.getFrameRate())
					+ " seconds";
		} else {
			strAudioLength = "unknown";
		}
		out("Length of audio data: " + strAudioLength);
		String strFileLength = null;
		if (aff.getByteLength() != AudioSystem.NOT_SPECIFIED) {
			strFileLength = "" + aff.getByteLength() + " bytes";
		} else {
			strFileLength = "unknown";
		}
		out("Total length of file (including headers): " + strFileLength);
	}

	private static void outputAudioInputStream(AudioInputStream ais) {
		String strAudioLength = null;
		if (ais.getFrameLength() != AudioSystem.NOT_SPECIFIED) {
			strAudioLength = "" + ais.getFrameLength() + " frames (= "
					+ ais.getFrameLength() * ais.getFormat().getFrameSize()
					+ " bytes)";
		} else {
			strAudioLength = "unknown";
		}
		out("[AudioInputStream says:] Length of audio data: " + strAudioLength);
	}

	private static void outputProperties(Map properties) {
		if (properties == null) {
			return;
		}
		Set> entries = properties.entrySet();
		boolean bHasProperties = !entries.isEmpty();
		if (bHasProperties) {
			Iterator> iter = entries.iterator();
			while (iter.hasNext()) {
				Map.Entry entry = iter.next();
				out(entry.getKey() + " = " + entry.getValue());
			}
		} else {
			out("[no properties]");
		}
		out("---------------------------------------------------------------------------");
	}

	private static void printUsageAndExit() {
		out("AudioFileInfo: usage:");
		out("\tjava AudioFileInfo [-s|-f|-u] [-i] [-p] ");
		System.exit(1);
	}

	private static void out(String strMessage) {
		System.out.println(strMessage);
	}
}

/*** AudioFileInfo.java ***/

A mi esta clase me ha ayudado bastante, espero que os sirva a vosotros también. Probad con un archivo, por ejemplo, de tipo WAV.

votar

Como crear módulo en Joomla! 1.5

7:00 Diciembre 6th, 2010 por lobo lobo
votar

En el siguiente tutorial vamos a crear un modulo de Jooma! 1.5 que consulte a la base de datos y muestre el titulo de los artículos con un enlace al articulo completo.

Hacer un módulo es mucho más sencillo que un componente.

De hecho los módulos están pensados para mostrar datos concretos, como usuarios conectados, datos de contacto, menús etc… que en muchos casos son una simple consulta a la base de datos.

Los módulos se encuentran situados en el directorio modules dentro del directorio de instalación de Joomla y por cada módulo hay una carpeta con nombre mod_nombredelModulo.

Nuestro módulo se va a llamar anyo, por lo tanto la carpeta del módulo se llamará mod_anyo.

La estructura de un módulo es muy simple, tiene un fichero php con el mismo nombre que el módulo, el cual es el punto de entrada, que tomará en control del módulo cuando este sea llamado.

Para separar la lógica de la presentación se ha creado la clase helper, en la cual escribiremos nuestras funciones y de esta forma nuestro código quedará más ordenador y legible. La clase helper se encuentra en el fichero de nombre helper.php en la raíz del directorio del módulo.

Desde mod_anyo.php ejecutaremos las funciones de la clase helper simplemente llamándolos como métodos estáticos , puedes encontrar una definición de la clase en el sitio oficial de Joomla.

Por ultimo, tenemos el layout, o template, que se encuentra dentro de la carpeta tmpl de nuestro módulo , el cual puede tener cualquier nombre que se te ocurra, pero le asignaremos default.php, que es el nombre por defecto que buscara Joomla si no le indicamos lo contrario.

esquema modulos joomla 1.5

Para la parte de Back-End disponemos del fichero mod_anyo.xml, donde definiremos los parámetros del módulo y mediante el cual podremos parametrizar el modulo para hacerlo mas configurable y reutilizable.

Vamos a ver el código de nuestro punto de entrada:

<?php

// no acceso directo
defined( '_JEXEC' ) or die( 'Restricted access' );

// incluir al helper que devolverá los datos, solo una vez
require_once( dirname(__FILE__).DS.'helper.php' );

$articulos = modAnyoHelper::getArticulos( $params );
require( JModuleHelper::getLayoutPath( 'mod_Anyo','default') );
?>

La primera línea, como siempre que hacemos una extensión para Joomla, es una línea de comprobación, que asegura que no se este accediendo al modulo estar usando Joomla.

La segunda línea importa el fichero de la clase helper, donde almacenamos nuestras funciones.

En la tercera línea, ejecutamos la función getArticulos() de nuestro helper que devuelve una lista de objetos con los resultados de la consulta SQL.

Por último, hacemos un require del layout, que en nuestro se llama default y lo hacemos usando el método getLayoutPath de la clase JModuleHelper, que devuelve la ruta del layout pasándole como parámetro el nombre del módulo y al nombre del layout.

En el helper almacenamos nuestras funciones, donde accedemos a datos para recuperar la lista de artículos que se escribieron hoy hace un anyo. Vamos a ver el código:

<?php
class modAnyoHelper
{
    function getArticulos( $params )
    {
		jimport('joomla.utilities.date');
		$jnow = new JDate();
		$now = $jnow->toMySQL();

		$db = &JFactory::getDBO();
		$consulta = "select title,id
		from #__content where datediff( #__content.created, '".$now."' ) =
		365 limit 0,30";
		$db->setQuery($consulta);
		$categorias = $db->loadObjectList();
		return $db->loadObjectList();
    }
}
?>

La clase helper ha de llamarse con el nombre del modulo sin “_” seguido de helper, es decir, en nuestro caso seria modanyoHelper.

Mediante jimport importamos el fichero necesario para instanciar una clase de tipo JDate.

Jimport admite como parámetro un string que apunte al “package” donde se encuentre la clase. Es un concepto similar al import de java . Los paquetes se importan según la el árbol de clases que hay en la documentación oficial :

Después creamos el método getArticulos que será el que devuelva una lista de artículos que tengan un año de antigüedad.

Utilizamos un objeto de tipo JDatabase para realizar la consulta y después simplemente obtenemos la lista de objetos mediante el método loadObjectList .

El meollo de la cuestión esta en la consulta SQL, donde se utiliza la función datediff para consultar los artículos con una antigüedad de 365 días

Finalmente , en el layout, sacamos por pantalla una lista HTML con enlaces a los artículos que se escribieron hace justo 365 días:

<?php
if($params->get('asignarCss')){
	$css = $params->get('clase');
}

?>
<ul <?php if(isset($css )){ echo 'class="'.$css.'"';} ?> >
<?php
	foreach ($articulos as $articulo) {
		echo '<li><a href="index.php?
		option=com_content&id='.$articulo-">id.'>'. $articulo->title .'</a></li>';
	}
?>
</ul>

Fíjate que para acceder a los parámetros del fichero mod_anyo.xml se utiliza $params->get() .

Estos parámetros se definen previamente en el fichero xml que acompaña el modulo.

<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<name>Hoy hace un año</name>
<author>David Noguera</author>
<version>1.5.0</version>
<creationDate>30.07.2006</creationDate>
<description>Modulo que carga los artículos de tal dia como hoy pero hace un año</description>
<authorEmail>david@nosolocodigo.com</authorEmail>
<files>
<filename module="mod_anyo">mod_anyo.php</filename>
<filename>helper.php</filename>
<filename>mod_anyo.xml</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
<params>
<param name="clase" type="text" default="mod_anyo"
label="Clase Css para el ul"
description="La clase que se aplicara al ul" />
<param name="asignarCss" type="radio" default="1"
label="Clase css" description="Determina si se debe asignar la clase css o no">
<option value="0">No</option>
<option value="1">Si</option>
</param>
</params>
</install>

Para finalizar solo queda meter todo esto en un zip y subirlo al instalador de Joomla!.

Via: nosolocodigo.com

votar

Redimensionar background con CSS

7:00 Noviembre 4th, 2009 por lobo lobo
votar

Hoy os traemos un código para conseguir que una imagen de fondo se redimensione automáticamente sin necesidad de javascript.

Os mostraremos dos formas de hacerlo. En la primera, la imagen se distorsiona ligeramente para adaptarse a las dimensiones que tiene el navegador. Con esto conseguimos que la imagen de fondo se vea por completo siempre, aunque se distorsionen las proporciones ligeramente en función de la resolución y dimensiones de la pantalla del cliente (usuario que visita nuestra web).

La segunda opción es similar, aunque esta no distorsiona las proporciones de la imagen de fondo. Mostrará la imagen centrada en el navegador y la recolocará cada vez que se redimensione la ventana del navegador. El inconveniente es que, si la imagen de fondo es muy grande, algunos clientes no verán toda la imagen.

(más…)

votar

Introducción al Framework CakePHP

8:00 Octubre 30th, 2009 por lobo lobo
votar

Logo CakePHP

Logo CakePHP

Para empezar típicamente, dedico las siguientes líneas a describir en lo que consiste el Framework CakePHP.

CakePHP es un framework de desarrollo rápido en PHP que provee una arquitectura extensible para el desarrollo, mantenimiento y producción de aplicaciones. Usando los patrones de diseño MVC y ORM, CakePHP reduce los costes de desarrollo y ayuda a los desarrolladores a escribir menos líneas de código.

Actualmente, están por la versión 1.2.5 estable, aunque ya están en desarrollo de la 1.3.

Esta es una lista breve con las características de las que disfrutarás al utilizar CakePHP:

(más…)

votar

330 Tips de Java

8:00 Octubre 28th, 2009 por lobo lobo
votar

En esta ocasión os traemos un PDF con, nada más y nada menos, 330 Tips sobre el lenguaje de programación Java.

143 páginas, en inglés, con consejos y respuestas a las preguntas más frecuentes sobre la programación en JAVA.

Descargar 330 Tips de Java

Descargar 330 Tips de Java

(más…)

votar

Aprenda servlets de java

8:00 Octubre 23rd, 2009 por lobo lobo
votar

Siguiendo con la serie de manuales de java, esta mañana os traemos un estupendo manual para la programación de Servlets en el lenguaje de programación Java.

Información sobre el protocolo TCP/IP, HTTP subiendo un poco en los niveles, instalando Java Servlet Development Kit (JSDK 2.0), la clase HttpServlet, etc.

Descargar Aprenda Servlets en Java

Descargar Aprenda Servlets en Java

(más…)

votar

Java desde cero

8:00 Octubre 13th, 2009 por lobo lobo
votar

Empezamos la semana con un manual sobre la programación con el leguaje JAVA en español.

En este caso empezamos desde el principio, con las cosas básicas del lenguaje de programación JAVA, desde el modelo de orientación a objetos, las principales estructuras de control, algunas de las librerias más importantes (dibujar en java, awt, etc.) hasta llegar cosas más complejas como la programación con Threads.

Java desde Cero

Java desde Cero

(más…)

votar


logo sigueme twitter
Sinergia sin control
Actual tira de sinergiasincontrol
(la tira cómica que leen Martín varsavsky, Enrique Dans y Linus Torvalds en el universo paralelo 64832)

Validaciones

Valid XHTML 1.0 Transitional

¡CSS Válido!

[Valid RSS]