<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Plus Global</title>
	
	<link>http://es.plusglobal.com</link>
	<description>Outsourcing de programación web</description>
	<lastBuildDate>Thu, 09 Jun 2011 12:20:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PlusGlobal/espanol" /><feedburner:info uri="plusglobal/espanol" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Generar fechas al azar con PHP</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/AAgwTfITjzE/</link>
		<comments>http://es.plusglobal.com/blog/generar-fechas-al-azar-con-php/#comments</comments>
		<pubDate>Tue, 31 May 2011 18:40:10 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1508</guid>
		<description><![CDATA[A veces sucede que debemos llenar una tabla con cientos de miles de registros para probar el rendimiento de una aplicación, de modo que no tengamos sorpresas el día de mañana cuando la base de datos crezca mucho. Por lo general los registros se llenan con información al azar y para eso hemos creado una [...]]]></description>
			<content:encoded><![CDATA[<p>A veces sucede que debemos llenar una tabla con cientos de miles de registros para probar el rendimiento de una aplicación, de modo que no tengamos sorpresas el día de mañana cuando la base de datos crezca mucho. Por lo general los registros se llenan con información al azar y para eso hemos creado una función que <strong>genera fechas al azar</strong> dentro de un rango establecido.</p>
<pre class="brush:php">
	function random_date($from = 0, $to = null) {
		if (!$to) {
			$to = date('U');
		}
		if (!ctype_digit($from)) {
			$from = strtotime($from);
		}
		if (!ctype_digit($to)) {
			$to = strtotime($to);
		}
		return date('Y-m-d h:i:s', rand($from, $to));
	}
</pre>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/AAgwTfITjzE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/generar-fechas-al-azar-con-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/generar-fechas-al-azar-con-php/</feedburner:origLink></item>
		<item>
		<title>Cómo saber si una función o método existe (ejemplos en PHP y Javascript)</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/ZqNjkxVxSK4/</link>
		<comments>http://es.plusglobal.com/blog/como-saber-si-una-funcion-o-metodo-existe/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 18:47:53 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1497</guid>
		<description><![CDATA[PHP: Cómo saber si existe o está definida una función Usamos function_exists. Ejemplo: if (function_exists('example_function')) { example_function($arg1, $arg2); } PHP: Cómo saber si un método de una clase existe o está definido Usamos method_exists. Ejemplo: $l10n = new L10n(); if (method_exists($l10n, 'translate')) { $translated = $l10n->translate('word'); } Javascript: cómo saber si una función o método [...]]]></description>
			<content:encoded><![CDATA[<h2>PHP: Cómo saber si existe o está definida una función</h2>
<p>Usamos <a href="http://php.net/function_exists">function_exists</a>. Ejemplo:</p>
<pre class="brush: php">
if (function_exists('example_function')) {
	example_function($arg1, $arg2);
}
</pre>
<h2>PHP: Cómo saber si un método de una clase existe o está definido</h2>
<p>Usamos <a href="http://php.net/method_exists">method_exists</a>. Ejemplo:</p>
<pre class="brush: php">
$l10n = new L10n();
if (method_exists($l10n, 'translate')) {
	$translated = $l10n->translate('word');
}</pre>
<h2>Javascript: cómo saber si una función o método existe o está definida</h2>
<p>Javascript no hace distinción entre funciones y métodos, ya que todas son funciones. La forma de hacerlo es:</p>
<pre class="brush: js">
if (typeof functionName == 'function') {
	functionName();
}
</pre>
<h3>Caso especial: jQuery</h3>
<p>En el caso de jQuery la forma de saber si un método está definido es mediante <code>jQuery.fn.<strong>nombreFuncion</strong></code>. Ejemplo:</p>
<pre class="brush: js">
if (typeof jQuery.fn.tinymce == 'function') {
	$('textarea').tinymce();
}
</pre>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/ZqNjkxVxSK4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/como-saber-si-una-funcion-o-metodo-existe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/como-saber-si-una-funcion-o-metodo-existe/</feedburner:origLink></item>
		<item>
		<title>Minimizar consultas SQL repetidas en CakePHP</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/uUbdMFzjKww/</link>
		<comments>http://es.plusglobal.com/blog/minimizar-consultas-sql-repetidas-en-cakephp/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 15:17:06 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1489</guid>
		<description><![CDATA[Trabajando en optimización de performance de una aplicación CakePHP noté que una consulta SQL se estaba ejecutando más de una vez, siempre igual y devolviendo el mismo resultado. El método del modelo que generaba la consulta era más o menos así /** * Determina si un producto está habilitado * * @param int $id Id [...]]]></description>
			<content:encoded><![CDATA[<p>Trabajando en optimización de performance de una aplicación CakePHP noté que una consulta SQL se estaba ejecutando más de una vez, siempre igual y devolviendo el mismo resultado.</p>
<p>El método del modelo que generaba la consulta era más o menos así</p>
<pre class="brush:php">
/**
 * Determina si un producto está habilitado
 *
 * @param int $id Id del producto en base de datos
 * @return boolean
 * @access public
 */
public function isEnabled($id) {
	$product = $this->find('first', array(
		'conditions' => array('Product.id' => $id),
		'fields' => array('enabled')
	));
	if (empty($product)) {
		$out = false;
	} else {
		$out = !empty($product['Product']['enabled']);
	}
	return $out;
}
</pre>
<p>En algunos casos, al momento de llamar a <code>isEnabled</code> ya teníamos disponible el array con los datos del producto porque habíamos ejecutado un <code>find</code> previamente, así que el método se podría reescribir pasándole el array con todos los datos en vez del id, y con eso ya nos ahorraríamos consultas SQL repetidas</p>
<pre class="brush: php">
/**
 * Determina si un producto está habilitado
 *
 * @param array $product Array del producto retornado por un find()
 * @return boolean
 * @access public
 */
public function isEnabled($product) {
	return !empty($product['Product']['enabled']);
}
</pre>
<p>Sin embargo, esto hizo fallar algunos casos de testing porque en otros lugares de la aplicación el método necesitaba recibir el id el producto y todavía no se había leído el producto desde base de datos como para pasar el array. </p>
<p>La refactorización final quedó así:</p>
<pre class="brush:php">
/**
 * Determina si un producto está habilitado
 *
 * @param mixed $product Array del producto retornado por un find() o id del producto
 * @return boolean
 * @access public
 */
public function isEnabled($product) {
	if (!is_array($product) or empty($product['Product']['enabled'])) {
		$product = $this->find('first', array(
			'conditions' => array('Product.id' => $product),
			'fields' => array('enabled')
		));
	}
	if (empty($product)) {
		$out = false;
	} else {
		$out = !empty($product['Product']['enabled']);
	}
	return $out;
}
</pre>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/uUbdMFzjKww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/minimizar-consultas-sql-repetidas-en-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/minimizar-consultas-sql-repetidas-en-cakephp/</feedburner:origLink></item>
		<item>
		<title>Cómo reportar errores de programación</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/O4DUdsvTEEc/</link>
		<comments>http://es.plusglobal.com/blog/como-reportar-errores-de-programacion/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 18:57:52 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[agencias]]></category>
		<category><![CDATA[programadores]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1474</guid>
		<description><![CDATA[Siempre hacemos un esfuerzo muy grande por evitar cometer errores, pero a veces no es suficiente y es posible que algo se nos escape. Cuando esto sucede los clientes (en nuestro caso las agencias) nos avisarán de los bugs encontrados para que podamos corregirlos. Sin embargo, a veces los reportes no están lo suficientemente completos [...]]]></description>
			<content:encoded><![CDATA[<p>Siempre hacemos un esfuerzo muy grande por evitar cometer errores, pero a veces no es suficiente y es posible que algo se nos escape. Cuando esto sucede los clientes (en nuestro caso las agencias) nos avisarán de los bugs encontrados para que podamos corregirlos. Sin embargo, a veces los reportes no están lo suficientemente completos como para que podamos rastrear el error y encontrar el problema para poder solucionarlo.</p>
<p>En proyectos grandes y a largo plazo lo ideal es tener un sistema de <a href="http://es.wikipedia.org/wiki/Sistema_de_seguimiento_de_errores">bug tracking</a>, pero para trabajos medianos o pequeños consideramos que un sistema de este tipo genera más problemas que beneficios y con un simple correo electrónico es suficiente. Sin embargo, esto no quita que el reporte de error deba estar completo.</p>
<h2>Qué debe contener un reporte de bug</h2>
<p>Todo <strong>reporte de error</strong> debe estar lo suficientemente detallado como para que los programadores podamos reproducirlo en igualdad de condiciones. No es suficiente con avisarnos que algo no funciona, debemos saber exactamente qué es lo que no funciona y por qué se considera que es un error, ya que muchas veces no se trata de un error sino de una mala interpretación sobre la forma en que debería estar funcionando el programa.</p>
<p>Un reporte de error debería responder al menos estas 4 preguntas:</p>
<ol>
<li>Cuáles son los <strong>pasos a seguir</strong> para producir el error</li>
<li>Qué <strong>resultado esperaba</strong> conseguir el usuario al ejecutar estos pasos</li>
<li>Qué <strong>resultado se obtuvo</strong> en lugar del esperado</li>
<li><strong>Bajo qué condiciones</strong> se ejecutó la prueba: sistema operativo usado, versión del navegador o teléfono móvil, resolución de pantalla, etc.</li>
</ol>
<p>También resulta de mucha ayuda incluir capturas de pantallas, archivos adjuntos o imágenes que se hayan utilizado, copias completas de direcciones de acceso (URL), datos que se usaron para completar formularios, etc.</p>
<p>Si los reportes de errores están completos ahorraremos mucho tiempo en idas y vueltas de emails y lograremos entregar los trabajos con mayor anticipación.</p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/O4DUdsvTEEc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/como-reportar-errores-de-programacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/como-reportar-errores-de-programacion/</feedburner:origLink></item>
		<item>
		<title>Benchmark: eliminación de elementos duplicados de un array en PHP</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/41lwTxuDQ7A/</link>
		<comments>http://es.plusglobal.com/blog/benchmark-eliminacion-de-elementos-duplicados-de-un-array-en-php/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 11:37:28 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1458</guid>
		<description><![CDATA[Tenemos el siguiente array $r = array( 0 => 'verde', 1 => 'azul', 2 => 'verde', 3 => 'verde', 4 => 'amarillo', ); Y queremos eliminar los elementos duplicados, para lo cual tenemos dos opciones 1. array_values + array_unique $r = array_values(array_unique($r)); 2. array_keys + array_flip $r = array_keys(array_flip($r)); ¿Cuál es mejor? Desde el punto [...]]]></description>
			<content:encoded><![CDATA[<p>Tenemos el siguiente array</p>
<pre class="brush: php">$r = array(
	0 => 'verde',
	1 => 'azul',
	2 => 'verde',
	3 => 'verde',
	4 => 'amarillo',
);</pre>
<p>Y queremos eliminar los elementos duplicados, para lo cual tenemos dos opciones</p>
<p><strong>1.</strong> <a href="http://php.net/array_values">array_values</a> + <a href="http://php.net/array_unique">array_unique</a></p>
<pre class="brush: php">$r = array_values(array_unique($r));</pre>
<p><strong>2.</strong> <a href="http://php.net/array_keys">array_keys</a> + <a href="http://php.net/array_flip">array_flip</a></p>
<pre class="brush: php">$r = array_keys(array_flip($r));</pre>
<h2>¿Cuál es mejor?</h2>
<p>Desde el punto de vista de legibilidad del código ambas opciones son válidas, ya que el comportamiento de cada una de las funciones utilizadas es bastante simple de comprender y se pueden consultar en el <a href="http://php.net">manual de PHP</a>. Por lo tanto, lo único que puede determinar la conveniencia de una opción por sobre la otra es el tiempo de ejecución de cada una. </p>
<p>Para determinarlo, hemos realizado un <strong><a href="http://es.wikipedia.org/wiki/Benchmark">benchmark</a></strong>. Estos son los resultados:</p>
<h3>Opción 1 (array_values + array_unique)</h3>
<pre>
-> Testing http://localhost/experimental/array_unique/1.php

Total Requests made: <strong>1000</strong>
Total Time elapsed: <strong>14.009807348251</strong> (seconds)

Requests/Second: <strong>71.379 req/sec</strong>
Average request time: <strong>0.014 seconds</strong>
Standard deviation of average request time: <strong>0.002</strong>
Longest/shortest request: <strong>0.017 sec/0.004 sec</strong>
</pre>
<h3>Opción 2 (array_keys + array_flip )</h3>
<pre>
-> Testing http://localhost/experimental/array_unique/2.php

Total Requests made: <strong>1000</strong>
Total Time elapsed: <strong>13.918713331223</strong> (seconds)

Requests/Second: <strong>71.846 req/sec</strong>
Average request time: <strong>0.014 seconds</strong>
Standard deviation of average request time: <strong>0.003</strong>
Longest/shortest request: <strong>0.017 sec/0.004 sec</strong>
</pre>
<h2>Conclusión</h2>
<p>La diferencia entre una opción y otra es prácticamente despreciable, así que la conclusión es que da lo mismo usar cualquiera.</p>
<p>Otra idea que podemos rescatar de esto es que realizar <strong>comparaciones</strong> entre funciones nativas de PHP realmente es un desperdicio de tiempo porque casi nunca se lograrán resultados significativos. Las verdaderas mejoras en la performance de una aplicación o website se consiguen atacando aquellas partes del código que mayores recursos consumen, como por ejemplo: consultas a base de datos, llamados excesivos a funciones recursivas, consumo de webservices, mala gestión de caché, etc.</p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/41lwTxuDQ7A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/benchmark-eliminacion-de-elementos-duplicados-de-un-array-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/benchmark-eliminacion-de-elementos-duplicados-de-un-array-en-php/</feedburner:origLink></item>
		<item>
		<title>Desconectar para conectar, conciencia en el uso del teléfono móvil</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/8TpfGYqPYrA/</link>
		<comments>http://es.plusglobal.com/blog/desconectar-para-conectar-conciencia-en-el-uso-del-telefono-movil/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 10:23:01 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Publicidad]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[conciencia]]></category>
		<category><![CDATA[publicidad]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1377</guid>
		<description><![CDATA[Impresionante publicidad que muestra de manera muy clara y directa los problemas de desconexión que sufrimos entre las personas debido al uso desmedido de los teléfonos móviles: Esto me hizo recordar a otra publicidad de Personal del año 2006 en la que se trataba de transmitir un mensaje similar:]]></description>
			<content:encoded><![CDATA[<p>Impresionante publicidad que muestra de manera muy clara y directa los problemas de desconexión que sufrimos entre las personas debido al uso desmedido de los teléfonos móviles:</p>
<p><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/PDa1Ek3LVlc" frameborder="0" allowfullscreen></iframe></p>
<p>Esto me hizo recordar a otra publicidad de <a href="http://www.personal.com.ar">Personal</a> del año 2006 en la que se trataba de transmitir un mensaje similar:</p>
<p><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/e7Stqq0bWi0" frameborder="0" allowfullscreen></iframe></p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/8TpfGYqPYrA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/desconectar-para-conectar-conciencia-en-el-uso-del-telefono-movil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/desconectar-para-conectar-conciencia-en-el-uso-del-telefono-movil/</feedburner:origLink></item>
		<item>
		<title>Ideas de marzo</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/8Wnvm78Pk7k/</link>
		<comments>http://es.plusglobal.com/blog/ideas-de-marzo/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 10:52:59 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[conciencia]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1348</guid>
		<description><![CDATA[Twitter modificó sus términos y condiciones de uso de su API con el supuesto objetivo de &#8220;darle a los usuarios una experiencia consistente&#8221;. Puedes ver más sobre el tema en los siguientes enlaces: Twitter un dictador benévolo Puñetazo sobre la mesa de Twitter: no más aplicaciones de terceros Twitter dice a desarrolladores que no hagan [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com">Twitter</a> modificó sus <a href="http://dev.twitter.com/pages/api_terms">términos y condiciones de uso de su API</a> con el supuesto objetivo de &#8220;darle a los usuarios una experiencia consistente&#8221;. Puedes ver más sobre el tema en los siguientes enlaces:</p>
<ul>
<li><a href="http://www.uberbin.net/archivos/comunidades-online/twitter-un-dictador-benevolo.php">Twitter un dictador benévolo</a></li>
<li><a href="http://alt1040.com/2011/03/punetazo-sobre-la-mesa-de-twitter-no-mas-aplicaciones-de-terceros ">Puñetazo sobre la mesa de Twitter: no más aplicaciones de terceros</a></li>
<li><a href="http://www.fayerwayer.com/2011/03/twitter-dice-a-desarrolladores-que-no-hagan-mas-clientes-para-su-plataforma/ ">Twitter dice a desarrolladores que no hagan más clientes para su plataforma</a></li>
</ul>
<p>Esto disparó algunas discusiones muy interesantes sobre la generación de contenidos en Internet. Algunos estuvieron de acuerdo en que el auge de twitter hizo que muchos blogs se abandonen o reduzcan su frecuencia de publicación, reemplazándolos por fragmentos de 140 caracteres que nunca llegarían a desarrollar un tema relativamente complejo.</p>
<p>Así nació una idea interesante, llamada <strong>&#8220;Ideas of march&#8221;</strong> (ideas de marzo) donde muchos bloggers se comprometieron a incrementar la frecuencia de publicación durante todo marzo, con el objetivo de darle un nuevo impulso a la blogósfera y tratar de recuperar el hábito de escribir artículos más elaborados.</p>
<p>Desde <a href="http://es.plusglobal.com">Plus Global</a> adherimos a esta iniciativa y ya hemos dado los primeros pasos para aumentar la frecuencia de publicaciones en nuestro blog. A fin de mes evaluaremos los resultados.</p>
<p>Más sobre <strong>Ideas of march</strong></p>
<ul>
<li><a href="http://shiflett.org/blog/2011/mar/ideas-of-march">http://shiflett.org/blog/2011/mar/ideas-of-march</a></li>
<li><a href="http://www.littlehart.net/atthekeyboard/2011/03/15/embrace-the-ideas-of-march">http://www.littlehart.net/atthekeyboard/2011/03/15/embrace-the-ideas-of-march</a></li>
<li><a href="http://nerderati.com/2011/03/ideas-of-march/">http://nerderati.com/2011/03/ideas-of-march/</a></li>
<li><a href="http://blog.stuartherbert.com/php/2011/03/15/ideas-of-march/">http://blog.stuartherbert.com/php/2011/03/15/ideas-of-march/</a></li>
<li><a href="http://blogsearch.google.com/search?q=ideas+of+march">Ideas of March &#8211; Google blog search</a></li>
<li><a href="http://search.twitter.com/search?q=%23ideasofmarch ">#ideasofmarch twitter hashtag</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/8Wnvm78Pk7k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/ideas-de-marzo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/ideas-de-marzo/</feedburner:origLink></item>
		<item>
		<title>Tip para novatos: configurar PHP para que reporte todos los errores posibles</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/YEqTiwsdU-Q/</link>
		<comments>http://es.plusglobal.com/blog/configurar-php-para-que-reporte-todos-los-errores/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 11:02:27 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1338</guid>
		<description><![CDATA[En las últimas dos semanas tuve que realizar modificaciones en aplicaciones desarrolladas por otros programadores sin usar frameworks. En ambos casos noté que al ejecutar el código en local aparecían muchos errores de tipo notice que no se veían en producción. En el manual de PHP dice claramente que durante el desarrollo es recomendado tener [...]]]></description>
			<content:encoded><![CDATA[<p>En las últimas dos semanas tuve que realizar modificaciones en aplicaciones desarrolladas por otros programadores sin usar <a href="http://es.plusglobal.com/blog/agiliza-tu-trabajo-con-un-framework/">frameworks</a>. En ambos casos noté que al ejecutar el código en local aparecían muchos <strong>errores</strong> de tipo <code>notice</code> que no se veían en producción. En <a href="http://www.php.net/manual/es/errorfunc.configuration.php">el manual de PHP</a> dice claramente que durante el desarrollo es recomendado tener activados los <code>error notice</code>:</p>
<blockquote><p>Habilitar <strong>E_NOTICE</strong> durante el desarrollo tiene algunos beneficios. Para depuración: los mensajes <code>NOTICE</code> le avisarán de posibles errores en su código. Por ejemplo, se avisa del uso de valores no asignados. Es extremadamente útil para encontrar erratas y ahorrar tiempo de depuración. Los mensajes <code>NOTICE</code> le avisarán sobre un estilo malo. Por ejemplo, <code>$arr[item]</code> es mejor que sea escrito como <code>$arr['item']</code> ya que PHP intenta tratar <code>"item"</code> como una constante. Si no es una constante, PHP asume que es un índice de cadena del array. </p></blockquote>
<p>PHP por defecto viene configurado para ocultar los error notice, para activarlos hay que abrir el archivo <code>php.ini</code> y en la línea donde dice:</p>
<p><strong>error_reporting = E_ALL &#038; ~E_NOTICE</strong></p>
<p>cambiarlo por</p>
<p><strong>error_reporting = E_ALL</strong></p>
<p>Después reiniciar Apache y listo, ya estarás un paso más cerca de ser un <a href="http://es.plusglobal.com">desarrollador web profesional</a>.</p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/YEqTiwsdU-Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/configurar-php-para-que-reporte-todos-los-errores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/configurar-php-para-que-reporte-todos-los-errores/</feedburner:origLink></item>
		<item>
		<title>Cómo editar los contactos de tu BlackBerry desde la computadora</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/BE4ZLp6b070/</link>
		<comments>http://es.plusglobal.com/blog/como-editar-los-contactos-de-tu-blackberry-desde-la-computadora/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 19:37:14 +0000</pubDate>
		<dc:creator>Jose Maria - el colo</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1390</guid>
		<description><![CDATA[Si te compraste o cambiaste tu celular convencional por un nuevo smartphone BlackBerry, cuando pongas el chip SIM al teléfono nuevo y pases los contactos a la memoria, vas a notar que exportó todos los contactos y entre otras cosas, los números de teléfono los ubica en la denominación &#8220;trabajo&#8221;. Desktop Manager, la aplicación de escritorio de [...]]]></description>
			<content:encoded><![CDATA[<p>Si te compraste o cambiaste tu celular convencional por un nuevo <strong>smartphone <a href="http://my.blackberry.com/">BlackBerry</a></strong>, cuando pongas el chip SIM al teléfono nuevo y pases los contactos a la memoria, vas a notar que exportó todos los contactos y entre otras cosas, los números de teléfono los ubica en la denominación &#8220;trabajo&#8221;.</p>
<p>Desktop Manager, la aplicación de escritorio de BlackBerry permite hacer backup y restaurar,  pero no editarlos ni sincronizar, por lo cual modificar uno por uno desde el móvil es tedioso. Dentro de todas las formas que investigué la más viable es mediante <strong>Google sync</strong>, una forma fácil, sencilla y segura que resuelve el problema rápidamente y de la siguiente manera:</p>
<ol>
<li>Contar con una cuenta de <a href="http://gmail.com">Gmail</a> para <strong>sincronizar</strong> posteriormente todos los contactos de tu BlackBerry. Aclaración: crea una nueva en el caso que no desees mezclar los contactos de tu cuenta gmail con los del BlackBerry.</li>
<li>Descargar en el BlackBerry desde el explorador la app Google Sync escribiendo: <span style="text-decoration: underline;"><em>m.google.com/sync</em></span></li>
<li>Instalar la aplicación, otorgale los permisos que requiera y una vez instalada la buscas en la carpeta de descargas.</li>
<li>Ejecutar la app, ingresar con la cuenta de <strong>gmail</strong> que queremos usar para la sincronización y al instante se abre la configuración (sencilla) dejando todo preparado a nuestro criterio.</li>
<li>Realizar la sincronización hasta que finalice.</li>
<li>Ingresar a nuestra cuenta de gmail, hacemos click en contacto (situado en la esquina superior izquierda debajo del logo de gmail, es el segundo item). Aparecerán todos los contactos de nuestro BlackBerry próximos a editar.</li>
<li>Una vez editados a nuestro gusto, volvemos a la app de google sync en nuestro movil y sincronizamos nuevamente.</li>
<li>Ahora podemos observar todos nuestros <strong>contactos</strong> del BlackBerry perfectamente ordenados y editados y con todos los datos que rellenamos en la edición.</li>
</ol>
<p>Estimo que a muchos les va a ser de gran utilidad y siguiendo estos pasos en menos de 5 minutos tienen todos los contactos en gmail listos para editar e ir sincronizando con el BlackBerry. Les dejo este video informativo de google sync que también explica los alcances.</p>
<p style="text-align: center;"><iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/Kt_-qHczCMg?rel=0" frameborder="0" allowfullscreen></iframe></p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/BE4ZLp6b070" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/como-editar-los-contactos-de-tu-blackberry-desde-la-computadora/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/como-editar-los-contactos-de-tu-blackberry-desde-la-computadora/</feedburner:origLink></item>
		<item>
		<title>Plus Global se muda a Njambre, el primer espacio de coworking de Rosario</title>
		<link>http://feedproxy.google.com/~r/PlusGlobal/espanol/~3/MOBjnntkFXs/</link>
		<comments>http://es.plusglobal.com/blog/plus-global-se-muda-a-njambre-el-primer-espacio-de-coworking-de-rosario/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 12:57:49 +0000</pubDate>
		<dc:creator>Mauro Zadunaisky</dc:creator>
				<category><![CDATA[Coworking]]></category>
		<category><![CDATA[coworking]]></category>

		<guid isPermaLink="false">http://es.plusglobal.com/?p=1334</guid>
		<description><![CDATA[En abril de 2011, se abrirá el primer espacio de coworking de Rosario y nuestro equipo de trabajo se instalará allí de manera permanente. El proyecto se llama Njambre y fue iniciado y llevado adelante por Federico Seineldin. En Plus Global hace tiempo que seguimos de cerca el movimiento del coworking a nivel global. Tal [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://es.plusglobal.com/wp-content/uploads/2011/03/njambre.jpg" alt="" title="njambre" width="246" height="253" class="alignleft size-full wp-image-1372" />En abril de 2011, se abrirá <a href="http://www.njambre.org/">el primer espacio de coworking de Rosario</a> y nuestro equipo de trabajo se instalará allí de manera permanente. El proyecto se llama <strong>Njambre</strong> y fue iniciado y llevado adelante por <a href="http://about.me/fseineldin">Federico Seineldin</a>.</p>
<p>En <a href="http://es.plusglobal.com">Plus Global</a> hace tiempo que seguimos de cerca el movimiento del coworking a nivel global. Tal es así, que en abril de 2010 tomamos la iniciativa de poner en línea el sitio <a href="http://coworkingrosario.com.ar">Coworking Rosario</a> con el objetivo de incentivar la creación de espacios de coworking en nuestra ciudad. Durante casi un año de actividad hemos hecho contactos con varios interesados en el tema y, poco a poco, formamos una pequeña comunidad. </p>
<p>Es por eso que estamos muy entusiasmados con este proyecto. Será muy interesante ver como evoluciona <a title="coworking en Rosario" href="http://njambre.org">Njambre</a>, ya que contará con una variedad de perfiles sociales, artísticos, tecnológicos y comerciales.</p>
<p>Más información sobre coworking <a href="http://coworkingrosario.com.ar/coworking/">aquí</a>.</p>
<img src="http://feeds.feedburner.com/~r/PlusGlobal/espanol/~4/MOBjnntkFXs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://es.plusglobal.com/blog/plus-global-se-muda-a-njambre-el-primer-espacio-de-coworking-de-rosario/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://es.plusglobal.com/blog/plus-global-se-muda-a-njambre-el-primer-espacio-de-coworking-de-rosario/</feedburner:origLink></item>
	</channel>
</rss>

