<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4714735783718459057</atom:id><lastBuildDate>Thu, 12 Nov 2009 18:04:00 +0000</lastBuildDate><title>Crear paginas WEB</title><description>Consejos, trucos y noticias respecto a la creación de páginas web, desde el lado cliente o el lado servidor: HTML, CSS, Javascript, DHTML, PHP y MySQL.</description><link>http://crear-paginas-web.blogspot.com/</link><managingEditor>noreply@blogger.com (Usher web)</managingEditor><generator>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/crear-paginas-web" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-3384595231852287181</guid><pubDate>Mon, 05 Oct 2009 04:18:00 +0000</pubDate><atom:updated>2009-11-03T20:58:59.010-07:00</atom:updated><title>class_SRR_database_sim :: mi base de datos en PHP</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Hacía mucho tiempo que quería compartir con vosotros mi "clase de base de datos" que llevo trabajándome en PHP desde hace ya 3 años largos! La idea nació de la necesidad de almacenar información para una aplicación web de un amigo sin poder usar MySQL ni otro tipo de base de datos tradicional, porque su plan de hosting era el más básico :S&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por fin, después de este tiempo, la base de datos ya está más o menos madura como para compartirla con otros. Lo que más me ha costado es darle propiedades de no "corruptibilidad" por coincidencia de dos threads PHP sobre la misma tabla de datos. Es decir, que ahora por fin la base de datos bloquea el acceso de lectura/escritura cuando algún "thread" está ESCRIBIENDO sobre alguna tabla. De esta forma no puede ocurrir que alguien empiece a leer una tabla cuando alguien la tiene a "medio escribir". Lo cuál aunque parezca muy improbable, empieza a volverse probable en cuanto la base de datos aumenta de tamaño ;)&lt;br /&gt;&lt;br /&gt;Queda mucho por hacer, así que la he colgado como proyecto opensource en INDEFERO. Aquí tenéis el enlace:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://imasdeweb.indefero.net/p/class-SRR-database-sim" target="_blank"&gt;http://imasdeweb.indefero.net/p/class-SRR-database-sim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sois programadores y ya sabéis que cualqueir software siempre es mejorable, pero en fin, si no publico nunca ninguna versión el progreso de la misma irá tan lento como hasta ahora. Y confío que ahora una vez que alguien empieza a descargarla y usarla pueda tener feedbacks constructivos :))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Resúmen de características&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(102, 102, 102);"&gt;&lt;li&gt;No requiere en el servidor más que tener PHP instalado&lt;/li&gt;&lt;li&gt;Para empezar a usarla solo hay que copiar el directorio de la base de datos en donde más te convenga y tantas "instancias" como quieras.&lt;/li&gt;&lt;li&gt;Ocupa muy poco. Estando vacía menos de 50kb.&lt;/li&gt;&lt;li&gt;Lleva un archivo admin3.php al que puedes llamar para gestionar tu base de datos de forma básica online (al estilo phpmyadmin pero muuuuuho más humilde, jejejeje).&lt;/li&gt;&lt;li&gt;Los registros de cada tabla se almacenan en un archivo de texto plano en el mismo directorio, con lo cuál solo necesitas darle permisos de escritura al directorio ;)&lt;/li&gt;&lt;li&gt;La clase ofrece toda una serie de sencillos métodos del tipo: crear/modificar/eliminar tabla y crear/modificar/seleccionar/eliminar registros&lt;/li&gt;&lt;li&gt;Los campos de cada tabla pueden contener ilimitados caracteres (olvídate por fin de definir tipo y longitud de campo).&lt;/li&gt;&lt;li&gt;Las consultas (o "queries") no se escriben como en SQL en una cadena de texto y un chingo de comillas, sino que son llamadas parametrizadas usando siempre arrays ;)&lt;/li&gt;&lt;li&gt;Hacer un backup o migrar a otro hosting es tan fácil y rápido como "copiar y pegar el directorio"&lt;/li&gt;&lt;li&gt;Como no es necesario ejecutar un segundo servidor (por ejemplo el de MySQL) sino solamente leer y escribir en archivos de texto plano desde el PHP, la velocidad de respuesta es rapidísima (comparada con MySQL) para tablas con menos de 5.000 registros&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cosas que no tiene&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(102, 102, 102);"&gt;&lt;li&gt;índices&lt;/li&gt;&lt;li&gt;vínculos entre tablas&lt;/li&gt;&lt;li&gt;(un montón de cosas... jejejeje)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;En fin, espero que lo pruebes y me digas qué te pareció. Y bueno, si además eres programador... bueno, una ayudita estaría genial!!! Sinceramente, aunque nadie más ponga ni una línea de código en este proyecto, ya estoy muy contento de compartir por primera vez algo realmente mío :)))) le debo tanto a la comunidad de programadores en general... !!!! me siento bien retornando algo de mi parte.&lt;br /&gt;&lt;br /&gt;Por cierto, esta clase de base de datos es la que utilizo como pilar de mi CMS, el cuál llevo construyendo y utilizando desde hace también 3-4 años! muy prontito también lo publicaré como opensource, porque considero que a alguien le puede ir bien. Un CMS más, verdad?! jajajaja... pero en fin.. no os lo creeréis, pero ninguno de los CMS que habían en aquel entonces me venían bien! o eran muy complicados para el programador (si necesitaba hacer cambios en la funcionalidad del mismo) o bien tenían un panel de administración bastante complejo para el nivel de mis clientes. Conclusión: acabé programando mi propio CMS. La ventaja: si necesito cualquier cambio lo tengo en un instante. Y si aparece algún bug, enseguida sé de dónde viene ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Websites funcionando que usan mi CMS y la susodicha base de datos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para que veáis que tanto la base de datos como el CMS funcionan a las mil maravillas, aquí os dejo el enlace a unas cuantas de mis páginas que los usan. Y las dos primeras os puedo asegurar que tienen tablas con más de 1.000 registros!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.supertransfers.com/" target="_blank"&gt;http://www.supertransfers.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fundaciomontblanc.org/colonies" target="_blank"&gt;http://fundaciomontblanc.org/colonies&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dracdor.es/" target="_blank"&gt;http://dracdor.es&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Para que veáis que tanto la base de datos como el CMS funcionan a las mil maravillas, aquí os&lt;br /&gt;Un saludo!!&lt;br /&gt;SERGI&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Actualizaciones posteriores&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;versión 3.2 (3-NOV-2009): se corrigió un error en el método de DELETE_TABLE, y se añadieron unos archivos (test.htm y test.php) para hacer benchmark de acceso simultaneo desde diferentes navegadores (solo para uso de desarrollo de la clase).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-3384595231852287181?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/P0EGScFSGRc/classsrrdatabasesim-mi-base-de-datos-en.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/10/classsrrdatabasesim-mi-base-de-datos-en.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-580568948619972290</guid><pubDate>Sun, 20 Sep 2009 05:00:00 +0000</pubDate><atom:updated>2009-09-19T22:29:53.159-07:00</atom:updated><title>modem 3G Nokia CS-10 en Ubuntu</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;El primer modem 3G de Nokia fue el Nokia Internet Stick CS-10, y según ponen en sus especificaciones (http://europe.nokia.com/find-products/accessories/all-accessories/home-and-office/imaging/nokia-internet-stick-cs-10), no es compatible con Linux. Sin embargo, eso no es cierto: yo he podido instalarlo después de leer y buscar por internet un día entero, y hacer mil y una pruebas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sé que la temática de este artículo se sale de la habitual en mi blog (desarrollo web), así que espero que mis lectores habituales me perdonen por incluirlo, pero he visto imprescindible hacerlo porque me ha llevado muchas horas gastadas para hacer algo tan sencillo, y creo que debe ser compartido. Y este blog es mi principal "ventana al mundo" ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Principal problema: reconocer el stick como MODEM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El primer problema es que al introducir el modem USB en la PC es reconocido como unidad de almacenamiento de tipo CD-ROM, porque este Stick contiene una pequeña memoria fija de 80Mb con software para Windows.&lt;br /&gt;&lt;br /&gt;Después de leer en innumerables blogs y foros las más variopintas formas de "evitar" que Ubuntu reconozca al stick como memoria en lugar de cómo modem, descubrí ACCIDENTALMENTE (sí, sí... accidentalmente) que la solución al problema es SENCILLÍSIMA:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;1. introduce el stick en la ranura USB&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;2. ubuntu te lo reconoce como unidad de CD-ROM y lo monta &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;3. te habrá aparecido un icono en el Escritorio o en Nautilus que se llama "Nokia modem", pero que no muestra ningún archivo (curiosamente no se ven los archivos que contiene... cosa que no entiendo ¿? porque en Windows se ven sin problema)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;4. haz clic sobre el icono con el botón secundario del mouse y escoge la opción "EXPULSAR".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;5. "mágicamente" verás como la "unidad" es "desmontada" y PLIS: se enciende de forma intermitente una luz naranja en el modem, bingo !! tu modem acaba de ser reconocido y activado!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es importante que destaque que no sirve solamente "desmontar" la unidad. Eso lo estuve haciendo repetidas veces pero no servía para que el modem fuera detectado. Esto no sucedió hasta que no escogí la opción "expulsar" (increible, no?).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Segundo problema: configurar la &lt;/span&gt;&lt;img src="http://www.blogger.com/post-edit.g?blogID=4714735783718459057&amp;amp;postID=580568948619972290" height="1" width="1" /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;conexión con Telcel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una vez reconocido el modem como tal, el segundo y último paso es configurar la conexión con Telcel. Lo cuál es sencillo para versiones de Ubuntu a partir de la 8.10 en adelante, porque el Network Manager lleva un asistente para conexiones de "banda ancha móvil".&lt;br /&gt;&lt;br /&gt;Si tienes una versión de Ubuntu anterior a la 8.10 (en mi caso en mi netbook tenía Ubuntu Remix basado en la 8.04), tampoco debes preocuparte, solamente tienes que actualizar tu Network manager:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;1. debes añadir a tus orígenes de software los siguientes repositorios:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;deb http://ppa.launchpad.net/network-manager/ubuntu hardy main&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;deb-src http://ppa.launchpad.net/network-manager/ubuntu hardy main&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;puedes hacerlo editando directamente el archivo que contiene la lista de repositorios&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;sudo gedit /etc/apt/sources.list&lt;/span&gt; &lt;span style="color: rgb(51, 102, 102);"&gt;(usa este comando desde la consola)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;o bien abrir la aplicación "Gestor de paquetes Synaptic" (En Sistema / Administración) y allí ir al menú Configuración / Repositorios y en la pestaña "Software de terceros" puedes "Añadir" nuevos repositorios.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;2. añade también la clave pública para estos repositorios. Para ello ejecuta en la consola este comando:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;sudo aptitude update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;y te va a dar un error porque le falta la clave pública del repositorio que acabamos de añadir. Te has de fijar bien en el mensaje de error que te aparezca, que será del tipo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;W: GPG error: http://ppa.launchpad.net intrepid Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;5DC4E17435661D98&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;entonces ejecuta este otro comando:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg --keyserver subkeys.pgp.net --recv &lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;NO_PUBKEY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;en donde en lugar de NO_PUBKEY has de escribir tu clave (en mi ejemplo: 5DC4E17435661D98), y entonces la consola te devolverá algo como esto:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg: solicitando clave 35661D98 de hkp servidor subkeys.pgp.net&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg: /home/ubuntu/.gnupg/trustdb.gpg: se ha creado base de datos de confianza&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg: clave 35661D98: clave pública "Launchpad PPA for GNOME Do Testers" importada&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg: Cantidad total procesada: 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg: importadas: 1 (RSA: 1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;a continuación ejecuta este otro comando:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gpg --armor --export 5DC4E17435661D98 | sudo apt-key add -&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;(obviamente escribiendo tu NO_PUBKEY), y si todo va bien la consola te devolverá un "&lt;span style="color: rgb(255, 0, 0);"&gt;Ok!&lt;/span&gt;".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;3. desde consola actualiza el paquete de tu network manager:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;sudo aptitude install network-manager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;4. una vez actualizado, cargar el "gestor de actualizaciones" desde el menú del Escritorio (Sistema / Administración), y te detectará que puede actualizar 3 paquetes relacionados con el network-manager, dos de ellos justamente relacionados con las conexiones móviles, como una base de datos con las características de los diferentes operadores telefónicos de una gran lista de países ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;5. por último, aunque no es necesario, te recomiendo que reinicies la computadora&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bueno, así que suponiendo que ya tengas bien actualizado tu Network Manager, el resto es muuuuy fácil:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;1. haz clic con el botón secundario del ratón sobre del pequeño icono del gestor de redes que hay en tu barra (panel systray) junto al reloj y la fecha (normalmente).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;2. escoge la opción "editar las conexiones"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;3. ves a la pestaña "Banda ancha móvil" y haz clic en el botón "Añadir"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;4. si tienes la versión actualizada del network manager se habrá iniciado un "asistente" que te va a guiar en el proceso de creación de la conexión móvil a internet. Además te va a preguntar por el país y te va a mostrar los operadores telefónicos para los que tiene datos en ese país. Tú deja todas las opciones de conexión que ponga el asistente, no hace falta que toques nada (al menos en el caso de Telcel-México). Como mucho, marca la casilla que pone: "Conectar automáticamente", porque así Ubuntu se conectará a esa red móvil en cuanto enchufes el modem USB 3G ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;5. ya solo tienes que encajar tu stick en la ranura USB y tiene que funcionar! en todo caso, si ya lo tenías puesto, tendrás tal vez que retirarlo y volver a seguir los pasos del inicio ("expulsarlo" una vez sea reconocido por ubuntu como CD-ROM). O si eso no te va bien, mejor reinicia de nuevo la compu :( he experimentado que si introduzco y extraigo el modem USB más de una vez en una misma sesión, no siempre es reconocido adecuadamente ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bueno, espero que estos consejos hayan servido a más de uno... espero que a muchos!!! lo más chistoso del tema es que acabo de recibir la respuesta del servicio de apoyo al cliente de Nokia (les pregunté sobre cómo usar sus modems USB en Linux), y lo único que dicen (me han respondido 2 personas diferentes) es la "ODIOSA" letanía de "Le recordamos que tal como puede leer en la página web de especificaciones del CS-10, este equipo solo es compatible con el sistema operativo Windows o Mac Os". ¿Increible, no? En fin, una vez publicado esta breve guía se la voy a enviar en respuesta a su "estúpida" respuesta de "ayuda". Porque además, cuando les escribí pidiendo ayuda les explicité que lo único que necesito es que me dieran un link en donde poder leer ALGO de documentación de como instalar en Linux alguno de sus modems USB 3G que SÍ SON COMPATIBLES CON LINUX (a partir de la CS-15). En fin...&lt;br /&gt;&lt;br /&gt;Por cierto, si alguno/a de vosotros no conoce aún Ubuntu... le recomiendo que lo pruebe! lo recomiendo como usuario y como programador. Como veis, es un software totalmente ya maduro para el trabajo de los profesionales de la informática ;)&lt;br /&gt;&lt;br /&gt;Un saludo,&lt;br /&gt;SERGI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-580568948619972290?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/4oNnHrwxRqU/modem-3g-nokia-cs-10-en-ubuntu.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/09/modem-3g-nokia-cs-10-en-ubuntu.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-8062948287875134198</guid><pubDate>Mon, 06 Jul 2009 18:56:00 +0000</pubDate><atom:updated>2009-07-06T12:10:07.814-07:00</atom:updated><title>Di NO a las PATENTES DE SOFTWARE</title><description>&lt;p style="color:#0c0;"&gt;Actualmente (2008-2009) se está desarrollando una campaña de recogida de firmas para solicitar al Parlamento Europeo medidas más contundentes que erradiquen de una vez por todas las patentes de software en Europa. Te invito a que te informes de porqué este cambio nos conviene no sólo a los informáticos, sino también a la industria del software en general y de forma indirecta a toda la sociedad. Mientras que las patentes sólo benefician el "lucro" a corto plazo de un número contado de empresas y retrasan enormemente la competitividad y el progreso del sector informático, y de rebote de toda la sociedad!&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Te invito pues a:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Visitar &lt;a href="http://petition.stopsoftwarepatents.eu/211002065663/" target="_blank"&gt;la página oficial de recogida de firmas&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dejar allí tu firma y leer alguno de los estudios científicos que hay en torno al tema&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Divulgar este asunto, colocando un banner en algunas de tus webs ;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Incluir un artículo en tu blog&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Banners&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Para que lo tengas más fácil, aquí te dejo el código para insertar un banner horizontal y otro vertical:&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color:#eee;border:1px #ccc solid;padding:11px;"&gt;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://petition.stopsoftwarepatents.eu/211002065663/&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stopsoftwarepatents.eu/media/ssp-732-121.gif&amp;quot; alt=&amp;quot;stopsoftwarepatents.eu petition banner&amp;quot; width=&amp;quot;580&amp;quot; height=&amp;quot;96&amp;quot; style=&amp;quot;border:none;&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;br /&gt; &lt;a target="_blank" href="http://petition.stopsoftwarepatents.eu/211002065663/"&gt;&lt;img src="http://stopsoftwarepatents.eu/media/ssp-732-121.gif" alt="stopsoftwarepatents.eu petition banner" width="580" height="96" style="border:none;" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#eee;border:1px #ccc solid;padding:11px;"&gt;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://petition.stopsoftwarepatents.eu/211002065663/&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://petition.stopsoftwarepatents.eu/banner/211002065663/ssp-240-400.gif&amp;quot; alt=&amp;quot;stopsoftwarepatents.eu petition banner&amp;quot; width=&amp;quot;240&amp;quot; height=&amp;quot;400&amp;quot; style=&amp;quot;border:none;&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;br /&gt; &lt;a target="_blank" href="http://petition.stopsoftwarepatents.eu/211002065663/"&gt;&lt;img src="http://petition.stopsoftwarepatents.eu/banner/211002065663/ssp-240-400.gif" alt="stopsoftwarepatents.eu petition banner" width="240" height="400" style="border:none;" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-8062948287875134198?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/CBQyPca3xPI/di-no-las-patentes-de-software.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/07/di-no-las-patentes-de-software.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-5016950742537406549</guid><pubDate>Mon, 08 Jun 2009 20:17:00 +0000</pubDate><atom:updated>2009-06-08T14:04:32.241-07:00</atom:updated><title>Comillas dobles y simples en HTML "input text"</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Si eres desarrollador de aplicaciones web, sabrás ya que el tema de las comillas (simples y dobles) es siempre una fuente de problemas hasta que no descubres cómo lidiar con ellas. Voy a resumir ahora cuatro cosas que te van a funcionar siempre ;) si trabajas con PHP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El problema principal es cuando queremos definir una cadena de texto que contenga unas comillas. Es un problema en sí mismo porque las cadenas de texto generalmente se delimitan usando comillas.&lt;br /&gt;&lt;br /&gt;La mayoría de las veces es posible insertar comillas en una cadena de texto "escapando" esas comillas, es decir, usando un símbolo de "escape" (usualmente es la barra invertida \) delante de las comillas a escapar. Por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type='text' value='L\'Hospitalet' /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sin embargo, este otro ejemplo (cuando delimitan comillas dobles) no funciona:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type="text" value="un \"gran\" hombre" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para incluir comillas dobles dentro de comillas dobles en HTML, tenemos que usar "carácteres especiales", así:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type="text" value="un &amp;amp;quot;gran&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;quot;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; hombre" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La última cuestión es cómo hacer todo esto de manera fácil en PHP. Esto sería un ejemplo de cómo generar desde PHP el código HTML anterior suponiendo que la variable &lt;span style="color: rgb(51, 51, 255);"&gt;$value&lt;/span&gt; contenga una cadena con comillas dobles como &lt;span style="color: rgb(51, 51, 255);"&gt;un "gran" hombre&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;input type=\"text\" value=\"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;.htmlspecialchars(&lt;/span&gt;$value&lt;span style="color: rgb(0, 153, 0);"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;\" /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como puedes suponer, la función &lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;htmlspecialchars &lt;/span&gt;&lt;/span&gt;transforma las comillas dobles (") en el código &lt;span style="color: rgb(0, 153, 0);"&gt;&amp;amp;quot;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Otro caso que podemos necesitar es cuando trabajamos con comillas simples (a mí me gusta más, aunque ya sé que no es la opción recomendada por el W3C):&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;input type='text' value='&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;.addslashes(&lt;/span&gt;$value&lt;span style="color: rgb(0, 153, 0);"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;";&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esto produciría esta salida (que hemos puesto antes como ejemplo):&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type='text' value='L\'Hospitalet' /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y como te decía, a mí me gusta más porque si te fijas en el código del echo en PHP precisa de menos símbolos de escape, y por tanto el código HTML generado es más fácilmente "copiable" dentro de una cadena delimitada por comillas dobles en PHP. Pero ése es otro tema ;)&lt;br /&gt;&lt;br /&gt;Estoy seguro de que a más de uno le habrá ayudado este breve resúmen :)))&lt;br /&gt;&lt;br /&gt;De todas formas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;posiblemente se me escapa algo, pues continuamente salen cosas nuevas o uno descubre nuevos "trucos"&lt;/li&gt;&lt;li&gt;existen artículos mucho más extendidos y con más ejemplos. Éste me gustó particularmente para gente que se incia en PHP, pues da un repaso más a fondo del uso de comillas en este lenguaje de programación: http://www.dxpro.es/index.php?topic=181.0&lt;/li&gt;&lt;li&gt;si detectas que he cometido algún error en mis ejemplos o en mi explicación, please, comenta aquí abajo y lo corregiré para ayuda de otros :)) Gracias!&lt;/li&gt;&lt;/ul&gt;Un saludo!&lt;br /&gt;SERGI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-5016950742537406549?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/BDkHSNZlEMQ/comillas-dobles-y-simples-en-html-input.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/06/comillas-dobles-y-simples-en-html-input.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-1363616533810187838</guid><pubDate>Thu, 28 May 2009 04:04:00 +0000</pubDate><atom:updated>2009-05-27T22:28:23.219-07:00</atom:updated><title>Cargar javascript desde JSON o AJAX con eval() en FF y execScript() en IE</title><description>&lt;span style="font-style: italic; color: rgb(0, 153, 0);"&gt;¿Estás desarrollando una aplicación web en la que usas JSON o AJAX para cargar dinámicamente datos? ¿Además necesitas cargar dinámicamente no solamente datos sino también código javascript para ser utilizado en la página? A continuación te expongo el modo de hacerlo para que funcione en FireFox 3.X y IE7 (casualmente, también funciona en IE6).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Voy a partir de la base de que utilizas jQuery para la consulta JSON o AJAX al servidor. Y me voy a centrar en la "carga" del código javascript. Pero obviamente, no importa la librería o código que uses para el JSON o AJAX. Hay muchísima literatura en internet sobre ese tema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo de carga de datos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Empezaré con un ejemplo de carga de datos tipo texto, que es lo más habitual. Y luego pondré un ejemplo de carga de código javascript.&lt;br /&gt;&lt;br /&gt;&lt;div   style="border: 1px solid rgb(204, 204, 204); padding: 11px; background-color: rgb(238, 238, 238);font-family:tahoma,sans-serif;font-size:12px;"&gt;&lt;br /&gt;function js_actualizar_top_webs(){&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt;var url_json = 'json_top_webs.php?mes='+$('#select_mes').val();&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt;$.getJSON(&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  url_json,&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  function(datos){&lt;br /&gt;&lt;span style="margin-left: 45px; color: rgb(204, 0, 0);"&gt;          $('#div_top_webs').html(datos.table_webs);&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  }&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Imaginemos que en nuestra web de ejemplo tenemos un control tipo lista desplegable (select) que permite al usuario escoger un mes del año, y queremos que nuestra página recargue un &lt;span style="color: rgb(204, 0, 0);"&gt;&amp;lt;div id="'div_top_webs'"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; con la lista del top 10 de webs de ese mes. Es un ejemplo clásico de recarga de datos dinámica usando JSON o AJAX.&lt;br /&gt;&lt;br /&gt;Para ello construimos una función llamada &lt;span style="color: rgb(0, 0, 153);"&gt;js_actualizar_top_webs&lt;/span&gt;, que llamaremos al cambiar el valor de ese select. Esta función tal como está definida en el código de ejemplo hace una llamada JSON mediante el objeto $ de jQuery y cuando los datos se hayan recibido por completo ejecutará el código en rojo, en dónde "&lt;span style="color: rgb(204, 0, 0);"&gt;datos&lt;/span&gt;" es un objeto de javascript (no un array!!) que contiene diferentes "propiedades" con los datos enviados. En este caso, suponemos que el archivo de PHP que ha sido llamado devuelve un string llamado "&lt;span style="color: rgb(0, 0, 153);"&gt;table_webs&lt;/span&gt;" que contiene el código HTML de un "&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;" con la lista de webs que queremos mostrar.&lt;br /&gt;&lt;br /&gt;Para "obtener" el valor de ese string HTML simplemente llamamos a &lt;span style="color: rgb(204, 0, 0);"&gt;datos.table_webs&lt;/span&gt; y lo colocamos como "contenido" de "&lt;span style="color: rgb(204, 0, 0);"&gt;div_top_webs&lt;/span&gt;" mediante el método&lt;span style="color: rgb(204, 0, 0);"&gt; .html()&lt;/span&gt; de jQuery. ¿Sencillo, no?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Ejemplo de carga de código javascript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bueno, vamos ahora a algo que "cuesta" un poquitín más. Bueno, de hecho a mí me ha hecho gastar casi 8 horas de cansada búsqueda por internet y de leer mucho y probar mucho, hasta llegar a lo que te voy a poner aquí! ;)&lt;br /&gt;&lt;br /&gt;Abajo tienes el código anterior ligeramente cambiado: hemos añadido unas líneas de código más, con el fin de poder cargar y ejecutar un código de javascript elaborado en el lado servidor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div   style="border: 1px solid rgb(204, 204, 204); padding: 11px; background-color: rgb(238, 238, 238);font-family:tahoma,sans-serif;font-size:12px;"&gt;&lt;br /&gt;function js_actualizar_top_webs(){&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt;var url_json = 'json_top_webs.php?mes='+$('#select_mes').val();&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt;$.getJSON(&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  url_json,&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  function(datos){&lt;br /&gt;&lt;span style="margin-left: 45px; color: rgb(0, 0, 204);"&gt;          $('#div_top_webs').html(datos.table_webs);&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left: 45px; color: rgb(204, 0, 0);"&gt;          if (window.execScript) window.execScript(datos.script_leyenda);&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left: 45px; color: rgb(204, 0, 0);"&gt;else window.eval(datos.script_leyenda);&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;&lt;/span&gt;  }&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;&lt;/span&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puedes ver en rojo dos nuevas líneas que corresponden a una sentencia condicional, y esto es necesario para ejecutar un código u otro según estemos en FireFox o en Internet Explorer (como mínimo estos dos navegadores). Para ambos casos el código de javascript pasado es el mismo y lo recuperamos de nuevo mediante jQuery con la propiedad &lt;span style="color: rgb(204, 0, 0);"&gt;datos.script_leyenda&lt;/span&gt; (que habremos rellenado desde el PHP con el código javascript que necesitemos ejecutar en nuestra web).&lt;br /&gt;&lt;br /&gt;La diferencia radica en que &lt;b&gt;Internet Explorer ejecutará el código de javascript mediante el método &lt;span style="color: rgb(204, 0, 0);"&gt;window.execScript()&lt;/span&gt;&lt;/b&gt;, mientras que &lt;b&gt;FireFox ejecutará el código al usar el método &lt;span style="color: rgb(204, 0, 0);"&gt;window.eval()&lt;/span&gt;&lt;/b&gt;, en ambos casos pasando como argumento el código javascript que queremos ejecutar.&lt;br /&gt;&lt;br /&gt;Otro aspecto importante y que tal vez pase desapercibido a primera vista es que en ambos casos ejecutamos sendos métodos sobre el objeto &lt;span style="color: rgb(204, 0, 0);"&gt;window&lt;/span&gt;. Eso es fundamental (me llevó más de una hora leyendo descubrirlo), para que el código javascript a ejecutar pase a estar "disponible" desde otros "ámbitos" de la misma página. De esta forma, si por ejemplo, dentro de ese código cargado dinámicamente definimos una función llamada "&lt;span style="color: rgb(204, 0, 0);"&gt;js_mostrar_leyenda()&lt;/span&gt;", si queremos usarla en el resto de la página, deberemos llamarla así: &lt;span style="color: rgb(204, 0, 0);"&gt;window.js_mostrar_leyenda();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estoy seguro de que a más de uno le va a ir de perlas estas 3 líneas de código! al menos a mí me va a dar mucha potencia de programación con JSON y javascript. Y sinceramente, cuesta encontrar información "actualizada" en internet. Ya sabes que este tipo de información técnica (especialmente cross-browser) se desfasa con facilidad, con la salida de nuevas versiones de navegadores continuamente!! Así que lo que es válido hoy deja de serlo al cabo de 2 años :(&lt;br /&gt;&lt;br /&gt;Te invito a que comentes cualquier sugerencia que tengas al respecto, eh! seguro que a todos nos interesa (temas de compatibilidad, por ejemplo). Si probando el código ves que te funciona en otros navegadores, por favor, coméntalo brevemente ;)&lt;br /&gt;&lt;br /&gt;Un saludo!!!&lt;br /&gt;SERGI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-1363616533810187838?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/Ru0XEUwtMnM/cargar-javascript-desde-json-o-ajax-con.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/05/cargar-javascript-desde-json-o-ajax-con.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-7499732487715017383</guid><pubDate>Thu, 21 May 2009 23:28:00 +0000</pubDate><atom:updated>2009-08-08T21:02:05.248-07:00</atom:updated><title>FireFox, solución a "Ha escogido abrir..."</title><description>Este artículo es un poco técnico, pero me veo obligado a publicarlo para compartir la solución a un problema que creo que es más común de lo que parece y sobre el que he encontrado muy poco escrito. Pienso que los desarrolladores de aplicaciones web que lo lean me lo agradecerán. Tal vez no te haya ocurrido nunca, pero ya llegará el día, jejejeje...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Signos del problema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Cuando se intenta acceder a ciertas páginas de la aplicación, el navegador tarda en responder como casi un minuto y luego -al menos en FireFox- aparece una ventana en la que el mensaje dice "Ha escogido abrir este archivo..." y te da la opción de guardar el "supuesto" archivo PHP en lugar de mostrar el contenido de la web. Si pruebas a visitar la misma página desde IE la página quedará completamente en blanco y no mostrará nada.&lt;br /&gt;&lt;br /&gt;- Es posible que algunas páginas de la web si vayan, porque sean HTML, pero también algunas de PHP también pueden verse mientras otras no. Después de leer el artículo entero entenderás porqué.&lt;br /&gt;&lt;br /&gt;- El problema te ocurre tanto si visitas las web desde tu PC o desde cualquier otro. Aunque ten cuidado con las copias guardadas en caché!!! te pueden jugar "bromas pesadas": hacerte creer que una página se ve bien cuando realmente no es así, o al revés! Para estar seguro siempre de que el navegador te muestra la página devuelta por el servidor te aconsejo refrescar la página con CTRL+F5.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Causa del problema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Tu aplicación web está teniendo algún "problema" en algún punto de sus "cálculos": en algún lugar del código se entra en una especie de "bucle infinito" que deja a la aplicación "pensando indefinidamente". Por esta causa el servidor da una respuesta "incoherente" al navegador, o digamos que el navegador no sabe interpretar la respuesta (¿curioso, verdad?).&lt;br /&gt;&lt;br /&gt;- Por ejemplo, en mi caso se trataba de una clase que yo había programado para acceder a un archivo histórico, que cuando accede bloquea/desbloquea un archivo como señal de alerta para otros "hilos" de la aplicación, de que no pueden acceder en ese momento a la aplicación. La cuestión es que este sistema me funciona sin problemas (hasta ahora). Pero la empresa de hosting hizo una especie de restauración de backup en los servidores que debieron alterar los permisos de escritura sobre el directorio en el que está ubicado el archivo. En conclusión: mi aplicación se quedaba encallada en ese punto: intentando acceder a ese archivo permanentemente "bloqueado". Una vez que descubrí este fenómeno, la solución fue fácil: por FTP cambié los atributos del directorio para poderse escribir en él!&lt;br /&gt;&lt;br /&gt;- Sin embargo, mi caso es muy particular y entiendo que difícil de repetir por otros programadores. Pero no así el problema de fondo: dejar a la aplicación en "stand by" (o en bucle) hasta resolver algo irresoluble. Por ejemplo, entre los comentarios que he leído en otros foros, hay gente que le ha pasado exactamente lo mismo cuando su aplicación web intenta hacer un "fopen", que es una lectura de un archivo remoto con PHP. Lo que quiero decir es que si no te ha pasado todavía (como desarrollador web) es muy posible que te pueda pasar en breve. Sobretodo hoy en día en el que la programación con webservices y consultas remotas está tan a la orden del día ;)&lt;br /&gt;&lt;br /&gt;- [&lt;span style="font-weight:bold;"&gt;Nota añadida 8-ago-2009&lt;/span&gt;] Hoy me ha ocurrido otra vez un bucle de esos que me ocasionó el mismo error! Aunque esta vez, sabiendo que se trataba de un bucle infinito he ido haciendo "debugeo" hasta encontrar donde se me "colapsaba" la aplicación ;) El bucle era del tipo "función recursiva MAL HECHA":&lt;br /&gt;&lt;br /&gt;&lt;div style="border:1px #aaa solid;background-color:#eee;padding:11px;line-height:25px;"&gt;&lt;span style="font-weight:bold;"&gt;function mi_funcion(){&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left:50px;"&gt;  if (condicion)&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left:100px;"&gt;  return mi_funcion();&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left:50px;"&gt;  else&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left:100px;"&gt;   return 'a otra cosa mariposa';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Con lo cuál, en los casos en que "condición" es verdadero se llama de nuevo a la misma función, en un bucle infinito!! ¿Cuál fue esta vez mi error...? pues que en realidad cuando escribí el código quería llamar a una "mi_segunda_funcion()" en el caso de que "condicion" fuera verdadero... en fin, que me equivoqué con el nombre de la función!!! :((( es uno de esos errores del "copiar y pegar", del que no hace falta que diga mucho más, verdad?! jejeje...&lt;br /&gt;&lt;br /&gt;Bueno, en fin, cualquier comentario al respecto será bienvenido, si te ha pasado lo mismo o algo parecido. No dudes en comentarlo aquí... igual que tú has llegado hasta aquí con ese problema, detrás tuyo vendrá más gente a quien le podrá ser útil! no olvides escribir tu solución cuando la halles! ;)&lt;br /&gt;&lt;br /&gt;Un saludo!&lt;br /&gt;SERGI&lt;br /&gt;PD: está lloviendo!!! jajajaja... se agradece en este tórrido territorio (desierto de Sonora, México) en donde solo ayer estabamos a 43 grados (a finales de Mayo...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-7499732487715017383?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/6s8a_ebqk-w/firefox-solucion-ha-escogido-abrir.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/05/firefox-solucion-ha-escogido-abrir.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-6216697664569245407</guid><pubDate>Sat, 11 Apr 2009 03:11:00 +0000</pubDate><atom:updated>2009-04-10T21:06:42.251-07:00</atom:updated><title>Redirección interna con RewriteRule, RewriteCond y paso de variables PHP</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Llevo 5 horas leyendo, buscando, probando... y por fin hallé lo que necesitaba!!!!!!!! Lo más frustante ha sido encontrar apenas casos como el mío... lo cuál no acabo de entender pues creo que es de lo más normal. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi caso es el siguiente: tengo un site funcionando en inglés&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;http://midominio.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;y como es un CMS hecho en PHP tengo URLS del tipo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;http://midominio.com/index.php?pag=foro&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo que necesito es convertir mi CMS en multi-idiomas con los menos cambios posibles y de una forma amigable para usuarios y buscadores. ¿Creo que es algo muy generalizado, verdad? Por eso no entiendo el porque me ha costado encontrar referencias que me ayudaran. Tal vez he estado buscando mal ;)&lt;br /&gt;&lt;br /&gt;La solución que buscaba era la de poder tener URLS como&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;http://midominio.com/&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/index.php?pag=foro&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;que llevara "internamente" (es decir, sin que el visitante se dé cuenta... es decir, sin que camb ie la URL en su navegador) a esta otra URL&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;http://midominio.com/index.php?pag=foro&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;idioma=es&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De esta forma el visitante podría estar navegando siempre por el "subdominio" &lt;span style="font-weight: bold;"&gt;/es/&lt;/span&gt; pero en realidad la aplicación de PHP que es llamada es siempre la misma solo que se le pasa la variable idioma y de esta forma puede mostrar los contenidos adecuados! ;)&lt;br /&gt;&lt;br /&gt;La última condición que necesitaba cumplir es que el archivo PHP llamado fuera cualquiera y no solo index.php, y que las variables de la URL fueran cualesquiera y cuantas sean necesarias.&lt;br /&gt;&lt;br /&gt;Y en fin, después de 5 horas de lecturas y pruebas hallé el contenido del archivo .htaccess que tengo que poner en la raiz de ese dominio:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="border: 1px solid rgb(204, 204, 204); padding: 7px; background-color: rgb(238, 238, 238); color: rgb(102, 102, 102);"&gt;Options +FollowSymLinks&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteRule ^&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/$ $1&lt;span style="color: rgb(255, 0, 0);"&gt;?idioma=es&lt;/span&gt;&lt;br /&gt;RewriteRule ^&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;$ $1&lt;span style="color: rgb(255, 0, 0);"&gt;?idioma=es&lt;/span&gt;&lt;br /&gt;RewriteCond %{QUERY_STRING} ^&lt;span style="color: rgb(0, 0, 153);"&gt;([^/]+)&lt;/span&gt;&lt;br /&gt;RewriteRule ^&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/&lt;span style="color: rgb(0, 102, 0);"&gt;(.+)&lt;/span&gt;\.php$ &lt;span style="color: rgb(0, 102, 0);"&gt;$1&lt;/span&gt;.php?&lt;span style="color: rgb(0, 0, 153);"&gt;%1&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;idioma=es&lt;/span&gt;&lt;br /&gt;RewriteRule ^&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/&lt;span style="color: rgb(0, 102, 0);"&gt;(.+)&lt;/span&gt;$ &lt;span style="color: rgb(0, 102, 0);"&gt;$1&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;No quiero hacer un tutorial aquí del tema, porque sería larguísimo y además no tengo los conocimientos adecuados. Posiblemente incluso la sintaxis que he utilizado podría mejorarse. Pero voy a detallar lo poco que he entendido de estas líneas de código y su función:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;las dos primeras líneas son necesarias sí o sí si se quieren utilizar en APACHE estas reglas de redirección&lt;/li&gt;&lt;li&gt;la 3a y 4a líneas son para añadir "&lt;span style="color: rgb(255, 0, 0);"&gt;?idioma=es&lt;/span&gt;" a la URL cuando no menciona ningún archivo PHP: http://midominio.com/&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;&lt;/li&gt;&lt;li&gt;las líneas 5a y 6a van "ligadas". La primera "lee" el QUERY_STRING que son las variables $_GET que vienen después del "&lt;span style="color: rgb(0, 102, 0);"&gt;archivo&lt;/span&gt;.php?", y las insertamos en el output de la línea 6a como &lt;span style="color: rgb(0, 0, 153);"&gt;%1&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;la línea 7 es para que se redireccionen todas las demás URLS, esta vez sin añadir nada del idioma, como las imágenes o las hojas de estilo CSS.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Para el que quiera saber más, decir que las sentencias RewriteRule manejan siempre la sintaxis:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RewriteRule input output&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En donde input es una "expresión regular" (expresión que usa un lenguaje de comodines) que coincidirá solamente con algunas URLs concretas, y output es simplemente las URLS que finalmente debe construir y llamar Apache, utilizando normalmente "partes" del input. Esas partes son &lt;span style="color: rgb(0, 0, 153);"&gt;$1&lt;/span&gt;,&lt;span style="color: rgb(0, 0, 153);"&gt;$2&lt;/span&gt;,&lt;span style="color: rgb(0, 0, 153);"&gt;$3&lt;/span&gt;... (tal como se utilizan en la sintaxis del output), y se corresponden con el contenido de los diferentes paréntesis () que hay en la expresión regular del input.&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="border: 1px solid rgb(204, 204, 204); padding: 7px; background-color: rgb(238, 238, 238); color: rgb(102, 102, 102);"&gt;RewriteRule ^&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/&lt;span style="color: rgb(0, 102, 0);"&gt;(.+)&lt;/span&gt;\.php$ &lt;span style="color: rgb(0, 102, 0);"&gt;$1&lt;/span&gt;.php?&lt;span style="color: rgb(0, 0, 153);"&gt;%1&lt;/span&gt;&amp;amp;idioma=es&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;coincidirá con URLS del tipo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;es&lt;/span&gt;/&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;index&lt;/span&gt;.php&lt;span style="font-style: italic;"&gt;?&lt;span style="color: rgb(0, 0, 153);"&gt;pag=foro&lt;/span&gt; &lt;/span&gt;(&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;pag=foro&lt;/span&gt; sería el QUERY_STRING,&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;%1&lt;/span&gt;)&lt;blockquote&gt;&lt;/blockquote&gt;y será transformada en &lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;index&lt;/span&gt;.php?&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;pag=foro&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;idioma=es&lt;/span&gt;&lt;br /&gt;Como véis, el nombre del archivo php (&lt;span style="color: rgb(0, 102, 0);"&gt;index&lt;/span&gt;) es una variable! ;)&lt;br /&gt;y el QUERY_STRING también aunque se lee en una línea RewriteCond previa.&lt;br /&gt;&lt;br /&gt;La verdad es que el tema es un auténtico lío, jejeje... así que no dudo de que alguno de vosotros no haya entendido la mitad! Lo que si puedo aseguraros es que si queréis entender algo deberíais empezar por leer algún tutorial sobre el tema de .htaccess o de las expresiones regulares, que es de lo que va esto ;)&lt;br /&gt;&lt;br /&gt;Suerte!&lt;br /&gt;SERGI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-6216697664569245407?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/vZ9U5AyYIRc/redireccion-interna-con-rewriterule.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2009/04/redireccion-interna-con-rewriterule.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-7180320761863774000</guid><pubDate>Sun, 14 Dec 2008 04:04:00 +0000</pubDate><atom:updated>2008-12-13T21:45:30.292-07:00</atom:updated><title>Funciones y operadores en consultas MySQL</title><description>&lt;div style="color: rgb(0, 255, 0);"&gt;¿Necesitas consultar una tabla MySQL ordenada por un campo al que le aplicas una función? Por ejemplo, tal vez el tipo de datos de una columna es CHAR o VARCHAR, pero en realidad ahí almacenas "numeros decimales", y necesitas hacer un SELECT ordenado según el valor "decimal" de ese campo. En ese caso necesitarás conocer el "operador" MySQL adecuado ;)&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Vamos a ver un ejemplo. Supongamos que en mi tabla 'vehiculos' tengo 2 registros solamente con los siguientes campos (los dos del tipo VARCHAR) y valores:&lt;/p&gt;&lt;br /&gt;&lt;div   style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal;font-family:verdana;font-size:11px;"&gt;&lt;table cellpadding="1" cellspacing="0" syle='margin:2px;'&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: 2px solid rgb(68, 68, 68); width: 80px;"&gt;&lt;b&gt;vehiculo&lt;/b&gt;&lt;/td&gt;&lt;td style="border-bottom: 2px solid rgb(68, 68, 68); width: 80px;"&gt;precio&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="border-bottom: 1px solid rgb(204, 204, 204);"&gt;&lt;b&gt;v_1&lt;/b&gt;&lt;/td&gt;&lt;td style="border-bottom: 1px solid rgb(204, 204, 204);"&gt;120,44&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="border-bottom: 1px solid rgb(204, 204, 204);"&gt;&lt;b&gt;v_2&lt;/b&gt;&lt;/td&gt;&lt;td style="border-bottom: 1px solid rgb(204, 204, 204);"&gt;82,33&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Si yo ejecuto este query de MySQL:&lt;/p&gt;&lt;br /&gt;&lt;div face="verdana" size="11px" style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal;"&gt;SELECT * FROM vehiculos ORDER BY &lt;span style="color: rgb(204, 0, 0);"&gt;precio&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Entonces, al ser el campo precio de tipo VARCHAR, los registros se me ordenarán de forma alfabética de menor a mayor, quedando así:&lt;/p&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&lt;table border="0" cellpadding="1" cellspacing="0" syle='margin:2px;'&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style='width:80px'&gt;&lt;b&gt;v_1&lt;/b&gt;&lt;/td&gt;&lt;td style='width:80px'&gt;120,44&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;v_2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;82,33&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;que &lt;b&gt;no es lo que yo quería conseguir&lt;/b&gt;!!! Pues lo que yo quería obtener es los precios ordenados por su valor decimal, es decir, primero el vehiculo de precio=82,33. Entonces la solución pasa por utilizar el "operador" &lt;span style="font-weight: bold;"&gt;TRUNCATE(valor,num_decimales)&lt;/span&gt;, dónde puedo utilizar el nombre del campo 'precio' (sin las comillas) como valor, y poner un 2 en num_decimales, con lo que MySQL me ordenará los registros de mi tabla por el valor numérico de 2 decimales correspondiente al campo 'precio' ;)&lt;/p&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;SELECT * FROM vehiculos ORDER BY &lt;span style="color: rgb(204, 0, 0);"&gt;TRUNCATE(precio,2)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Igual que este operador, hay una lista bastante larga de operadores numéricos y de cadena para transformar los valores almacenados en los campos de nuestras tablas y que podemos insertar en nuestras consultas MySQL. Y no sólo en el parámetro ORDER BY, sino también en el WHERE on el SET o dónde sea!!!! :D&lt;/p&gt;&lt;br /&gt;&lt;p&gt;En la página oficial de MySQL &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/func-op-summary-ref.html" target="_blank"&gt;Operator and Function Reference&lt;/a&gt; encontraréis la lista completa y como se usa cada uno de ellos! Muy recomendable el echarle una lectura rápida... para al menos saber qué se puede y qué no se puede hacer, jejejeje...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-7180320761863774000?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/UHqoCkDo2HE/funciones-y-operadores-en-consultas.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/12/funciones-y-operadores-en-consultas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-3835223251694207619</guid><pubDate>Fri, 05 Sep 2008 15:59:00 +0000</pubDate><atom:updated>2008-09-10T01:36:53.847-07:00</atom:updated><title>Envía tus archivos encriptados con AES</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Hola amigos. Voy a contaros cómo podemos encriptar muy fácilmente un archivo para poder enviarlo (por email, ftp, etc...) de manera totalmente segura, es decir con la certeza de que nadie que no conozca la contraseña pueda leerlo!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Buscando por ahí he hallado que uno de los algoritmos de encriptación más populares se llama AES (&lt;a href="http://es.wikipedia.org/wiki/AES" target="_blank"&gt;Advanced Encryption Standard&lt;/a&gt;) y es tan seguro que lo utiliza &lt;a href="http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf" target="_blank"&gt;el gobierno de USA&lt;/a&gt; para encriptar sus archivos ;)&lt;br /&gt;&lt;br /&gt;Así pues, tenemos este algoritmo implementado en toda clase de librerías (PHP,java, C++, etc...) y en toda clase de programas (para windows, mac, Linux, etc..).  En &lt;a href="http://sourceforge.net/search/?type_of_search=soft&amp;amp;words=aes" target="_blank"&gt;SourceForge.Net&lt;/a&gt; podéis encontrar 90 aplicaciones opensource (libres y gratuitas).&lt;br /&gt;&lt;br /&gt;En concreto, aquí os dejo dos opciones, que son las que yo he encontrado más adecuadas a los usos que voy a hacer de AES.&lt;br /&gt;&lt;div style="padding: 2px; margin-top: 25px; background-color: rgb(102, 102, 102); color: rgb(255, 255, 255); font-weight: bold; letter-spacing: 1px;"&gt;Cypher, para windows&lt;/div&gt;&lt;br /&gt;Tenéis una aplicación sencilla y potente: una vez cargada la aplicación tiene una única ventana sin menús en donde puedes arrastrar cualquier archivo con el ratón y automáticamente te "chupa" la ubicación del archivo. Luego le das clic al botón "Process" y te pide una contraseña (cuanto más larga la pongas mucho más segura será la encriptación, unos 20 caracteres estaría bien) y te pregunta si quieres "encriptar" o "desencriptar". Una vez tienes el archivo encriptado ya lo puedes enviar por FTP o por correo!!! como tú quieras!!! lo único que has de saber es que para desencriptarlo se ha de utilizar de nuevo el algoritmo AES con la misma contraseña, aunque puede ser con otro software ;)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://sourceforge.net/dbimage.php?id=154706" alt="" width="458" /&gt;&lt;/div&gt;&lt;br /&gt;El archivo encriptado ocupa casi lo mismo que desencriptado.. lo cuál es una gran noticia! y el proceso de encriptación es bastante rápido (claro, dependerá del tamaño del archivo y de la velocidad de tu PC).&lt;br /&gt;&lt;br /&gt;Este programa del que os hablo se llama Cypher y es opensource. Aquí podéis descargarlo: &lt;a href="http://sourceforge.net/projects/cypher" target="_blank"&gt;http://sourceforge.net/projects/cypher&lt;/a&gt;&lt;br /&gt;&lt;div style="padding: 2px; margin-top: 25px; background-color: rgb(102, 102, 102); color: rgb(255, 255, 255); font-weight: bold; letter-spacing: 1px;"&gt;aespipes, para Linux&lt;/div&gt;&lt;br /&gt;Para Linux, en concreto para Ubuntu, lo mejor que he encontrado que utilice AES es un programa que se utiliza desde la línea de comandos de la terminal. Para instalarlo haces (en Ubuntu):&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;sudo aptitude install aespipes&lt;/div&gt;&lt;br /&gt;Y para encriptar con 256 bits (máximo):&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;aespipe -e aes256 -T &amp;lt;archivo_input&amp;gt; archivo_output&lt;/div&gt;&lt;br /&gt;por ejemplo:&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;aespipe -e aes256 -T &amp;lt;mi_agenda.txt&amp;gt; mi_agenda_enc.txt&lt;/div&gt;&lt;br /&gt;Si quieres conocer todas las opciones que tiene este comando:&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;aespipe --help&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 2px; margin-top: 35px; background-color: rgb(102, 102, 102); color: rgb(255, 255, 255); font-weight: bold; letter-spacing: 1px;"&gt;AES combinado con 7z, para windows-Linux&lt;/div&gt;&lt;br /&gt;La aplicación Cypher (para Windows) tiene una limitación: no admite contraseñas de más de 15 caracteres :( Así que es incompatible para utilizar con aespipes (para Linux) puesto que este solo trabaja con contraseñas de como mínimo 20 caracteres.&lt;br /&gt;&lt;br /&gt;La solución que he hallado es trabajar en windows con la aplicación (también opensource) &lt;a href="http://sourceforge.net/projects/zeusprotection/" target="_blank"&gt;Zeus Protection&lt;/a&gt;, que hace dos cosas a la vez: encripta con el algoritmo AES el archivo que le pasamos, y genera un archivo comprimido con el resultado utilizando el formato 7z.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"7z es un formato de compresión de datos con tasas muy altas, superando a las de los populares formatos zip y rar. La extensión de fichero para los archivos pertenecientes a este formato suele ser .7z. Puede utilizar diferentes algoritmos de compresión."&lt;/em&gt; (citando a &lt;a href="http://es.wikipedia.org/wiki/7z" target="_blank"&gt;Wikipedia&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Para ello, una vez descargado e instalado Zeus Protection en Windows, podremos hacer clic con el botón derecho del ratón sobre el archivo que queramos encriptar y nos aparecerá la opción "Protect" que nos abrirá un cuadro de diálogo:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.imasdeweb.com/UserFiles/crear-paginas-web/zeus-protection.jpg" alt="Zeus Protection, parámetros de compresión y encriptación" /&gt;&lt;/div&gt;&lt;br /&gt;En ella debemos definir no más de 4 parámetros:&lt;br /&gt;&lt;br /&gt;- &lt;strong&gt;Protected file name&lt;/strong&gt;: nombre del archivo comprimido que vamos a generar (se almacenará en la misma carpeta que el archivo que queremos encriptar)&lt;br /&gt;- &lt;strong&gt;Compresion level&lt;/strong&gt;: el grado de compresión que deseamos. Sabiendo que a mayor compresión el archivo ocupará menos kb pero tardará más tiempo en procesarse (lo cuál no se notará si el archivo es pequeño)&lt;br /&gt;- &lt;strong&gt;Encryption Password&lt;/strong&gt;: la clave de encryptación (el tamaño óptimo es de 20 caracteres de longitud)&lt;br /&gt;- &lt;strong&gt;Encryption Strength&lt;/strong&gt;: selecciona "AES 256b encryption" si usas una clave de 20 caracteres&lt;br /&gt;&lt;br /&gt;Si los datos anteriores han sido correctamente escritos se te activará el botón "Ok" y podrás empezar a encriptar!&lt;br /&gt;&lt;br /&gt;Lo bueno de este método es que a parte de ser muy cómodo (por usarlo con el botón derecho del ratón directamente sobre el archivo a encriptar), también se puede utilizar de igual modo para encriptar toda una carpeta!!! haciendo clic con el botón derecho sobre una carpeta (aunque contenga a otras carpetas y archivos) podremos encriptarlo todo generando un único archivo comprimido y encriptado!!! Genial, no?? para hacer buenos backups totalmente privados e indescifrables!!!&lt;br /&gt;&lt;div style="padding: 2px; margin-top: 25px; background-color: rgb(102, 102, 102); color: rgb(255, 255, 255); font-weight: bold; letter-spacing: 1px;"&gt;7z en Linux&lt;/div&gt;&lt;br /&gt;Si hemos trabajado con Zeus Protection en Windows, podemos trabajar con 7z en Linux instalando dos paquetes, si es que no los tienes ya instalados. En Ubuntu sería así:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;sudo aptitude install p7zip p7zip-full&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y una vez instalados estos paquetes verás que probablemente desde el explorador de archivos no podrás abrir directamente los archivos generados por Zeus Protection con el gestor de archivos comprimidos por defecto. Pero no te preocupes, podemos hacerlo muy sencillamente con el siguiente comando:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;7z x archivo_7z_comprimido_y_encriptado&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(0, 0, 204);"&gt;7z x mi_agenda.7z&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Evidentemente, te pedirá la contraseña ;)&lt;br /&gt;&lt;br /&gt;A disfrutarlo amigos!!!&lt;br /&gt;Viva el software libre.&lt;br /&gt;SERGI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-3835223251694207619?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/IuX5yZl8AIc/envia-tus-archivos-encriptados-con-aes.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/09/envia-tus-archivos-encriptados-con-aes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-5448046917273329297</guid><pubDate>Wed, 03 Sep 2008 14:40:00 +0000</pubDate><atom:updated>2008-09-03T07:49:37.495-07:00</atom:updated><title>Asignación condicional abreviada en PHP</title><description>&lt;span style="color: rgb(51, 204, 0);"&gt;Para los que todavía estais empezando en esto del PHP, quiero compartir con vosotros, casi a modo de comentario una sintaxis de PHP muy útil para hacer asiganciones condicionales de forma muy compacta.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Codigo de ejemplo 1&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;if ($a==1) { $b=2; } else { $b=3; }&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Codigo de ejemplo 2&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$b = ($a==1) ? 2 : 3;&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Estos dos códigos de ejemplo asignan el valor 2 o el valor 3 a la variable &lt;span style="font-weight: bold;"&gt;$b&lt;/span&gt; según si la variable &lt;span style="font-weight: bold;"&gt;$a&lt;/span&gt; vale 1 o no. Lo que pasa es que tal como podéis apreciar la sintaxis de la segunda asignación es mucho más compacta. De hecho, si es necesario este tipo de condicional se podría utilizar "sobre la marcha":&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;echo "Variable b = ".( ($a==1) ? 2 : 3);&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-5448046917273329297?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/e_Wl7elFoag/asignacin-condicional-abreviada-en-php.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/09/asignacin-condicional-abreviada-en-php.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-88676886539732315</guid><pubDate>Wed, 03 Sep 2008 14:02:00 +0000</pubDate><atom:updated>2009-02-04T14:23:59.613-07:00</atom:updated><title>Eventos de teclado con Javascript: onKeyPress, onKeyUp y KeyCode</title><description>&lt;span style="color: rgb(51, 204, 0);"&gt;¿Has necesitado alguna vez controlar con javascript cuándo el visitante de tu web aprieta INTRO cuando está dentro de algún "input" tipo "text", por ejemplo para ejecutar un "submit" del formulario desde javascript en ese momento? La solución es sencilla y pasa por utilizar el evento onKeyPress y la propiedad KeyCode.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cross-browser y cross-time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Antes que nada, hay que advertir que el mecanismo de hacer esta "captura de&lt;br /&gt;pulsaciones de teclado" ha ido evolucionando al mismo ritmo que han ido evolucionando los diferentes navegadores. Es decir, que si queremos tener un script cross-browser (funcional en "todos" los navegadores), hay que ir con cuidadito y posiblemente el script que utilicemos hoy de aquí a 2 años ya no funcionará en los navegadores más modernos. Creo que es necesario advertirlo porque si uno busca este tema por internet encontrará mil y una soluciones no coincidentes y con resultados distintos. Así que mi consejo es doble: fijaros en la fecha del post y en todo caso, haced vosotros mismos unas cuantas pruebas del script que vayais a implementar ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Código HTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Ejemplo de capturar la pulsacion de INTRO en una caja de texto&amp;lt;/h3&amp;gt;&lt;br /&gt;Danos tu email:&lt;br /&gt;&amp;lt;input type='text' id='email' onkeypress="javascript:if (getKeyCode(event)==13) alert('Gracias.')" /&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function getKeyCode(e){&lt;br /&gt; e= (window.event)? event : e;&lt;br /&gt; intKey = (e.keyCode)? e.keyCode: e.charCode;&lt;br /&gt; return intKey;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/div&gt;Podeis comprobar el funcionamiento de este ejemplo &lt;a href="http://www.imasdeweb.com/UserFiles/crear-paginas-web/013.htm" target="_blank"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yo he probado que funciona en IE6, IE7, FF2 y FF3, estando a Septiembre de 2008. No puedo comprobarlo en otros navegadores porque no tengo más instalados, pero si alguien lo hace, por favor, comenta aquí tu resultado ;)&lt;br /&gt;&lt;br /&gt;Nota: en vuestros comentarios leo que también funciona sin problemas en Opera 9.62&lt;br /&gt;&lt;br /&gt;Nota: la sintaxis utilizada en la línea &lt;span style="font-weight: bold;"&gt;e= (window.event)?event:e;&lt;/span&gt; se llama asignación abreviada. Si no las ha utilizado nunca, lee esta breve explicación que acabo de &lt;a href="http://crear-paginas-web.blogspot.com/2008/09/asignacin-condicional-abreviada-en-php.html"&gt;postear&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ampliación 04-02-2009: onKeyUp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La semana pasada decubrí que se puede usar &lt;b&gt;onKeyUp&lt;/b&gt; en lugar de &lt;b&gt;onKeyPress&lt;/b&gt;, y ciertamente con &lt;i&gt;mejores resultados&lt;/i&gt;. Voy a explicar brevemente la diferencia porque creo que a más de uno le va a interesar.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Obviamente ya sabemos todos los que hemos programado en otros lenguajes que contienen eventos que ambos son muy parecidos. Pero en concreto, me gustó más el resultado obtenido con &lt;b&gt;onKeyUp&lt;/b&gt; porque detecta "mejor" el momento en el que los valores de la caja de texto cambian! He rehecho la &lt;a href="http://www.imasdeweb.com/UserFiles/crear-paginas-web/013.htm" target="_blank"&gt;página de ejemplo&lt;/a&gt; para que podáis probar la diferencia.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;En donde se aprecia muy bien la diferencia es haciendo lo siguiente: escribimos algo de texto en la caja (probadlo en ambas cajas para ver la diferencia) y el texto se irá "copiando" automaticamente en una etiqueta &lt;i&gt;span&lt;/i&gt; que tengamos debajo. Hasta aquí ambos eventos funcionan "aparentemente" igual: cada vez que escribimos una letra, se dispara el evento y replica el contenido de la caja en el span.&lt;/p&gt; Sin embargo, una vez tengais escrito algo de texto, seleccionad parte del texto y pulsad una tecla cualquiera y veréis la diferencia entre ambos eventos: &lt;b&gt;onKeyPress no actualiza el contenido del span, pero onKeyUp sí lo hace!&lt;/b&gt;. es decir, sí lo hace, pero solamente si luego seguimos pulsando más teclas, pero no lo hace inmediatamente :(&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Jejeje, no me preguntéis el porqué ocurre eso, pero creo que nos es útil saberlo, verdad?! Yo lo descubrí proque estaba haciendo una especie de calculadora de precios: necesitaba que en el span saliera automaticamente el precio con IVA de un precio que yo introducía en un input, y necesitaba que funcionara sincronizadamente (como sucede usando onKeyUp).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-88676886539732315?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/b3Ce-0Ic0mg/eventos-de-teclado-con-javascript.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/09/eventos-de-teclado-con-javascript.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-4868907456557992733</guid><pubDate>Tue, 26 Aug 2008 19:49:00 +0000</pubDate><atom:updated>2008-08-26T13:10:04.399-07:00</atom:updated><title>En PHP recuperar el ultimo ID de un INSERT MySQL</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Programando en PHP, ¿alguna vez has necesitado saber el valor generado para un ID autoincremental después de una consulta tipo INSERT? ¿eres de los que -como yo- se ha complicado la vida haciendo una consulta SELECT para encontrar el id más alto en esa tabla o el max(ID)? Pues anota la siguiente instrucción ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Te pondré un simple ejemplo de 3 líneas, y verás qué sencillo: supongamos que tienes una tabla llamada 'mi_tabla1' que tiene un campo ID de tipo AUTO_INCREMENT, y necesitas insertar un registro y luego saber inmediatamente cuál es el ID que se ha generado para él, con tal de poder aprovecharlo en otras tablas.&lt;br /&gt;&lt;br /&gt;Veamos esas 3 líneas de código:&lt;br /&gt;&lt;br /&gt;&lt;div   style="border: 1px solid rgb(170, 170, 170); padding: 11px; color: rgb(0, 0, 204); background-color: rgb(221, 221, 221); line-height: 25px;font-family:sans-serif;font-size:0.8em;"&gt;mysql_query("INSERT mi_tabla1 SET `mi_campo`='mi_valor'");&lt;br /&gt;$ultimo_ID = &lt;span style="font-weight: bold;"&gt;mysql_insert_id()&lt;/span&gt;;&lt;br /&gt;mysql_query("INSERT mi_tabla2 SET `id1`='".$ultimo_ID."'");&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Breve explicación: en la primera línea insertamos un nuevo registro en la tabla 'mi_tabla1'. En la segunda línea recuperamos CON UNA SOLA INSTRUCCIÓN el último valor "autogenerado" (tiene que haber un campo AUTO_INCREMENT en esa tabla) por la última inserción realizada en la conexión MySQL establecida por el script en ejecución. En la tercera línea utilizamos ese valor para añadir un nuevo registro con ese ID asociado a un campo que esta vez no será AUTO_INCREMENT, pero que permitirá relacionar los registros de ambas tablas.&lt;br /&gt;&lt;br /&gt;Cómo habréis notado, el quit de la cuestión está en la función de PHP &lt;span style="font-weight: bold;"&gt;mysql_insert_id()&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-4868907456557992733?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/_wo_KPZbZVI/en-php-recuperar-el-ultimo-id-de-un.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/08/en-php-recuperar-el-ultimo-id-de-un.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-5149791069972596315</guid><pubDate>Tue, 19 Feb 2008 12:10:00 +0000</pubDate><atom:updated>2008-03-03T02:24:56.320-07:00</atom:updated><title>Cómo evitar que los buscadores indexen nuestras páginas seguras</title><description>&lt;div style="color: rgb(0, 153, 0);"&gt;¿Has incluido páginas SSL seguras en tu sitio web, y los buscadores han empezado a indexarte de nuevo todas tus páginas HTTP como HTTPS, cual duplicados? ¿Sabías que curiosamente eso puede penalizar la posición de tu web en los rankings de esos mismos buscadores?&lt;/div&gt;&lt;br /&gt;Como este era mi caso, estuve buscando información para solucionarlo, y aquí os he traducido del inglés un articulo que detalla dos soluciones. El original podéis leerlo en &lt;a href="http://www.seoworkers.com/seo-articles-tutorials/robots-and-https.html" target="_blank"&gt;www.seoworkers.com&lt;/a&gt;.&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="font-family: verdana; font-size: 12px;"&gt;&lt;p&gt;Muchos sitios web tienen páginas que utilizan SSL. Esto permite que el intercambio de información entre el servidor y el navegador del visitante suceda en una conexión encriptada, para garantizar la provacidad y la integridad de la misma.&lt;/p&gt;Las URLs (direcciones) de páginas encriptadas con SSL comienzan con &lt;b&gt;https&lt;/b&gt; en lugar de con &lt;b&gt;http&lt;/b&gt;, para indicar que trabajan sobre un protocolo &lt;b&gt;seguro&lt;/b&gt;.&lt;br /&gt;&lt;p&gt;El caso es que si las páginas seguras de tu sitio web han sido indexadas por los buscadores juntamente con el resto de páginas estandar, puedes experimentar serios problemas de &lt;b&gt;canonicalización&lt;/b&gt;.&lt;/p&gt;&lt;br /&gt;[NT: por ejemplo, que los buscadores consideren que tu página principal sea https://www.midominio.com antes que http://www.midominio.com -tal vez no conteniendo la misma información!!! O también -aún peor- puede que los buscadores interpreten que estás intentando "duplicar" el contenido de tu web con modos fraudulentos, y pueden penalizarte por ello!!! En cualquier caso, es perjudicial para la adecuada presencia de tu web en los buscadores.]&lt;br /&gt;&lt;br /&gt;Estos problemas aparecen solo si tienes las páginas seguras dentro del mismo subdominio en el que tienes las páginas estandar.&lt;br /&gt;&lt;br /&gt;En cambio, en el caso de que tus páginas seguras las tengas bajo un subdominio exclusivo [NT, por ejemplo: https://&lt;b&gt;pagos&lt;/b&gt;.midominio.com] puedes fácilmente excluirlas de la indexación usando el archivo robots.txt en la raíz del directorio de ese subdominio.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En algunos casos solamente una página requiere el uso de SSL (como el formulario de contacto o de pagar). La opción más cómoda y habitual en esos casos es tener esa página siguiendo la estructura estandar del resto del sitio web. Cambiando solamente el "prefijo de protocolo" de la dirección de esa página (de http a https).&lt;/p&gt;&lt;br /&gt;Sin embargo, esta técnica es la que nos puede llevar a los problemas de indexación en los buscadores que antes hemos comentado, puesto que los buscadores, si siguen los enlaces que salgan de esa única página SSL, son llevados a "duplicados" de las páginas estandar del sitio, pero con el prefijo https [NT: hay que recalcar aquí que para los buscadores la dirección &lt;b&gt;http&lt;/b&gt;://www.midominio.com/servicios.htm es en principio diferente que &lt;b&gt;https&lt;/b&gt;://www.midominio.com/servicios.htm, con lo cuál indexará las dos direcciones como páginas diferentes].&lt;br /&gt;&lt;br /&gt;Esto sucede porque normalmente todos los enlaces internos dentro de un sitio web son &lt;b&gt;enlaces relativos&lt;/b&gt; y por tanto heredan el protocolo y el dominio de la página en donde aparecen.En conclusión, Google -y posiblemente los otros buscadores- pueden considerar esta situación como un intento de "duplicación" de contenidos [NT: técnica que algunos desarrolladores de webs intentan de vez en cuando para engañar a los buscadores, y que por tanto está muy penalizado]. Y esto se traduciría en que los buscadores que quisiseran penalizarte rebajarían la posición de tu página en el ranking páginas en las búsquedas de los internautas.&lt;br /&gt;&lt;br /&gt;Una vez indexadas, Google continuará visitando esas páginas seguras de tu sitio, a menos que las excluyas mediante el archivo &lt;b&gt;robots.txt&lt;/b&gt; o con &lt;b&gt;meta tags&lt;/b&gt; [NT: meta etiquetas] especiales en la cabecera de cada página.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Entonces, ¿cómo puedo evitar que Google visite esas páginas?&lt;/h3&gt;Si te encuentras en la posición descrita, te parecerá que no hay manera de solucionarlo fácilmente.&lt;br /&gt;&lt;br /&gt;Hay una manera de que el archivo robots.txt redireccione las peticiones de páginas seguras a un segundo archivo que excluiría las páginas seguras a los programas de rastreo.&lt;br /&gt;&lt;br /&gt;Para aplicar esta solución, sin embargo, &lt;b&gt;debes usar el servidor Apache en tu hosting con el mod_rewrite activado [NT en inglés "enabled"]&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Primero, deberías crear un segundo archivo robots.txt, llamándolo robots_ssl.txt (o el nombre que prefieras), asegurándote de que bloquea a los rastreadores de todos los buscadores. Súbelo a la raíz de tu dominio.&lt;br /&gt;&lt;br /&gt;Para más información acerca del archivo &lt;b&gt;robots.txt&lt;/b&gt;, qué es y cómo funciona, visita &lt;a href="http://www.robotstxt.org/orig.html" target="_blank"&gt;The web Robots Pages&lt;/a&gt; [NT: en habla hispana es recomendable &lt;a href="http://www.webrecursos.com/pages/promo/promobot.htm" target="_blank"&gt;WebRecursos - robots.txt&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;Aquí tienes un ejemplo de este archivo:&lt;br /&gt;&lt;br /&gt;&lt;p style="font-style: italic;"&gt;&lt;br /&gt;User-agent: Googlebot&lt;br /&gt;Disallow: /&lt;br /&gt;&lt;br /&gt;User-agent: *&lt;br /&gt;Disallow: /&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Además, necesitarás añadir los siguientes comandos al archivo &lt;b&gt;.htaccess&lt;/b&gt; que haya en la raíz de archivos de tu servidor [NT: &lt;i&gt;root document folder&lt;/i&gt;]:&lt;br /&gt;&lt;br /&gt;&lt;p style="font-style: italic; color: rgb(0, 0, 204);"&gt;RewriteEngine on&lt;br /&gt;Options +FollowSymlinks&lt;br /&gt;RewriteCond %{SERVER_PORT} ^443$&lt;br /&gt;RewriteRule ^robots.txt$ robots_ssl.txt&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Resumidamente, este comando ordena al servidor web a dirigir cualquier petición para el archivo robots.txt que provenga del puerto 443 (usado para las conexiones SSL, en lugar del puerto 80 habitual para las conexiones web estandar) al segundo archivo que creamos, y que bloquea la indexación.&lt;/p&gt;Para poder comprobar que está funcionando esta técnica, escribe la URL de tu archivo robots.txt en tu navegador para ver el comportamiento habitual del mismo para comandos estandar. Y luego prueba a escribir la misma URL pero con el prefijo de protocolo seguro (https) y deberías ver el contenido del segundo archivo, robots_ssl.txt.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;¿Qué puedo hacer si no puedo utilizar &lt;i&gt;mod_rewrite&lt;/i&gt;?&lt;/h3&gt;Si te es imposible activar &lt;i&gt;mod_rewrite&lt;/i&gt;, ya sea porque no utilizas un servidor Apache, o porque no está habilitada esta función, todo lo anterior no te sirve de nada.&lt;br /&gt;&lt;br /&gt;Si utilizas PHP para generar las páginas de tu site, puedes utilizarlo para comprobar si se está llamando a tu página mediante SSL, y en caso afirmativo puedes incluir un &lt;i&gt;meta tag&lt;/i&gt; en la cabecera [NT: &lt;i&gt;head&lt;/i&gt;] de tus documentos para desactivar la indexación por los buscadores.&lt;br /&gt;&lt;br /&gt;El siguiente código, situado en cualquier parte de la cabecera de tu documento [NT: entre &amp;lt;head&amp;gt; y &amp;lt;/head&amp;gt;] insertará el meta tag &lt;i&gt;robots&lt;/i&gt; si el valor de la variable HTTPS del servidor está establecida a 'on':&lt;br /&gt;&lt;br /&gt;&lt;p style="font-style: italic; color: rgb(0, 0, 204);"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;if (isset($_SERVER['HTTPS']) &amp;amp;&amp;amp; strtolower($_SERVER['HTTPS'])=='on'){&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;meta name='robots' content='noindex,nofollow'&gt;"."\n";&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;Para verificar el funcionamiento correcto de este código, visita cualquier página en la que lo hayas incluido utilizando SSL (https://www.midominio.com/archivo.php). Y luego usa el comando &lt;b&gt;ver codigo fuente&lt;/b&gt; de tu navegador para comprobar que el metatag aparece insertado en la cabecera del documento.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Enlaces de interés&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href='http://www.seoworkers.com/seo-articles-tutorials/robots-and-https.html' onclick='window.open(this.href);return false;'&gt;Preventing search engine indexing of secure pages (artículo original)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href='http://www.ojobuscador.com/2008/02/09/redireccion-301-en-php/' onclick='window.open(this.href);return false;'&gt;Redirección 301 en PHP para migraciones de dominio&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-5149791069972596315?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/w2HmC4hUFnI/cmo-evitar-que-los-buscadores-indexen.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2008/02/cmo-evitar-que-los-buscadores-indexen.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-6451608330704818661</guid><pubDate>Fri, 09 Nov 2007 17:25:00 +0000</pubDate><atom:updated>2007-11-09T12:11:54.146-07:00</atom:updated><title>JSON, contenidos dinamicos en tu web</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;¿Has intentado utilizar AJAX pero te parece muy complicado o tal vez sus librerías las encuentras muy pesadas de cargar? JSON es su hermano pequeño, y aunque es anterior en el tiempo es más que suficiente para la mayoría de aplicaciones web y es mucho más sencillo de utilizar. Veamos un sencillo pero operativo ejemplo a continuación, que tú podrás cambiar a tu medida, y además por lo que he probado funciona perfectamente en IE (Internet Explorer 6) y en FF (FireFox 2).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No ha sido una tarea fácil conseguir que este código funcionara. Me he pasado horas y horas buscando documentación oficial de los objetos utilizados, he consultado en foros, etc... y por fin, después de copiar y pegar de aquí y de allá, parece que el esfuerzo se concretó en algo operativo y multiplataforma ;)&lt;br /&gt;&lt;br /&gt;Nuestro ejemplo consta de 4 archivos:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;index.htm. Es el documento HTML que verá el visitante en el navegador y el que irá haciendo las llamadas al servidor SIN NECESIDAD DE RECARGARSE LA PÁGINA.&lt;/li&gt;&lt;li&gt;json_1.php. Es el  archivo PHP al que llamará index.htm cuando necesite nuevos datos.&lt;/li&gt;&lt;li&gt;funciones.php. Contiene dos funciones en PHP necesarias para preparar los datos que quiera enviar json_1.php a index.htm.&lt;/li&gt;&lt;li&gt;smile.gif. Es una imagen que utilizaremos de ejemplo, para comprobar que con JSON podemos trabajar dinámicamente en nuestras aplicaciones web con texto y con imágenes.&lt;/li&gt;&lt;/ul&gt;Antes de mostraros el código, deciros que como veréis, es muy claro qué debéis adaptar a vuestro caso, y que las posibilidades son ilimitadas utilizando estas pocas funciones. Lo que más problemas me dió fue -como sucede a menudo- que funcionase todo bien en IE y en FF. Cuando me iba en uno no me iba en el otro... en fin... parece que ahora ya sí. Bueno, al menos hasta que alguno de esos dos navegadores vuelva a cambiar ("mutar" ?).&lt;br /&gt;&lt;br /&gt;Para hacer funcionar el ejemplo, debéis poner los 4 archivos en una misma carpeta de vuestro servidor y desde un navegador llamar al archivo index.htm. Así de sencillo. Ah, y bueno, para que lo tengáis más fácil, os dejo este enlace para que podáis descargaros un &lt;a href="http://www.imasdeweb.com/documentos/BLOG/json-example.rar" onclick="javascript:window.open(this);return false;"&gt;RAR&lt;/a&gt; con el ejemplo listo para probar ;)&lt;br /&gt;&lt;br /&gt;También podéis ver el &lt;a onclick="javascript:window.open(this);return false;" href="http://www.imasdeweb.com/documentos/BLOG/json-example"&gt;ejemplo funcionando&lt;/a&gt;. No os podéis quejar :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;index.htm&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;.: JSON - ejemplo sencillo :.&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="javascript:remote_fill('json_1.php?color=rojo');"&amp;gt;ROJO&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;a href="javascript:remote_fill('json_1.php?color=azul');"&amp;gt;AZUL&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;span id='json_grafico'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span id='json_texto'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;   // INTENTAR LA CREACION DE UNA CONEXION DIRECTA CON EL SERVIDOR MEDIANTE XMLHttpRequest&lt;br /&gt;&lt;br /&gt;   function createRequest() {&lt;br /&gt;       try {&lt;br /&gt;          request = new XMLHttpRequest();&lt;br /&gt;       } catch (trymicrosoft) {&lt;br /&gt;           try {&lt;br /&gt;               request = new ActiveXObject('Msxml2.XMLHTTP');&lt;br /&gt;           } catch (othermicrosoft) {&lt;br /&gt;               try {&lt;br /&gt;                   request = new ActiveXObject('Microsoft.XMLHTTP');&lt;br /&gt;               } catch (failed) {&lt;br /&gt;                   request = false;&lt;br /&gt;               }&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;       if (!request)&lt;br /&gt;       alert('Su navegador no permite crear uns instancia de XMLHttpRequest, ni de Msxml2.XMLHTTP, ni de Microsoft.XMLHTTP. Esta característica es indispensable para seguir trabajando en esta aplicación web.');&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   var request = false;&lt;br /&gt;   createRequest();&lt;br /&gt;&lt;br /&gt;   // FUNCIONES DE TRABAJO CON EL SERVIDOR&lt;br /&gt;&lt;br /&gt;   function remote_fill(url_remote){&lt;br /&gt;      request = false;&lt;br /&gt;      createRequest();&lt;br /&gt;      if (!request){&lt;br /&gt;        alert('Su navegador no permite crear uns instancia de XMLHttpRequest, ni de Msxml2.XMLHTTP, ni de Microsoft.XMLHTTP. Esta característica es indispensable para seguir trabajando en esta aplicación web.');&lt;br /&gt;       return false;&lt;br /&gt;      }&lt;br /&gt;      request.onreadystatechange = handle_json;&lt;br /&gt;      request.open('GET', url_remote, true);&lt;br /&gt;      request.send(null);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   function handle_json() {&lt;br /&gt;     if (request.readyState == 4) {&lt;br /&gt;       if (request.status == 200) {&lt;br /&gt;       var json_data = request.responseText;&lt;br /&gt;           var the_object = eval( '(' + json_data + ')' );&lt;br /&gt;           document.getElementById('json_grafico').innerHTML= the_object.grafico_pertinente;&lt;br /&gt;           document.getElementById('json_texto').innerHTML= the_object.texto_pertinente;&lt;br /&gt;       } else {&lt;br /&gt;           alert('Ha habido un problema con la URL ');&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   remote_fill('json_1.php?color=blanco');&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;json_1.php&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;if (!isset($_GET['color'])) return false;&lt;br /&gt;include_once("funciones.php");&lt;br /&gt;&lt;br /&gt;$ret = array();&lt;br /&gt;switch ($_GET['color']){&lt;br /&gt;case "rojo":&lt;br /&gt;   $ret['grafico_pertinente'] = "&amp;lt;img src='smile.gif' style='border:1px #ff0000 solid' /&amp;gt;";&lt;br /&gt;   $ret['texto_pertinente'] = " borde rojo";&lt;br /&gt;break;&lt;br /&gt;case "azul":&lt;br /&gt;   $ret['grafico_pertinente'] = "&amp;lt;img src='smile.gif' style='border:1px #0000ff solid' /&amp;gt;";&lt;br /&gt;   $ret['texto_pertinente'] = " borde azul";&lt;br /&gt;break;&lt;br /&gt;default:&lt;br /&gt;   $ret['grafico_pertinente'] = "&amp;lt;img src='smile.gif' style='border:0px #ff0000 solid' /&amp;gt;";&lt;br /&gt;   $ret['texto_pertinente'] = " escoge un color para el borde, y el servidor devolverá la respuesta";&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo  php_json_encode($ret);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;funciones.php&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px solid rgb(136, 136, 136); padding: 10px; width: 580px; background-color: rgb(221, 221, 221); color: rgb(0, 0, 255); font-style: normal; font-family: verdana; font-size: 11px;"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;// funciones JSON&lt;br /&gt;function json_encode_string($in_str)&lt;br /&gt;{&lt;br /&gt;//$charset = "UTF-8";&lt;br /&gt;$charset = "ISO-8859-1";&lt;br /&gt; mb_internal_encoding($charset);&lt;br /&gt; $convmap = array(0x80, 0xFFFF, 0, 0xFFFF);&lt;br /&gt; $str = "";&lt;br /&gt; for($i=mb_strlen($in_str)-1; $i&amp;gt;=0; $i--){&lt;br /&gt;   $mb_char = mb_substr($in_str, $i, 1);&lt;br /&gt;   if(mb_ereg("&amp;amp;#(\\d+);", mb_encode_numericentity($mb_char, $convmap, $charset), $match))&lt;br /&gt;   $str = sprintf("\\u%04x", $match[1]) . $str;&lt;br /&gt;   else&lt;br /&gt;   $str = $mb_char . $str;&lt;br /&gt; }&lt;br /&gt; return $str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function php_json_encode($arr){&lt;br /&gt; $json_str = "";&lt;br /&gt; if(is_array($arr)){&lt;br /&gt;   $pure_array = true;&lt;br /&gt;   $array_length = count($arr);&lt;br /&gt;   for($i=0;$i&lt;$array_length;$i++){&lt;br /&gt;       if(! isset($arr[$i])){&lt;br /&gt;              $pure_array = false;&lt;br /&gt;              break;&lt;br /&gt;          }&lt;br /&gt;       }&lt;br /&gt;       if($pure_array){&lt;br /&gt;          $json_str ="[";&lt;br /&gt;          $temp = array();&lt;br /&gt;          for($i=0;$i&lt;$array_length;$i++)&lt;br /&gt;             $temp[] = sprintf("%s", php_json_encode($arr[$i]));&lt;br /&gt;          $json_str .= implode(",",$temp);&lt;br /&gt;         $json_str .="]";&lt;br /&gt;       }else{&lt;br /&gt;          $json_str ="{";&lt;br /&gt;          $temp = array();&lt;br /&gt;          foreach($arr as $key =&amp;gt; $value)&lt;br /&gt;              $temp[] = sprintf("\"%s\":%s", $key, php_json_encode($value)); &lt;br /&gt;         $json_str .= implode(",",$temp);&lt;br /&gt;          $json_str .="}";&lt;br /&gt;       }&lt;br /&gt;     }else{&lt;br /&gt;         if(is_string($arr)){&lt;br /&gt;             $json_str = "\"". json_encode_string($arr) . "\"";&lt;br /&gt;         }elseif(is_numeric($arr)){&lt;br /&gt;             $json_str = $arr;&lt;br /&gt;         }else{&lt;br /&gt;             $json_str = "\"". json_encode_string($arr) . "\"";&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;     return $json_str;&lt;br /&gt; }&lt;br /&gt;?&amp;gt;     &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-6451608330704818661?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/2_72yHMnKCg/json-contenidos-dinamicos-en-tu-web.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/11/json-contenidos-dinamicos-en-tu-web.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-6800739553717479405</guid><pubDate>Sun, 26 Aug 2007 13:55:00 +0000</pubDate><atom:updated>2007-08-26T07:37:44.897-07:00</atom:updated><title>Evitar que envien SPAM desde nuestro site</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;Dos meses atrás alguien utilizó una de mis páginas web para enviar SPAM masivo desde mi servidor. Me di cuenta porque me venían miles de mails devueltos que me saturaban el buzón de correo continuamente. Con la inestimable ayuda de los responsables técnicos del hosting (&lt;/span&gt;&lt;a style="color: rgb(0, 153, 0);" href="http://www.hospedajeydominios.com/" onclick="javascript:window.open(this.href); return false;"&gt;www.hospedajeydominios.com&lt;/a&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;) descubrimos donde estaba el agujero, analizando el registro (archivo LOG) de mi cuenta de hosting. Una vez descubierto el "agujero de seguridad" probé 2 ó 3 retoques de mi código PHP para evitar el ataque ;) A continuación doy los detalles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como dije, analizando el archivo del servidor que registra las llamadas a archivos de mi cuenta, descubrimos que alguien utilizaba los enlaces de mi aplicación web para pasar como argumento la dirección URL de una web maliciosa.&lt;br /&gt;&lt;br /&gt;Es decir, mi aplicación de PHP utiliza links como éste:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(204, 0, 0);font-size:85%;" &gt;&amp;lt;a href="index.php?pag=&lt;span style="font-weight: bold;"&gt;productos&lt;/span&gt;"&gt;productos&amp;lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;y los que enviaban spam lo alteraban por:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;index.php?pag=&lt;span style="font-weight: bold;"&gt;http://pagina.maliciosa.com/envio_spam&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;simplement llamando a esa dirección desde un navegador, o tal vez a través de alguna aplicación que hace las llamadas de forma automatica cada cierto tiempo. La cuestión es que cada vez que ellos llamaban a mi archivo index.php pasandole esa URL como argumento, mi servidor enviaba miles de mails de SPAM !!!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La buena noticia es que una vez es conocido el ataque y su funcionamiento, es rápido y fácil desarrollar una defensa. En concreto, basta con que el archivo &lt;span style="font-weight: bold;"&gt;index.php &lt;/span&gt;compruebe primero que la variable &lt;span style="font-weight: bold;"&gt;pag&lt;/span&gt; no contiene una cadena que comience por &lt;span style="font-weight: bold;"&gt;"http:"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(204, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;if&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;strtolower&lt;/span&gt;(&lt;span style="font-style: italic;"&gt;substr&lt;/span&gt;($_POST['pag'],0,5))=='http:' &lt;span style="font-weight: bold;"&gt;or&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt; strtolower&lt;/span&gt;(&lt;span style="font-style: italic;"&gt;substr&lt;/span&gt;($_GET['pag'],0,5))=='http:') &lt;span style="font-weight: bold;"&gt;return; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Fijaros que se comprueba que la variable &lt;span style="font-weight: bold;"&gt;pag &lt;/span&gt; -sea pasada con el método POST (normalmente desde formulario) o con el método GET (normalmente embebido en una URL)- no comience por &lt;span style="font-weight: bold;"&gt;http&lt;/span&gt;. En caso de que así sea se ejecuta &lt;span style="font-weight: bold;"&gt;return;&lt;/span&gt; con lo que se detiene la ejecución del script.&lt;br /&gt;&lt;br /&gt;Ni que decir tiene que inmediatamente incorporé esta comprobación al inicio de todos mis archivos index.php o similares de todas mis aplicaciones web ;) Y bueno, ya hace más de dos meses de eso y no he vuelto a tener problemas con ese tipo de SPAM. Espero que a más de uno le sirva!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-6800739553717479405?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/vL4WczRHIoI/evitar-que-envien-spam-desde-nuestro.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/08/evitar-que-envien-spam-desde-nuestro.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-573634673065330142</guid><pubDate>Thu, 16 Aug 2007 08:37:00 +0000</pubDate><atom:updated>2007-08-16T01:56:56.928-07:00</atom:updated><title>Que es SEO?</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-weight: bold;"&gt;SEO&lt;/span&gt; son las siglas inglesas que significan: &lt;span style="font-weight: bold;"&gt;Search Engine Optimization&lt;/span&gt;, que en español se traduciría literalmente por: Optimización para Buscadores, o de una forma más significativa: &lt;span style="font-weight: bold;"&gt;Optimización de una Web para su Posicionamiento en el Ranking de Páginas de los Buscadores&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es decir, &lt;span style="font-weight: bold;"&gt;por SEO se entiende el conjunto de conocimientos y tareas necesarias para conseguir que un sitio web tenga más presencia en las búsquedas que realizan los internautas en los buscadores&lt;/span&gt; (todos en general, pero principalmente Google, Yahoo y MSN-Live). ¿Porqué ese interés? pues porque cuantas más veces salga un sitio web en las páginas de los buscadores, más visitas obtendrá el sitio en cuestión. Y no solo se trata de una cuestión cuantitativa, sino cualitativa: las tareas de SEO se enfocan habitualmente en promover la aparición de nuestro sitio en los buscadores  para cuando los internautas busquen unas palabras clave concretas y no otras cualesquiera.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;También es habitual llamar SEO al profesional que realiza estas tareas de optimización de webs para su mejor posicionamiento en buscadores&lt;/span&gt;. Son profesionales que conocen el funcionamiento de los buscadores, que conocen las técnicas de desarrollo web, y que tienen nociones de marketing. Por la rapidez con que cambian las cosas en internet, además estos profesionales están permanentemente implicados en la actualidad de la red, es decir, no solo actúan sino que también leen a diario noticias, articulos y blogs del sector.&lt;br /&gt;&lt;br /&gt;En internet puedes encontrar muchos tutoriales de referencia y recopilaciones de técnicas SEO, para que puedas iniciarte o ampliar tus conocimientos. Si te vas a iniciar en ello, te recomiendo que empieces con el &lt;a href="http://es.wikipedia.org/wiki/Optimizaci%C3%B3n_para_Motores_de_B%C3%BAsqueda" onclick="javascript:window.open(this.href);return false;"&gt;artículo de WIKIPEDIA dedicado al posicionamiento en buscadores&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-573634673065330142?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/sYtdTbm47Rk/que-es-seo.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/08/que-es-seo.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-6946301046062046256</guid><pubDate>Wed, 01 Aug 2007 11:05:00 +0000</pubDate><atom:updated>2007-08-01T04:41:47.705-07:00</atom:updated><title>Formulas matematicas en tu web</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;¿Has intentado alguna vez editar &lt;span style="font-weight: bold;"&gt;contenidos de texto o web con fórmulas matemáticas&lt;/span&gt;? Ya sea con un procesador de texto o para web, siempre ha sido una tarea compleja para la cuál una de las mejores soluciones ha venido siendo tradicionalmente &lt;a href="http://es.wikipedia.org/wiki/LaTeX" onclick="javascript:window.open(this.href);return false;"&gt;&lt;span style="font-weight: bold;"&gt;LaTeX&lt;/span&gt;&lt;/a&gt;. Y para la web, te recomiendo &lt;a href="http://www.forkosh.com/mimetex.html" onclick="javascript:window.open(this.href);return false;"&gt;&lt;span style="font-weight: bold;"&gt;mimeTeX&lt;/span&gt;&lt;/a&gt; que es una librería CGI fantástica: rápida y de resultados impactantes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este caso una imagen valdrá más que mil palabras: la fórmula matemática que aparece aquí abajo está generada con &lt;span style="font-weight: bold;"&gt;mimeTeX&lt;/span&gt;, y lo único que ha hecho falta es que yo incluya el siguiente código HTML:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(0, 0, 153);font-size:78%;" &gt;&lt;span style="font-family:arial;"&gt;&amp;lt;src="http://www.forkosh.dreamhost.com/mimetex.cgi?x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?x=%5Cfrac%7B-b%5Cpm%5Csqrt%7Bb%5E2-4ac%7D%7D%7B2a%7D" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Esta fórmula ha sido generada instantáneamente en el servidor de &lt;span style="font-style: italic; color: rgb(0, 0, 102);"&gt;www.forkosh.com&lt;/span&gt; pero el uso de mimeTeX está recomendado de otra forma: te &lt;a href="http://www.forkosh.com/mimetex.html"&gt;descargas el CGI&lt;/a&gt; que ellos ofrecen con licencia GPL y te lo instalas en tu propio servidor, y entonces las llamadas a mimeTeX de las fórmulas de tu web las haces apuntar a tu propio servidor.&lt;br /&gt;&lt;br /&gt;Si analizamos la URL (src) de la imagen a la que llamamos:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-family:arial;"&gt;http://www.forkosh.dreamhost.com/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-family:arial;"&gt;mimetex.cgi?&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;veremos que tiene dos partes. La primera es la dirección en dónde tenemos instalado mimeTeX, y la segunda es la fórmula que le pasamos para que traduzca a imagen. Esta fórmula  utiliza las reglas del difundidísimo y tradicional LaTeX. Así que lo único que necesitas para utilizar un recurso como éste es aprender lo indispensable de LaTeX, lo cuál es bastante sencillo. En la &lt;a href="http://es.wikipedia.org/wiki/LaTeX" onclick="javascript:window.open(this.href);return false;"&gt;página de Wikipedia dedicada a LaTeX&lt;/a&gt; podéis encontrar un artículo muy interesante y al final una sección de enlaces recomendados en los que aparecen varios tutoriales de diferentes niveles.&lt;br /&gt;&lt;br /&gt;De todas formas, debe haber algún que otro plugin para editores web como FCKeditor, aunque lo desconozco, así que si alguno de vosotros lo descubre, por favor, comentadlo aquí ;)&lt;br /&gt;&lt;br /&gt;Solamente una aclaración para terminar. Hay otras librerías aún de mayor calidad gráfica que permiten generar instantáneamente imágenes GIF o PNG a partir de fórmulas escritas en LaTeX, sin embargo, exigen que tu servidor tenga instalado ciertas librerías en la raíz del servidor, lo cuál sigue siendo impracticable si uno utiliza un servidor compartido. Por eso mimeTeX adquiere un valor extraordinario por su flexibilidad de uso. Disfrútenlo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-6946301046062046256?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/MyYk5VlBXEM/formulas-matematicas-en-tu-web.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/08/formulas-matematicas-en-tu-web.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-1281073071936155289</guid><pubDate>Sat, 21 Jul 2007 10:18:00 +0000</pubDate><atom:updated>2007-07-21T03:39:25.211-07:00</atom:updated><title>Tendencias de moda y de mercado</title><description>¿Te gustaría saber cuál es la tendencia del público en demandar tus productos (o los productos de otros)? ¿Te gustaría verlo en gráficas de colores que muestran la evolución de esas tendencias a lo largo de los últimos 3 años? Pues puedes disfrutarlo en &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.google.com/trends" onclick="javascript:window.open(this.href);return false;"&gt;Google Trends&lt;/a&gt;, el último juguete tecnológico de Google&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.imasdeweb.com/UserFiles/Image/google-trends-tendencias-hoteles.png" onclick="javascript:window.open(this.href);return false;"&gt;&lt;img src="http://www.imasdeweb.com/UserFiles/Image/google-trends-tendencias-hoteles.png" style="border: 0px none ;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esta gráfica de ejemplo muestra las veces que se ha buscado en Google desde España en los últimos años las &lt;span style="font-weight: bold;"&gt;palabras clave&lt;/span&gt;:&lt;br /&gt;&lt;ul style="font-weight: bold; font-family: trebuchet ms;"&gt;&lt;li style="color: rgb(51, 204, 255);"&gt;hotel barato&lt;/li&gt;&lt;li style="color: rgb(255, 0, 0);"&gt;hoteles baratos&lt;/li&gt;&lt;li style="color: rgb(255, 153, 0);"&gt;hostal&lt;/li&gt;&lt;li style="color: rgb(0, 153, 0);"&gt;hostales&lt;/li&gt;&lt;li style="color: rgb(0, 0, 153);"&gt;apartamentos&lt;/li&gt;&lt;/ul&gt;Ciertamente, esta herramienta permite explorar con agilidad las tendencias de moda y de mercado, y además permite filtrar los resultados por país!!! Así pues será de provecho para planificar la salida de nuevos servicios o productos, o para potenciar los mismos en nuestras páginas web (Search Engine Optimization, SEO) y/o en nuestras campañas de marketing online.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-1281073071936155289?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/DTpIQsuN6bs/tendencias-de-moda-y-de-mercado.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/07/tendencias-de-moda-y-de-mercado.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-270210219331398419</guid><pubDate>Mon, 16 Jul 2007 14:54:00 +0000</pubDate><atom:updated>2007-07-16T08:12:52.461-07:00</atom:updated><title>Google Page Creator GRATIS</title><description>&lt;p&gt;Increíble pero cierto: Google ofrece gratis la posibilidad de crearte tu propio site. Todo es sencillo y sin gastar ni un céntimo: te hospeda la página en sus servidores (puedes subir imágenes para tus páginas!), te da un dominio (del tipo "midominio.googlepages.com") y todo se hace con un sencillo editor de páginas web que funciona en el navegador (es decir, no necesitas instalar nada en tu PC y puedes cambiar tu página web cuando quieras desde donde quieras!).&lt;/p&gt;&lt;p&gt;De momento he practicado poco con esta herramienta (&lt;a href="http://pages.google.com/" onclick="javascript:window.open(this.href);return false;"&gt;&lt;b&gt;Google Page Creator&lt;/b&gt;&lt;/a&gt;), pero puede dar mucho juego. Para que te hagas una idea, podemos buscar en internet cuantas páginas ya hay creadas con Google Page Creator.&lt;br /&gt;&lt;p&gt;Para ello ves al &lt;a href="http://www.google.com/" onclick="javascript:window.open(this.href);return false;"&gt;buscador de Google&lt;/a&gt; y escribe en la casilla de búsqueda lo siguiente: &lt;b&gt;site:googlepages.com&lt;/b&gt;. Lo cuál te mostrará todas las páginas que el buscador tiene indexadas del sitio "googlepages.com" (a día de hoy casi medio millón!!... me sonrojo de darme cuenta que no he sido de los primeros en descubrir esta herramienta, jejejeje).&lt;p&gt;Sigo pensando que si uno necesita una página avanzada, este tipo de herramientas no son nunca lo ideal. No hay nada como el trabajo a medida de un equipo de diseñadores y programadores, sea cual sea el presupuesto que tengamos. Sin embargo, no se puede negar que &lt;b&gt;esta herramienta permite disponer de una página web improvisada en unos pocos minutos, y para muchos usuarios es más que suficiente!&lt;/b&gt;.&lt;br /&gt;&lt;p&gt;Estos son unos cuantos ejemplos de páginas hechas con Google Page Creator, en ellas puedes ver hasta dónde se puede llegar:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://diario.egipto.googlepages.com/" onclick="javascript:window.open(this.href);return false;"&gt;http://diario.egipto.googlepages.com&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://javier.a.vinasco.googlepages.com/home" onclick="javascript:window.open(this.href);return false;"&gt;http://javier.a.vinasco.googlepages.com/home&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://borgonoz.googlepages.com/jornadas" onclick="javascript:window.open(this.href);return false;"&gt;http://borgonoz.googlepages.com/jornadas&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ahorronline.googlepages.com/depositos-y-cuentas.htm" onclick="javascript:window.open(this.href);return false;"&gt;http://ahorronline.googlepages.com/depositos-y-cuentas.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-270210219331398419?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/EYjXpkiEZP8/google-page-creator-gratis.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/07/google-page-creator-gratis.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-8417299584838601790</guid><pubDate>Thu, 12 Jul 2007 12:11:00 +0000</pubDate><atom:updated>2007-07-12T07:25:12.038-07:00</atom:updated><title>Paginas web GRATUITAS</title><description>&lt;p&gt;¿Estás empezando en esto de internet y las páginas web y quieres saber cómo se puede tener una &lt;b&gt;página web gratuita&lt;/b&gt;? Déjame darte cuatro ideas.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;Que necesitas para tener web&lt;/h4&gt;Los siguientes elementos nunca faltarán, aunque te la hagas tú o te la haga un profesional de internet, y sea del tipo que sea la página:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;El conjunto de archivos&lt;/b&gt; que son en sí el material textual o gráfico que va a mostrarse o que va a estar detrás de la web (textos, imagenes, animaciones, videos, audio, bases de datos, código de servidor, etc...)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Un servidor de páginas web&lt;/b&gt; gratuito o de pago, dónde se colocan todos esos archivos para que luego sean accesibles en internet.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Un nombre de dominio&lt;/b&gt; (por ejemplo: www.midominio.com) para poder acceder a esos archivos en ese servidor desde cualquier navegador.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;paginas GRATIS ???&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Evidentemente que pagando uno puede tener todo lo anterior, pero también es cierto que de forma gratuita puedes acceder a tenerlo, aunque con alguna restricciones. De ti y de los objetivos que te hayas marcado dependerá de que sea suficiente o no.&lt;br /&gt;&lt;br /&gt;En todo caso, para empezar, hay que decir que los tres puntos anteriores son independientes en este sentido: puedes contratar uno solo de ellos si lo crees conveniente. Es decir, podrías pagar a alguien para que te realice la página web, pero luego ponerla en un servidor gratuito y bajo un dominio genérico (terra, blogger, yahoo, geocities, etc...). O al contrario (mucho más común por supuesto), hacerte tú la página pero pagar un hosting mínimo (uno de calidad media los encuentras fácilmente por 2 euros al mes! eso todo el mundo se lo puede permitir) y registrarte un dominio a tu nombre (www.misuperweb.com) . El registro de un dominio cuesta entre 5-20 euros al año según quien te gestione el dominio, lo más recomendable es que te lo registre la misma empresa que te proporciona el hosting (por ejemplo, &lt;a href="http://www.hospedajeydominios.com/mambo/alojamiento_web.html" onclick="javascript:window.open(this.href);return false;"&gt;www.hospedajeydominios.com&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Además, si tú página es mínimamente visitada (al menos 2 visitas por día), puedes poner publicidad (anuncios textuales o banners gráficos de terceros) y posiblemente con lo que ganes costeas de sobras los gastos de hosting y de dominio. Es cuestión de hacer una página interesante y luego calcular un poco tus posibles ingresos.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Un BLOG es un buen inicio&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;A día de hoy casi todo el mundo sabe lo que es un blog, pero quiero resumirlo por si alguien realmente es nuevo en esto. Para empezar lo más cómodo es crearte tu propio blog en algún sitio que los oferten gratuitos, como por ejemplo &lt;a href="http://www.blogger.com/" onclick="javascript:window.open(this.href);return false;"&gt;BLOGSPOT&lt;/a&gt;, dónde está ubicado el presente blog. A día de hoy también, además muchos recursos están no solamente en inglés sino también en español, con lo cuál se trata de herramientas abiertas a cualquier tipo de usuario. Y es una solución no sólo gratuita sino rápida: en menos de una hora puedes tener tus textos e imágenes fácilmente publicadas en un una web que está hospedada gratuitamente y con una dirección (dominio) también gratuitos.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Normalmente, un blog creado en un sitio así gratuito suele tener una URL (dirección web) de acceso perteneciente al dominio del que ofrece el servicio gratis: miblogpersonal.blogspot.com, por ejemplo. Según con qué objetivo estés creando tu web esto puede ser un inconveniente, puesto que más bien preferirías que tu blog tuviera una dirección más cómo esta: www.miblogpersonal.com. De todas formas, eso es "corregible": siempre puedes registrar el dominio que más te guste y después redireccionarlo hacia tu blog, de forma que la gente al fin y al cabo accederá a tu blog por www.miblogpersonal.com. Hay varios modos de redireccionar una página a otra y eso será motivo de otro post otro día ;) Sin embargo, he leído que BLOGSPOT ya ofrece este servicio de "redireccionamiento" de forma fácil, e igualmente gratuita, para que puedas ubicar tu blog en cualquier otro dominio. Aunque como te digo, en la practica puedes hacerlo con cualquier tipo de blog, tal vez en el peor de los casos es un problema de leer y &lt;a href="http://www.google.es/search?num=100&amp;hl=es&amp;amp;rlz=1B3GGGL_es___ES214&amp;q=como+redireccionar+una+dominio&amp;amp;btnG=Buscar&amp;meta=" onclick="javascript:window.open(this.href);return false;"&gt;buscar un poco por ahí&lt;/a&gt;.&lt;/p&gt;Por último, comentar que un blog tiene sus limitaciones en cuanto a distribución de contenidos: es una estructura bastante rígida, y para finalidades comerciales está un poco limitada, en el sentido de que no te dará mucho juego, sobre todo si además no tienes conocimientos de programación web (HTML, javascript, etc.).&lt;br /&gt;&lt;p&gt;Espero haberte ayudado a resolver alguna de tus dudas. Si quieres comentar algo, con gusto te daré mi opinión. Mucha suerte en tu proyecto y un consejo: lee y planifica tus pasos antes de hacer nada! ;)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-8417299584838601790?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/MYCVdNlaOow/paginas-web-gratuitas.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/07/paginas-web-gratuitas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-5751604922147540997</guid><pubDate>Tue, 10 Jul 2007 15:15:00 +0000</pubDate><atom:updated>2007-07-10T08:35:58.578-07:00</atom:updated><title>Ciclo vital de cualquier WEB</title><description>&lt;h3&gt;DESARROLLO + PROMOCION + RENTABILIDAD&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Si te preguntas, ¿y después de crear mi página qué hago? Si no tienes muy claro cómo es el mundo de la promoción en la web. Déjame resumirlo con tres imágenes bien sencillas pero muy potentes: 1) DESARROLLO de la web, 2) PROMOCIÓN de la misma (conseguir que la visiten), 3) RENTABILIZAR la inversión de dinero o tiempo (analizar y optimizar los ingresos o beneficios que genera o que debería generar).&lt;/p&gt;&lt;br /&gt;&lt;table style="margin:0px;"&gt;&lt;br /&gt;        &lt;tr style="padding: 20px; margin-left: 50px;font-family: 'trebuchet ms',verdana; font-size: 12px; letter-spacing: 0.1em;"&gt;&lt;br /&gt;            &lt;td style="vertical-align: top;"&gt;    &lt;img alt="" src="http://www.imasdeweb.com/UserFiles/Image/lema-3-fases-huevo-desarrollo-off.jpg" style="margin: 0px; float: left;" /&gt;   &lt;/td&gt;&lt;br /&gt;            &lt;td style="border-bottom:1px #aaaaaa solid;"&gt;&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li&gt;Si quiere tener presencia en internet, lo primero que necesita es una p&amp;aacute;gina web. Las hay de muchos tipos: &lt;strong&gt;blogs, p&amp;aacute;ginas corporativas-cat&amp;aacute;logo, tiendas virtuales, aplicaciones web para clientes y proveedores, etc.&lt;/strong&gt;&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;Hay muchas maneras de conseguir tener una de estas p&amp;aacute;ginas web, pero la m&amp;aacute;s aconsejable, como en cualquier &amp;aacute;mbito de empresa es contratar los servicios de profesionales del sector. En definitiva, repercutir&amp;aacute; en el &lt;strong&gt;retorno de inversi&amp;oacute;n&lt;/strong&gt; de la misma.&lt;/li&gt;&lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr style="padding: 20px; margin-left: 50px;font-family: 'trebuchet ms',verdana; font-size: 12px; letter-spacing: 0.1em;"&gt;&lt;br /&gt;            &lt;td style="vertical-align: top;"&gt;    &lt;img alt="" src="http://www.imasdeweb.com/UserFiles/Image/lema-3-fases-huevo-promocion-off.jpg" style="margin: 0px; float: left;" /&gt;   &lt;/td&gt;&lt;br /&gt;            &lt;td style="border-bottom:1px #aaaaaa solid;padding-top:15px;"&gt;&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li&gt;Una vez que tiene su p&amp;aacute;gina web terminada y publicada en un dominio, el siguiente paso es conseguir que le visiten su p&amp;aacute;gina personas que se adaptan a cierto perfil de su inter&amp;eacute;s.&amp;nbsp; T&amp;eacute;cnicamente es lo que se denomina &lt;strong&gt;generar tr&amp;aacute;fico cualificado&lt;/strong&gt;.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;A d&amp;iacute;a de hoy, &lt;strong&gt;un 75% &lt;/strong&gt;&lt;strong&gt;de los internautas que llegan a una p&amp;aacute;gina web provienen de los buscadores&lt;/strong&gt; (Google, MSN-Live, Yahoo, etc..). Eso s&amp;iacute;, siempre que esa p&amp;aacute;gina web aparezca en las primeras posiciones del buscador por alguna palabra clave de su sector. A eso se le llama &lt;strong&gt;posicionamiento org&amp;aacute;nico&lt;/strong&gt; en buscadores. Precisamente a d&amp;iacute;a de hoy hay miles de profesionales especializados en SEO (Search Engine Optimization), que dominan una amplia gama de t&amp;eacute;cnicas que ayudan a que una p&amp;aacute;gina web aparezca en los buscadores cuando alguien busca en ellos algo relacionado con sus productos o servicios.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;Los buscadores tambi&amp;eacute;n ofrecen la posibilidad de que una p&amp;aacute;gina web aparezca siempre en la primera p&amp;aacute;gina de b&amp;uacute;squeda, eso s&amp;iacute; pagando. T&amp;eacute;cnicamente se le llama &lt;strong&gt;posicionamiento inorg&amp;aacute;nico&lt;/strong&gt;. Es m&amp;aacute;s eficaz pero bastante m&amp;aacute;s costoso que el m&amp;eacute;todo anterior.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;A parte de la promoci&amp;oacute;n en buscadores, usted tambi&amp;eacute;n puede generar tr&amp;aacute;fico hacia su web colocando publicidad en forma de banners gr&amp;aacute;ficos en p&amp;aacute;ginas de terceros; normalmente pagando bastante, pero controlando mejor el perfil de sus visitantes.&lt;/li&gt;&lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr style="padding: 20px; margin-left: 50px; font-family: 'trebuchet ms',verdana; font-size: 12px; letter-spacing: 0.1em;"&gt;&lt;br /&gt;            &lt;td style="vertical-align: top;"&gt;    &lt;img alt="" src="http://www.imasdeweb.com/UserFiles/Image/lema-3-fases-huevo-rentabilidad-off.jpg" style="margin: 0px; float: left;" /&gt;   &lt;/td&gt;&lt;br /&gt;            &lt;td style="padding-top:15px;"&gt;&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li&gt;La &lt;strong&gt;rentabilidad de una p&amp;aacute;gina web&lt;/strong&gt; o &lt;strong&gt;retorno de inversi&amp;oacute;n&lt;/strong&gt; debe medirse siempre en funci&amp;oacute;n de los objetivos de la web. De hecho, el concepto de rentabilidad deber&amp;iacute;a estar muy presente en las otras dos fases: desarrollo y promoci&amp;oacute;n.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;Habr&amp;aacute; casos en los que el retorno de inversi&amp;oacute;n se traducir&amp;aacute; en n&amp;uacute;mero de personas que alcanzan a entrar en nuestra web y llegan a conocer quienes somos. Habr&amp;aacute; casos en los que el retorno de inversi&amp;oacute;n se medir&amp;aacute; por el n&amp;uacute;mero de productos que consigamos vender en ella, o por el n&amp;uacute;mero de afiliados que podamos conseguir.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;Adem&amp;aacute;s siempre hay la posibilidad de &lt;strong&gt;ganar un buen dinero extra a partir de poner anuncios publicitarios (sponsors) de terceros&lt;/strong&gt;. Eso s&amp;iacute;, siempre que nuestra p&amp;aacute;gina web sea&amp;nbsp; suficientemente visitada y de calidad. Con un buen plan de gesti&amp;oacute;n publicitaria en su web, probablemente podr&amp;aacute; costear los gastos de mantenimiento de la misma con holgura.&lt;/li&gt;&lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-5751604922147540997?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/RXcqm-3yJx4/si-quiere-tener-presencia-en-internet.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/07/si-quiere-tener-presencia-en-internet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-4758183016889492962</guid><pubDate>Sun, 01 Jul 2007 19:11:00 +0000</pubDate><atom:updated>2007-07-12T05:09:58.461-07:00</atom:updated><title>Mail HTML con imagenes incrustadas en base64</title><description>&lt;p&gt;&lt;span style="color:#00c400"&gt;¿Quieres crear un mail HTML con imagenes insertadas que los programas de correo no bloqueen antes de visualizar? Por ejemplo, ¿quieres utilizar una firma con una imagen y que la imagen siempre se visualice sí o sí, sin que aparezca como un archivo adjunto a tus emails?&lt;/span&gt; Vamos a ver cómo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Igual que te habrá pasado a ti, antes de llegar a aquí habrás probado mil cosas: poner direcciones absolutas en los "src" de tus imagenes (en el codigo HTML), enviarte un mail para luego reenviarlo esperando que la segunda vez que lo envies la imagen ya vaya incrustada o embebida en el mail, etc... Posiblemente, además hayas leido mil y un métodos que habrás probado sin estar del todo satisfecho con los resultados. Muchos de ellos funcionan, pero parcialmente.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Quiero convertir con vosotros el siguiente método que hasta el momento me ha funcionado muy bien. Sentíos libres de comentar aquí vuestros resultados. Al final de mi explicación expondré lo que sé en cuanto a sus limitaciones.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#00c400"&gt;Nuestro objetivo va a ser conseguir firmar nuestros mails con un logotipo de nuestra empresa, de forma que éste se cargue inmediatamente en el programa de correo del destinatario, sea cuál sea (outlook, thunderbird, webmail, etc...).&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Básicamente, el "truco" consiste en que nuestra firma sea un pequeño trozo de código HTML que entre otras cosas incluya una etiqueta de imagen (&amp;lt;img src="..." /&gt;) con el logo de la empresa pero &lt;b&gt;encapsulado&lt;/b&gt; o &lt;b&gt;embebido&lt;/b&gt; codificado en base64. De esta forma, el mail pesará ligeramente un poco más, pero desde luego compensa por la efectividad del método: la imagen será decodificada en cuanto se intente visualizar el mail sea donde sea... en un programa gestor de correo local (outlook, thunderbird, etc...) o en una página de webmail (es decir, en un navegador).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Pasos:&lt;/p&gt;&lt;br /&gt;&lt;ul style="list-style-type: square; list-style-image: none; list-style-position: outside;"&gt;&lt;br /&gt; &lt;li&gt;Pasar la imagen (JPG o GIF) a &lt;b&gt;base64&lt;/b&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;construir un &lt;b&gt;archivo HTML&lt;/b&gt; conteniendo esa imagen en un tag &lt;b&gt;&amp;lt;img&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;insertar ese archivo HTML al final de nuestros mails como &lt;b&gt;firma predeterminada&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Para &lt;span style="color:#00c400"&gt;pasar la imagen (JPG o GIF) a &lt;b&gt;base64&lt;/b&gt;&lt;/span&gt;, lo más fácil es utilizar algún recurso on-line que nos haga el trabajo. El que yo utilizo es &lt;a href="http://www.motobit.com/util/base64-decoder-encoder.asp" onclick="javascript:window.open(this.href);return false;"&gt;Base64 online&lt;/a&gt;. Con el botón "examinar" indicamos cuál es el archivo del que queremos obtener su &lt;b&gt;codificación en base64&lt;/b&gt;. Y luego clicamos el botón "&lt;b&gt;convert de source data&lt;/b&gt;". Por ejemplo, si codificamos la siguiente imagen&lt;/p&gt;&lt;br /&gt;&lt;img src="http://www.imasdeweb.com/imasdeweb.jpg" /&gt;&lt;br /&gt;&lt;p&gt;obtenemos el siguiente código:&lt;/p&gt;&lt;br /&gt;&lt;div style="padding:7px;background-color:#eeeeee;color:#0000c4;font-size:10px;"&gt;/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAXQ3JlYXRlZCB3&lt;br /&gt;aXRoIFRoZSBHSU1Q/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0O&lt;br /&gt;EQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQU&lt;br /&gt;FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAPwCjAwEiAAIRAQMRAf/E&lt;br /&gt;AB0AAAEFAQEBAQAAAAAAAAAAAAYABAUHCAMCAQn/xABQEAABAwMCAwQFBggJCgcAAAABAgMEBQYR&lt;br /&gt;AAcSITEIE0FRFCJhcYEVFiMykdIJGCRCVleh0SUnN1KSlJXBwjM0Q1VicrGys+Flc3R1goOi/8QA&lt;br /&gt;HAEAAgIDAQEAAAAAAAAAAAAABQYDBAECBwgA/8QANREAAQMCBAQFAgQGAwAAAAAAAQIDEQAEBRIh&lt;br /&gt;MQYTQVEiYXGBkRShFTLB8BYzQlKx0TRyw//aAAwDAQACEQMRAD8A0veNx3RN3QqtIp1cqLSnakuN&lt;br /&gt;HZTNcbQklfCkD1gAOmn9dtHc+3KRKqc6tzW4kZHG4pNWWogZA6cXmRoavGUqFvBU5CThTNXU4MeY&lt;br /&gt;dzq/u0DJMfbKpoBwHnWW/h3iT/h15us7RF+1id0+64FMlREKgf1ETv1FN7jhaUyhKRCo6elZq+f9&lt;br /&gt;zfpFVv68797S+f8Ac36RVb+vO/e1AZ9p08kLozdXpVATUnEXPPpSquzCdZw2+0l15CkNrzzcAYUv&lt;br /&gt;hIGQDgkjBQbU4lelYt1qUUjMfEdhA7677DWjaWAucqJgEmBsBufQdak/n/c36RVb+vO/e0U2dD3C&lt;br /&gt;vuPJepNdqDqI6whzvKmtBBIyOqvYdVvn2nV79lmSUzLij5+u2w5j3FY/xaLcOheJ4m1Z3Ly8i52U&lt;br /&gt;QdEkjv1FUbuGWVOISJHl51DTrI3bgtlfpdVkJAye4qpWfs7zJ+zQTUbsvKkSlRp1YrkOQnq0/KeQ&lt;br /&gt;ofAq1ce429tYsW/5NNaixJdOabaV3biSlfrIBOFg+ZPUHRfFdtrfW0FLcYyAeBQVjv4bmPBX7R4E&lt;br /&gt;dR1GnVzBLO+fessLvXA+2SMqzoY0MER+p8qHC4caSlx5sZT1FZ0t2+7keuCmIXcFUWhUppKkqmOE&lt;br /&gt;KBWMggq5jWvbwvKi2Bbk2vXDUmKVSYaON6VIVhKR4AeJJPIAZJJAA1j6RbEqztxo1Imes7HnNALA&lt;br /&gt;wHElQKVD2EEHVV9qS/Kv2rd+pe2lvVmNTbatxEhSVyisMPyWEKLzqygKJxhSE8jyBI+sdEuCbx+z&lt;br /&gt;YvE3RJWlSRCjsRmmZ2jrR20wRONXaQVZGUJK1q7JEfc9PnpXTev8JnclamvwNt4Ddv01JKU1Se0l&lt;br /&gt;6W6P5wQcobHsIUfaOms31XtPbt1l4uSNx7lSonPDHqTrCf6LZSP2aVt9n24q5uhUbEmPQ6HV4Md2&lt;br /&gt;S49NUoxyhCAsLCkJUVJUkgpUAQQQdB11WRWbNu2XbVUhLarEZ4MmO36/GVYKCgj6wUFJKSOoUCOu&lt;br /&gt;mh67uHTK1n0n9K9FYXhPD9nFrZtoKsoVqApRSdlSZJB8jA8pFEf4wm6X6yLt/tuT9/S/GE3S/WRd&lt;br /&gt;v9tyfv6ebn7AXFtTBtldVeiS6hXHH2E06ApTrsd5rustLOMFf0yRhBUMgjOue6+xNc2fgW87WZUK&lt;br /&gt;RLq5fQYcJanFRXGu74m1qwElX0qR6pIyCMnUHNd/v+9EGnMGf5YaDZ5mbLAHiyzmjTYQddqb/jCb&lt;br /&gt;pfrIu3+25P39L8YTdL9ZF2/23J+/o+o3Y7uF+ntPV24aPbc1xIWabJ752QyD0DgbQUoVz+rnI8QD&lt;br /&gt;kadP9jaeUKTEvm3n5PRDbqJLSVHy4y1ge88vaOuqSsSZQvlquEhW0FYBntE0LVi3DaVFBU3P/WR8&lt;br /&gt;gR7zXDYXci/dy90Kdb9b3MvhqmPRZ0h1UCvPoe+ghvPpCSoqAypoA5B5E+/S3gvrdrZy9hAZ3Suy&lt;br /&gt;oU2UwmbTpzlWkDv2FEj1kFZAWlSFoUOYyg45EaadnG16pZfaTZolahrgVSFT6w2/HcwSk/JUoggj&lt;br /&gt;IIIIIIyCCCDg6vjdzYZ/eTby26s3XKfRPkadNhurmturU4hxMdaAkNpUcJV3uc+Kx561cxB1q5Sw&lt;br /&gt;tUJKVKkmIylO5J2gmgGI4hY4fjrTbqUfTuNgnwgiSVkKEAnWANNCDVXbY/hDN17FlsIrFQZvGlpV&lt;br /&gt;9JGqjYDxT48LyQFA+1XEPZr9FdgO0laPaIt5U2gPmLU44HptHlKAkRifHA+sg+Cxy8Dg5GvzWd7G&lt;br /&gt;81bZEW+rfefI9RDrUppKj5FRawPeeWq9ta47y7MO7rE1ttdLuCjvBL8VxWW5DSgCUKI5LbWkggjI&lt;br /&gt;IIUD0OjmHY1J8LocQN4IVHuCfvQ3FeHMA4naWcIKUXCRIyjKD6pgaHbMBIO87V+4Olof2+vem7k2&lt;br /&gt;TRbopCyunVWKiS1xfWTkc0K/2knKT7QdLXQAQoAjavMzja2VqbcEKBgjsRuKyPuEf40K6f8AxNz/&lt;br /&gt;AJ9aA7RZ/i4lDp+VNdf946z/ALhfyoVz/wBzc6f7+tAdorltvK6D8qa/5jrz1hP/AAsc9/8A0pof&lt;br /&gt;/mW377VltEI+gPT5D8aBTWSEuzp8hEdhBPQFayBn2ddUfvJf9Igb+7VVekV6BUGKJFhCVMgvh1lt&lt;br /&gt;SajIdUlShyI4FpyPJWrJ3W2soW7cikLm3TW6XDp8NthqmMU5p1lt3GXnAS8nKlryckA4CR0SNZ43&lt;br /&gt;T2PgWHuHZ9v0+syahBuGMxITLkxUsuNccp2OocAWoHBaJ688+Gs8NWljbHPbO53SkZtdAJSdBE6G&lt;br /&gt;BJPsK7Lwtb4ap0KW+S6UqlOUgAEa6kQSB209d61BNuazPTH/AEa+rZMfvFd3xVRGeHPL9mr97OVM&lt;br /&gt;fot4XLBk8IfjsJQsIVxAKC/PWVrZ7OtibaXGqYtyoXZU4LxDCKk02xEQ4lXJamklRcwRkAqCfMEc&lt;br /&gt;tai7M8p2bdFxSH3FOvPRwtxxXMqUXMkn3nVfC2cKt8dtUWCiV5lTrIHhOmw19NK55jyLFtkpsHFL&lt;br /&gt;TGpUI6iIGh9ZHpQr2guW6FQGf9Cx/wBJOpLs2Vd2HfjsEKPczoqwpPhxI9YH4AKHx1G9oL+VGpf+&lt;br /&gt;Ux/0k6lOzXRXZt7P1HgJjwYyuJfhxr9UD344j8NDGA4eMTyt+cr4zHN9poMqPw/xf2j/ABpTrtVL&lt;br /&gt;Xb1ZplejAJltwnFpKhkFTSipJP8AS/ZrBPZIkOSt45j7yy465Rqkta1cyomOskn463t2o0/OS4KZ&lt;br /&gt;b8dae/XEW3knklTyuEZ/og/HWCuybEdp+882JJbUzJZpFTacbV9ZK0x1gg+7B05LynEsT5e0j5ya&lt;br /&gt;/eujcJZf4exAH82T3iFRWjXaa2vdS063w4kSLUq9PdX/ADwwQpBPtCXwn3JSPDUNWrYjVPf3ai4H&lt;br /&gt;mgt6PSKg8skfXdgNvPR1Hl1BUyn3Np8tFASTctlqGSn5LuNHLoCGYhx9hB02dZUq+9vnQhRQik3K&lt;br /&gt;CsD1R+St+P8A8h9o0Ms3lhduoHX6f/BTVBi4cQW1BWvIdHsA9HxA+K5VSnIqV97RSn0h35McuKqJ&lt;br /&gt;4uf0zMSM40r4OhtXw1wrNJYrG4W0L0tsPopxr9UShYyC6xGZdaJ9ziUH4alVpJuSwlAZCIFzlRHg&lt;br /&gt;DGiAE/Ega4OkfPbboE8zTbnwPH/NGv3H9utbJxSfpYOzBI9fB/oVoy6tPIynZl6PL+fURfl/27tt&lt;br /&gt;RqXVrnVVZLlXkyGmEU5ltxX0KWlOLWpa09S+kDGehzpjt7utZ+6dYk0mgsXAxNaiPTA7PitBgJaQ&lt;br /&gt;VqSpSHFFOQCAcdSB46mrj2qj7rzrAj1CK7UKVSPlqoyYTOQqTwinIQzkcwFLdQVY58IVjHUF71Ku&lt;br /&gt;RimqhCCaJRUDnGaaTChMoHmBwoSkdcnyyToObOwZw9km1U464mZTmOpG5MwNdoB227xqXhrdg2nI&lt;br /&gt;VPqCpOaAnxKCdIMmBtp660FVCmMvbx7XV4pAmv0e5KW6vHNxEemurbJ8yBJKc+SEjw1Aby7p1Xaa&lt;br /&gt;37CqlPaamxJFQq8afT5Oe6lMlunK4FEHKSCkKSocwUgjxBY0ncmnXp2m7Yo1CkpnUagUWtR0zG88&lt;br /&gt;EqSumylPuo80ckISfENhXjoc7XKCrbaxFhJKU1aqAqA5DLMLAPvwfsOmFltbdzatPaqDRB69EAg9&lt;br /&gt;+x70x2NiTiuHWt8mZaMg9jzyB5QCPMUZbdb0WfutXm6HTYFZo1ZfiyJLbUktSI+WWFvLT3iSlXNL&lt;br /&gt;agDwdcZ89AfbBpbUm2rErxSn03vJtJcc8VtNdw61nzwZDo93CPDQJ2SUKO+lKUkKwim1YkjPqj5N&lt;br /&gt;lDPs6jVkdrc/xYWQMjnWKly/+iHrDdmxY4mj6ZGQLQqQJgwUkfsUaTh7GD8U2tvaSEqSSQTO4cHX&lt;br /&gt;WPCKAtuu1pfW2dm0+2qPPWzToPed0gHpxuKcP7VnS1NbWdi+8N1bCpd001n8hqAcLeVAZCHVtnlj&lt;br /&gt;zQdLT8hN/kGSY6elHbp/hMXDgueXzJOaQJzTrPnNayu6GqobxVKKgZU/WC0PeXcf36v/AH/imTtj&lt;br /&gt;VVJTnuXWXTgeHeJH+LVH3tQ7iibmVip06mzQ43UXH2JCI5UMhZKVDkQdfarcu5Vapz8CcmpyIj6e&lt;br /&gt;BxowhhQ8uSOWuUWuIIw9vE7V5lZU8VAEJ0H5gJkjqa84raLpZWlQhMdfSq51F3dt5H3Lfs+SmfGp&lt;br /&gt;tatuooeaXMVwMyYinUrW0V4PCtCkqUnPI94sEg40Wmza+M/wJUP6sv8AdpfM2vc/4Fnnw5R1/u0l&lt;br /&gt;4Y9fYXcC4ZaJ6EEGCO36+opgtrxVo6HmVwoT9xB+QYppXXUP1youNqSttchxSVJOQQVHBGro7LUV&lt;br /&gt;SplxSeYCG2W8jzJWf8OqiFm1/wD1LUPjGX+7U/bb9+2hHfapEWowm31BbiUQ+IqIGB1ST46v4E+v&lt;br /&gt;DsURf3DKylJUYA11BHWOpoXcpDzJaQoSYq5b52Lcvm+JFXfqiIkJ1Dae6baKnDwoCTzOAOnt0RPy&lt;br /&gt;rY2QtPu0AR2xlSGeLiflOY6+09OfIAeWqMfu/dN5JSp6sAHrwRuE/aE6FJ9u3TVZSpEynVSXIX9Z&lt;br /&gt;15lxaj8SNO7nEdpaOO3WF2Cg+4SStY2J1MCT8CB3oam0ccCUPOjKOgrubjlXbuJGq00jv5M5pRA6&lt;br /&gt;IAWkJSPYAAPhoH7Te1r3Zx7RdP3cgwHJFjVuQ43VURhzjOSG1tSU4/20rW4gnlx5HLAydW1Z9dRc&lt;br /&gt;NLWqjTkJTKaUVKjLSAAseY1su4Lepl10aZSaxBYqVNmNll+LJQFtuIPUEHRLga0dvbe8NyDmUpJk&lt;br /&gt;jc+KfWetGWMZ/BbpKgnM0tJQtM7pMTHYjof91iyltVp6lqVbkmRWKBOQVNyqWFOx5CFDGeXQkcik&lt;br /&gt;4UOhGvrNGuuNAegtU+rtw3jlxhMd0IUeXUY9g+waH94PwbdWp0uTUNqbjMaG6orVRalJW0Uext5I&lt;br /&gt;9YeACwCMc1HWb6t2Yd9qNIU0/QKq4oHHFGqLbwPtyl06rXHBKmlwHHABIEagA9Ae37NOVjhOEYkn&lt;br /&gt;mW2IoAPRaQlQ9QVCSO407VrRumXY1S1070aoxaaeJbiHkKZZSORUVKVhIHqgkk45Dy1nG++0FSqL&lt;br /&gt;vzacqlu/K1s2wy7T5T8c5TNEgLTMW15jgc4EHoe6Srx0CyezlvRLZLT9rVt5o9UOPBST8CvTL8Vj&lt;br /&gt;dj9CKj/+Pvav4bgP4aorGZaiMviGyZmAPX97y5YTgOEWK1uXN4hzMkpgFKR4hBP5jJiR7n22rQHq&lt;br /&gt;6zCTLtKdKqlFljvWJ1J4nGXk+BPDnhV0BScKBGCOWnkpd61FlbE6nT6lFXycjTqeX2nB5KQpBB+O&lt;br /&gt;sUROzXvJASoRrSrEcK6hp1Kc/YvTj8Xze8HPzcr+f/UD7+qI4YdaMMPuoT0AJgUDVwpYZypGIt+U&lt;br /&gt;5Z+c+/xR9upbUTs3bxWNfsCjPUykVNbypdFCVI7sow3LbZ4uYQtp8FOSeErI6Aa0BQl1V6AmdaMy&lt;br /&gt;RWaFM+lYmUwFxt0eHEBngWAcKSrBB5HWN5fZp3jqJT6VaVYklGeHvnErxnrjKvZrtS+zHvO053UK&lt;br /&gt;1KrFUs8wmQhoE+8rA0UvcFXfIbCitK0bKGh1ABmB1idIijeIYPY4hbMh/EEF1sZSolJzJkkSM0yJ&lt;br /&gt;3nXWfLZ7zV7TGXI7zFVDDieFzvGlNo4fHiUQAB55ONZ9v6gSu0vu3am2NlPt1GDRUuuVCrsHijNu&lt;br /&gt;OqR6Q6FdChCG2Wwfz1J5ZChqY21/B7bq3w8yu7q41bVHWfpkLm+mSFJ8koQoo/pLGPI635spsPaW&lt;br /&gt;wlsCj2vB7tTmFSp75C5MtY/OcXgdPBIAA8BzOiOC8KqYeNw+tSiREqOsTMAeff460hP4hhvC61PW&lt;br /&gt;lwLi4AITlEISSIKiZIUQJgD3orsy0abYVp0i3KOz3FMpcZEVhHjwpGMk+JPUnxJJ0tTOlrqQAAgV&lt;br /&gt;xha1OKK1mSdSe5NA0yEp+tuIUFBC3scQ8AT10+n2u3EiOOpecWpI5AgcznRCqntrc4yOZOefnrs+&lt;br /&gt;yl9soV9U+A0ITh6PGViSdqmLx0iq79Fd/mnXpqA+8rCGlKPs0dfJbHlry5SmloCfqpCgogeJHTOq&lt;br /&gt;icK18StKk54oGMR5KiCggg4xqSo9BFRS73i1tqQR0HUHRSaayvJweZyddY8NEckpHXrqRrDAlYK9&lt;br /&gt;RWpfkaVAqs5vGBJWD7Ug/wB+oyoW7KgjjADzQ/OSMY940ZqYJcKwop9x104QU4PMatLw5hYIAg1o&lt;br /&gt;HlCq/gRnROjkpP8AlEn9ujapVAU+OXOAuufmtg4JOkinMpWFAYIOde3IqFuh1YBUnpy1JZ2ptkqE&lt;br /&gt;718pxK1AmhaZBqlWyqTIQyk80s5OB7wB/wAdNPmq9yxJZ+xQ/u0alhvPQk6XozeRy1ZKFGphdqSI&lt;br /&gt;SIFBJtaSEnDzKlY6Akf8RpgulyELKVIKVA4wf+2rF9GbJ6dRr4qE0XA4UjiHidZDZ61Km9V/UKCG&lt;br /&gt;rXlLQC442ySM8Kicj34GvfzVkY5yGc+A9b92jf0ZB54z79efR2yrHDz9msctVafWuUAzaA/DCPXQ&lt;br /&gt;6lYOCkHljzyNdmrXkuICluNtA9EqJzjzwAdGyoLa1pUoA8PT2a9+joJJxk+Z1nlmK2N6qABvQbHo&lt;br /&gt;E+G4Fx5bSHB0AUof3Y0QUarvPL9GnN91JHQ+Cv8AvqS9FbPh9mvDkFtakqx6wxz8dbJSpO9QrfDo&lt;br /&gt;hYpzpaWlqWqdf//Z&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Para copiarlo todo fácilmente te recomiendo que hagas un clic dentro del recuadro donde está el código a copiar, y utilices el menú que aparece al hacer clic con el botón secundario del ratón. Primero clica en "Seleccionar todo", y luego en "copiar".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;El segundo paso consiste en &lt;span style="color:#00c400"&gt;construir un código HTML que inserte nuestro logotipo en &lt;b&gt;base64&lt;/b&gt;&lt;/span&gt;. Para ello puedes simplemente elaborar ese código HTML trabajando con la imagen tal como lo harías habitualmente (src="http://....") y luego reemplazaremos el src por el código en base64 de esa imagen.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Este es un ejemplo de cómo podría ser esa firma:&lt;/p&gt;&lt;br /&gt;&lt;div style="padding:7px;background-color:#eeeeee;color:#0000c4;font-size:12px;"&gt;&amp;lt;table style="border:1px #c5a500 solid;font-family:'trebuchet ms',verdana;font-size:14px;" cellpadding='15'&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&gt;&lt;br /&gt;&amp;lt;td&gt;&lt;br /&gt;&amp;lt;img id='logo' &lt;br /&gt;&lt;span style="color:#c40000;"&gt;src="data:image/jpg;base64,&lt;b&gt;/9j/4AAQSkZJRgABAQEASAB&lt;br /&gt;IAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAXQ3JlYXRlZCB3&lt;br /&gt;aXRoIFRoZSBHSU1Q/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKB&lt;br /&gt;wcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFB&lt;br /&gt;UU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQU&lt;br /&gt;...&lt;br /&gt;E+G4Fx5bSHB0AUof3Y0QUarvPL9GnN91JHQ+Cv8AvqS9FbPh9mvDkF&lt;br /&gt;takqx6wxz8dbJSpO9QrfDo&lt;br /&gt;hYpzpaWlqWqdf//Z&lt;/b&gt;"&lt;/span&gt; /&gt;&lt;br /&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;lt;td style="vertical-align:middel;"&gt;&lt;br /&gt;&amp;lt;p&gt;&amp;lt;b&gt;&lt;b&gt;Mi nombre&lt;/b&gt;&amp;lt;/b&gt;&lt;br /&gt;&amp;lt;br /&gt;&amp;lt;a href="&lt;b&gt;http://www.imasdeweb.com&lt;/b&gt;" style="color:#c40000;"&gt;&lt;br /&gt;&amp;lt;b&gt;www.imasdeweb.com&amp;lt;/b&gt;&amp;lt;/a&gt;&amp;lt;/p&gt;&lt;br /&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;lt;/tr&gt;&amp;lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Y el aspecto que tendría en el email es:&lt;/p&gt;&lt;br /&gt;&lt;table style="border:1px #c5a500 solid;font-family:'trebuchet ms',verdana;font-size:14px;" cellpadding='15'&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;img id='logo' src="http://www.imasdeweb.com/imasdeweb.jpg" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td style="vertical-align:middel;"&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Sergio Rodríguez Ríos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.imasdeweb.com" style="color:#c40000;"&gt;&lt;b&gt;www.imasdeweb.com&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;Lo último que quedaría es &lt;span style="color:#00c400"&gt;grabar este código HTML en un archivo con extensión &lt;b&gt;.htm&lt;/b&gt; y configurar nuestro programa de correo para que utilice de forma predeterminada ese archivo como firma de nuestros emails.&lt;/span&gt; Espero que lo disfrutéis!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-4758183016889492962?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/dP4uQmod2Po/mail-html-con-imgenes-incrustadas-en.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">18</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/07/mail-html-con-imgenes-incrustadas-en.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4714735783718459057.post-4524406993330940449</guid><pubDate>Fri, 15 Jun 2007 10:44:00 +0000</pubDate><atom:updated>2007-07-12T05:09:36.747-07:00</atom:updated><title>Quiero CREAR paginas WEB</title><description>&lt;span style="color: rgb(0, 153, 0);"&gt;¿Quieres crear páginas web y te preguntas hasta donde puedes llegar o qué puedes empezar a aprender para avanzar?&lt;/span&gt; Déjame darte la opinión de un humilde autodidacta con más de 7 años a la espalda metido en el mundillo.&lt;br /&gt;&lt;br /&gt;Por orden iré enumerando algunos pasos que podrías seguir:&lt;br /&gt;&lt;ul style="list-style-type: square; list-style-image: none; list-style-position: outside;"&gt;&lt;li&gt;crear un &lt;span style="color: rgb(0, 153, 0);"&gt;Blog&lt;/span&gt;&lt;/li&gt;&lt;li&gt;aprender a &lt;span style="color: rgb(0, 153, 0);"&gt;retocar fotos&lt;/span&gt;&lt;/li&gt;&lt;li&gt;aprender &lt;span style="color: rgb(0, 153, 0);"&gt;HTML&lt;/span&gt;&lt;/li&gt;&lt;li&gt;aprender &lt;span style="color: rgb(0, 153, 0);"&gt;CSS&lt;/span&gt;&lt;/li&gt;&lt;li&gt;programación en &lt;span style="color: rgb(0, 153, 0);"&gt;Javascript&lt;/span&gt;&lt;/li&gt;&lt;li&gt;copiar y pegar &lt;span style="color: rgb(0, 153, 0);"&gt;DHTML &lt;/span&gt;;)&lt;/li&gt;&lt;li&gt;bases de datos: &lt;span style="color: rgb(0, 153, 0);"&gt;PHP y MySQL&lt;/span&gt;&lt;/li&gt;&lt;li&gt;gestores de contenidos: &lt;span style="color: rgb(0, 153, 0);"&gt;Drupal, Joomla, PHPnuke, PostNuke, etc.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Déjame que explique un poco cada punto, por si alguno de vosotros se inicia en esto:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;De buenas a primeras,  &lt;span style="font-weight: bold;"&gt;sin ningún conocimiento específico ya puedes crearte un BLOG&lt;/span&gt;, como por ejemplo aquí en Blogger. Que nadie piense que un Blog solo sirve como "diario personal". Al contrario, si buscas por internet encontrarás gente que utiliza los blogs para las cosas más variopintas: carta de presentación de empresas, asociaciones, grupos musicales, etc; albumes de fotos (fotoblog), para artistas de la imagen o para tus viajes; promoción de tus productos o servicios; incluso si consigues -sea como sea- un número de visitas considerbale puedes albergar publicidad de otros en tu blog, ganando comisiones por ello!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;En cuanto te pongas a generar contenidos en una web te darás cuenta de que lo que vas a necesitar es incluir alguna que otra imagen (dibujos, fotos, etc...) en tus páginas. Mi consejo es que sigas algún tutorial básico para&lt;span style="font-weight: bold;"&gt; aprender lo mínimo indispensable para editar fotos&lt;/span&gt;: cambiarlas de tamaño, recortarlas, mezclarlas para hacer un poster, y de ahí en adelante lo que quieras. En particular te aconsejo que te descargues GIMP que es gratuito (es el Photoshop Opensource, por llamarlo de alguna manera). En esta página encontrarás &lt;a href="http://www.gimp.org.es/" target="_blank"&gt;el programa y tutoriales&lt;/a&gt; en español de cómo utilizarlo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si los dos puntos anteriores ya los controlas, &lt;span style="font-weight: bold;"&gt;el siguiente paso lógico es aprender algo de HTML&lt;/span&gt;, con un tutorial básico te bastará, o con artículos sueltos que te introduzcan poco a poco. Mi mejor consejo: "&lt;span style="font-style: italic;"&gt;aprende a medida que vayas necesitando&lt;/span&gt;", no te servirá de mucho leer 10 manuales completos de HTML. Mejor que cuando necesites aprender a hacer algo concreto busques en internet ayuda: descubrirás que en los foros están casi todas las preguntas respondidas. Eso sí, si quieres aprender vas a tener que leer muchos foros ;o) Para empezar te recomiendo que entres en la página de &lt;a href="http://www.desarrolloweb.com/desde0/" target="_blank"&gt;desarrolloweb.com&lt;/a&gt; en donde encontrarás de todo y en español!!!! Este enlace que te he dado lleva a la sección que ellos han llamado: &lt;span style="font-style: italic;"&gt;Aprende a crear webs desde cero&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El complemento ideal para HTML es CSS, &lt;span style="font-weight: bold;"&gt;dedica tan solo 5 horitas a aprender algo de CSS&lt;/span&gt;, y tus páginas cobrarán vida y color; dedicale 50 horas y tus páginas serán tan atractivas como las de los profesionales!!! Claro, eso sí... también dependerá tu creatividad.  Puedes empezar con este &lt;a href="http://www.desarrolloweb.com/manuales/manual-css-hojas-de-estilo.html" target="_blank"&gt;manual&lt;/a&gt; también de desarrolloweb.com (te dan la opción de descargartelo, creo que pagando, pero puedes leerlo sin pagar allí mismo... mira hacia la mitad de la página donde aparece el listado de capítulos.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Así como con CSS se trabajan aspectos como colores, tamaños, distancias, estilos de fuente, de párrafo, características de las tablas (colores de fondo, bordes, sangrados, márgenes, etc...), te encontrarás limitado en cuanto quieras darle un poco más de interactividad a tus páginas. Para ello tendrás que &lt;span style="font-weight: bold;"&gt;introducirte en la programación en Javascript&lt;/span&gt;. Esto puede parecer palabras mayores para algunos, especialmente por la palabra "programación". Sin embargo, como en los temas anteriores, aprender unas nociones básicas siempre es fácil y está al alcance de todo el mundo. Y como mínimo, siempre puedes &lt;span style="font-weight: bold;"&gt;utilizar y adaptar ejemplos de código de otros&lt;/span&gt;. Yo creo que así hemos aprendido todos: con ejemplos!!! Vamos, que lo que no te va a evitar nadie es invertir un montón de horas. Y aquí, más que nunca te recuerdo mi mejor consejo: "&lt;span style="font-style: italic;"&gt;aprende a medida que vayas necesitando&lt;/span&gt;". Por ejemplo, supongamos que te gustaría crear un reloj que mostrara la hora en tu página, pues ves a un buscador y busca exactamente "&lt;a href="http://www.google.es/search?q=javascript+reloj&amp;ie=utf-8&amp;amp;amp;amp;amp;amp;oe=utf-8&amp;aq=t&amp;amp;rls=org.mozilla:es-ES:official&amp;client=firefox-a" target="_blank"&gt;&lt;span style="font-style: italic;"&gt;javascript reloj&lt;/span&gt;&lt;/a&gt;" y verás que te aparecerán multitud de manuales, entradas en foros y artículos que te explicarán cómo hacerlo con código de ejemplo y todo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yo diría que el paso definitivo y profesional en el diseño de páginas web es aprender a mezclar el HTML, el CSS y el Javascript: &lt;span style="font-weight: bold;"&gt;aprende a incluir DHTML (HTML Dinámico) en tus páginas&lt;/span&gt;. Para que me entiendas, te permitirá hacer cosas como esos menús tan atractivos que se despliegan al pasar por encima. No es necesario que sepas programar en DHTML (lo cuál sólo está al alcance de gente con bastante experiencia en programación), sino que que bastará aprender a utilizar el código de otros en tus páginas. La mejor página con diferencia que he encontrado del tema es &lt;a href="http://www.dhtmlgoodies.com/" target="_blank"&gt;DHTMLgoodies&lt;/a&gt; en la que han puesto multitud de código ya listo para utilizar en tus páginas, para hacer de todo y del modo más profesional: menús, efectos de arrastrar y soltar, etc... increíble lo que hacen con DHTML. No dudes en gastar 15 minutos de tu tiempo en hacerle una visita rápida.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Llegados a un nivel de usuario avanzado (supongamos que más o menos ya sabes hacer todo lo anterior) lo que a uno le llama poderosamente es indudablemente la necesidad de &lt;span style="font-weight: bold;"&gt;trabajar con bases de datos y crear páginas dinámicas de gestión de contenidos&lt;/span&gt;: crear una base de datos en un servidor y crear las páginas HTML necesarias para acceder a ellas (grabar datos, leerlos, editarlos y eliminarlos). Y qué te voy a contar, en este campo las alternativas son innumerables!!!! A falta de datos fiables, pero en base a lo que veo en internet a diario, las dos plataformas más extendidas (diría que se comen más del 90% de las webs) son el paquete Microsoft (páginas ASP con bases de datos en SQLserver o Access)  y el paquete Opensource (por tanto gratuito) PHP y MySQL. La principal diferencia es que el primero solo funciona pagando las correspondientes licencias, y el segundo es gratuito, lo cuál quiere decir que por defecto el 99% de los servidores del mundo pueden ejecutar tus páginas hechas en PHP y con MySQL, pero no al revés! Mi consejo es que si vas por libre (en todos los sentidos) te instales un paquete que integre toda una plataforma de desarrollo web opensource. Y después de varios años de probar varios, descubrí hace unos meses uno fantástico (para Windows): &lt;a href="http://www.wampserver.com/en/" target="_blank"&gt;WAMP&lt;/a&gt;, que te instala de una vez el "servidor Apache", PHP, MySQL y otras herramientas (editores, etc.).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cuando tengas una nociones básicas de PHP y MySQL podrás lanzarte a instalar completas aplicaciones opensource hechas con estos lenguajes listas para descargar, instalar y utilizar. Son los llamados &lt;span style="font-weight: bold;"&gt;gestores de conocimiento o CMS&lt;/span&gt;. Como te digo son un conjunto de archivos (normalmente centenares) que uno se descarga del portal de la comunidad que los desarrolla, uno los sube a su propio servidor (via FTP), te creas una base de datos (una vacía y un usurio con acceso a ella) desde el panel de tu hosting, y en un navegador llamas al archivo de instalación (del tipo install.php) y por sí solito empieza a rellenar tu base de datos con decenas de tablas y te crea un usuario "administrador" con el que podrás acceder a la gestión de tu nuevo "portal". A partir de ahí, según tus conocimientos en HTML, CSS, Javascript, PHP y MySQl, podrás personalizar ese portal a tu medida, aunque sin saber de todo eso ya se puede hacer mucho (como en un blog!). Los CMS más populares a día de hoy: &lt;a href="http://www.drupal.org.es/" target="_blank"&gt;Drupal&lt;/a&gt;, &lt;a href="http://www.joomlaspanish.org/"&gt;Joomla&lt;/a&gt;, &lt;a href="http://www.mambohispano.org/" target="_blank"&gt;Mambo&lt;/a&gt;, &lt;a href="http://www.phpnuke-espanol.org/" target="_blank"&gt;PHPnuke &lt;/a&gt;, &lt;a href="http://www.dev-postnuke.com/" target="_blank"&gt;PostNuke&lt;/a&gt;, etc.. Aunque claro, hay CMS muy especializados en campos como el e-commerce, el e-learning, etc... Para estar a la última de los mejores CMS opensource visita el portal  &lt;a href="http://opensourcecms.com/" target="_blank"&gt;OpenSource CMS&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Espero que este resumen te haya ayudado a entender algo más acerca de &lt;span style="font-weight: bold;"&gt;crear páginas web&lt;/span&gt; ;) ¿Sabes? estoy convencido de que nunca podré devolver a la comunidad de internautas todo lo que he aprendido de ellos. Con este blog quiero añadir mi granito de arena. Ánimo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4714735783718459057-4524406993330940449?l=crear-paginas-web.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/crear-paginas-web/~3/28IwJ6oACdg/quiero-crear-pginas-web.html</link><author>noreply@blogger.com (Usher web)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://crear-paginas-web.blogspot.com/2007/06/quiero-crear-pginas-web.html</feedburner:origLink></item></channel></rss>
