<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>mooontes.com &#187; montes</title>
	<atom:link href="http://mooontes.com/author/montes/feed/" rel="self" type="application/rss+xml" />
	<link>http://mooontes.com</link>
	<description></description>
	<lastBuildDate>Sun, 07 Mar 2010 17:29:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Free Javascript Calendar / Datepicker adaptado a España</title>
		<link>http://mooontes.com/2010/03/07/javascript-calendar-datepicker/</link>
		<comments>http://mooontes.com/2010/03/07/javascript-calendar-datepicker/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 17:10:42 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[datepicker]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=339</guid>
		<description><![CDATA[Necesitaba un calendario en javascript tipo pop-up para el proyecto que tengo entre manos y me he encontrado con Javascript Calendar que tiene muy buena pinta, pero que sólo tiene versión anglosajona así que lo he modificado para adaptarlo a mis necesidades: Días de la semana y meses en castellano Primer día de la semana [...]]]></description>
			<content:encoded><![CDATA[<p>Necesitaba un calendario en javascript tipo pop-up para el proyecto que tengo entre manos y me he encontrado con <a href="http://javascriptcalendar.org">Javascript Calendar</a> que tiene muy buena pinta, pero que sólo tiene versión anglosajona así que lo he modificado para adaptarlo a mis necesidades:</p>
<ol>
<li>Días de la semana y meses en castellano</li>
<li>Primer día de la semana Lunes</li>
<li>Formato de fecha dd-mm-yyyy</li>
<li>Posibilidad de darle un id al node (span) que crea</li>
<li>Posiblidad de pasarle el path de las imágenes por si queremos que sea distinto al original</li>
</ol>
<p>Para usar la versión modificada, debéis descargar primero la original de su página y luego sobreescribir &#8220;<em>jsDatePick.full.1.0.js</em>&#8221; con el modificado &#8220;<em>jsDatePick.full.1.0.spain.js</em>&#8221; <a href="http://mooontes.com/codigo/jsDatePick.full.1.0.spain.js">Javascript Calendar Spanish Version</a></p>
<p>Este sería un ejemplo de uso con las dos nuevas opciones (<em>id</em> y <em>path</em>):</p>
<pre lang='javascript'>		new JsDatePick({
			useMode:2,
			id:"idCalendarNode",
			path:"/mis-imagenes/",
			target:"beginDate"
		});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2010/03/07/javascript-calendar-datepicker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps API V3 get_center ahora es getCenter</title>
		<link>http://mooontes.com/2010/02/04/google-maps-api-v3-get_center-ahora-es-getcenter/</link>
		<comments>http://mooontes.com/2010/02/04/google-maps-api-v3-get_center-ahora-es-getcenter/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 17:43:36 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=333</guid>
		<description><![CDATA[He actualizado los ejemplos de Google Maps API V3 que habían dejado de funcionar debido a un cambio en el nombre de la función get_center que ha pasado a ser getCenter. También he eliminado la librería scrollwheelzoom que ya no es necesaria.]]></description>
			<content:encoded><![CDATA[<p>He actualizado los ejemplos de Google Maps API V3 que habían dejado de funcionar debido a un cambio en el nombre de la función <em>get_center</em> que ha pasado a ser <em>getCenter</em>.</p>
<p>También he eliminado la librería scrollwheelzoom que ya no es necesaria.</p>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2010/02/04/google-maps-api-v3-get_center-ahora-es-getcenter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps API V3 (javascript)</title>
		<link>http://mooontes.com/2009/07/30/google-maps-api-v3-javascript-2/</link>
		<comments>http://mooontes.com/2009/07/30/google-maps-api-v3-javascript-2/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 19:14:21 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[api v3]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[google maps api v3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[reverse geocoding]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=319</guid>
		<description><![CDATA[Versión en español de este post Although the Google Maps API V3 is still quite green and much remains to be polished, it is quite usable and if you only need the basic features of Google Maps, then you can use it for your project, the new speed and usability at portable devices is a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mooontes.com/2009/07/29/google-maps-api-v3-javascript/">Versión en español de este post</a></p>
<p>Although the Google Maps API V3 is still quite green and much remains to be polished, it is quite usable and if you only need the basic features of Google Maps, then you can use it for your project, the new speed and usability at portable devices is a plus.</p>
<p>This code is an example of the use of various techniques with javascript:</p>
<ul>
<li>Map centering at user&#8217;s location</li>
<li>Event capturing</li>
<li>Reverse Geocoding</li>
<li>Use of <a href="http://google-maps-utility-library-v3.googlecode.com/svn/tags/scrollwheelzoom/1.0/docs/examples.html">Nianwei&#8217;s library</a> scrollwheelzoom (still not officially supported in V3)</li>
</ul>
<p><span id="more-319"></span></p>
<h3 style="clear:both;padding:20px;width:200px;text-align:center;margin:0px auto;"><a href="http://mooontes.com/codigo/google_maps_api_v3_en.html" target="_blank">Test the code</a></h3>
<p>And here is the code (<a href="http://validator.w3.org/check?uri=http://mooontes.com/codigo/google_maps_api_v3_en.html">validated</a> XHTML with Doctype).</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;!--
** Created at 2009 July by Montes http://mooontes.com
** Under licence http://creativecommons.org/licenses/by/3.0/es/deed.es
**
** Google Maps API V3 javascript example
**
** Visitor's location map centering, event capturing,
** reverse geocoding &amp; Nianwei's scrollwheelzoom
**
**
** Creado en Julio de 2009 por Montes http://mooontes.com
** Bajo licencia http://creativecommons.org/licenses/by/3.0/es/deed.es
**
** Ejemplo de programación con Google Maps API V3
**
** Centrado del mapa en la ubicación del visitante, captura de eventos,
** reverse geocoding y uso de la libreria para hacer zoom con la rueda del ratón
--&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;es&quot; lang=&quot;es&quot;&gt;
&lt;head&gt;

	&lt;meta name=&quot;viewport&quot; content=&quot;initial-scale=1.0, user-scalable=no&quot; /&gt;
	&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

	&lt;title&gt;Test Google Maps API V3 -mooontes.com-&lt;/title&gt;

    &lt;style type=&quot;text/css&quot;&gt;
	html
	{
		border:0;
		padding:0;
		margin:0;
		width:100%;
		height:100%;
	}
	body
	{
		border:0;
		padding:0;
		margin:0;
		width:100%;
		height:100%;
	}
	#map_canvas
	{
		width:100%;
		height:100%;
	}
	#info
	{
		position:absolute;
		width:250px;
		height:250px;
		left:20px;
		top:300px;
		background-color:white;
		padding:5px;
		overflow:auto;
	}
    &lt;/style&gt;

	&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps/api/js?sensor=false&quot;&gt;&lt;/script&gt;	

	&lt;script type=&quot;text/javascript&quot;&gt;
	var map;
	var geocoder;

	function initialize() {

		//Geocoder initialization &amp; visitor's location map centering
		geocoder = new google.maps.Geocoder();
		if (google.loader.ClientLocation)
		{
			//Search for visitor's latitude and longitude
			var latt = google.loader.ClientLocation.latitude;
			var longg = google.loader.ClientLocation.longitude;

			//Center the map at visitor's coordinates
			var latlng = new google.maps.LatLng(latt,longg);
		}
		else
		{
			//If we can't get visitor's coordinates, set Madrid as map center
			var latlng = new google.maps.LatLng(&quot;40.41153868&quot;,&quot;-3.70362707&quot;);
		}

		//Create the map
		var myOptions = {
		zoom: 5,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map(document.getElementById(&quot;map_canvas&quot;), myOptions);

		//Add a listener, it will activate when the map become fully loaded
		google.maps.event.addListener(map, 'bounds_changed',function()
			{
				//First div's update to show actual location details
				actualizaUbicacion();
				//Map fully loaded, clear the listener
				google.maps.event.clearListeners(map, 'bounds_changed');
				//And add two new events, one will update the div's info when user ends dragging the map and the other when map's zoom changes
				google.maps.event.addListener(map, 'dragend',function() { actualizaUbicacion() });
				google.maps.event.addListener(map, 'zoom_changed',function() { actualizaUbicacion() });
			}
		);

	}

	function actualizaUbicacion()
	{

		//Map's center coordinates we'll use for reverse geocoding
		var lattlng = map.getCenter();

		if (geocoder)
		{
			geocoder.geocode({'latLng': lattlng}, function(results, status)
			{
				if (status == google.maps.GeocoderStatus.OK)
				{
					if (results[1])
					{
						var reverse_geo = results[1];

						var text = &quot;&lt;a href='http://mooontes.com/2009/07/30/google-maps-api-v3-javascript-2/'&gt;Back to post at mooontes.com&lt;&quot;+&quot;/a&gt;&lt;br /&gt;&lt;br /&gt;Map center: &quot;
							+ map.getCenter()+ &quot;&lt;br /&gt;&lt;br /&gt;Reverse Geocoding:&lt;br /&gt;&quot;;
						if (reverse_geo.address_components[0]) { text = text + &quot;0: &quot; + reverse_geo.address_components[0].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[1]) { text = text + &quot;1: &quot; + reverse_geo.address_components[1].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[2]) { text = text + &quot;2: &quot; + reverse_geo.address_components[2].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[3]) { text = text + &quot;3: &quot; + reverse_geo.address_components[3].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[4]) { text = text + &quot;4: &quot; + reverse_geo.address_components[4].long_name + &quot;&lt;br /&gt;&quot;; }

						text = text + &quot;5: &quot; + reverse_geo.formatted_address;

						document.getElementById('info').innerHTML = text;
					}
				}
				else
				{
					document.getElementById('info').innerHTML = &quot;No hay información de Reverse Geocoding.&quot;;
				}
			});
		}
	}

	//--&gt;&lt;/script&gt;

&lt;/head&gt;
&lt;body onload=&quot;initialize()&quot;&gt;
	&lt;div id=&quot;map_canvas&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;info&quot;&gt;&lt;a href=&quot;http://mooontes.com/2009/07/30/google-maps-api-v3-javascript-2/&quot;&gt;Back to post at mooontes.com&lt;/a&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/07/30/google-maps-api-v3-javascript-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps API V3 (javascript)</title>
		<link>http://mooontes.com/2009/07/29/google-maps-api-v3-javascript/</link>
		<comments>http://mooontes.com/2009/07/29/google-maps-api-v3-javascript/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:07:52 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[api v3]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[google maps api v3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[reverse geocoding]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=295</guid>
		<description><![CDATA[Aunque el API V3 de Google Maps aún está bastante verde y le falta mucho por pulir, ya es bastante usable y si sólo necesitamos las características básicas de Google Maps nos puede servir para nuestro proyecto. Este código es un ejemplo del uso de varias técnicas con javascript: Centrar el mapa en la ubicación [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque el API V3 de Google Maps aún está bastante verde y le falta mucho por pulir, ya es bastante usable y si sólo necesitamos las características básicas de Google Maps nos puede servir para nuestro proyecto.</p>
<p>Este código es un ejemplo del uso de varias técnicas con javascript:</p>
<ul>
<li>Centrar el mapa en la ubicación del visitante</li>
<li>Captura de eventos</li>
<li>Reverse Geocoding</li>
<li>Uso de la <a href="http://google-maps-utility-library-v3.googlecode.com/svn/tags/scrollwheelzoom/1.0/docs/examples.html">librería de Nianwei</a> para hacer zoom con la rueda del ratón (aún no soportado oficalmente en la V3)</li>
</ul>
<p><span id="more-295"></span></p>
<h3 style="clear:both;padding:20px;width:200px;text-align:center;margin:0px auto;"><a href="http://mooontes.com/codigo/google_maps_api_v3.html" target="_blank">Probar el código</a></h3>
<p>Y aquí dejo el código, XHTML con doctype y <a href="http://validator.w3.org/check?uri=http://mooontes.com/codigo/google_maps_api_v3.html">validable</a>, a diferencia de lo que nos tiene acostumbrados google <img src='http://mooontes.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;!--
** Creado en Julio de 2009 por Montes http://mooontes.com
** Bajo licencia http://creativecommons.org/licenses/by/3.0/es/deed.es
**
** Ejemplo de programación con Google Maps API V3
**
** Centrado del mapa en la ubicación del visitante, captura de eventos,
** reverse geocoding y uso de la libreria para hacer zoom con la rueda del ratón
--&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;es&quot; lang=&quot;es&quot;&gt;
&lt;head&gt;

	&lt;meta name=&quot;viewport&quot; content=&quot;initial-scale=1.0, user-scalable=no&quot; /&gt;
	&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

	&lt;title&gt;Test Google Maps API V3 -mooontes.com-&lt;/title&gt;

    &lt;style type=&quot;text/css&quot;&gt;
	html
	{
		border:0;
		padding:0;
		margin:0;
		width:100%;
		height:100%;
	}
	body
	{
		border:0;
		padding:0;
		margin:0;
		width:100%;
		height:100%;
	}
	#map_canvas
	{
		width:100%;
		height:100%;
	}
	#info
	{
		position:absolute;
		width:250px;
		height:250px;
		left:20px;
		top:300px;
		background-color:white;
		padding:5px;
		overflow:auto;
	}
    &lt;/style&gt;

	&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps/api/js?sensor=false&quot;&gt;&lt;/script&gt;	

	&lt;script type=&quot;text/javascript&quot;&gt;
	var map;
	var geocoder;

	function initialize() {

		//Inicializamos geocoder y centramos el mapa en la ubicación del visitante
		geocoder = new google.maps.Geocoder();
		if (google.loader.ClientLocation)
		{
			//Averiguamos latitud/longitud del visitante
			var latt = google.loader.ClientLocation.latitude;
			var longg = google.loader.ClientLocation.longitude;

			//Centramos el mapa en sus coordenadas
			var latlng = new google.maps.LatLng(latt,longg);
		}
		else
		{
			//Si no localizamos la ubicacion del visitante, centramos el mapa en Madrid
			var latlng = new google.maps.LatLng(&quot;40.41153868&quot;,&quot;-3.70362707&quot;);
		}

		//Creamos el mapa
		var myOptions = {
		zoom: 5,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map(document.getElementById(&quot;map_canvas&quot;), myOptions);

		//Añadimos un listener, se activará cuando el mapa esté totalmente cargado
		google.maps.event.addListener(map, 'bounds_changed',function()
			{
				//Primera actualización del div que muestra los detalles de la ubicacion actual
				actualizaUbicacion();
				//Al haber cargado totalmente el mapa, eliminamos este listener
				google.maps.event.clearListeners(map, 'bounds_changed');
				//Y añadimos dos, uno se activará cuando se termine de arrastrar el mapa y otro cuando se cambie el nivel de zoom
				google.maps.event.addListener(map, 'dragend',function() { actualizaUbicacion() });
				google.maps.event.addListener(map, 'zoom_changed',function() { actualizaUbicacion() });
			}
		);

	}

	function actualizaUbicacion()
	{

		//Coordenadas del centro del mapa que usaremos para el reverse geocoding
		var lattlng = map.getCenter();

		if (geocoder)
		{
			geocoder.geocode({'latLng': lattlng}, function(results, status)
			{
				if (status == google.maps.GeocoderStatus.OK)
				{
					if (results[1])
					{
						var reverse_geo = results[1];

						var text = &quot;&lt;a href='http://mooontes.com'&gt;mooontes.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Map center: &quot;
							+ map.getCenter()+ &quot;&lt;br /&gt;&lt;br /&gt;Reverse Geocoding:&lt;br /&gt;&quot;;
						if (reverse_geo.address_components[0]) { text = text + &quot;0: &quot; + reverse_geo.address_components[0].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[1]) { text = text + &quot;1: &quot; + reverse_geo.address_components[1].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[2]) { text = text + &quot;2: &quot; + reverse_geo.address_components[2].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[3]) { text = text + &quot;3: &quot; + reverse_geo.address_components[3].long_name + &quot;&lt;br /&gt;&quot;; }
						if (reverse_geo.address_components[4]) { text = text + &quot;4: &quot; + reverse_geo.address_components[4].long_name + &quot;&lt;br /&gt;&quot;; }

						text = text + &quot;5: &quot; + reverse_geo.formatted_address;

						document.getElementById('info').innerHTML = text;
					}
				}
				else
				{
					document.getElementById('info').innerHTML = &quot;No hay información de Reverse Geocoding.&quot;;
				}
			});
		}
	}

	//--&gt;&lt;/script&gt;

&lt;/head&gt;
&lt;body onload=&quot;initialize()&quot;&gt;
	&lt;div id=&quot;map_canvas&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;info&quot;&gt;&lt;a href=&quot;http://mooontes.com&quot;&gt;mooontes.com&lt;/a&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/07/29/google-maps-api-v3-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>No más internet explorer 6 (php)</title>
		<link>http://mooontes.com/2009/07/28/no-mas-internet-explorer-6-php/</link>
		<comments>http://mooontes.com/2009/07/28/no-mas-internet-explorer-6-php/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 20:28:21 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=285</guid>
		<description><![CDATA[En apoyo a la campaña IE6 Must Die dejo un código en PHP para que añadáis a vuestros proyectos y juntos consigamos que de una vez nadie use Internet Explorer 6. if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') != FALSE) { echo &#34;&#60;h2&#62;Estás usando Internet Explorer 6, un navegador totalmente desfasado, por favor actualízalo y ayudanos a conseguir [...]]]></description>
			<content:encoded><![CDATA[<p>En apoyo a la campaña <a href="http://www.giomagnani.com/post/146043412/ie6-debe-morir-must-die">IE6 Must Die</a> dejo un código en PHP para que añadáis a vuestros proyectos y juntos consigamos que de una vez nadie use Internet Explorer 6.</p>
<pre class="brush: php;">
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') != FALSE)
{
	echo &quot;&lt;h2&gt;Estás usando Internet Explorer 6, un navegador totalmente desfasado, por favor actualízalo y ayudanos a conseguir un internet mejor.&lt;/h2&gt;&quot;;
	echo &quot;&lt;h2&gt;You are using Internet Explorer 6, a totally outdated browser, please update it and help us get a better internet.&lt;/h2&gt;&quot;;
	echo &quot;&lt;br /&gt;&quot;;
	echo &quot;&lt;center&gt;&quot;;
	echo &quot;&lt;h3&gt;Descárgate uno de estos - Download one of these&lt;/h3&gt;&quot;;
	echo &quot;&lt;br /&gt;&quot;;
	echo &quot;&lt;a href='http://www.mozilla.com/firefox/'&gt;Mozilla Firefox&lt;/a&gt;&lt;br /&gt;&quot;;
	echo &quot;&lt;a href='http://www.microsoft.com/windows/internet-explorer/'&gt;Internet Explorer&lt;/a&gt;&lt;br /&gt;&quot;;
	echo &quot;&lt;a href='http://www.opera.com/'&gt;Opera&lt;/a&gt;&lt;br /&gt;&quot;;
	echo &quot;&lt;a href='http://www.google.com/chrome/'&gt;Google Chrome&lt;/a&gt;&lt;br /&gt;&quot;;
	echo &quot;&lt;a href='http://www.apple.com/safari/'&gt;Apple Safari&lt;/a&gt;&lt;br /&gt;&quot;;
	echo &quot;&lt;/center&gt;&quot;;
	return;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/07/28/no-mas-internet-explorer-6-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajustar el tamaño de las fotos en SMF (Simple Machines Forum)</title>
		<link>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/</link>
		<comments>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 13:43:11 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smf]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=245</guid>
		<description><![CDATA[Si tienes un foro en SMF (Simple Machines Forum), una de las opciones que no deberías activar nunca es la de ajustar automáticamente el tamaño de las fotos, ya que implica que cada vez que alguien escribe un mensaje que incluye fotos, el servidor se descargará todas las fotos del mensaje para comprobar su tamaño [...]]]></description>
			<content:encoded><![CDATA[<p>Si tienes un foro en SMF (<a href="http://www.simplemachines.org">Simple Machines Forum</a>), una de las opciones que no deberías activar nunca es la de ajustar automáticamente el tamaño de las fotos, ya que implica que cada vez que alguien escribe un mensaje que incluye fotos, el servidor se descargará todas las fotos del mensaje para comprobar su tamaño antes de que el mensaje se publique, con la consiguiente pérdida de tiempo y de paciencia del usuario.</p>
<p>En nuestro caso tenemos un foro con SMF2 y un movimiento de unos 1.200 mensajes diarios, con lo que realizar esta tarea manualmente (que es la única alternativa que queda) se hace bastante pesado.</p>
<p>La solución que he encontrado es escribir un pequeño programa en PHP que se ejecutará una vez al día gracias a <a href="http://es.wikipedia.org/wiki/Cron_%28unix%29">cron</a> y que realizará esta tarea por nosotros.<br />
<span id="more-245"></span><br />
Lo que hace este script es comprobar el tamaño de las fotos de los mensajes que se han escrito durante las últimas 24 horas y en el caso de que el tamaño exceda los 800 pixels de ancho, sustituirá la etiqueta <em>[IMG]</em> por <em>[IMG width=800]</em>, lo que evitará esas fotos gigantes que estropean la normal lectura del foro, además nos enviará un correo con la lista de mensajes que haya modificado.</p>
<p>Este es el script (bajo <a href="http://creativecommons.org/licenses/by/3.0/es/deed.es">licencia CC</a> como es habitual por aquí). Sólo ha sido testeado con SMF2, aunque no creo que haya mucho problema para hacerlo funcionar con SMF1.</p>
<p>Para hacerlo funcionar en vuestro servidor sólo tenéis que modificar la primera línea <em>require_once</em> con la ruta de vuestro <em>Settings.php</em> de SMF, la segunda línea asignando la variable <em>$to</em> al correo donde queréis recibir el resumen diario de mensajes modificados y la tercera línea asignando a <em>$url_foro</em> la dirección de vuestro foro. Y luego por supuesto añadir la tarea para que se ejecute diariamente.</p>
<pre class="brush: php;">
	//***
	//Creado Junio 2009 por Montes http://mooontes.com
	//Bajo licencia http://creativecommons.org/licenses/by/3.0/es/deed.es
	//***
	require_once(&quot;/ruta/Settings.php&quot;);  //la configuracion de la BD la cogemos del archivo de configuracion de SMF
	$to = &quot;correo@mail.com&quot;;
	$url_foro = &quot;www.foro.com&quot;;

	$mysqli = new mysqli($db_server,$db_user,$db_passwd,$db_name);

	$mail = &quot;Fotos modificadas hoy &quot;.date(&quot;d/m/Y&quot;).&quot;\n\n&quot;;

	//Comprobamos conexion
	if (mysqli_connect_errno())
	{
		printf(&quot;Connect failed: %s\n&quot;, mysqli_connect_error());
		exit();
	}	

	//Buscamos todos los mensajes con fotos de las ultimas 24 horas
	$sql = &quot;SELECT id_msg,id_topic,body FROM smf_messages WHERE DATE(FROM_UNIXTIME(poster_time))&quot;.
			&quot;&gt; DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) AND body LIKE '%[IMG]http%'&quot;;
	if ($result = $mysqli-&gt;query($sql))
	{
		while($row = $result-&gt;fetch_assoc())
		{
			$body = $row[&quot;body&quot;];
			echo &quot;\n****msg: &quot;.$row[&quot;id_msg&quot;].&quot; topic: &quot;.$row[&quot;id_topic&quot;].&quot;, buscando imagenes...\n\n&quot;;

			//Comprobamos imagen x imagen
			preg_match_all(&quot;%\[img\]([^\[]*)\[/img\]%i&quot;, $row[&quot;body&quot;], $encuentra, PREG_PATTERN_ORDER);
			for ($j = 0; $j &lt; count($encuentra[1]); $j++)
			{
				echo &quot;una foto: &quot;.$encuentra[1][$j].&quot;\n&quot;;
				if (list($ancho, $altura, $tipo, $atr) = getimagesize($encuentra[1][$j]))
				{
					echo &quot;ancho: &quot;.$ancho.&quot; alto: &quot;.$altura.&quot;\n&quot;;
					if ($ancho &gt; 800)
					{
						echo &quot;Tamanyo mayor de 800, vamos a reemplazar...\n&quot;;
						//Mas ancha de 800 pixels? anyadimos width=800
						$body = str_ireplace(&quot;[img]&quot;.$encuentra[1][$j].&quot;[/img]&quot;, &quot;[img width=800]&quot;.$encuentra[1][$j].&quot;[/img]&quot;, $body);
						//actualizamos en la bd
						$bodys = addslashes($body);
						$sql = &quot;UPDATE smf_messages SET body = '&quot;.$bodys.
							&quot;', modified_time=UNIX_TIMESTAMP(), modified_name='bot' WHERE id_msg = &quot;.$row[&quot;id_msg&quot;];
						$mysqli-&gt;query($sql);
						echo &quot;Actualizada la BD\n&quot;;
						$mail .= &quot;Modificada foto en: http://&quot;.$url_foro
						.&quot;/index.php?topic=&quot;.$row[&quot;id_topic&quot;].&quot;.msg&quot;.
						$row[&quot;id_msg&quot;].&quot;#msg&quot;.$row[&quot;id_msg&quot;].&quot;\n&quot;;
					}
				}
				else
				{
					echo &quot;Tamanyo desconocido\n&quot;;
				}
			}
		}
	}

    $result-&gt;close();
    unset($row);
    unset($sql);
    unset($query);

	if ($mail != &quot;Fotos modificadas hoy &quot;.date(&quot;d/m/Y&quot;).&quot;\n\n&quot;)
	{
		$subject = &quot;Fotos arregladas dimensiones &quot;.date(&quot;d/m/Y&quot;);
		if (mail($to, $subject, $mail))
		{
			echo(&quot;Mensaje enviado\n&quot;);
		}
		else
		{
			echo(&quot;Fallo al enviar mensaje...\n&quot;);
		}
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar un servidor dedicado desde cero (parte 1)</title>
		<link>http://mooontes.com/2009/04/12/configurar-un-servidor-dedicado-desde-cero-parte-1/</link>
		<comments>http://mooontes.com/2009/04/12/configurar-un-servidor-dedicado-desde-cero-parte-1/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 20:58:06 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql5]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[servidor dedicado]]></category>
		<category><![CDATA[spf]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[vsftpd]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=192</guid>
		<description><![CDATA[Esto es un tutorial paso a paso sobre cómo configurar un servidor dedicado no administrado (unmanaged) con el sistema operativo Debian que sirva páginas web con PHP y MySQL, además de gestionar el dns, ftp y correo. En este caso se trata de un servidor de esecuredata.com. Otro hosting con buenos precios en servidores dedicados [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mooontes.com/wp-content/uploads/2009/04/server.jpg" alt="" title="server" width="240" height="180" class="alignnone size-full wp-image-228" /><br />
Esto es un tutorial paso a paso sobre cómo configurar un servidor dedicado no administrado (unmanaged) con el sistema operativo <a href="http://www.debian.org">Debian</a> que sirva páginas web con PHP y MySQL, además de gestionar el dns, ftp y correo.<br />
En este caso se trata de un servidor de <a href="http://www.esecuredata.com/Pricing/Servers.aspx">esecuredata.com</a>. Otro hosting con buenos precios en servidores dedicados no administrados es <a href="http://www.ovh.es/productos/productos_dedicados.xml">ovh.es</a>, también tienen la gama <a href="http://kemsirve.es/">kemsirve</a>.</p>
<p>La ventaja de un servidor no administrado es obviamente el precio, al tener que encargarte tú mismo de todas las configuraciones y problemas que puedan surgir, el precio es sensiblemente inferior al de cualquier otro tipo de servidor dedicado.</p>
<p>Si quieres usar herramientas &#8220;visuales&#8221; tipo webmin o cpanel para administrar tu servidor este no es tu tutorial <img src='http://mooontes.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  yo uso la consola para todas las instalaciones y configuraciones, manías de hace años. Si no tienes un mínimo de conocimientos sobre Linux o Internet tampoco es probable que te sirva de mucho.</p>
<p>Eres libre de copiar, modificar, publicar y lo que quieras hacer con este tutorial bajo una única condición, debes mencionar que has obtenido la información de <a href="http://mooontes.com">http://mooontes.com</a> (<a href="http://creativecommons.org/licenses/by/3.0/es/deed.es">licencia</a>)</p>
<p>&nbsp;</p>
<h2>1. Pasos previos</h2>
<p>Tras pagar nuestro servidor, en este caso un <a href="http://www.esecuredata.com/Pricing/Servers.aspx">Generation 6 Junior de esecuredata</a> con Debian 64bits, recibiremos un correo con la dirección ip y la clave para acceder a través de SSH como root. A lo largo del tutorial usaremos la ip &#8220;2.2.2.2&#8243; como ejemplo de la ip del servidor.</p>
<h3>1.1 Comprobar que la ip está &#8220;limpia&#8221;</h3>
<p>Lo primero antes de continuar es comprobar que la ip que nos han asignado no está baneada por haber sido usada para enviar Spam o cualquier otro tipo de malas prácticas, si fuese el caso nos encontraríamos con un montón de problemas como no poder enviar correo.</p>
<p>Para comprobarlo sólo necesitamos introducir la ip en <a href="http://www.mxtoolbox.com/blacklists.aspx">mxtoolbox</a>. En el caso de que estuviese baneada deberíamos solicitar un cambio de ip al proveedor.</p>
<h3>1.2 Conectar al servidor</h3>
<p>Hecha la comprobación ya podemos conectar al servidor, si usamos Windows podremos acceder mediante <a href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe">putty</a>. Desde Linux yo uso el cliente ssh de consola, en Ubuntu basta con teclear:</p>
<pre class="brush: bash;">
ssh root@2.2.2.2
</pre>
<p><span id="more-192"></span></p>
<h3>1.3 Comprobar y actualizar el Sistema Operativo</h3>
<p>Una vez dentro lo primero es comprobar que el sistema operativo que nos han instalado se corresponde con el que hemos pedido:</p>
<pre class="brush: bash;">
uname -a
Linux server 2.6.26-1-amd64 #1 SMP Fri Mar 13 17:46:45 UTC 2009 x86_64 GNU/Linux
</pre>
<p>Vemos que es un kernel de Linux 64bit, aunque no nos da mucha información sobre el tipo de Linux, pero no tenemos más que echar un vistazo a &#8220;<em>/etc/sources.list</em>&#8221;</p>
<p><strong>sources.list</strong> <em>original</em></p>
<pre class="brush: bash;">
deb cdrom:[Debian GNU/Linux 4.0 r6 _Etch_ - Official amd64 DVD Binary-1 20081219-16:30]/ etch contrib main

deb http://ftp3.nrc.ca/debian/ etch main
deb-src http://ftp3.nrc.ca/debian/ etch main

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
</pre>
<p>Nos han instalado Debian 4 Etch, cuando Debian 5 Lenny ya está disponible, además de dejarse la línea del DVD que ya no hace ninguna falta. Actualizamos el fichero cambiando de debian Etch a Lenny, además de eliminar la línea del DVD y de cambiar el repositorio &#8220;<em>nrc.ca</em>&#8221; por &#8220;<em>ca.debian.org</em>&#8221;</p>
<p><strong>sources.list</strong> <em>modificado</em></p>
<pre class="brush: bash;">
deb http://ftp.ca.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.ca.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib
deb-src http://security.debian.org/ lenny/updates main contrib
</pre>
<p>Ahora ya podemos actualizar las fuentes y nuestro Debian a Lenny:</p>
<pre class="brush: bash;">
aptitude update
aptitude dist-upgrade
</pre>
<h3>1.4 Nuevo usuario y htop</h3>
<p>Ahora crearemos un nuevo usuario que utilizaremos para varias tareas como la conexión por ftp:</p>
<pre class="brush: bash;">adduser usuario</pre>
<p>E instalaremos &#8220;<em>htop</em>&#8220;, un sustituto de &#8220;<em>top</em>&#8220;, muy útil para comprobar la carga del sistema:</p>
<pre class="brush: bash;">aptitude install htop</pre>
<p>&nbsp;</p>
<h2>2. Instalación de Apache2, PHP5 y MySQL5</h2>
<h3>2.1 Lo básico</h3>
<p>Apache, MySQL y PHP, nada más fácil en debian:</p>
<pre class="brush: bash;">aptitude install apache2
aptitude install mysql-server mysql-client libmysqlclient15-dev
aptitude install php5-common php5-cli php5-mcrypt php5-gd libapache2-mod-php5 php5-mysql
</pre>
<h3>2.2 Algunas utilidades imprescindibles</h3>
<p><strong>Mytop</strong>, para monitorizar MySQL en tiempo real</p>
<pre class="brush: bash;">aptitude install mytop</pre>
<p><strong>PHPMyAdmin</strong>, para gestionar las bases de datos a través de web. </p>
<pre lang="bash">aptitude install phpmyadmin</pre>
<p>Es importante que no sea accesible a través de la ruta por defecto (<em>http://servidor.com/phpmyadmin</em>) para evitar ataques.<br />
Sólo tenemos que editar el &#8220;<em>alias</em>&#8221; en la configuración de Apache2 y cambiarlo por cualquier otro nombre:</p>
<p><strong>/etc/apache2/sites-enabled/000-default</strong> <em>original</em></p>
<pre class="brush: bash;">Alias /phpmyadmin /usr/share/phpmyadmin</pre>
<p><strong>/etc/apache2/sites-enabled/000-default</strong> <em>modificado</em></p>
<pre class="brush: bash;">Alias /miadmin /usr/share/phpmyadmin</pre>
<h3>2.3 Comprobación</h3>
<p>En este punto ya deberíamos poder acceder a nuestro servidor a través de web, antes de comprobarlo reiniciamos Apache, podemos hacerlo de dos formas:</p>
<p><strong>1</strong>
<pre class="brush: bash;">apache2ctl restart</pre>
<p><strong>2</strong>
<pre class="brush: bash;">/etc/init.d/apache2 restart</pre>
<p>Y ahora comprobamos que ya funciona accediendo a través del navegador a la ip del servidor:</p>
<p><a href="http://2.2.2.2">http://2.2.2.2</a></p>
<p>y a la ruta que hayamos configurado para PHPMyAdmin:</p>
<p><a href="http://2.2.2.2/miadmin">http://2.2.2.2/miadmin</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Artículo bajo licencia: <a href="http://creativecommons.org/licenses/by/3.0/es/deed.es"><img src="http://es.creativecommons.org/images/icons/logos%20cc%20retocados/by_petit.png"></a><br />
Foto del rack por: <a href="http://www.flickr.com/photos/digitalslurp/">digitalslurp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/04/12/configurar-un-servidor-dedicado-desde-cero-parte-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Las condiciones de uso de Facebook&#8230;</title>
		<link>http://mooontes.com/2009/02/20/las-condiciones-de-uso-de-facebook/</link>
		<comments>http://mooontes.com/2009/02/20/las-condiciones-de-uso-de-facebook/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 20:15:25 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=184</guid>
		<description><![CDATA[Al hilo de lo que comentaba el otro día sobre facebook xD &#160; Fuente: Mashable on Tumblr]]></description>
			<content:encoded><![CDATA[<p>Al hilo de lo que <a href="http://mooontes.com/2009/02/18/salsa-rosa-20/">comentaba</a> el otro día sobre facebook xD</p>
<p><img src="http://mooontes.com/wp-content/uploads/2009/02/facebook_terms.gif" alt="" title="facebook_terms" width="500" height="397" class="alignnone size-full wp-image-185" /></p>
<p>&nbsp;</p>
<p>Fuente: <a href="http://mashable.tumblr.com/post/80000510">Mashable on Tumblr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/02/20/las-condiciones-de-uso-de-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salsa Rosa 2.0</title>
		<link>http://mooontes.com/2009/02/18/salsa-rosa-20/</link>
		<comments>http://mooontes.com/2009/02/18/salsa-rosa-20/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 22:04:18 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[enrique dans]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[forosdelweb]]></category>
		<category><![CDATA[fuckowski]]></category>
		<category><![CDATA[tuenti]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=167</guid>
		<description><![CDATA[Este Lunes ha sido bastante movidito en internet, ha estado entretenido pero la verdad que ha sido todo en plan bastante negativo, os hago un resumen por si alguien se ha perdido algo, empiezo por el affaire que da título al post. Enrique Dans vs. Fuckowski Bienvenidos al Salsa Rosa 2.0, para los que odiamos [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mooontes.com/wp-content/uploads/2009/02/corazon_rosa.jpg" alt="" title="corazon_rosa" width="240" height="228" class="alignnone size-full wp-image-168" /></p>
<p>Este Lunes ha sido bastante movidito en internet, ha estado entretenido pero la verdad que ha sido todo en plan bastante negativo, os hago un resumen por si alguien se ha perdido algo, empiezo por el <em>affaire</em> que da título al post.</p>
<h2>Enrique Dans vs. Fuckowski</h2>
<p>Bienvenidos al Salsa Rosa 2.0, para los que odiamos los programas del corazón empezamos a tener alternativa en internet, este tema viene ya de lejos, lo primero que leí sobre <a href="http://www.enriquedans.com/">Enrique Dans</a> que me sonó un poco <em>raro</em> fue cuando coincidiendo casualmente con los <a href="http://bitacoras.com/premios08/categorias/microblogger-del-ano">premios</a> a microblogger del 2008, la cuenta de twitter de <a href="http://twitter.com/not_edance">edance</a>, que parodia al <a href="http://twitter.com/edans">edans</a> auténtico, fue <a href="http://navegante2.elmundo.es/navegante/2008/11/13/gadgetoblog/1226594996.html">renombrada</a> por twitter a not_edance y eliminado su avatar a consecuencia de la petición de Enrique Dans como él mismo <a href="http://ww2.grn.es/merce/2008/edans.html">reconoció</a> más tarde. Mal vamos si un personaje público (tiene uno de los blogs más visitados de España), no admite una parodia que además está permitida por las normas de <a href="http://www.twitter.com">twitter</a>, lo más gracioso de todo fue que edance quedó en el concurso unos puestos más arriba que el auténtico.</p>
<p>Pero lo grave fue anteayer cuando <em><a href="http://www.alfredodehoces.com">Fuckowski</a></em>, que la verdad, aparentemente parece estar un poco obsesionado con Enrique Dans, <a href="http://www.alfredodehoces.com/press/yo-mate-a-manolete-curso-practico-de-libertad-de-expresion">hizo público</a> que presuntamente Enrique Dans había intentado que le echasen de su puesto de trabajo, os aconsejo leer el <a href="http://www.alfredodehoces.com/press/yo-mate-a-manolete-curso-practico-de-libertad-de-expresion">post</a>, que al menos seguro que os reís y que cada uno saque sus conclusiones. Si tienes curiosidad, <a href="http://meneame.net/story/yo-mate-manolete-curso-practico-libertad-expresion/1#comment-62">aquí está la discusión</a> que se montó luego entre los dos en <a href="http://www.meneame.net">menéame</a>.</p>
<h2>Secuestro express y robo de identidad digital de cvander (forosdelweb.com)</h2>
<p>También el Lunes pude asistir <a href="http://search.twitter.com/search?q=%23mdw">en directo</a> al secuestro de los dominios <a href="http://forosdelweb.com">forosdelweb.com</a> y <a href="http://maestrosdelweb.com">maestrosdelweb.com</a>, es la demostración de lo fácilmente que pueden acabar con tu negocio si está integramente localizado en internet.</p>
<p>Imagínate que tienes una página en internet que te llevas currando desde hace muchos años, gracias a la cual te ganas la vida por ejemplo cobrando varios miles de euros al més por publicidad y de repente un día abres la página y todo lo que había ha desaparecido, sólo ves un banner de publicidad que tú no has puesto ahí dentro de una página en blanco; sudores fríos&#8230; intentas entrar en la web de <a href="http://www.godaddy.com">la empresa</a> que gestiona tu dominio y da clave errónea, les llamas y te dicen ¡que lo sienten pero no pueden hacer nada, que te busques un buen abogado y a ver qué consigues! encima, mientras tanto, ¡tu cuenta de gmail también te da error de clave y lo mismo facebook! has perdido el control de todas tus cuentas de internet y en consecuencia de tu medio de vida, no me imagino lo que pudo pasar cvander, pero da miedo. Felizmente la historia acabó bien, pero ha habido <a href="http://www.aeromental.com/2008/05/20/solosubtituloscom-ya-volvio-a-estar-online/">precedentes</a> con peor final.</p>
<p><a href="http://www.soitu.es/soitu/2009/02/17/vidadigital/1234897364_312593.html">La historia completa aquí.</a></p>
<h2>En Facebook se vuelven locos</h2>
<p>Y ya para rematar, va <a href="http://www.facebook.com">Facebook</a> y así como quien no quiere la cosa, <a href="http://alt1040.com/2009/02/facebook-cambia-sus-politicas-todo-lo-que-se-publica-en-la-red-social-pasa-a-ser-de-su-propiedad">cambia</a> las condiciones de uso y mete una cláusula de <em>todo lo que subas es mío</em> por aquí, otra de aunque te vayas de facebook o lo borres, <em>todo lo que hayas subido para mí</em> por allá&#8230; ¿estamos locos?? menos mal que <a href="http://alt1040.com/2009/02/facebook-y-las-consecuencias-de-no-cuidar-a-sus-usuarios">han rectificado</a> pronto porque si se reafirmaban en semejantes condiciones es posible que ese <a href="http://www.facebooknoticias.com/2009/02/15/facebook-supera-175-millones-de-usuarios-ahora-480000-nuevos-usuarios-al-dia/">crecimiento impresionante</a> que están experimentando empezáse a frenarse.</p>
<p>Me dejo algunas cosas en el tintero sobre este Lunes 16 de Febrero que recordaré algún tiempo, como el <a href="http://www.telecinco.es/detail/detail10656.shtml">paseo por la tele</a> de las fotos de <a href="http://www.tuenti.com">Tuenti</a> relacionadas con el caso del <a href="http://www.elpais.com/articulo/gente/Existen/limites/informar/caso/Marta/elpepugen/20090217elpepuage_4/Tes">asesinato</a> de Marta, pero el tema medios de comunicación de este país es algo que me da mucho asco y prefiero no ponerme malo&#8230;</p>
<p>&nbsp;</p>
<p>Foto por: <a href="http://flickr.com/photos/pinksherbet/">Pink Sherbet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/02/18/salsa-rosa-20/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>¿Una nueva oportunidad para los programadores?</title>
		<link>http://mooontes.com/2009/02/16/una-nueva-oportunidad-para-los-programadores/</link>
		<comments>http://mooontes.com/2009/02/16/una-nueva-oportunidad-para-los-programadores/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 22:37:18 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[Analista]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=153</guid>
		<description><![CDATA[Sigo con mi iPhone flipando con todas las posibilidades y lo que más me ha sorprendido es el App Store de Apple, como bien decía Alfonso hace tiempo, es lo más importante del iPhone. Miles de aplicaciones ordenadas por categorías, posibilidad de filtrar por aplicaciones gratuitas o de pago y por si fuera poco, instalables [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mooontes.com/wp-content/uploads/2009/02/apple_app_store-300x202.png" alt="" title="apple_app_store" width="300" height="202" class="alignnone size-medium wp-image-154" /></p>
<p>Sigo con mi iPhone flipando con todas las posibilidades y lo que más me ha sorprendido es el <a href="http://www.apple.com/es/iphone/appstore/">App Store</a> de Apple, como bien <a href="http://alfonsogu.com/2008/11/23/app-store-de-apple-y-el-ipod-touch/">decía Alfonso</a> hace tiempo, es lo más importante del iPhone. Miles de aplicaciones ordenadas por categorías, posibilidad de filtrar por aplicaciones gratuitas o de pago y por si fuera poco, instalables desde el propio teléfono con dos toques de dedo, ni más ni menos, en segundos tenemos instalada la nueva aplicación.</p>
<p>El lado negativo son los caprichos de Apple (desgraciadamente nunca nos permiten olvidarnos de con quién estamos tratando), las aplicaciones antes de estar disponibles en la tienda pasan por el filtro de Apple, que según su criterio, aprueban o deniegan el acceso de la aplicación a la tienda. Afortunadamente, parece que poco a poco van levantando un poco la mano sobre las aplicaciones que permiten, ya está disponible un <a href="http://www.esferaiphone.com/?p=3321">liberador de memoria RAM</a>, <a href="http://www.gizmodo.es/2009/01/19/wobble-o-como-agitar-pechos-reales-en-el-iphone-veredicto-el-softporn-llega-oficialmente-al-iphone.html">Wobble</a> o incluso el famoso <a href="http://iphoneapps.es/2008/12/25/ifart-mobile-%C2%A1una-maquina-de-pedos/">iFart</a> (el <a href="http://www.heggle.com/item/7036841/iPhone_Boobs_Application">iBoobs</a> ha tenido menos suerte).</p>
<p>Bien, esto son muchas novedades sobre lo que estamos acostumbrados en nuestros móviles, pero para mí hay dos claves muy importantes, lo primero los precios de las aplicaciones de pago, que en su inmensa mayoría se mueven entre los 0,79€ y los 3,99€ y lo segundo, que prácticamente todas se actualizan regularmente. Si un usuario quiere instalar una aplicación en su iPhone, tiene dos opciones, instalar la versión pirata (si ha <a href="http://www.appleismo.com/2009/02/03/jailbreak-iphone-221-guia-detallada/">preparado</a> su teléfono para ello) o instalarla desde el App Store.</p>
<p>Instalar la versión pirata:</p>
<ul>
<li>Buscar por internet la aplicación (esto ya son varios minutos en el mejor de los casos).</li>
<li>¡Encontrarla! porque no todas las aplicaciones del iPhone están en internet para descargar.</li>
<li>Tener suerte y que no sea una versión antigua.</li>
<li>Si hemos tenido suerte y hemos encontrado la última versión, cuando salga una nueva deberemos repetir la operación.</li>
</ul>
<p>Instalar la aplicación desde el teléfono (App Store):</p>
<ul>
<li>Dos movimientos de dedo.</li>
<li>Nos cargan automáticamente en nuestra tarjeta de crédito el importe si es de pago.</li>
<li>Ya tenemos la última versión instalada y en cuanto salga una nueva nos avisará en el icono del App Store para actualizarla.</li>
</ul>
<p>Para mí no hay color, comprar el <a href="http://www.canalpda.com/2009/02/06/8403-fieldrunners+juego+mas+adictivo+iphone">Fieldrunners</a> y estar jugando 30 segundos después de comprarlo, tener automáticamente cada nueva versión que sale, con nuevas opciones o incluso algún nivel extra y todo por 3,99€ me hace implanteable otra opción.</p>
<p>Y lo mejor de todo es que no soy el único que piensa esto, un gran porcentaje de usuarios están comprando las aplicaciones del iPhone, lo que redunda en más programadores actualizando y haciendo nuevas aplicaciones por lo que cada día hay más disponibles, un buen ejemplo de este éxito es el autor de iShoot, <a href="http://www.appleiphoneapps.com/2009/02/ishoot-developer-makes-600000-in-one-month/">¡$600.000 en un més!</a>. Y la <a href="http://blog.realactionsoft.com/2008/10/tienda-android-lista.html">tienda de Android</a> que llega por el mismo camino y seguramente más que les seguirán, quizás otros sectores deberían empezar a tomar nota y aparcar las <a href="http://www.losalcores.info/articulo.asp?ID=2126">tácticas bélicas</a> que tan poco éxito cosechan.</p>
<p>Y tú, ¿te animas a probar suerte?</p>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/02/16/una-nueva-oportunidad-para-los-programadores/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
