<?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>Blog InterGraphicDESIGNS</title>
	<atom:link href="http://www.intergraphicdesigns.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.intergraphicdesigns.com/blog</link>
	<description>Blog InterGraphicDESIGNS</description>
	<lastBuildDate>Sun, 29 Apr 2012 02:37:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>6 tips para mejorar la seguridad de tus formularios web</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/04/28/6-tips-para-mejorar-la-seguridad-de-tus-formularios-web/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/04/28/6-tips-para-mejorar-la-seguridad-de-tus-formularios-web/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 02:37:35 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[HTML, XHTML, CSS, Javascript y AJAX]]></category>
		<category><![CDATA[PHP y MySQL]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[captacha]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1254</guid>
		<description><![CDATA[Una de las principales consideraciones al momento de crear un sitio web es la seguridad de los formularios. Estos pueden convertirse en puntos de entrada sensibles hacia el sistema. Un formulario inseguro puede desde sobrecargar un servidor hasta acceder y modificar información almacenada en una base de datos. Acá listamos 6 pasos sencillos para asegurar [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las principales consideraciones al momento de crear un sitio web es la seguridad de los formularios. Estos pueden convertirse en puntos de entrada sensibles hacia el sistema. Un formulario inseguro puede desde sobrecargar un servidor hasta acceder y modificar información almacenada en una base de datos. Acá listamos 6 pasos sencillos para asegurar que los formularios de un proyecto web están protegidos.</p>
<p><strong>1. POST</strong></p>
<p>Cualquier formulario debe siempre enviar la información de su contenido usando el método POST. Con POST los valores del formulario viajan ocultos hacia el script de destino. Si un formulario utiliza el método GET, toda la información del mismo será desplegada en la barra de direcciones del browser.</p>
<p><strong>2. Token</strong></p>
<p>Es necesario que el script que va a procesar la información del formulario tenga algún modo de reconocer que efectivamente la información proviene de el formulario para el cuál fue diseñado.  Para ello, normalmente se utiliza un token o código encriptado que se envía como un campo oculto en el formulario y que el script puede desencriptar para validar si procesa o rechaza el formulario.</p>
<p>La mayoría de los frameworks para desarrollo web, como <a href="http://www.intergraphicdesigns.com/blog/2012/02/19/cakephp-un-framework-para-que-desarrollar-en-php-sea-un-queque/" target="_blank">CakePHP</a>, ya integran el token como una validación automática en sus formularios.</p>
<p><strong>3. Protección CSRF</strong></p>
<p>CSRF significa Cross Site Request Forgery o Falsificación de Petición en Sitios Cruzados en español. Este tipo de vulnerabilidad trata de enviar datos de un formulario a un script ubicado en un sitio web distinto. Para evitar este ataque se debe chequear el sitio web del que proviene el formulario. Por ejemplo, en PHP se puede usar la variable $_SERVER["<var><var>HTTP_REFERER</var></var>"] para validar desde dónde viene la información. No obstante, esta variable puede ser modificable o no provista, por lo cual una manera más confiable de validar que el formulario haya sido enviado desde el dominio correspondiente es utilizando Cookies.</p>
<p><strong>4. Validaciones Javascript</strong></p>
<p>Validar que los campos requeridos de un formulario se hayan completado y que tengan un formato y extensión apropiados mejora grandemente la experiencia del usuario y dificulta los posibles ataques. Se debe verificar que los campos del formulario permitan una cantidad razonable de caracteres y que respeten el formato pedido. Por ejemplo, usando Javascript, se puede limitar un campo para que solamente admita números.</p>
<p>Existen muchísimas librerías para javascript que permiten facilitar la validación de un formulario antes de su envío. Por ejemplo <a title="Jquery Validate" href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" target="_blank">Jquery Validate</a> es un plugin de la librería Jquery que permite realizar validaciones de campos numéricos e emails con un formato muy sencillo. Similarmente, <a title="Masked Input" href="http://digitalbush.com/projects/masked-input-plugin/" target="_blank">Masket Input</a> es otro plugin de Jquery que no solo restringe el tipo y número de caracteres admitidos en un input, si no que también les da formato conforme el usuario escribe.</p>
<p><strong>5. Validaciones Internas</strong></p>
<p>De cualquier forma, los navegadores permiten desactivar el Javascript, razón por la cuál se hace necesaria la validación de los campos y de su formato desde el script final. Esto es importante ya que los ataques maliciosos podrían intentar enviar código por un formulario, que al ser leído o desplegado podría ejecutarse y causar serios problemas. Este tipo de ataque es conocido como XSS o Cross Site Scripting. En PHP, por ejemplo, una simple línea de código permitiría filtar una entrada dependiendo de si queremos recibir texto o código html:</p>
<pre class="wp-code-highlight prettyprint">//suponiendo que $entrada guarda el valor enviado por el formulario //$entrada_txt almacenará una cadena de texto segura $entrada_txt = htmlentities(trim(strip_tags(stripslashes($entrada))), ENT_NOQUOTES, &quot;UTF-8&quot;); //en este caso $entrada_html almacenará una cadena con html $entrada_html = strip_tags(htmlentities(trim(stripslashes($entrada))), ENT_NOQUOTES, &quot;UTF-8&quot;);</pre>
<p><strong>6. Captcha</strong><br />
<img title="Ejemplo Captcha" src="http://www.captcha.net/images/recaptcha-example.gif" alt="Ejemplo Captcha" width="220" height="88" /></p>
<p>Un captcha es una imagen distorcionada que contiene un código que el usuario debe leer e ingresar en un campo del formulario. La idea es que el hecho de ser una imagen y de que esté distorcionada evitará que códigos maliciosos puedan enviar ataques en el formulario.</p>
<p>Son pasos sencillos, validaciones simples que pueden llegar a ahorrarle dinero y muchos dolores de cabeza.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/04/28/6-tips-para-mejorar-la-seguridad-de-tus-formularios-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 consejos para no perder el control de su tiempo en Redes Sociales</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/04/10/5-consejos-para-no-perder-el-control-de-su-tiempo-en-redes-sociales/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/04/10/5-consejos-para-no-perder-el-control-de-su-tiempo-en-redes-sociales/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 14:42:41 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[InterGraphicDESIGNS - Últimas Noticias]]></category>
		<category><![CDATA[DeskTime]]></category>
		<category><![CDATA[Harvest]]></category>
		<category><![CDATA[Hayfever]]></category>
		<category><![CDATA[Hootsuite]]></category>
		<category><![CDATA[LeechBlock]]></category>
		<category><![CDATA[redes sociales]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[TimeCamp]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1209</guid>
		<description><![CDATA[¿Ha notado cuánto tiempo utiliza revisando Facebook, Twitter o Youtube? ¿Alguna vez lo ha medido? De acuerdo con un reciente estudio de Redes Sociales en Centroamérica, Costa Rica es el país con mayor penetración de las redes sociales en el istmo. ¿Cómo afecta esto la productividad de los ticos en trabajos expuestos a internet y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/apps1.png"><img class="alignright size-full wp-image-1214" title="Aplicaciones y extension para controlar el tiempo en el trabajo" src="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/apps1.png" alt="Aplicaciones y extension para controlar el tiempo en el trabajo" width="660" height="100" /></a></p>
<p>¿Ha notado cuánto tiempo utiliza revisando Facebook, Twitter o Youtube? ¿Alguna vez lo ha medido? De acuerdo con un<a href="http://ilifebelt.com/redes-sociales-centroamerica/" target="_blank"> reciente estudio de Redes Sociales en Centroamérica</a>, Costa Rica es el país con mayor penetración de las redes sociales en el istmo. ¿Cómo afecta esto la productividad de los ticos en trabajos expuestos a internet y redes sociales?</p>
<p>Existen diversas investigaciones que concluyen que mantenerse conectado en las redes sociales trae beneficios, como lo indica <a title="Facebook no distrae a empleados y los hace felices" href="http://www.nacion.com/2012-03-28/Tecnologia/Facebook-no-distrae-a-empleados-y-los-hace-felices--asegura-estudio.aspx" target="_blank">este artículo</a> compartido por el periódico La Nación: las personas parecen trabajar más felices, tener más conciencia social, son más accesibles y responden más rápido, además de que se crean oportunidades de negocio y aprendizaje. Como el artículo expresa, los trabajadores sienten que: (citamos)</p>
<blockquote><p><em>&#8220;&#8230;el acceso a la red social es un break que permite atender sus relaciones personales&#8230;&#8221;</em></p></blockquote>
<p>No obstante, otros estudios como <a href="http://www.elfinancierocr.com/ef_archivo/2010/enero/10/tecnologia2213289.html" target="_blank">este publicado por el periódico El Financiero</a> contrarestan los beneficios de las redes con su impacto en la productividad, que se puede reducir hasta en un 12,5%. ¿Cómo saber si sus breaks estan durando demasiado? Hay que medirlos.</p>
<p>Acá brindamos algunos consejos puntuales para controlar el tiempo que invierte en redes sociales y así mejorar su productividad.</p>
<p><strong>1) Concéntrese en sus tareas y establezca recompensas</strong></p>
<p>Se sabe que los trabajadores que requieren estar mucho tiempo sentados necesitan tomarse descansos ocasionales por salud alrededor de cada hora y media. Puede utilizar estos descansos para revisar sus redes sociales. Para hacerlo más interesante puede proponerse la meta de terminar una determinada tarea antes de tomarse el descanso. Incluso, si puede levantarse y revisar sus redes sociales en el celular, mucho mejor.</p>
<p><strong>2) Mida su tiempo de trabajo</strong></p>
<p>Normalmente tenemos que entregar reportes de lo que hacemos durante el día.Para ello podemos utilizar sistemas online que nos permitan acostumbrarnos a medir nuestro tiempo. Un buen ejemplo de esto es <a title="Harvest" href="http://www.getharvest.com/" target="_blank">Harvest</a>. Harvest es una herramienta web para el reporte de horas de trabajo. Cada colaborador tiene su cuenta, ingresa a ella y llena su reporte. Este reporte es enviado a otro usuario que es el administrador de la cuenta y que puede ver los detalles de estos reportes e incluso generar gráficos.</p>
<p>El gran reto es construir el hábito de reportar el tiempo. Este reporte no debería ser hecho al final del día o de la semana, cuando ya el usuario no está tan seguro de cuánto tiempo le tomó hacer una determinada tarea. Para evitar esto, Harvest tiene la opción de Time Tracking: un cronómetro que el usuario activa al iniciar la tarea y que detiene cuando esta termina. El resultado: el tiempo exacto y un incentivo más para realizar la tarea más rápido.</p>
<p>De hecho, hay extensiones y aplicaciones como <a title="Hayfever" href="https://chrome.google.com/webstore/detail/hieiheiincjomjoiiknfcmiioakhlhmj?hl=en-US" target="_blank">Hayfever</a> para Google Chrome, que permiten tener un acceso más rápido al time tracking de Harvest.</p>
<p><strong>3) Mida su tiempo en redes sociales</strong></p>
<p>Ya que estamos acostumbrados a utilizar herramientas de medición par nuestro trabajo, podemos utilizarlas para medir nuestro descanso. Existen diversas aplicaciones para diferentes plataformas que nos permiten medir cuanto tiempo estamos usando en las redes sociales.</p>
<p>Por ejemplo, podemos instalar en Firefox <a title="Leechblock" href="https://addons.mozilla.org/en-US/firefox/addon/leechblock/" target="_blank">LeechBlock</a>: Una extensión que permite, entre otras cosas, crear una lista de sitios restringidos, es decir, sitios que Firefox bloqueará automáticamente después de que usted exceda el límite de tiempo establecido por día.</p>
<p>Para Chrome existe <a title="Time Spent on Facebook" href="https://chrome.google.com/webstore/detail/cbdiihnkhjaiokcaeiecemajlohbhefo?hl=en-US" target="_blank">Time Spend on Facebook</a> que muestra un cronómetro del tiempo que se ha invertido ese día en Facebook. También están <a title="TimeCamp" href="https://chrome.google.com/webstore/detail/ampbdedfdfambbnofclooigndknamkbf?hl=en-US" target="_blank">TimeCamp</a> y <a title="DeskTime" href="https://chrome.google.com/webstore/detail/joecgohaladjemjnjckellppmfbbminb?hl=en-US" target="_blank">DeskTime</a>, que automáticamente registran su tiempo invertido en redes sociales y en trabajo, presentado reportes uy gráficos con los resultados.</p>
<p>Existen también aplicaciones para celulares con las cuales usted puede hacer la medición de su tiempo, ya sea trabajando o en redes sociales. Por ejemplo, en Google Play podemos encontrar aplicaciones Android como <a title="TimeClock" href="https://play.google.com/store/apps/details?id=com.spotlightsix.timeclock3" target="_blank">TimeClock</a> o <a title="TimeRecording" href="https://play.google.com/store/apps/details?id=com.dynamicg.timerecording&amp;feature=related_apps" target="_blank">TimeRecording</a>.</p>
<p><strong>4) Utilice Manejadores Sociales</strong></p>
<p>Puede evitar ingresar una por una a su cuenta en cada red social. Mejor utilice un manejador social: Una aplicación (o extensión de browser) que concentran todas las notificaciones de sus redes en un solo panel sin tener que ingresar a cada cuenta y le permite postear desde allí a todas sus cuentas sis sus necesidades de comunicación así lo requieren. Además pueden configurarse para desplegar pequeñas notificaciones de escritorio, de modo que usted puede seguir enterado y trabajando. Algunos de los manejadores sociales más utilizados son:</p>
<ul>
<li><a title="Yoono" href="http://www.yoono.com/" target="_blank">Yoono</a></li>
<li><a title="Hootsuite" href="http://hootsuite.com/" target="_blank">Hootsuite</a></li>
<li><a title="TweetDeck" href="http://www.tweetdeck.com/" target="_blank">Tweetdeck</a></li>
</ul>
<p><strong>5) Desactive los chats si no está logueado</strong></p>
<p>Los chats suelen ser un gran distractor. Utilícelos en modo offline cuando sea requerido, para que quien lo requiere le envíe un mensaje privado en vez de un chat. Los mensajes privados normalmente son más concisos que los chats.</p>
<p>Como estas, existen cientos de aplicaciones dedicadas a ayudarle a ser productivo, accesibles con sólo un click. No obstante, nada se logrará si no sale de usted el impulso genuino de mejorar. Como dijo Steve Jobs:</p>
<blockquote><p><em>&#8220;Tenga un criterio de calidad. Algunas personas no están acostumbradas a un entorno en el que se espera la excelencia.&#8221;</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/04/10/5-consejos-para-no-perder-el-control-de-su-tiempo-en-redes-sociales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Por qué aún no tenemos un mundo IPv6?</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/04/03/por-que-aun-no-tenemos-un-mundo-ipv6/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/04/03/por-que-aun-no-tenemos-un-mundo-ipv6/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 17:04:52 +0000</pubDate>
		<dc:creator>ssanchez</dc:creator>
				<category><![CDATA[Hospedaje Web y Dominios en Costa Rica.]]></category>
		<category><![CDATA[ICANN]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[LACNIC]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1231</guid>
		<description><![CDATA[Otro de los temas que se tocó en la Reunión 43 de la ICANN fue el despliegue del protocolo IPv6. En un artículo previo habíamos hablado un poco sobre IPv6 y el fin de las direcciones IPv4. En esa ocasión vimos que en Febrero de 2011 se agotó el Pool de direcciones IPv4, que en [...]]]></description>
			<content:encoded><![CDATA[<p>Otro de los temas que se tocó en la Reunión 43 de la <a title="ICANN" href="http://www.icann.org/" target="_blank">ICANN</a> fue el despliegue del protocolo IPv6.</p>
<p>En un artículo previo habíamos hablado un poco sobre <a title="IPv6 y el fin de las direcciones IPv4" href="http://www.intergraphicdesigns.com/blog/2011/09/08/ipv6-y-el-fin-de-las-direcciones-ipv4/">IPv6 y el fin de las direcciones IPv4</a>. En esa ocasión vimos que en Febrero de 2011 se agotó el Pool de direcciones IPv4, que en estos momentos las entidades encargadas están realizando las últimas asignaciones posibles, y que las estimaciones más conservadoras esperan que las asignaciones se terminen en menos de 4 años.</p>
<p>También comentamos de cuál será el protocolo sustituto -IPv6- y vimos algunas de sus características. Con IPv6 se tendrán unos 340 sextillones de direcciones IP, cada una de 128 bits de longitud. Si se repartiesen en toda la superficie de la Tierra habría unas 667.000.000.000.000.000.000.000 direcciones IP por cada metro cuadrado. Tal cantidad de direcciones permitirá que cada computadora, teléfono celular, y en general cada dispositivo inteligente que se fabrique, posea su propia dirección IP y se conecte directamente a Internet sin necesidad de enrutamientos e IPs compartidas como se hace hoy día.</p>
<p>El nuevo protocolo como tal está listo desde hace varios años. La mayoría de los dispositivos, infraestructura de red, servidores y sistemas operativos ya incorporan la capacidad de trabajar con IPv6 y con IPv4 simultáneamente. A nivel de las grandes organizaciones que administran y regulan el Internet, y en el entorno técnico de las empresas del Estado y privadas, ya se lleva varios años promoviendo el despliegue de IPv6 y capacitando al personal en sus ventajas y el modo de implementarlo. Entonces una pregunta que cabe hacerse es: ¿Porqué aún no se ha realizado un despliegue en masa del protocolo a nivel de la industria y los usuarios comunes y corrientes?</p>
<p><b>Inercia Social</b></p>
<p>Probablemente la respuesta a la anterior pregunta sea: Debido a la gran inercia social que se necesita superar. Grandes cambios como este requieren muchos pasos pequeños para poder mover toda la maquinaria social involucrada.</p>
<p>Por lo menos en lo que a América Latina se refiere, las campañas informativas y las pruebas que se han realizado (como el <a title="World IPv6 Day" href="http://www.worldipv6day.org/" target="_blank">Día Mundial IPv6</a> que se realizó el pasado 8 de Junio de 2011) tan solo ha tenido influencia en un pequeño sector muy técnico de la sociedad. Ya es hora de superar esta etapa técnica y llegar a los empresarios y usuarios comunes.</p>
<p>Para poder salir adelante con el despliegue de las direcciones IPv6, los ISPs (Proveedores de Acceso a Internet) es decir, las empresas que distribuyen servicios de Internet, deben solicitar sus propios bloques de direcciones IPv6 al ente regional (en nuestro caso <a title="LACNIC" href="http://lacnic.net/sp/index.html" target="_blank">LACNIC</a>), finalizar sus capacitaciones y pruebas de compatibilidad para que comiencen a promover el uso de direcciones IPv6. Cada gobierno y entidad interesada en promover el uso del nuevo protocolo, deberá mover su foco de atención hacia el usuario común, ya que en la esfera técnica existe bastante acuerdo y conocimiento del tema.</p>
<p>Es de esperarse que en los próximos años, poco a poco al principio pero con mayor velocidad luego, los ISPs permitan a sus usuarios solicitar direcciones IPv6 y en el caso de las nuevas conexiones, las realicen desde el inicio con el nuevo protocolo. Durante un tiempo estaremos viviendo en una sociedad en transición, con usuarios que mantienen su vieja dirección IPv4, pero que sobre ella tienen también el equivalente IPv6 hasta que con el paso de los años IPv4 finalmente sea sacado de operación.</p>
<p><b>Superando el Temor al Cambio</b></p>
<p>Al usuario común no le interesa cómo funciona su Internet, sino que funciona. La mayoría de las personas ni siquiera saben que la conexión de su casa probablemente comparte un IP con sus vecinos (¡quizá ni saben que tienen un IP, ni lo que eso significa!).</p>
<p>De tal manera, el trabajo de los ISPs en estos momentos programar el inicio del despliegue y asegurarse que el Internet continúa operando de manera normal para los usuarios que tengan IPv6. Por supuesto que sus departamentos técnicos deben estar altamente capacitados para atender cualquier situación que se pueda ir dando, sin embargo en un gran porcentaje los usuarios no van a preocuparse por los detalles, sino sólo por poder acceder a su correo y navegar en la web como siempre lo han hecho.</p>
<p><a style="float:right;" href="http://www.worldipv6launch.org" ><img title="WORLD IPV6 LAUNCH is 6 June 2012 – The Future is Forever" src="http://www.worldipv6launch.org/wp-content/themes/ipv6/downloads/World_IPv6_launch_badge_128.png" alt="WORLD IPV6 LAUNCH is 6 June 2012 – The Future is Forever" width="128" height="128" /></a>Gracias al éxito del Día Mundial IPv6 del año pasado, el 6 de Junio del 2012 se ha programado como el <a title="World IPv6 Day Launch" href="http://www.worldipv6launch.org/" target="_blank">Día Mundial del Lanzamiento de IPv6</a>. Este día algunos gigantes del Internet como Google, Facebook, Microsoft Bing, y Yahoo van a habilitar sus servicios en forma permanente con compatibilidad IPv6. Se espera que con esta iniciativa se le dé mayor impulso al protocolo y que poco a poco incremente la cantidad de servidores de hosting que atienden perfectamente solicitudes de visitantes con IPv6.</p>
<p>Así que estamos a las puertas de otro gran cambio, uno que nos permitirá experimentar la conectividad al Internet de maneras que hasta hoy no hemos visto. Nuestra tarea como usuarios es informarnos y preguntar a nuestro proveedor de servicios cuándo pondrá a nuestra disposición direcciones IPv6, y cuáles serán los requisitos y características del servicio.</p>
<p>Podría ser que con un poco de presión del público las entidades encargadas vayan superando el temor al cambio y sigan el ejemplo de Google y otros que intentan acelerar el despliegue del nuevo protocolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/04/03/por-que-aun-no-tenemos-un-mundo-ipv6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>9 consejos para mejorar el Buzz de su organización</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/03/30/9-consejos-para-mejorar-el-buzz-de-su-organizacion/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/03/30/9-consejos-para-mejorar-el-buzz-de-su-organizacion/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 20:14:25 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[Google, SEO (Posicionamiento en Buscadores)]]></category>
		<category><![CDATA[InterGraphicDESIGNS - Últimas Noticias]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[mercadeo digital]]></category>
		<category><![CDATA[redes sociales]]></category>
		<category><![CDATA[SEO (Posicionamiento en Buscadores)]]></category>
		<category><![CDATA[smo]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1217</guid>
		<description><![CDATA[Para ponerlo en palabras simples: cuando hablamos de buzz hablamos de la presencia que tiene algo en internet, cualquier cosa capture la atención de los usuarios. Pareciera ser algo muy intangible, así que, ¿en qué modo ayuda el buzz a mi empresa? La ecuación es simple: a más exposición de su empresa en internet, más [...]]]></description>
			<content:encoded><![CDATA[<p>Para ponerlo en palabras simples: cuando hablamos de <em>buzz</em> hablamos de la presencia que tiene algo en internet, cualquier cosa capture la atención de los usuarios. Pareciera ser algo muy intangible, así que, ¿en qué modo ayuda el buzz a mi empresa? La ecuación es simple: a más exposición de su empresa en internet, más usuarios conocerán de ella, más se acercarán a conocerla y, finalmente, más usuarios utilizarán su servicio, comprarán su producto o se unirán a su causa.</p>
<p>Se ha especulado mucho sobre si Google mide y toma en cuenta el buzz dentro de sus algoritmos para afectar el SEO de una página web, de modo que esta aparezca mejor posicionada en las búsquedas. Sólo Google podría afiramrlo, no obstante lo que sí se sabe con certeza es que Google tiene un interés grande en el buzz. Para ello ha creado iniciativas como el despliegue de tweets en tiempo real en sus búsquedas y también <a title="Google Search plus Your World" href="http://www.google.com/insidesearch/plus.html" target="_blank">Google Search, plus Your World</a>. Con esta última, Google le permite al usuario personalizar los resultados de sus búsquedas, de modo que no solo aparezcan páginas web, si no también contenios publicado o compartido por nuestros contactos en Google Plus.</p>
<p style="text-align: center;"><a href="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/igd_search_result.png"><img class="size-full wp-image-1218 aligncenter" style="border: 1px solid #AAA;" title="Resultado de búsqueda combinado con resultados compartidos por usuarios" src="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/igd_search_result.png" alt="Resultado de búsqueda combinado con resultados compartidos por usuarios" width="697" height="185" /></a></p>
<p>Vale a pena intentarlo. A continuación les dejamos algunos pasos básios para empezar a trabajar en el buzz de su empresa en internet.</p>
<p><strong>1. Agregue un blog a su sitio web</strong></p>
<p>Tenga un lugar en donde pueda estar publicando noticias que pueda compartir también en redes sociales. Un blog ayuda tremendamente al posicionamiento de su página web en los buscadores. Eso sí, la idea del blog es tener una forma rápida y sencilla de publicar noticias, para poder mantener el movimiento en el sitio. Un blog estático no sirve de mucho.</p>
<p><strong>2. Cree perfiles empresariales en redes sociales</strong></p>
<p>Muchísimas empresas cometen el error en Facebook de crear perfiles personales para sus empresas en vez de crear páginas. Al hacer esto, se exponen a que Facebook los detecte y clausure su perfil. Las personas tienen perfiles y amigos, las empresas, páginas y fans. Las redes sociales permiten crear perfiles empresariales, los cuales usted puede utilizar para compartir las notas de su blog y demás contenido de interés para su negocio. Usualmente se crean cuentas en Facebook, Twitter, LinkedIn y Google Plus. Sin embargo de acuerdo a su nicho y objetivos, podrían ser igual o mayormente efectivas otras como Tumblr, Flickr, YouTube, Foursquare o Pinterest. La selección de los canales que una empresa desea abrir para estar en contacto con proveedores, clientes y amigos es una de las partes más importantes de toda estrategia de mercadeo digital.</p>
<p><strong>3. SEO</strong></p>
<p>Mejore su página web para que sea más fácil que los buscadores la encuentren cuando alguna persona busca algo relacionado a su negocio, y por tanto, tenga más exposición. Una aclaración importante es que compartir links de su sitio web en las redes sociales realmente no ayuda a que el ranking de su página se incremente <em>per sé</em>, como algunos han dicho. Sin embargo esto sí es importante parra crear buzz y llamar la atención del mercado.</p>
<p><strong>4. Esté atento</strong></p>
<p>Además de publicar información de su blog, busque y comparta información relacionada a su negocio: noticias, eventos, videos, notas de interés, etc.</p>
<p><strong>5. Creando la red</strong></p>
<p>De acuerdo a sus objetivos de mercadeo digital, usualmente es buena idea iniciar por los colaboradores de su empresa. Agréguelos a sus redes e incentive a compartir a su vez toda la información que se publique en los perfiles empresariales. Es importante identificar a personas de interés e influencia para su mercado y aprovechar el potencial de las redes sociales para fortalecer relaciones con ellos. Cree relaciones con proveedores o empresas cercanas para ayudarse mutuamente de una forma natural.</p>
<p><strong>6. Manténgase en contacto: Trivias, juegos, sorteos, etc</strong></p>
<p>Recuerde que las redes sociales no son para vender (al menos no en la mayoría de los casos), sino que son para darse a conocer y reforzar su presencia de marca. Según los objetivos de su organización, puede utilizar trivias, regalos, sorteos, juegos, etc que le permita llamar la atención de sus usuarios.</p>
<p><strong>7. Medir, analizar e innovar. Medir, analizar e innovar otra vez</strong></p>
<p>En todo proceso, es importante tener los objetivos claros, así como determinar la forma de evaluar los resultados (Esto aplica tanto en el SEO como en los esfuerzos en Redes Sociales). De acuerdo a este análisis deben tomarse las medidas correctivas y repetir este proceso cíclicamente. Recuerde por ejemplo, que no necesariamente la cantidad de fans o followers son la mejor métrica para estudiar el éxito de estos esfuerzos, el tener muchos fans sólo porque sí podría no tener mucho sentido para algunos objetivos organizacionales. Intente identificar siempre lo que su empresa busca (refresque cuál era su misión y visión), y de acuerdo a esto, analice cuáles deberían ser las métricas mediantes las cuales usted va a estudiar el éxito de su inversión (tiempo y dinero) en mercadeo digital.</p>
<p><strong>8. Sea efectivo y aproveche debidamente las herramientas y canales</strong></p>
<p>Manejar las redes sociales de la empresa puede demandar mucho tiempo. Si usted decide hacerlo, recuerde que existen Manejadores Sociales que le pueden facilitar el trabajo y monitoreo del mismo. Tenga cuidado con las herramientas que te permiten sincronizar todas las cuentas, cada red social tiene una forma y lenguaje distinto, por ejemplo, es muy diferente compartir un enlace en Twitter en 140 caracteres y aprovechando el potencial de los hashtags que compartir el mismo enlace en Facebook, donde se puede extender un poco más en su redacción.</p>
<p><strong>9. ¿Contratar a una persona externa o no?</strong></p>
<p>Muchas organizaciones han seleccionado delegar este trabajo en agencias especializadas en el tema. Cada vez es más frecuente escuchar la figura de un &#8220;Community Manager&#8221; externo a la empresa. No existe una respuesta única sobre si esto debe hacerse por medio de una subcontratación o no, pues en cada organización se cuentan con objetivos y recursos que podrían inclinar la decisión a realizar esto internamente. Lo que sí es claro, es que el trabajo debe estar en manos de personas que comprendan el potencial de estos esfuerzos, la importancia de mantener una comunicación transparente y activa con su red, con conocimiento en los temas internos de la organización y su industria.</p>
<p>Recuerde, su organización tiene muchas cosas buenas que compartir a su red de clientes, proveedores y amigos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/03/30/9-consejos-para-mejorar-el-buzz-de-su-organizacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevos dominios genéricos de primer nivel</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/03/27/nuevos-dominios-genericos-de-primer-nivel/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/03/27/nuevos-dominios-genericos-de-primer-nivel/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 16:01:12 +0000</pubDate>
		<dc:creator>ssanchez</dc:creator>
				<category><![CDATA[Eventos Costa Rica]]></category>
		<category><![CDATA[Hospedaje Web y Dominios en Costa Rica.]]></category>
		<category><![CDATA[gTLD]]></category>
		<category><![CDATA[ICANN]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1200</guid>
		<description><![CDATA[Hace un par de semanas estuvimos en la Reunión 43 de la ICANN, que se celebró en nuestro país. Dentro de los temas más destacados que se trataron estuvo la puesta en marcha del programa de nuevos gTLDs. Un dominio genérico de primer nivel, o gTLD por sus siglas en inglés -generic Top-Level Domain-, es [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un par de semanas estuvimos en la Reunión 43 de la ICANN, que se celebró en nuestro país. Dentro de los temas más destacados que se trataron estuvo la puesta en marcha del programa de nuevos gTLDs.</p>
<p>Un dominio genérico de primer nivel, o gTLD por sus siglas en inglés -<em>generic Top-Level Domain</em>-, es la parte superior (o final si se quiere ver de esa manera) de un nombre o dominio en Internet. Para decirlo claramente: son los famosos &#8220;.com&#8221;, &#8220;.net&#8221;, &#8220;.org&#8221;, etc.</p>
<p>Hasta ahora existe tan sólo una veintena de dominios genéricos de primer nivel, pero esto está a punto de cambiar. El programa de nuevos gTLDs permitirá que las empresas, las organizaciones sin fines de lucro y los grupos de la comunidad operen un dominio genérico de primer nivel de su propia elección. Las organizaciones además podrán solicitar un dominio de primer nivel en alfabetos como el chino, devanagari o arábigo en lugar de hacerlo únicamente en alfabeto latino.</p>
<p>Esto quiere decir que si una organización posee los recursos y la infraestructura, y cumple con los requisitos que la ICANN ha establecido, podría convertirse en el encargado de administrar y distribuir nombres de dominio con la terminación que ellos hayan registrado. No sólo se ampliará la variedad de gTLDs sino que también se va a introducir los TLDs de marca, y se hará mejoras al esquema existente de TLDs de uso geográfico.</p>
<p>En relación con el sector de dominios genéricos, ya hay trámites en proceso por parte de varias organizaciones y empresas para hacerse cargo de gTLDs tales como &#8220;.sport&#8221;, &#8220;.music&#8221;, &#8220;.news&#8221; y &#8220;.food&#8221;. La ICANN estará recibiendo solicitudes para la primer ronda de nuevos gTLDs hasta el 12 de Abril de 2012, y se espera que a principios del 2013 ya se pongan a disposición del público por parte de las organizaciones que pasen exitosamente el proceso de aprobación.</p>
<p>Actualmente existen los dominios de primer nivel de uso geográfico (ccTLDs), que se caracterizan por tener una longitud de dos dígitos, y se usan para identificar países. Ejemplos de estos son el &#8220;.cr&#8221;, &#8220;.mx&#8221;, &#8220;.es&#8221;, etc. Con el nuevo programa, será posible ampliar esta categoría para que ciudades o regiones registren sus propios TLDs, por ejemplo &#8220;.paris&#8221;, &#8220;.barcelona&#8221; o &#8220;.sydney&#8221;.</p>
<p>Para el caso del registro de TLDs de marca hay más restricciones por los derechos que algunas empresas poseen en cuanto a un nombre específico. Para esto también existe un sistema de resolución de disputas y objeciones, con el cual por ejemplo la empresa Nike podría apelar el intento de alguna organización por registrar el TLD &#8220;.nike&#8221;. Este sistema también atenderá casos en los que algún grupo u organización sienta que sus intereses se pueden ver contravenidos con el registro de un TLD específico.</p>
<p><a href="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/gtld_timeline.png"><img class="alignnone size-full wp-image-1204" title="New gTLDs TimeLine" src="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/03/gtld_timeline.png" alt="New gTLDs TimeLine" width="700" height="257" /></a></p>
<p style="text-align: right;">Fuente: <a href="http://www.instra.com/en/new-gtlds" target="_blank">http://www.instra.com/en/new-gtlds</a></p>
<p>La introducción de los nuevos TLDs es un hecho para los próximos meses. El impacto que esto va a producir en la forma que la sociedad utiliza y se beneficia con el Internet es profundo, y la recomendación para todo el público interesado, desde grandes empresas y organizaciones, hasta la pequeña PyME que tiene una página informativa, y aún el usuario que sólo acostumbra navegar de vez en cuando, es que se informen sobre los cambios que se van a dar y cómo se podría ver afectado.</p>
<p>Por un lado, tener más variedad de TLDs será una excelente oportunidad para posicionar empresas y servicios que hasta la fecha han tenido que hacer uso de nombres de dominio alternativos por la saturación del espacio en los &#8220;.com&#8221;, &#8220;.org&#8221;, etc. Por otra parte, la posibilidad que alguien en otra región del mundo desee registrar un TLD con su marca puede afectar negativamente a una empresa que no se informó a tiempo sobre el tema.</p>
<p>Sin embargo, el punto en donde posiblemente se vean más casos problemáticos es en el registro de dominios de segundo y tercer nivel con los nuevos gTLDs, ya que será más difícil de controlar. Por ejemplo, el dueño de la pizzería &#8220;Sabor&#8221; de pronto podría encontrar que hay personas en otras partes del mundo registrando dominios tales como &#8220;sabor.pizza&#8221;, &#8220;sabor.food&#8221; y &#8220;pizza.sabor.food&#8221;, o bien siguiendo con el ejemplo de Nike, alguien podría querer comprar los dominios &#8220;nike.tennis&#8221;, &#8220;nike.shoes&#8221; o &#8220;nike.sport&#8221;. Este tema aún se encuentra en discusión en el ámbito de la ICANN, para definir algunas políticas que ayuden a minimizar el impacto negativo y a lograr que este nuevo programa nos lleve a tener un Internet mejor y más provechoso.</p>
<p>Para más información se recomienda visitar los sitios web:</p>
<p style="text-align: center;"><a href="http://www.icann.org/">http://www.icann.org/</a> | <a href="http://newgtlds.icann.org/en">http://newgtlds.icann.org/en</a></p>
<p>Para finalizar compartimos el siguiente vídeo publicado por la ICANN, que es una excelente herramienta para entender lo que implica el programa de nuevos gTLDs:</p>
<p style="text-align: center;"><iframe src="http://www.youtube.com/embed/w4NJSnUbPg4" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/03/27/nuevos-dominios-genericos-de-primer-nivel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geolocalización: Pasos simples para integrar geolocalización en su sitio web.</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/03/22/geolocalizacion-pasos-simples-para-integrar-geolocalizacion-en-su-sitio-web/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/03/22/geolocalizacion-pasos-simples-para-integrar-geolocalizacion-en-su-sitio-web/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:14:14 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[InterGraphicDESIGNS - Últimas Noticias]]></category>
		<category><![CDATA[PHP y MySQL]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[geolocalización]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1176</guid>
		<description><![CDATA[La gran mayoría de personas que gustan salir a correr y que cuentan con un smartphone, utilizan alguna aplicación que lleve un registro de su velocidad, distancia recorrida y la ruta seguida. Esta información es subida en ese momento a un sitio web donde un historial es creado para que el usuario pueda consultarlo en [...]]]></description>
			<content:encoded><![CDATA[<p>La gran mayoría de personas que gustan salir a correr y que cuentan con un smartphone, utilizan alguna aplicación que lleve un registro de su velocidad, distancia recorrida y la ruta seguida. Esta información es subida en ese momento a un sitio web donde un historial es creado para que el usuario pueda consultarlo en cualquier momento, mediante gráficos de rendmiento y mapas. Este es un buen ejemplo de un sitio web que utiliza la caracteríticas de &#8220;geolocalización&#8221;.</p>
<p>Cuando hablamos de geolocalización en una aplicación web estamos hablando de determinar con tanta exactitud como sea posible la ubicación real (longitud y latitud) de la cual procede la información que se está desplegando. Con la popularidad que han ido ganando las tecnologías móviles y sus aplicaciones, los sitios web han visto una oportunidad de acercarse a sus usuarios utilizando la geolocalización. Esto le da una experiencia más real al usuario, resultados más específicos y útiles, pero también brinda una gran cantidad de información muy interesante sobre el mercado que un sitio web está alcanzando. Por ejemplo, con Google Analytics es posible determinar desde qué lugar del mundo viene el tráfico de un sitio. Con esta información, el negocio podría decidir enfocarse o expandirse para obtener más y/o mejores resultados.</p>
<p>El propósito de este artículo es mostrar el esquema básico a seguir para añadir geolocalización a un proyecto web. No es tan difícil como pareciera, y podría traerle grandes beneficios a su negocio y a sus usuarios. El objetivo de la técnicas que vamos a analizar es poder obtener la longitud y la latitud relacionada a nuestra informacion, sean estas referentes a la ubicación de un resultado de una búsqueda o a la posicion actual del usuario que visita el sitio.</p>
<p><strong>Paso 1: Registro de la localización</strong></p>
<p>Si el sitio web requiere de algún tipo de registro, sean cuentas de usuario o ingreso de artículos a un sistema, debe solicitarse información relacionada a la localización. Se pueden solicitar tantos datos como sean necesarios, pero normalmente se utiliza:</p>
<ul>
<li>País</li>
<li>Estado o provincia</li>
<li>Ciudad</li>
<li>Dirección</li>
<li>Código postal o Zip</li>
</ul>
<p>De los datos anteriores los realmente requeridos son el país, estado o provincia y la ciudad. Los demás serían deseables ya que aumentarían la exactitud de la localización.</p>
<p><strong>Paso 2: Detección de la IP</strong></p>
<p>Es posible que el sitio web no necesite un registro, o que simplemente necesitemos obtener la ubicación de un usuario para mostrarle los resultados pertinentes. Si este es el caso, necesitamos determinar la dirección IP del usuario. Las direcciones IP están agrupadas de modo que se sabe que cada IP pertenece a un determinado lugar del planeta. De esta forma podríamos de obtener la ubicacion del usuario (país, estado, cuidad, etc&#8230;) mediante un web service o una base de datos de IPs, como se verá mas adelante.</p>
<p>Pero primero, obtengamos la IP. Existe variedad de lenguajes de programación web y cada uno permite obtener una IP de modo diferente Por ejemplo, si lo hicieramos en PHP el código necesario sería:</p>
<pre class="wp-code-highlight prettyprint">if (!empty($_SERVER['HTTP_CLIENT_IP'])){ //Verificar la ip compartida de internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ //verificar si la ip fue provista por un proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}</pre>
<p><strong>Paso 3: Latitud y Longitud</strong></p>
<p>El siguiente paso es obtener la longitud y la latitud a partir de los datos recolectados.</p>
<p>Si tenemos la IP, existen dos formas de encontrar esta información. Primero podríamos utilizar algún web service de geolocalización como el que provee IpInfoDb. Este sitio web provee un API mediante el cual se puede enviar a un webservice una ip, y este retornará un documento XML con la información de la locación asignada a ese IP. Junto con esta información, se proveen la longitud y la latitud.</p>
<p>Otra forma de obtener la longitud y la latitud es utilizar una base de datos de ips. Simplemente se descarga la base de datos, se instala en el motor de bases de datos del hosting, y se consulta con la ip que hemos obtenido. Estas bases de datos vienen ordenadas en rangos, de modo que se debe buscar a que rango pertenece la ip que tenemos y recuperar la dirección asociada al rango. Normalmente se utiliza algún tipo de fórmula para convertir la IP en una llave que se pueda relacionar al rango. Por ejemplo, IpInfoDb.com utiliza ((A*256+B)*256+C)*256 + D donde A.B.C.D es la IP que encontramos.</p>
<p>Sin embargo, cada una de estas técinas tiene un problema importante a considerar. Como todo servicio web provisto por un tercero, es posible que en algún momento el servicio no esté disponible por razones externas o internas a nuestro servidor. Por ello se recomienda verificar si existe respuesta del servicio web, y en caso contrario, utilizar la base de datos de IPs como respaldo. El problema de la base de datos de IPs es que no es tan exacta como el servicio web, por ende, la mejor aproximación es usar ambos en conjunto. Por supuesto, las verisones de pago son más exactas que las versiones gratuitas.</p>
<p>Si en vez del IP contamos con una dirección física, podemos utilizar a Google y/o Yahoo como aliados. Podemos utilizar los siguientes servicios web para obtener un objeto que contendrá la longiud y la latitud que buscamos. La idea de contar con ambos servicios es tener alguno como respaldo del otro, aunque es dificil que cualquiera de los dos falle.</p>
<p>Google: http://maps.google.com/maps/geo?&amp;q=%ADDRESS&amp;output=csv&amp;key=%KEY</p>
<p>Yahoo: http://api.local.yahoo.com/MapsService/V1/geocode?appid=%KEY&amp;location=%ADDRESS</p>
<p>donde KEY es una llave proporcionada por el servicio para establecer el intercambio de información y ADDRESS sería la dirección de la cual queremos obtener la locación tan específica como sea posible, por ejemplo: 13th Street Boston Massachusetts 02129</p>
<p><strong>Paso 4: Cambiando de posición</strong></p>
<p>Ahora, una funcionalidad común para el usuario es poder cambiar su ubicación, de modo que los resultados mostrados por el sitio web o la aplicación puedan filtrarse de forma acorde. Para esto normalmente se le provee al usuario un input libre, en el cuál el usuario puede incluir el número zip de su locación, o su estado o la ciudad en la que está. Por ejemplo, se puede utilizar un servicio web de Webservicex.net, un sitio web dedicado a ser una fuente de datos para otros sitios web. Se pueden obtener datos como: tipo de cambio, datos de bolsa en tiempo real, clima y por supuesto, locaciones basadas en el sistema de ZIP estadounidense.</p>
<p>http://www.webservicex.net/uszip.asmx/GetInfoByZIP?USZip=ZIP_DEL_USUARIO</p>
<p><strong>Paso 5: Despliegue</strong></p>
<p>Finalmente, es importante darle al usuario confirmaciones visuales de la detección y cambio de locaciones. Para ello se puede utilizar el siguiente código que despliega una mapa desde google maps.</p>
<pre class="wp-code-highlight prettyprint">
&lt;iframe src=&quot;http://maps.google.com/?q=LATITUD,LONGITUD&amp;ie=UTF8&amp;ll=LATITUD,LONGITUD&amp;z=14&amp;output=embed&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;252&quot; height=&quot;140&quot;&gt;&lt;/iframe&gt;
</pre>
<p>donde LATITUD y LONGITUD son los números obtenidos tras los pasos anteriores de detección de localización. Se mostrará algo como:<br />
<iframe src="http://maps.google.com/?q=42.36,-71.059773&amp;ie=UTF8&amp;ll=42.36,-71.059773&amp;&amp;z=14&amp;output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="252" height="140"></iframe></p>
<p>Además, como vimos en un <a title="¿Programando un buscador en su sitio web? Te va a interesar Sphinx" href="http://www.intergraphicdesigns.com/blog/2012/03/01/%c2%bfprogramando-un-buscador-en-su-sitio-web-te-va-a-interesar-sphinx/">post anterior</a>, también se puede utilizar Sphinx para ordenar las búsquedas de acuerdo a la locación del usuario, sumado a que Sphinx permite acelerar las búsquedas hasta en un 50 por ciento.</p>
<p><strong>Geolocalización con HTML5</strong></p>
<p>No podíamos dejar de lado las nuevas bondades que trae consigo el HTML5, entre ellas el API de geolocalización. Con el API podemos acceder al objeto <a title="Definción del Objeto Geolocation de HTML5" href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">navigator.geolocation</a>, el cual se encarga de la mayoría del trabajo &#8220;sucio&#8221; por nosotros.</p>
<p>Simplemente debemos verificar si el browser soporta la geolocalización de HTML5 y automáticamente el browser solicitará permiso al usuario para obtener su ubicación. Si el usuario acepta, llamamos a la función <em>navigator.geolocation.getCurrentPosition</em> con los siguientes parámetros:</p>
<ul>
<li>1. Función a ejecutar si se pudo acceder a la ubicación del usuario.</li>
<li>2. Función a ejecutar si ocurrió algún error.</li>
<li>3. Objeto que brinda opciones para activar el modo de máxima exactitud, tiempo de espera en milisegundos y cada cuanto refrescar la cache de la última posición encontrada.</li>
</ul>
<p>Entonces todo el código necesario para obtener la longitud y latitud de la posición del usuario sería:</p>
<pre class="wp-code-highlight prettyprint">&lt;script&gt;
if (navigator.geolocation) {
  var tiempo_de_espera = 3000;
  navigator.geolocation.getCurrentPosition(mostrarCoordenadas, mostrarError, { enableHighAccuracy: true, timeout: tiempo_de_espera, maximumAge: 0 } );
}
else {
  alert(&quot;La Geolocalización no es soportada por este navegador&quot;);
}

function mostrarCoordenadas(position) {
  alert(&quot;Latitud: &quot; + position.coords.latitude + &quot;, Longitud: &quot; + position.coords.longitude);
}

function mostrarError(error) {
  var errores = {1: 'Permiso denegado', 2: 'Posición no disponible', 3: 'Expiró el tiempo de respuesta'};
  alert(&quot;Error: &quot; + errores[error.code]);
}
&lt;/script&gt;</pre>
<p>Acá les dejamos un pequeño <a title="Is Geolocation part of HTML5?" href="http://isgeolocationpartofhtml5.com/" target="_blank">demo</a> que responde a la pregunta: Es la geolocalización parte de HTML5?</p>
<p>Solo queda agregar que existen muchas herramientas en la web hoy en día para habilitar geolocalización en un sitio web. Con esta guía básica es posible, entonces, empezar a explotar las diversas opciones y oportunidades que ofrece este campo de la web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/03/22/geolocalizacion-pasos-simples-para-integrar-geolocalizacion-en-su-sitio-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dentro de PHP: Lo que no sabías de las etiquetas de apertura y cierre</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/03/06/dentro-de-php-lo-que-no-sabias-de-las-etiquetas-de-apertura-y-cierre/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/03/06/dentro-de-php-lo-que-no-sabias-de-las-etiquetas-de-apertura-y-cierre/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 04:48:10 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[PHP y MySQL]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1161</guid>
		<description><![CDATA[Las etiquetas de apertura y cierre de PHP son de uso diario para cualquier desarrollador PHP. Con ellas iniciamos y concluimos secciones de código, despliegues de variables en medio de etiquetas HTML y cualquier documento de código PHP. Apesar de que las encontramos por doquier en un proyecto PHP, muchos desarrolladores no conocen las serias [...]]]></description>
			<content:encoded><![CDATA[<p>Las etiquetas de apertura y cierre de PHP son de uso diario para cualquier desarrollador PHP. Con ellas iniciamos y concluimos secciones de código, despliegues de variables en medio de etiquetas HTML y cualquier documento de código PHP. Apesar de que las encontramos por doquier en un proyecto PHP, muchos desarrolladores no conocen las serias implicaciones que podrían sucitarse de no hacer un uso correcto de estas etiquetas de apertura y cierre.</p>
<p>Primero que todo es necesario puntualizar que existen 4 tipos de etiquetas de apertura y cierre:</p>
<ul>
<li>Etiquetas Estándar</li>
<li>Etiquetas Cortas</li>
<li>Etiquetas Script</li>
<li>Etiquetas ASP</li>
</ul>
<p>Las etiquetas estándar y script son las únicas que PHP siempre tiene disponibles. Las etiquetas cortas y ASP dependen de la configuración del servidor PHP en el que se esté ejecutando el código.</p>
<p>De hecho, se considera una mala práctica de programación usar cualquier otra etiqueta de apertura y cierre que no sean las etiquetas estándar. Esto se debe a varios factores</p>
<ul>
<li>El hecho de que las etiquetas cortas y ASP dependan de la configuración del servidor las hace menos portables. Esto es, si en un determinado momento un sitio web que ya está &#8220;al aire&#8221; necesita ser movido de servidor o actualizado, es posible que encuentre una configuración diferente. Ya que estas etiquetas están deshabilitadas por default en los servidores PHP, un cambio de servidor podría implicar un trabajo extenso de modificación de etiquetas, tiempo perdido y, en el peor de los casos, dinero perdido.</li>
<li>Si se están desarrollando aplicaciones o librerías con el objetivo de redistribuirlas, hay que tomar en cuenta que el servidor en que el cliente instalará dichos códigos puede tener una configuración diferente. No siempre un cliente tiene fácil acceso a la configuración de un servidor. Imagine lo que pasaría si alguien compra su aplicación, la instala, y esta no funciona por problemas de configuración que pueden tomar días en resolverse. Nuevamente, portabilidad.</li>
<li>Tanto las etiquetas script como las etiquetas ASP están descontinuadas para PHP, por lo cual no deberían ser usadas en lo absoluto. Sin embargo, siempre es importante hacer la aclaración ya que es muy común que al trabajar con códigos desarrollados por otros nos encontremos sorpresas como estas. Hay que estar preparados. De hecho, nadie sabe en realidad por qué las etiquetas ASP fueron incluídas en PHP, razón de sobra para dejarlas de lado.</li>
<li>Las etiquetas cortas surgieron con la inherente necesidad de los programadores de decir más con menos. Sobre todo cuando se trata de código muy frecuentemente utilizado, Un ejemplo claro son las operaciones unarias ($a++) y las operaciones reducidas ($a+=5). Además del problema de configuración que conllevan, existe también una ascepción cuando se trabaja con XML, ya que podría existir un conflicto entre las etiquetas cortas y el encabezado de un documento XML válido:</li>
<li>Podríamos hacer una salvedad para una de las variantes de la notación de etiquetas cortas, las etiquetas del tipo &#8220;&lt;?=  ?&gt;&#8221; que a partir de PHP 5.4 son siempre reconocidas independientemente de la configuración del servidor. Sin embargo, siempre se depende de que el servidor esté ejecutando PHP 5.4.</li>
</ul>
<p>Por estas razones se recomienda como mejor práctica de programación utilizar siempre las etiquetas estándar de apertura y cierre de PHP. Esperamos que esta información sea de utilidad y quedamos atentos a sus comentarios que nos ayuden a complementar esta información y a seguir mejorando nuestro hábitos en PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/03/06/dentro-de-php-lo-que-no-sabias-de-las-etiquetas-de-apertura-y-cierre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Programando un buscador en su sitio web? Te va a interesar Sphinx</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/03/01/%c2%bfprogramando-un-buscador-en-su-sitio-web-te-va-a-interesar-sphinx/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/03/01/%c2%bfprogramando-un-buscador-en-su-sitio-web-te-va-a-interesar-sphinx/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 13:35:34 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[PHP y MySQL]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[algoritmo de búsquedas]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[perfomance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rendimiento]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1140</guid>
		<description><![CDATA[Cuando se trata de búsquedas customizadas en un sitio web, lo principal es que los resultados sean tan precisos como sea posible. Para esto podemos utilizar técnicas como las sugerencias de búsqueda o búsquedas semánticas. Sin embargo, dada la competitividad de la web existe un parámetro más, vital para un sistema de búsqueda web: la [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se trata de búsquedas customizadas en un sitio web, lo principal es que los resultados sean tan precisos como sea posible. Para esto podemos utilizar técnicas como las sugerencias de búsqueda o búsquedas semánticas. Sin embargo, dada la competitividad de la web existe un parámetro más, vital para un sistema de búsqueda web: la velocidad.</p>
<p>Existen diversas técnicas que permiten acelerar las búsquedas en una página web. Antes de escoger alguna técnica para acelerar las búsquedas, es necesario identificar cual es el balance costo/beneficio que podemos obtener de esta.</p>
<p>El propósito de este artículos es presentar a <a title="Sphinx" href="http://sphinxsearch.com/" target="_blank">Sphinx </a>como una excelente técnica de aceleración de búsquedas, a la vez que resume su integración en un sistema y analiza en cuales ambientes se podría podría obtener mayor ventaja.</p>
<p><strong>Sphinx</strong></p>
<p>Sphinx es un servidor de búsqueda de texto completo (Full Text Search). <a href="http://sphinxsearch.com/" target="_blank"><img class="alignright size-full wp-image-1145" style="border: 1px solid #AAA;" title="Sphinx" src="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/02/sphinx.jpg" alt="Sphinx Logo" width="200" height="51" align="right" /></a>Esto significa que se conecta con el repositorio de datos y crea índices textuales, los cuales son consultados en cada búsqueda, en lugar de ir hasta el repositorio de datos. Las búsquedas indexadas de Sphinx pueden resultar hasta 50% más rápidas que una búsqueda común en un repositorio Claro que este resultado varía dependiendo de la potencia del servidor y del tamaño del conjunto de índices (en adelante: colección) que se indexa.</p>
<p>Es importante aclarar que Sphinx funciona con las base de datos comunes al desarrollo web (SQL Server, MYSQL, Oracle, PostgreSQL, etc&#8230;), pero también con colecciones de documentos o cualquier objeto que pueda ser indexado textualmente, desde archivos de texto simples hasta pdfs.</p>
<p>Compañías tan importantes como <a title="Wordpress" href="http://wordpress.com" target="_blank">WordPress </a>y <a title="Mozilla" href="http://www.mozilla.org/" target="_blank">Mozilla </a>lo están utilizando actualmente.</p>
<p><strong>Benchmarks</strong></p>
<p>Veamos la siguiente tabla comparativa entre Sphinx y Mysql (tomada del <a title="Blog Oficial Sphinx" href="http://sphinxsearch.com/blog/2010/03/29/sphinx-vs-mysql-expression-benchmarks/" target="_blank">blog oficial de Sphinx</a>).</p>
<table class="wp" width="700" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th bgcolor="#CCC">N</th>
<th bgcolor="#CCC">Consulta</th>
<th bgcolor="#CCC">Resultados de MySQL</th>
<th bgcolor="#CCC">Tiempo</th>
<th bgcolor="#CCC">Resultados de Sphinx</th>
<th bgcolor="#CCC">Tiempo</th>
<th bgcolor="#CCC">k</th>
</tr>
<tr>
<td>1</td>
<td>min(a)</td>
<td>2244</td>
<td><strong>0.39s</strong></td>
<td>2244</td>
<td><strong>0.08s</strong></td>
<td>4.9x</td>
</tr>
<tr>
<td bgcolor="#CCC">2</td>
<td bgcolor="#CCC">min(a+b*c)</td>
<td bgcolor="#CCC">790494849806</td>
<td bgcolor="#CCC"><strong>0.45s</strong></td>
<td bgcolor="#CCC">309</td>
<td bgcolor="#CCC"><strong>0.09s</strong></td>
<td bgcolor="#CCC">5.0x</td>
</tr>
<tr>
<td>3</td>
<td>min(bigint(a)+b*c)</td>
<td>790494849806</td>
<td><strong>0.45s</strong></td>
<td>790494849806</td>
<td><strong>0.11s</strong></td>
<td>4.1x</td>
</tr>
<tr>
<td bgcolor="#CCC">4</td>
<td bgcolor="#CCC">sum(sin(a+b+c))</td>
<td bgcolor="#CCC">-695.3422782..</td>
<td bgcolor="#CCC"><strong>0.50s</strong></td>
<td bgcolor="#CCC">765.542419</td>
<td bgcolor="#CCC"><strong>0.17s</strong></td>
<td bgcolor="#CCC">2.9x</td>
</tr>
<tr>
<td>5</td>
<td>max(a+b*2-c/3*4+5+6+7+8+9)</td>
<td>6404668209</td>
<td><strong>1.42s</strong></td>
<td>6404668416</td>
<td><strong>0.14s</strong></td>
<td>10.1x</td>
</tr>
<tr>
<td bgcolor="#CCC">6</td>
<td bgcolor="#CCC">max(a+b*2-c*4/3+35)</td>
<td bgcolor="#CCC">6404668209</td>
<td bgcolor="#CCC"><strong>1.05s</strong></td>
<td bgcolor="#CCC">6404668416</td>
<td bgcolor="#CCC"><strong>0.14s</strong></td>
<td bgcolor="#CCC">7.5x</td>
</tr>
<tr>
<td>7</td>
<td>max(a+b*2-c*1.333333333+35)</td>
<td>6404668209.003..</td>
<td><strong>0.84s</strong></td>
<td>6404668416</td>
<td><strong>0.14s</strong></td>
<td>6.0x</td>
</tr>
<tr>
<td bgcolor="#CCC">8</td>
<td bgcolor="#CCC">max(a+b*2-idiv(bigint(c),3)*4+5+6+7+8+9)</td>
<td bgcolor="#CCC">6404668209</td>
<td bgcolor="#CCC"><strong>1.42s</strong></td>
<td bgcolor="#CCC">6404668209</td>
<td bgcolor="#CCC"><strong>0.14s</strong></td>
<td bgcolor="#CCC">10.1x</td>
</tr>
<tr>
<td>9</td>
<td>avg(a*b/c/1/2/3/4)</td>
<td>326342841.944..</td>
<td><strong>2.55s</strong></td>
<td>326041280.000</td>
<td><strong>0.13s</strong></td>
<td>19.6x</td>
</tr>
<tr>
<td bgcolor="#CCC">10</td>
<td bgcolor="#CCC">avg(a*b/c/24)</td>
<td bgcolor="#CCC">326342841.944..</td>
<td bgcolor="#CCC"><strong>1.39s</strong></td>
<td bgcolor="#CCC">326041280.000</td>
<td bgcolor="#CCC"><strong>0.13s</strong></td>
<td bgcolor="#CCC">10.7x</td>
</tr>
</tbody>
</table>
<p>Como vemos en negrita, Sphinx siempre es considerablemente más rápido que Mysql para todas las búsquedas, lo cual es en promedia un rendimiento casi 10 veces superior. De hecho, se ha calculado que Sphinx puede ejecutar más de 500 consultas por segundo en una colección de un millón de documentos, mucho más de lo que muchos sistemas de búsqueda web podrían alcanzar.</p>
<p><strong>Relevancia</strong></p>
<p>Sphinx siempre devuelve un campo más, el weigth, peso o relevancia del resultado. Este valor significa qué tanta coincidencia tuvo este resultado con respecto a la búsqueda del usuario. Con esto, y sin programar una sola línea de código más, podemos presentarle al usuario los resultados ordenados por su relevancia para la búsqueda, un plus muy importante en una búsqueda web.</p>
<p><strong>Indexación</strong></p>
<p>Para encontrar una coincidencia entre un registro del repositorio (AKA: documento) y la busqueda de un usuario, Sphinx busca en los índices y retorna los resultados cuyas palabras claves coincidan de acuerdo con la forma en que fue creado el índice. Los índices, por supuesto, son completamente configurables. Entre muchas otras opciones, para cada índice se puede definir:</p>
<ul>
<li><em>Tamaño del keyword:</em> si se buscará por palabras completas o por secciones de palabras. Esto es, si se busca Aeropuerto, Sphinx podría retornar solamente los documentos que coincidan con la palabra, o también aquellos que contengan las palabras aero y puerto. Además, para hacer más ágil el índice, se eliminan artículos y preposiciones.</li>
<li><em>Palabras restringidas (stopwords):</em> Palabras que no serán tomadas en cuenta para una búsqueda.</li>
<li><em>Stemming:</em> El stemming es un método para reducir una palabra a su raíz. Por ejemplo, si se busca bibliotecas. Sphinx podrá retornar palabras que vengan de la misma raíz como bibliotecario o bibliotecario.</li>
</ul>
<p>Sphinx cuenta con un solo archivo de configuración, muy sencillo, en donde se detalla como será indexado cada documento y de cuales fuentes (tablas, directorios) serán tomados.</p>
<p><strong>Filtros y Geolocalización</strong></p>
<p>Algo muy interesante sobre Sphinx es la capacidad que tiene para desarrollar búsquedas geolocalizadas, es decir, que tomen en cuenta distancias geográficas reales. Por ejemplo, si quiero encontrar todos los restaurantes de mi colección que estén a menos de 5 km de mi posición actual.</p>
<p>Para esto, es necesario saber la longitud y latitud de mi posición actual y que cada documento tenga un campo para su longitud y su latitud.</p>
<p>Por supuesto, la longitud y la latitud deben estar contemplados en el índice. Pero además debe existir un filtro. Sphinx permite crear filtros en cada índice para extender las posibilidades de las búsquedas. Por ejemplo, puedo hacer una consulta para encontrar todos los documentos que sean restaurantes en mi colección, pero además aplicaré el filtro de geolocalización @geo con la latitud y longitud de mi posición actual, de modo que Sphinx solo retorne los restaurantes que estén a menos de 5 Km.</p>
<p><strong>Metodología de Indexación</strong></p>
<p>La información de la base de datos va a actualizarse. Es necesario, entonces, actualizar la información de los índices. Para esto normalmente se crea alguna tarea programada o Cronjob que corra en el servidor cada cierto tiempo y ejecute el comando indexer, el script de indexación de Sphinx. Este tiempo varía según qué tanto movimiento exista en los repositorios.</p>
<p>¿Problema resuelto? Casi&#8230; Resulta que la indexación puede ser un proceso costoso, dependiendo de la cantidad de documentos a indexar, la capacidad del servidor y de la complejidad de la consulta que se vaya a utilizar para generar cada índice. Por ejemplo, imagine que tenemos una base de datos de restaurantes. Cada restaurante tiene varias locaciones, distintas especialidades y distintos platillos a ofrecer. Digamos que el requisito de la búsqueda con Sphinx es que se pueda ubicar un restaurante por cualquier palabra almacenada en la tabla que guarda la información del restaurante, o por cualquiera de sus locaciones, o por cualquiera de sus especialidades o platillos. Sin importar cuán optimizada esté una consulta, esta será significativamente más &#8220;costosa&#8221; que una consulta sobre una sola tabla. Imagine ahora, que tenemos cinco mil restaurantes en nuestro sistema y dos o tres veces más esa información para las locaciones, platillos y especialidades.</p>
<p>Se ha calculado que Sphinx puede indexar de 10 a 15 MB de texto por segundo por núcleo de CPU en un servidor dedicado. Sin embargo, no siempre se cuenta con un servidor dedicado, por lo cual estos números pueden bajar significativamente. El gran problema es que si la indexación toma mucho tiempo se podrían desplegar resultados obsoletos en las búsquedas. Por ello se debe intentar reducir el tiempo de indexación al mínimo, a segundos.</p>
<p>Para ello existen los deltas. Los deltas son un tipo especial de indice que solamente toma en cuenta los últimos registros modificados. Existirá un delta por cada índice. Entonces, en cada indexación, simplemente se re-indexa un delta y se mezcla con el índice original, de este modo la información queda actualizada en segundos, o menos.</p>
<p><strong>Algunos contras</strong></p>
<p>Sí, Sphinx tiene algunos contras. El primero y más grande es que Sphinx no admite documentos que tengan el mismo identificador. Esto es, por ejemplo, si la consulta que crea mi índice de restaurantes retorna dos veces mi restaurante, debido a que tiene dos ubicaciones distintas, Sphinx solo incluirá una de estas en el índice, y la otra será sobreescrita. Para solucionar esto es necesario tener índices aparte, u optimizar la consulta para que ambas ubicaciones se agrupen, lo cual puede ser complejo.</p>
<p>En este mismo sentido está otra desventaja: hacer una búsqueda que incluya diferentes objetos requeriría que el sistema sea pensado para Sphinx, es decir, que no existan identificadores repetidos en toda la base de datos. Siguiendo con los restaurantes, si quiero crear un índice que me permita encontrar restaurantes y clientes en una sola búsqueda, tendría que crear un índice para ello, pero esto significa que las tablas de restaurantes y clientes deben estar sincronizadas de modo que no existan identificadores repetidos. Esto hace muy complejo incluir Sphinx en un proyecto que no se haya pensado para Sphinx. Claro que es posible, pero implica un mayor esfuerzo y tiempo de desarrollo.</p>
<p>Lo último es un pequeño detalles de los deltas: aunque actualizan la información, estos no eliminan información. Si un restaurante eliminó una de sus locaciones, está persistirá incluso después de la indexación con el delta, ya que el delta solo actualiza los nuevos datos provenientes del repositorio. Para eliminar estos residuos en los índices se hace necesario re-indexar por completo los índices diariamente.</p>
<p><strong>¿Servirá Sphinx para mi proyecto web?</strong></p>
<p>A pesar de las complicaciones que puede ofrecer, la ganancia que se obtiene a partir del uso de Sphinx en las búsquedas es dificil de ignorar. Además ya existen herramientas que permiten integrar mas fácilmente Sphinx con los sistemas web más comunes, como <a title="SPhinx Drupal" href="http://drupal.org/project/sphinx" target="_blank">Drupal</a>, <a title="Sphinx WordPress" href="http://wordpress.org/extend/plugins/wordpress-sphinx-plugin/" target="_blank">WordPress </a>e incluso API&#8217;s para lenguajes web como <a title="Sphinx PHP" href="http://php.net/manual/es/book.sphinx.php" target="_blank">PHP</a>.</p>
<p>Si en su proyecto web las búsquedas juegan un papel fundamental, si necesita brindar opciones de geolocalización o si va a incluir grandes volúmenes de datos, definitivamente Sphinx es una opción. Si su proyecto es más sencillo, tenga la seguridad de que un buen diseño, una programación eficiente y consultas bien optimizadas siempre darán buenos réditos.</p>
<p>De cualquier forma, ahora ya conoce Sphinx y tiene una herramienta más para competir a la velocidad del mercado actual.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/03/01/%c2%bfprogramando-un-buscador-en-su-sitio-web-te-va-a-interesar-sphinx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un vistazo básico a Drupal y su estructura como CMS</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/02/21/un-vistazo-basico-a-drupal-y-su-estructura-como-cms/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/02/21/un-vistazo-basico-a-drupal-y-su-estructura-como-cms/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 18:41:40 +0000</pubDate>
		<dc:creator>orodriguez</dc:creator>
				<category><![CDATA[PHP y MySQL]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1127</guid>
		<description><![CDATA[Drupal es una herramienta de código abierto concebida como un sistema administrador de contenidos y un marco de trabajo. Es utilizada para crear cualquier tipo de sitio web, desde un blog personal hasta una aplicación web empresarial. Es un herramienta flexible, robusta, segura y posee una gran comunidad de usuarios que día a día mejora [...]]]></description>
			<content:encoded><![CDATA[<p align="JUSTIFY"><a title="Drupal" href="http://drupal.org" target="_blank">Drupal</a> es una herramienta de código abierto concebida como un sistema administrador de contenidos y un marco de trabajo. Es utilizada para crear cualquier tipo de sitio web, desde un blog personal hasta una aplicación web empresarial.</p>
<p align="JUSTIFY">Es un herramienta flexible, robusta, segura y posee una gran comunidad de usuarios que día a día mejora y extiende las funcionalidades que posee. Según la página oficial, los miembros registrados hasta el momento ascienden hasta los 770 000, distribuidos alrededor de más de 200 países.</p>
<p align="JUSTIFY">Existen otros administradores de contenido que son muy utilizados y que compiten con Drupal, entre ellos podemos mencionar a <a title="Wordpress" href="http://wordpress.org/" target="_blank">WordPress</a>, <a title="Joomla" href="http://www.joomla.org/" target="_blank">Joomla</a> y <a title="Sharepoint" href="http://sharepoint.microsoft.com/" target="_blank">SharePoint</a> de Microsoft. Estas herramientas difieren entre sí en muchos aspectos, siendo el principal la manera en que trabajan y los nichos de mercado por los que compiten.</p>
<p align="JUSTIFY">En el caso de Drupal esta principalmente enfocado a todo tipo de compañías, desde Pymes hasta instituciones gubernamentales, esto debido a la flexibilidad y seguridad que ofrece. Para ejemplificar su uso podemos mencionar sitios como el de <a title="White House" href="http://www.whitehouse.gov/" target="_blank">la casa blanca de los Estados Unidos</a> y periódicos como <a title="Examiner" href="http://www.examiner.com/" target="_blank">Examiner</a> y <a title="The Economist" href="http://www.economist.com/" target="_blank">The Economist</a>.</p>
<p align="JUSTIFY">Con la instalación por defecto de Drupal se puede comenzar a escribir artículos y crear páginas estáticas, agregar vínculos a estas en el menú principal, además configurar permisos y roles de usuarios sin mucha dificultad. Inclusive puede cambiarse la apariencia con la instalación de un nuevo tema. Sin embargo, a diferencia de WordPress o Joomla, hacer tareas más complejas se puede convertir en una empresa difícil y frustrante si no se tiene la guía necesaria. Esta característica surge como un costo a la flexibilidad y versatilidad que Drupal ofrece.</p>
<p align="JUSTIFY"><strong>Sobre la curva de aprendizaje</strong></p>
<p align="JUSTIFY">Puede compararse otros sistemas gestores de contenido con un carro de juguete, desde que se saca de la caja ya es funcional, probablemente sin tener que hacer mucho más que colocarle las baterías, además de que su funcionalidad es comprensible sin mucho análisis.</p>
<p align="JUSTIFY">Mientras tanto, Drupal se compara con un equipo para construir carros de juguete, donde no es tan fácil tener un modelo funcional y requiere más análisis y trabajo de las piezas que se utilizarán para construirlo.</p>
<p align="JUSTIFY">A pesar de que el nivel de dificultad aumenta, se pueden crear sitios con la funcionalidad deseada replicada exactamente, hacer uso únicamente de las partes requeridas para que funcione, desplegar la información de distintas maneras según el usuario, agruparla fácilmente por categorías, entre otros.</p>
<p align="JUSTIFY"><strong>Estructura de Drupal</strong></p>
<p align="JUSTIFY">Drupal logra esta flexibilidad gracias a la estructura que posee, la cual es de vital importancia entender si se desear ser un desarrollador o utilizar los módulos de la comunidad correctamente. La estructura esta distribuida de la siguiente manera.</p>
<ul>
<li>
<p align="JUSTIFY"><strong>Nodos</strong>: representan una unidad que almacena información sin importar el tipo de contenido que representen. Por ejemplo, el título y contenido de un artículo. Antes de realizarse cualquier tarea debe contarse con la información necesaria por lo que los nodos podrían verse como la base del sistema.</p>
</li>
<li>
<p align="JUSTIFY"><strong>Módulos</strong>: son la siguiente capa dentro de Drupal y son utilizados para extender la funcionalidad básica, permitiendo realizar distintas tareas.</p>
</li>
<li>
<p align="JUSTIFY"><strong>Bloques y menús</strong>: los menús son utilizados como vínculos para acceder a determinadas páginas, mientras que los bloques son pequeñas unidades en las que se puede desplegar las salidas de un módulo. La ubicación de los bloques esta definida por el tema que se utiliza.</p>
</li>
<li>
<p align="JUSTIFY"><strong>Permisos de usuario</strong>: representan las acciones que pueden realizar distintos usuarios o roles sobre el sistema y el contenido.</p>
</li>
<li>
<p align="JUSTIFY"><strong>Tema</strong>: es el que define la manera en que se ve el sitio.</p>
</li>
</ul>
<p align="JUSTIFY">Drupal es una herramienta que se puede utilizar para construir casi cualquier tipo de sitio web, como se mencionó a lo largo de este artículo es muy flexible y versátil. Estas características provocan que el aprendizaje se vuelva un poco largo, pero no imposible.</p>
<p align="JUSTIFY">Otra de sus ventajas es que posee una amplia comunidad, que constantemente esta haciendo mejoras e incrementando la funcionalidad con nuevos módulos, además de que es <a title="Software Libre" href="http://en.wikipedia.org/wiki/Open_source" target="_blank">software libre</a>, lo que indica que esta constantemente bajo escrutinio convirtiéndose así en un sistema muy seguro.</p>
<h2 align="JUSTIFY">Referencias</h2>
<p align="JUSTIFY"><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://drupal.org/documentation">http://drupal.org</a></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/02/21/un-vistazo-basico-a-drupal-y-su-estructura-como-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP: Un framework para que desarrollar en PHP sea &#8220;un queque&#8221;.</title>
		<link>http://www.intergraphicdesigns.com/blog/2012/02/19/cakephp-un-framework-para-que-desarrollar-en-php-sea-un-queque/</link>
		<comments>http://www.intergraphicdesigns.com/blog/2012/02/19/cakephp-un-framework-para-que-desarrollar-en-php-sea-un-queque/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 02:08:47 +0000</pubDate>
		<dc:creator>Daniel Obando</dc:creator>
				<category><![CDATA[InterGraphicDESIGNS - Últimas Noticias]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP Frameworks]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.intergraphicdesigns.com/blog/?p=1080</guid>
		<description><![CDATA[Después de más de dos años desarrollando aplicaciones web a la medida utilizando CakePHP queremos tomarnos un tiempo para recomendarlo. Sí, realmente es tan fácil como dicen, de ahí su nombre. CakePHP es un framework creado para el desarrollo de aplicaciones web en PHP. Un framework automatiza muchas de las tareas más comunes de un desarrollador, [...]]]></description>
			<content:encoded><![CDATA[<p>Después de más de dos años desarrollando aplicaciones web a la medida utilizando <a href="http://cakephp.org/" target="_blank">CakePHP</a> queremos tomarnos un tiempo para recomendarlo. Sí, realmente es tan fácil como dicen, de ahí su nombre.</p>
<p>CakePHP es un <a href="http://en.wikipedia.org/wiki/Software_framework" target="_blank">framework</a> creado para el desarrollo de aplicaciones web en <a href="http://www.php.org" target="_blank">PHP</a>.</p>
<p>Un framework automatiza muchas de las tareas más comunes de un desarrollador, sin embargo, muchas veces la curva de aprendizaje que se requiere para poderle sacar máximo provecho es una limitante. La idea principal de <em>Cake </em>es acelerar el proceso de aprendizaje, a la vez que se reduzca el tiempo de desarrollo, manteniendo la calidad del código.</p>
<p>Cake utiliza el esquema <a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">Modelo-Vista-Controlador</a> para estructurar sus proyectos. Esto reforzado con el paradigma de <a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" target="_blank">orientación a objetos</a> permite el desarrollo de aplicaciones modularizables.</p>
<p>Veamos algunas de las cosas más interesantes que nos ofrece:</p>
<h2>Scafolding</h2>
<p>Al inicio de un proyecto es muy común que se ajusten detalles en cuanto a la información que va a guardar cada tabla de la base de datos. Debido a esto, los desarrolladores tienen que utilizar más tiempo re-adecuando las secciones del sitio que salvan o eliminan datos.</p>
<p>El Scafolding crea una estructura <a href="http://es.wikipedia.org/wiki/CRUD" target="_blank">CRUD</a> temporal con cuatro simples pasos: Cree la base de datos inicial, cree el modelo, cree el controlador en blanco y agregue la variable $scaffold. <em>Cake</em> se encarga de toda lo lógica interna y del despliegue de las opciones requeridas.</p>
<p>Una vez que la base de datos ha sido definida, el desarrollador puede reemplazar el scafold por sus propias vistas y métodos.</p>
<h2>Bake</h2>
<p>Cake incluye un pequeño pero poderoso script llamado “<a href="http://book.cakephp.org/1.3/es/view/1522/Generaci%C3%B3n-de-C%C3%B3digo-con-Bake" target="_blank">Bake</a>” que nos permite “hornear” nuestra aplicación apartir de una base de datos simple. Bake puede crear tanto modelos, como vistas o controladores completamente funcionales, e incluso con scaffolding, sin que el desarrollador deba escribir una sola línea de código.</p>
<h2>Validaciones Integradas</h2>
<p>Los modelos de <em>Cake</em> reflejan las entidades y relaciones de la base de datos. Ademas, para cada campo de las tablas se pueden definir reglas de validación propias o utilizar las reglas predefinidas de <em>Cake</em>. En cada modificación o inserción de un registro, <em>Cake</em> validará todos los campos automaticamente (a menos que se indique lo contrario desde el controlador).</p>
<p>Entre las reglas de validación integradas de <em>Cake</em> están</p>
<ul>
<li><span style="font-family: Verdana,sans-serif;">Formato de fechas predefinidos y customizados</span></li>
<li><span style="font-family: Verdana,sans-serif;">Tarjetas de crédito</span></li>
<li><span style="font-family: Verdana,sans-serif;">Ips</span></li>
<li><span style="font-family: Verdana,sans-serif;">Valores monetarios</span></li>
<li><span style="font-family: Verdana,sans-serif;">Teléfonos y zip codes</span></li>
<li><span style="font-family: Verdana,sans-serif;">SSN&#8217;s</span></li>
<li><span style="font-family: Verdana,sans-serif;">Urls</span></li>
</ul>
<h2>Consultas Anidadas</h2>
<p>Para hacer una consulta a la base de datos en <em>Cake</em> no es necesario escribir ni una sola instrucción de base de datos. Mediante el método <em>find, </em>heredado en los modelos, se parametrizan las búsquedas de modo que simplemente se necesita crear un array con el detalle de la búsqueda.</p>
<p>En los modelos de Cake se definen las relaciones entre las distintas entidades de la base de datos. Gracias a esto, al hacer una consulta, Cake retorna los campos del registro asociado directamente a la busqueda, pero además puede incluir toda la información relacionada a dicho registro de la base de datos. Esta es una de las características que hacen más potente a Cake.</p>
<p>Por ejemplo, imaginemos que tenemos una galería web de imágenes.  Además cada imagen tiene usuario que es su propietario y puede estar asociada a múltiples comentarios de otros usuarios. Tendríamos entonces una base de datos compuesta por la tabla <em>imagenes</em>, la tabla <em>usuarios</em> y la tabla <em>comentarios</em>.  Al hacer una consulta de una imagen determinada en <em>Cake</em>, podríamos obtener un array con solamente los datos del registro de la imagen (utilizando el parámetro <em>recursive</em> en cero),  o también los datos del registro junto con los datos del usuario propietario y los comentarios (<em>recursive</em> en 1), o inclusive toda esta información junto con la información de los usuarios que escribieron cada comentario y las imágenes que estos hayan también subido al sitio.</p>
<h2>Saves Recursivos</h2>
<p>Por supuesto, si se pueden hacer consultas recursivas también se puede guardar información de esta forma. <em>Cake</em> simplemente necesita que se envíe como parámetro al método <em>saveAll</em> un hash en el cuál las llaves sean los nombres de los modelos y el valor de cada entrada sea un array con los campos que se quieren salvar. <em>Cake</em> automáticamente guardará los registros y actualizará las llaves foráneas de todos los modelos involucrados según se especifique en los modelos.</p>
<p>Es importante destacar que, como explicamos anteriormente, <em>Cake</em> corre automáticamente las validaciones incluidas en los modelos al guardar información en la base de datos. Al hacer un save recursivo, <em>Cake</em> trabaja en modo transacción, es decir, valida todos los modélos involucrados y solamente si todos son válidos realiza la operación en la base de datos. Esto ayuda obviamente a evitar muchas inconsistencias y hace a <em>Cake</em> muy robusto.</p>
<h2>Otras cosas interesantes</h2>
<p>Como todo buen framework, Cake permite crear temas completamente independientes del resto del proyecto. Los temas están conpuestos de archivos .ctp (Cakephp template), y todos los archivos javascript, css o imágenes que se requieran en los mismos. Su estructura es sencilla, lo cual permite que, por ejemplo, un diseñador pueda trabajar en ellos sin afectar el resto del proyecto ni requerir de conocimientos de programación.</p>
<p>Cake también ofrece la posibilidad de utilizar <em>helpers</em> en las vistas, ya sea que uno mismo los construya o que utlice los que Cake provee. Entre los más utilizados está el <em>Html Helper</em> y el <em>Form Helper</em>, que proveen funciones para generar cualquier etiqueta html o propiedades e inputs de un formulario con sus respectivas opciones.</p>
<p>Por ejemplo, unas pocas instrucciones como:</p>
<pre class="wp-code-highlight prettyprint">
&lt;?php
	echo $this-&gt;Html-&gt;image('http://cakephp.org/img/cake-logo.png',array('title'=&gt;'CakePHP Logo'));
	echo $this-&gt;Html-&gt;tag('h2', 'Form de ejemplo', array('class' =&gt; 'welcome')); //h2
	echo $this-&gt;Form-&gt;create('User',array('action'=&gt;'edit')); //inicio del form
	echo $this-&gt;Form-&gt;hidden('id'); //input oculto
	echo $this-&gt;Form-&gt;input('first_name',array('size'=&gt;10));
	echo $this-&gt;Form-&gt;input('email',array('size'=&gt;10));

	//D-M-Y input (Cake reconoce el tipo de campo desde la BD)
	echo $this-&gt;Form-&gt;input('dob',array('label'=&gt;'Birthday')); 

	//Dropdown
	$options = array(0=&gt;'Please select an option',1=&gt;'Option 1',2=&gt;'Option 2');
	echo $this-&gt;Form-&gt;input('status',array('type'=&gt;'select','options'=&gt;$options)); 

	//link
	echo $this-&gt;Html-&gt;link('Cancel',array('action'=&gt;'cancel'),array('title'=&gt;'Cancel'));
	echo $this-&gt;Form-&gt;submit(); //Botón de submit
	echo $this-&gt;Form-&gt;end(); //cierre del form
?&gt;
</pre>
<p>pueden generar el siguiente formulario:<br />
<a href="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/02/cakeform2.png"><img class="aligncenter size-full wp-image-1116" title="Ejemplo de formulario generado con CakePHP" src="http://www.intergraphicdesigns.com/blog/wp-content/uploads/2012/02/cakeform2.png" alt="Ejemplo de formulario generado con CakePHP" width="719" height="519" /></a></p>
<p>Además Cake permite que el desarrollador escriba sus propios componentes. Es decir, una clase de Cake que puede ser utilizada en diferentes controladores y que puede aprovechar toda la maquinaria de Cakephp. Pero también, Cake acepta código de terceros que no esté en &#8220;formato Cake&#8221; y que igualmente puede ser usado en cualquier controlador o vista, conocidos como <em>plugins</em> (por ejemplo el TinyMCE puede ser usado como un plugin).</p>
<h2>Más información</h2>
<p>Existe muchísimo más que hablar de Cake. Por lo mismo Cake goza de una gran y creciente comunidad de desarrolladores que facilitan la consulta y el aprendizaje del framework.</p>
<p><a title="The Cookbook" href="http://book.cakephp.org" target="_blank">The Cookbook</a> es la documentación de Cakephp, pero a su vez es una comunidad abierta en donde cualquier desarrollador puede dejar su aporte o mejorar los de otros. También existe <a title="The Bakery" href="http://bakery.cakephp.org/" target="_blank">The Bakery</a>, otra comunidad donde desarrolladores postean todo tipo de información sobre Cakephp, desde tutoriales y noticias hasta componentes, plugins, helpers, controladores, modelos, etc.</p>
<p>Además existen <a title="Google Groups" href="http://groups.google.com/group/cake-php?pli=1" target="_blank">grupos de Google</a>, tutoriales en Youtube y mucha más información que puede encontrarse en el sitio web de <a title="Cakephp" href="http://cakephp.org/" target="_blank">Cakephp</a>.</p>
<p><em>¿Es PHP el mejor framework disponible actualmente?</em></p>
<p>Existen diversos frameworks para desarrollo en PHP, cada uno con sus ventajas y desventajas. Tal como mencionamos al inicio del artículo, nuestra empresa ha desarrollado exitosamente varias aplicaciones PHP a la medida utilizando CakePHP como framework con buen suceso los últimos dos años, no dudamos recomendarlo por esta misma razón. Ahora bien, recientemente también ha ganado mucha popularidad el framework Yii que igualmente nos resulta interesante y aporta una serie de ventajas. Recomendamos al lector aprender también sobre sus bondades, de manera que conozca todas las opciones disponibles para la toma de decisión sobre el framework a utilizar en sus proyectos.</p>
<p>En caso de seleccionar Cake, esperamos que la experiencia compartida en esta artículo les sea de gran utilidad. ¡Happy Baking!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intergraphicdesigns.com/blog/2012/02/19/cakephp-un-framework-para-que-desarrollar-en-php-sea-un-queque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

