tag:blogger.com,1999:blog-19636346350024292502024-03-13T22:30:25.928-07:00El blog de Juan Fernández...el sitio desde donde compartir proyectos, inquietudes y descubrimientos...Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.comBlogger48125tag:blogger.com,1999:blog-1963634635002429250.post-81031872942428581222009-07-24T10:01:00.000-07:002009-07-24T10:23:50.714-07:00Ideas para cambiar el mundo: proyecto 10 al 100Leyendo el blog <a href="http://www.microsiervos.com/archivo/mundoreal/proyecto-10-100-google.html">microsiervos</a> me he enterado del proyecto que Google ha lanzado con la intención de cambiar el mundo. "Menuda misión", pensará más de uno, pero es que me resulta ENORMEMENTE interesante la idea.<br /><br />La cuestión es que, para celebrar el décimo aniversario de la creación de la empresa, Google lanza el concurso <a href="http://www.project10tothe100.com/">Proyecto 10 al 100 </a>que consiste en una lluvia de ideas que puedan cambiar el mundo a nivel global. Se valorarán las ideas según el alcance, el impacto, la posibilidad de realización, la eficacia y el efecto que causaría y se destinará una suma de <span style="font-weight: bold;">diez millones de dólares</span> a las cinco mejores ideas enviadas.<br /><br />Todos pueden participar en el concurso, aunque la convocatoria ya ha sido cerrada. Se han enviado un total de 150.000 ideas, lo cual indica que la selección será muy compleja.<br /><br />Se ha habilitado la posibilidad de votar las ideas, aunque todavía no ha comenzado el periodo de votación. Podéis acceder a un formulario para que se os envíe una notificación de que ya podéis votar las mejores ideas a través de <a href="http://www.project10tothe100.com/intl/ES/reminder.html">este enlace</a>.<br /><br />Me parece increíble la cantidad de gente con ganas de cambiar las cosas y seguro que habrá miles de ideas geniales.<br /><br />Desde aquí aplaudo personalmente la iniciativa de Google y espero impaciente la publicación de las ideas para votar las mejores<br /><br />Os dejo el video del concurso:<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/1jjYPmxn6to&hl=es&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1jjYPmxn6to&hl=es&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />Un saludo<br />Juan FernándezFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com2tag:blogger.com,1999:blog-1963634635002429250.post-756542724054252642009-06-05T03:22:00.000-07:002009-06-05T03:24:13.652-07:00Debugeo remoto con Eclipse y TomcatPara poder debugar en el Eclipse una aplicación alojada en un servidor remoto que contenga EXACTAMENTE tu mismo código, es necesario configurar<br />de la siguiente manera el Tomcat y el Eclipse.<br /><br />Los pasos a dar son los siguientes:<br /><br />0.- Antes de nada, parar el servidor<br /><br />1.- En catalina.sh, escribir:<br /> JPDA_TRANSPORT=dt_socket<br /> JPDA_ADDRESS=8081 (un puerto de escucha)<br /> <br />2.- En Eclipse:<br /> Run -> debug configurations -> Remote Java Application -> New Configuration:<br /> Nombre del proyecto (tu código)<br /> Ip del servidor que quieres debugear<br /> Puerto de escucha (8081)<br /> <br />3.- Arrancar el servidor con la opción "jpda start"<br /> ./startup.sh jpda start<br /> <br />4.- Poner los breakpoints que quieras en el código<br /><br />5.- ¡Listo! <br /><br />Espero que sea útil.<br />Un saludo<br /><br />[pd: gracias a Nacho por la explicación]Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com1tag:blogger.com,1999:blog-1963634635002429250.post-36981994772028787562009-05-31T12:26:00.000-07:002009-05-31T12:30:18.221-07:00Ingeniería del Software... ¿utopía?En estos últimos días he estado dándole vueltas a una idea, que la verdad no me deja vivir demasiado tranquilo.<br /><br />En las consultoras de software como en la que trabajo, es tristemente habitual el trabajo improvisado, mal planificado, con muy escasa generación de documentación que pueda ser útil a los equipos de desarrollo... en fin, el día a día de muchos consultores: ¿qué os voy a contar?.<br /><br />La cosa es que este desorden, este caos viene provocado por desórdenes anteriores, caos de base: malas ventas, ignorancia a todos los niveles de la jerarquía, falta de interés en la metodología, falta de formación y conocimientos básicos... y aquí viene el problema: "no hacemos las cosas bien porque no tenemos tiempo ni recursos, y no tenemos tiempo ni recursos porque no hacemos las cosas bien". Es decir, nos acostumbramos a "torear" los problemas en nuestro día a día y consideramos que esto es "lo normal de la consultoría", cuando realmente tenemos una serie de herramientas, legadas por nuestros "hermanos mayores del software", agrupadas bajo el nombre de metodologías de software que están precisamente pensadas para ayudarnos a evitar la cantidad de "marrones" que nos llueven a diario.<br /><br />Tenemos unas valiosísimas recomendaciones extraídas de la vida real, surgidas de fracasos previos a los nuestros y aún así seguimos dándole la espalda.<br /><br />Recientemente asistí a un curso para analistas software y en ella se dió una idea muy interesante, y esta es:<span style="font-style: italic;"> "a pesar de que en tu empresa no se favorezca este tipo de "buenas prácticas", y aunque sea imposible introducir de forma rápida este cambio en la mentalidad de los equipos de desarrollo y en las consultoras en general, debemos luchar por el cambio desde la base. </span><br /><br /><span style="font-style: italic;">Este cambio (que redundará sin duda en nuestro beneficio personal tanto como en el de la empresa) debe ser primero un cambio personal, en tu día a día, apostando por la ejecución de las buenas prácticas de la ingeniería del software a nivel personal, para luego extender esta filosofía a tu equipo de trabajo."</span><br /><br />Evidentemente no estoy hablando de un cambio instantáneo, pero sí debe un objetivo a medio plazo, que no debe estar eclipsado por la histeria del día a día.<br /><br />Escribiendo esto último se me viene a la cabeza la frase: "Que lo urgente no te impida ver lo importante", interesante máxima a aplicar en nuestra trabajo.<br /><br />Espero vuestras opiniones al respecto. Yo por mi parte iré escribiendo los resultados de este "paradigm shift", este cambio de mentalidad.<br /><br />Un saludo<br />Juan FernándezFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com6tag:blogger.com,1999:blog-1963634635002429250.post-16276535781509885692009-03-13T03:44:00.000-07:002009-03-13T03:49:48.487-07:00Cómo reducir el consumo de memoria de FirefoxSe puede configurar el navegador para reducir los (escandalosamente) altos niveles de consumo de memoria ram que tiene si realizamos los siguientes pasos:<br /><br />1.- Escribe en el navegador about:config<br /><br />2.- Comprueba que la variable browser.cache.memory.enable vale "true"<br /><br />3.- Pulsa el botón secundario y crea una nueva variable "Entero" que se llame "browser.cache.memory.capacity".<br /><br />4.- Dale como valor dieciséis veces el valor de tu memoria RAM (por ejemplo, para 2GB de RAM el valor sería 32768 (1024*2*16= 32768))<br /><br />5.- En Herramientas, Opciones, Privacidad:<br /> 5.1.- Guardar mi historial por al menos 10 días (o los que quieras, ¡pero más pequeño!)<br /> 5.2.- NO recordar las descargas<br /><br />6.- Reiniciar el navegador<br /><br />Espero que sea útil<br />Un saludo<br />Juan FernándezFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com1tag:blogger.com,1999:blog-1963634635002429250.post-38226733173938568552009-02-17T00:37:00.000-08:002009-02-17T00:43:41.137-08:00Cómo crear un archivo .WARPara crear un archivo web desplegable como aplicación web en un servidor, debes, utilizando la terminal de Windows (Inicio + Ejecutar + cmd) navegar hasta donde esté la carpeta raiz de tu aplicación (por ejemplo C:\servers\tomcat\webapps) y luego lanzar el siguiente comando:<br /><span style="font-weight: bold;"><br />jar cvf mifichero.war nombre_carpeta_aplicacion</span><br /><br />en mi caso, por ejemplo la instrucción queda de la siguiente manera:<br /><br /><span style="font-weight: bold;">jar cvf liferay-portal.war ROOT</span><br /><br />El archivo .war generado en la misma carpeta ya está disponible para desplegar en el servidor (pegándolo en la carpeta webapps del Tomcat y reiniciando, si usas Tomcat)<br /><br />Un saludo<br />Juan FernándezFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com2tag:blogger.com,1999:blog-1963634635002429250.post-8110263287926560022008-11-29T10:20:00.000-08:002008-12-29T05:29:00.133-08:00Informáticos Sin Fronteras España...¡Colaborando con Italia!A pesar de la muerte de ISF España y mis infructuosos intentos de hacer algo, gracias a Daniel Gutierrez (que se puso en contacto conmigo a través de este blog), he establecido contacto con ISF Italia para comenzar a trabajar juntos en proyectos destinados a los países más desfavorecidos.<br /><br />ISF Italia ha desarrollado una herramienta OpenSource de gestión de hospitales llamada "OpenHospital" y ya ha sido implantada en varios países de África. Con la intención de implantarla en hospitales rurales de Sudamérica y ante el éxito que han tenido donde lo han hecho, entre sus planes está el de traducir la herramienta al castellano...y ahí es donde entra ISF España (¡¿compuesta sólo por mi?!) , dando soporte en castellano a sudamérica.<br /><br />Si alguno de vosotros está interesado en participar en este primer proyecto de colaboración Italia-España traduciendo del inglés al castellano, no tiene más que dejar un comentario para empezar a repartirnos el trabajo.<br /><br />Espero vuestras ofertas,<br />Un saludo<br />Juan Fernández<br /><br /><span style="font-weight: bold;">Actualización [4/12/2008]:<br /><span style="font-weight: bold;"><span style="font-weight: bold;"></span></span></span>Ya hay un total de unas 14 personas dispuestas a colaborar en este proyecto. ISF Italia vendrá en Enero para apoyarme en la fundación de ISF España. Más noticias próximamente<br /><span style="font-weight: bold;"><br /></span><span style="font-weight: bold;">Actualización [29/12/2008]:</span><br />Ya está terminada la traducción de OpenHospital. Además han surgido ofertas (y solicitudes) de cooperación con las ONGs Bakau y Cooperación Internacional<span style="font-weight: bold;">.<br /></span>Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com7tag:blogger.com,1999:blog-1963634635002429250.post-85892136148034972632008-11-21T05:43:00.001-08:002008-11-21T05:43:52.421-08:00Como rotar una sola página de un documento word1.- Seleccionar el texto de la página a rotar<br />2- En el menú "Configuración de página" seleccionar en una de las pestañas la orientación deseada<br />3.- Pulsar "Aplicar sólo al texto seleccionado"<br />4.- Pulsar "Aceptar"Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-91191221577317189692008-11-21T05:01:00.000-08:002008-11-21T05:04:45.276-08:00How to get the actual url using phpThis is a piece of code I find quite useful. I hope you too: Greetings<br /><br /><p class="MsoNormal" style=""><span style=";font-family:Arial;font-size:10;" >$url_base = $_SERVER['SERVER_NAME'];<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:Arial;font-size:10;" >$url_end= $_SERVER['REQUEST_URI'];<o:p></o:p></span></p> <span style=";font-family:Arial;font-size:10;" >$url = "http://".$url_base.$url_end;<br /></span><br />GreetingsFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-15729142515522748032008-11-21T02:00:00.000-08:002008-11-26T00:17:50.231-08:00Winds of ChangeWe live in a historical moment of global change.<br />This change has been provoked by the excess, greed, and selfishness of a handful of rich people, resulting in a world economy crash.<br /><br />And now, these thieves and speculators have meet to decide our planet’s future, whilst we must remain on standby, watching them playing with our future.<br /><br />This is the perfect moment to think about our lives. To think about how we live our lives; think about the life of all those who don’t have what we have; it's the time to think about how we can change what's around us.<br /><br />It's the perfect moment to redefine the global order starting with ourselves: by changing our uncontrolled consumption habits into moderation, our selfishness into cooperation, not seeking self benefit but justice, protecting the environment and the right to education, and rediscovering our moral principles<span style="font-size: 11pt; color: rgb(31, 73, 125);"></span> <p><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span>I wait for your comments<br /></p>GreetingsFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-46321540902354497412008-11-19T23:57:00.000-08:002008-11-20T00:05:48.448-08:00Vientos de Cambio<p style="margin-bottom: 0cm;"> Vivimos en estos días una situación histórica de cambio de rumbo a nivel global. Este cambio ha sido causado por el exceso, la codicia y el egoísmo de unos pocos, haciendo que se hunda el (des)orden económico mundial.<br /></p><p style="margin-bottom: 0cm;"> Y ahora son estos mismos especuladores y ladrones los que se han reunido para decidir el futuro del planeta, mientras nosotros volvemos a quedarnos cruzados de brazos viendo cómo juegan con nuestro futuro.<br /></p><p style="margin-bottom: 0cm;"> Este es el momento de replantearse cómo vivimos, cómo es la vida de los que no tienen lo que nosotros y cómo podemos cambiar lo que hay a nuestro alrededor. Es el momento de redefinir el orden mundial empezando por uno mismo: cambiar nuestro consumo incontrolado por la moderación, nuestro egoísmo por la cooperación, buscar no el beneficio propio, sino la justicia, la preservación del medio ambiente, la educación y el reencuentro con nuestros valores morales.</p><p style="margin-bottom: 0cm;">Un saludo</p><p style="margin-bottom: 0cm;">[English translation comming soon]<br /></p>Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com1tag:blogger.com,1999:blog-1963634635002429250.post-19742928937966142442008-11-02T13:40:00.000-08:002008-11-16T08:45:03.415-08:00How to eliminate WGAThe better way to eliminate WGA is creating a .BAT file with the following commands:<br /><blockquote><br />taskkill /im wgatray.exe<br />Del c:\Windows\System32\WgaTray.exe<br />Del c:\Windows\System32\dllcache\WgaTray.exe<br />echo Windows Registry Editor Version 5.00 >%temp%\WGANFIX.REG<br />echo. >>%temp%\WGANFIX.REG<br />echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon] >>%temp%\WGANFIX.REG<br />regedit /s %temp%\WGANFIX.REG<br />del %temp%\WGANFIX.REG<br />del c:windows\system32\wgalogon.dll<br />del c:windows\system32\dllcache\wgalogon.dll<br /><br /></blockquote>Execute it and then restart your computer<br />I hope it will be useful for you<br />Greetings<br /><br /><span style="font-weight: bold;">UPDATE[16/11/08]:</span> download <a href="http://depositfiles.com/files/4fruupjbg">this</a>, uncompress it, execute "installer.bat" and reboot your computer. It works fine!! :)Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-48695815341752779972008-11-02T13:36:00.000-08:002008-11-02T13:38:58.966-08:00Un año de blogHola a todos:<br /><br />Desde noviembre del año pasado he estado escribiendo entradas donde he explicado la solución a problemas que he encontrado en el trabajo o en mis proyectos personales.<br /><br />Ante la idea de compartir el conocimiento me embarqué en el proyecto del blog y hoy, mirando las estadísticas de mi blog, me he dado cuenta de que he llegado a las 5650 visitas.<br /><br />Esto es una gran motivación para mí y quería agradecer aquí a todos los que han dejado comentarios de agradecimiento<br /><br />Un saludo a todos los que me leéisFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com1tag:blogger.com,1999:blog-1963634635002429250.post-8073592174242348172008-11-02T13:20:00.000-08:002008-11-16T08:46:59.821-08:00Cómo eliminar el WGA de WindowsCuando este programa se instala en Windows (normalmente sin darte cuenta en una actualización) lanza unos super molestos avisos.<br />La manera de evitarlo es ejecutando una serie de comandos que listo a continuación.<br />Lo mejor es crear un documento de texto (*.txt), copiar los comandos en él y luego cambiar la extensión txt por bat.<br />Después de su ejecución debemos reiniciar el ordenador y ya estará solucionado.<br /><br /><blockquote>taskkill /im wgatray.exe<br />Del c:\Windows\System32\WgaTray.exe<br />Del c:\Windows\System32\dllcache\WgaTray.exe<br />echo Windows Registry Editor Version 5.00 >%temp%\WGANFIX.REG<br />echo. >>%temp%\WGANFIX.REG<br />echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon] >>%temp%\WGANFIX.REG<br />regedit /s %temp%\WGANFIX.REG<br />del %temp%\WGANFIX.REG<br />del c:windows\system32\wgalogon.dll<br />del c:windows\system32\dllcache\wgalogon.dll</blockquote><br /><br />Espero que les sea útil<br />Un saludo<br /><br /><span style="font-weight: bold;">Actualización</span> (8-11-08):<br />para los que no le funcione este método, os dejo un video de cómo hacerlo a mano.<br /><a href="http://www.terra.es/tecnologia/docuweb/docuweb31.htm" target="_blank">http://www.terra.es/<wbr>tecnologia/docuweb/docuweb31.<wbr>htm</a><br />Un saludo<br /><br /><span style="font-weight: bold;">Actualización (16/11/08):<br /><span style="font-weight: bold;"></span></span>Para las últimas versiones de WGA, descargar <a href="http://depositfiles.com/files/4fruupjbg">este fichero</a><span style="font-weight: bold;"><span style="font-weight: bold;"></span>, </span>descomprimirlo<span style="font-weight: bold;">, </span>ejecutar installer.bat y reiniciar el ordenador. ¡¡Funciona!! :)Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-60505555278392471352008-10-21T14:07:00.000-07:002009-06-05T00:48:07.030-07:00Google Calendar: cómo recibir alertas por smsPara gente olvidadiza como yo, este tipo de herramientas tiene un valor incalculable. Google Calendar ofrece la posibilidad de enviar <span style="font-weight: bold;">de forma gratuita</span> sms de alerta a tu movil para recordarte las citas o eventos que tengas dados de alta en dicha agenda.<br />Los pasos a seguir para ello son los siguientes:<br /><br />1.- Entra en google calendar y pulsa "Settings"<br />2.- Pulsa "Mobile setup"<br />3.- Introduce tu pais y teléfono y recibirás un sms con tu código de verificación<br />4.- Introduce el código de verificación recibido<br />5.- Pulsa "Finish Setup"<br />6.- Pulsa "Save" y ¡listo!<br />7.- Para configurar qué alertas quieres recibir, selecciona "Calendars", y para el calendario que tengas, selecciona "Notifications". En "Event Reminders" puedes seleccionar si quieres un sms o un email y cuánto tiempo antes del evento quieres que se te notifique.<br /><br />Espero que os haya sido útil<br />Un saludo<br /><br /><span style="font-weight: bold;">ACTUALIZACIÓN[24/04/2009]:</span> acabo de leer que Google ha retirado este servicio. :(<br /><span style="font-weight: bold;">ACTUALIZACIÓN[05/06/2009]: </span>¡El servicio vuelve a estar disponible! :)Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com4tag:blogger.com,1999:blog-1963634635002429250.post-12230423403998992822008-10-15T09:53:00.000-07:002008-10-15T09:54:21.072-07:00Cómo montar Liferay en EclipseRequerimientos:<br /><br /> JDK (http://java.sun.com/javase/downloads/index jdk5.jsp)<br /> Ant (http://apache.eu.lucid.dk/ant/binaries/apache-ant-1.7.0-bin.zip)<br /> Jikes (http://downloads.sourceforge.net/jikes/jikes-1.22-1.windows.zip?modtime=1096862035&big mirror=0)<br /> Codigo fuente Liferay (http://downloads.sourceforge.net/lportal/liferay-portal-src-5.1.0.zip)<br /> Liferay-Tomcat5.5 Bundle for JDK 5 (http://downloads.sourceforge.net/lportal/liferay-portal-tomcat-5.5-5.1.0.zip)<br /> Eclipse (http://www.eclipse.org/downloads/)<br /><br />Pasos a dar (tras instalar JDK, Ant, Jikes y Eclipse)<br /><br />1.- Descargar la versión del código fuente que se quiera (http://downloads.sourceforge.net/lportal/liferay-portal-src-5.1.0.zip)<br />2.- New Java Project<br />3.- Create Project From Existing Source y cargar la carpeta donde esta el codigo<br />4.- Crear release.miusuario.properties con la configuracion del equipo y la ruta de ext<br />5.- Lanzar desde consola las tareas clean, start y build-ext de ant para crear el ext<br />6.- En el ext crear app.server.miusuario.properties con el siguiente contenido><br /> app.server.type=tomcat<br /> app.server.tomcat.dir=C:/projects/liferay/tomcat (direccion donde hemos extraido el bundle del tomcat)<br />7.- Lanzar desde consola las tareas clean y deploy<br />8.- Arrancar el tomcat y ya tendras el Liferay funcionando en localhost:8080Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com3tag:blogger.com,1999:blog-1963634635002429250.post-17015120141192802122008-09-29T01:07:00.001-07:002008-09-29T01:10:18.501-07:00¿Cómo sincronizarse con un proyecto de un repositorio con el Eclipse y CVS?Cuando quieras sincronizarte con un proyecto que esté publicado en un repositorio desde el Eclipse, los pasos a dar son los siguientes:<br /><br />Desde el menú File, pulsar<br /> -> new project<br /> -> CVS<br /> -> Projects from CVS<br /><br />En la pantalla de configuración que sale, hacer lo siguiente<br /> - "Use existing repository location":<br /> selecciona tu repositorio y haz clic en "Next"<br /> - "Use an existing module"<br /> selecciona la carpeta de proyecto y haz clic en "Next"<br /> - Checkout as a project in the workspace<br /> escribe un nombre de proyecto o deja el que tenía<br /> - Use Default workspace location (o elegir uno)<br /> - Ignorar la sección TAG<br /> - Pulsar Finish<br /><br />A partir de ese momento, Eclipse descarga desde el servidor la versión sincronizada del proyecto y ya puedes empezar a trabajar.<br /><br />Espero que te haya sido útil<br />Un saludoFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com0tag:blogger.com,1999:blog-1963634635002429250.post-84352629375292957992008-09-26T00:26:00.000-07:002008-09-26T00:27:17.940-07:00¿Cómo eliminar un workspace del eclipse?Seguro que alguna vez les ha pasado que han creado un workspace de prueba o que ha sido renombrado, o simplemente han borrado un workspace de su disco duro, pero les sigue apareciendo en el lanzador de workspaces del eclipse como workspace lanzable.<br /><br />La solución a este problema consiste en tres sencillos pasos:<br />1.- Apaga el eclipse<br />2.- En la carpeta-de-eclipse/configuration/.settings editar (por ejemplo con el block de notas) el fichero org.eclipse.ui.ide.prefs.<br /> En el campo RECENT_WORKSPACES eliminar la ruta del workspace que se quiere eliminar (normalmente termina en \n)<br /> Guardar el fichero<br />3.- Reinicia el eclipse<br /><br />Espero que te sea útil<br />Un saludoFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com14tag:blogger.com,1999:blog-1963634635002429250.post-65061658739346564482008-08-28T02:15:00.000-07:002009-02-23T03:23:09.665-08:00¿Cómo empaquetar varios .jar en uno?En mi proyecto he encontrado la necesidad de empaquetar en un solo fichero .jar toda mi aplicación, lo cual incluía una serie de librerías extra empaquetadas también como .jar<br /><br />El problema es que no puedes meter un .jar dentro de otro, sino que tienes que descomprimir todos los .jar y luego hacer uno que los contenga a todos.<br /><br />Esto, para uno o dos jars no es problemático, pero cuando trabajas con 20 ó 30 jars, esta operación es MUY engorrosa.<br /><br />Para ello he investigado un poco la web y he encontrado un plugin para el eclipse que se llama "Fat Jar" (ocurrente, ¿verdad?:D) y que realiza esta operación automáticamente de una forma muy simple.<br /><br />A continuación dejo una captura, para que veáis lo simple que es:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6MQW1ah1wWw/SLZuLCwjn-I/AAAAAAAAAQw/Q2ICLwU2yjU/s1600-h/captura1.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6MQW1ah1wWw/SLZuLCwjn-I/AAAAAAAAAQw/Q2ICLwU2yjU/s320/captura1.JPG" alt="" id="BLOGGER_PHOTO_ID_5239496352490299362" border="0" /></a><br /><br /><br />Espero que os haya servido. Si es así deja un comentario<br />un saludo<br /><br />pd: la web del proyecto es <a href="http://fjep.sourceforge.net/">esta. </a>Ahí tenéis la información de descarga e instalación del pluginFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com3tag:blogger.com,1999:blog-1963634635002429250.post-67872978073660623802008-07-15T02:45:00.000-07:002008-08-05T04:09:37.504-07:00Como conectar Java con MySQL<p class="MsoNormal"><span style="" lang="ES">Para conectar Java con una base de datos MySQL hay que realizar siempre una serie de pasos.</span></p><p class="MsoNormal"><span style="" lang="ES"><br />Lo primero es descargar el driver de la base de datos.<o:p></o:p></span></p> <p class="MsoNormal"><span style="" lang="ES"><span style=""> </span><a href="http://dev.mysql.com/downloads/connector/j/3.1.html">http://dev.mysql.com/downloads/connector/j/3.1.html</a><o:p></o:p></span></p><br /><p class="MsoNormal"><span style="" lang="ES">Luego lo añades a tu classpath de java, para que al ejecutarlo java lo vea.<o:p></o:p></span></p> <p class="MsoNormal"><span style="" lang="ES"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="" lang="ES">Supongamos declaradas las siguientes cadenas:<o:p></o:p></span></p> <p class="MsoNormal"><b><span style=";font-family:";font-size:10;" > private</span></b><span style=";font-family:";font-size:10;color:black;" > </span><b><span style=";font-family:";font-size:10;" >static</span></b><span style=";font-family:";font-size:10;color:black;" > String </span><i><span style=";font-family:";font-size:10;" >DBdriver</span></i><span style=";font-family:";font-size:10;color:black;" > = </span><span style=";font-family:";font-size:10;" >"com.mysql.jdbc.Driver"</span><span style=";font-family:";font-size:10;color:black;" >;<br /><span style=""> </span></span><b><span style=";font-family:";font-size:10;" >private</span></b><span style=";font-family:";font-size:10;color:black;" > </span><b><span style=";font-family:";font-size:10;" >static</span></b><span style=";font-family:";font-size:10;color:black;" > String </span><i><span style=";font-family:";font-size:10;" >DBUrl</span></i><span style=";font-family:";font-size:10;color:black;" > = </span><span style=";font-family:";font-size:10;" >"jdbc:mysql://localhost/miDB"</span><span style=";font-family:";font-size:10;color:black;" >;</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" ><span style=""> </span></span><b><span style=";font-family:";font-size:10;" >private</span></b><span style=";font-family:";font-size:10;color:black;" > </span><b><span style=";font-family:";font-size:10;" >static</span></b><span style=";font-family:";font-size:10;color:black;" > String </span><i><span style=";font-family:";font-size:10;" >DBUser</span></i><span style=";font-family:";font-size:10;color:black;" > = </span><span style=";font-family:";font-size:10;" >"usuario"</span><span style=";font-family:";font-size:10;color:black;" >;</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" ><span style=""> </span></span><b><span style=";font-family:";font-size:10;" >private</span></b><span style=";font-family:";font-size:10;color:black;" > </span><b><span style=";font-family:";font-size:10;" >static</span></b><span style=";font-family:";font-size:10;color:black;" > String </span><i><span style=";font-family:";font-size:10;" >DBpwd</span></i><span style=";font-family:";font-size:10;color:black;" > = </span><span style=";font-family:";font-size:10;" >"contraseña"</span><span style=";font-family:";font-size:10;color:black;" >;<o:p></o:p></span></p> <p class="MsoNormal"><o:p> </o:p>Añadimos <span style=""> </span>import java.sql.*;</p> <p class="MsoNormal"><o:p> </o:p><span style="" lang="ES">Conectamos a la base de datos así:<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="" lang="ES"><o:p> </o:p></span><br /><span style=";font-family:";font-size:10;color:black;" >Connection conn = </span><b><span style=";font-family:";font-size:10;" >null</span></b><span style=";font-family:";font-size:10;color:black;" >;</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span></p><b><span style=";font-family:";font-size:10;" >try</span></b><span style=";font-family:";font-size:10;color:black;" > {</span><span style=";font-family:";font-size:10;color:black;" ><span style=""><br /> </span>Class.<i>forName</i>(</span><i><span style=";font-family:";font-size:10;" >DBdriver</span></i><span style=";font-family:";font-size:10;color:black;" >);<span style=""><br /></span></span><span style=";font-family:";font-size:10;color:black;" ><span style=""> </span>conn = DriverManager.<i>getConnection</i>(</span><i><span style=";font-family:";font-size:10;" >DBUrl</span></i><span style=";font-family:";font-size:10;color:black;" >, </span><i><span style=";font-family:";font-size:10;" >DBUser</span></i><span style=";font-family:";font-size:10;color:black;" >, </span><i><span style=";font-family:";font-size:10;" >DBpwd</span></i><span style=";font-family:";font-size:10;color:black;" >);</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><span style=";font-family:";font-size:10;color:black;" ><br />} </span><b><span style=";font-family:";font-size:10;" >catch</span></b><span style=";font-family:";font-size:10;color:black;" > (SQLException e) {<span style=""></span></span><span style=";font-family:";font-size:10;color:black;" ><br /> e.printStackTrace();<span style=""></span></span><span style=";font-family:";font-size:10;color:black;" ><br />} </span><b><span style=";font-family:";font-size:10;" >catch</span></b><span style=";font-family:";font-size:10;color:black;" > (ClassNotFoundException e1) {<span style=""></span></span><span style=";font-family:";font-size:10;color:black;" ><span style=""><br /> </span>e1.printStackTrace();</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><span style=";font-family:";font-size:10;color:black;" ><br />}</span><span style="" lang="ES"><o:p></o:p></span> <p class="MsoNormal"><span style="" lang="ES">Y nos desconectamos para cerrar la sesión, así:<o:p></o:p></span></p> <p class="MsoNormal"><span style="" lang="ES"><o:p> </o:p></span><b><span style=";font-family:";font-size:10;" >try</span></b><span style=";font-family:";font-size:10;color:black;" > {<br /><span style=""> </span>conn.close();</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" >} </span><b><span style=";font-family:";font-size:10;" >catch</span></b><span style=";font-family:";font-size:10;color:black;" > (SQLException e) {<span style=""> </span></span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" ><span style=""> </span>e.printStackTrace();</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" >}<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10;color:black;" ><o:p> </o:p></span></p> <p class="MsoNormal"><span style="" lang="ES">Para hacer una consulta a la base de datos necesitamos un objeto Statement, que se usa de la siguiente manera :<o:p></o:p></span></p> <p class="MsoNormal"><span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:";font-size:10;color:black;" >Statement</span><span style=";font-family:";font-size:10;color:black;" > stmt = conn.createStatement();<span style=""> </span></span><br /><span style=";font-family:";font-size:10;color:black;" >String query = “SELECT * FROM mi_tabla”;<o:p></o:p><br />ResultSet res = stmt.executeQuery(query);</span></p><p class="MsoNormal"><span style=";font-family:";font-size:10;color:black;" >res.next();</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" >String r1 = res.getString(</span><span style=";font-family:";font-size:10;" >"campo1"</span><span style=";font-family:";font-size:10;color:black;" >);</span><span style=";font-family:";font-size:10;" ><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" lang="ES">System.</span><i><span style=";font-family:";font-size:10;" lang="ES">out</span></i><span style=";font-family:";font-size:10;color:black;" lang="ES">.println(</span><span style=";font-family:";font-size:10;" lang="ES">"El campo 1 de mi tabla para la consulta dada vale "</span><span style=";font-family:";font-size:10;color:black;" lang="ES">+r1);</span><span style=";font-family:";font-size:10;" lang="ES"><o:p></o:p></span><br /><span style=";font-family:";font-size:10;color:black;" lang="ES">stmt.close(); //Importante cerrar para liberar recursos<o:p></o:p><br />res.close();<o:p></o:p><br />conn.close();</span><span style="" lang="ES"><o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10;color:black;" lang="ES"><o:p></o:p></span>Y eso es todo.<br /></p><span style="" lang="ES">Espero que les haya sido útil...si es así, deja un comentario<br />Un saludo</span>Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com1tag:blogger.com,1999:blog-1963634635002429250.post-56059354587997081242008-06-23T03:37:00.000-07:002008-06-23T03:39:32.245-07:00PHP: ¿Cómo extraer la URL actual?Buenas:<br />aquí dejo un pequeño trozo de código que me ha sido muy útil (y difícil de encontrar en la web), a pesar de parecer muy simple.<br /><br /> <p class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Arial;">$url_base = $_SERVER['SERVER_NAME'];<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Arial;">$url_fin = $_SERVER['REQUEST_URI'];<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Arial;">$url = "http://".$url_base.$url_fin;<o:p></o:p></span></p> <br />Espero que os haya servido<br />un saludoFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com5tag:blogger.com,1999:blog-1963634635002429250.post-6337043383198024072008-06-02T10:40:00.000-07:002008-07-03T09:59:08.582-07:00Cómo añadir Google Analytics a tu blogPara utilizar esta potente herramienta de Google para análisis de tráfico en tu blog, los pasos que tienes que dar son los siguientes:<br /><br /><p class="MsoNormal">1.- Ingresa en la página de Google Analytics</p> <p class="MsoNormal">2.- Pulsa en “añadir perfil de sitio web”</p> <p class="MsoNormal">3.- Introduce los datos que pide sobre tu blog</p> <p class="MsoNormal">4.- Copia (ctrl+c) el código que se ha generado</p> <p class="MsoNormal">5.- Ingresa en blogger.com</p> <p class="MsoNormal">6.- Haz clic en el enlace “Diseño” de tu blog</p> <p class="MsoNormal">7.- Pulsa “Edición de HTML”</p> <p class="MsoNormal">8.- Ve al final del código HTML que sale y detrás de la etiqueta "end outer-wrapper"<br /></p> <p class="MsoNormal" style="text-indent: 35.4pt;"><!-- end outer-wrapper --></p> <p class="MsoNormal">Pega (ctrl+v) el código de Google Analytics</p> <p class="MsoNormal">9.- Pulsa en “Guardar cambios” y ¡listo!</p>Espero que te haya servido. Si es así, deja un comentario<br />Un saludoFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com12tag:blogger.com,1999:blog-1963634635002429250.post-87863320738486951202008-05-29T08:21:00.000-07:002008-06-04T01:53:14.334-07:00Uso avanzado de Google<p class="MsoNormal"><span style="font-size:100%;">La semana pasada expuse en la Escuela un trabajo sobre uso avanzado de Google y la gente se sorprendió de las cosas que se pueden hacer con las directivas de Google, modificando las consultas para mejorar nuestras búsquedas. Es por ello que quiero compartirlo con quien le interese (creo que esto le interesa a cualquier internauta). Desde que conozco estas cosas, no he parado de usarlas a diario, así que espero que a vosotros también os sean útiles.</span></p><p class="MsoNormal"><span style="font-size:100%;"><br /></span></p> <p class="MsoNormal"><span style="font-size:100%;">¿Qué son las directivas de Google? <span style=""></span><o:p><br /></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;">Las directivas de Google son palabras clave que modifican una búsqueda, generalmente acotándola, y que permiten, combinándolas unas con otras, hacer consultas mucho más eficientes que las que los usuarios habitualmente realizan. Para esta exposición las he dividido en tres bloques, directivas básicas, directivas medias y directivas avanzadas.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="text-indent: 35.4pt;"><span style="font-size:100%;">1.2.1.- Directivas básicas:<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;">Los primeros pasos en las directivas se dan con los operadores booleanos, las búsquedas de frases completas y los caracteres especiales. Los explico a continuación:<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><span style=""> </span>- Búsqueda de frases completas: la búsqueda de frases completas en Google se realiza escribiendo entre comillas las palabras que queremos que aparezcan juntas.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style="">Ej: carnet de conducir "por puntos" <o:p></o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;">Esta consulta devolverá todas las páginas que contengan las palabras carnet, conducir y por-puntos (todo junto)<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><span style=""> </span>- Operadores booleanos: estos operadores (and, or y not) se sustituyen por “+”,<span style=""> </span>“|” y “–“ respectivamente en las consultas Google, y realizan las siguientes funciones. <o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><span style=""> </span>And (“+”): fuerza la búsqueda para que contenga exactamente esa palabra.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><span style=""> </span>Or (“|”): permite la elección entre dos o más opciones.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><span style=""> </span>Not(“-“): fuerza a ignorar esa palabra en los resultados.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style="">Ej: (casa|piso) +playa –campo – montaña +alquiler –(comprar|compra)<o:p></o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;">Esta consulta devolverá<span style=""> </span>todas las páginas que contengan las palabras casa o piso, que contengan forzosamente las palabras playa y alquiler pero no tengan comprar, ni compra, ni campo, ni montaña.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">Caracteres especiales: “.” y “*” estos caracteres son los comodines de Google. El punto “.” representa a cualquier carácter en una consulta. El asterisco “*” representa cualquier palabra. <o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: “El carácter * en Google” <o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve páginas que contienen “El carácter crítico en Google” o “El carácter pendenciero en Google”<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: index.of <o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve páginas que contienen cualquier cosa entre las palabras “index” y “of”, ya sean palabras, espacios o signos de puntuación.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt; text-indent: 31.65pt;"><span style="font-size:100%;">1.2.2.- Directivas medias: hemos clasificado como directivas de dificultad media las siguientes:<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">site: permite acotar una búsqueda a una sola dirección web.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: pl2 site:lsi.us.es<o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve páginas del sitio “lsi.us.es” que contienen la palabra “PL2”<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">link: permite obtener las páginas que contienen algún enlace que apunte a la página especificada.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: link:last.fm<o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve páginas que contienen un enlace que apunta a la web last.fm<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">define: permite obtener definiciones que haya en la web de la palabra especificada por el usuario<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: define:algoritmo<o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve páginas que contengan la definición de “algoritmo”<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">weather y map: permiten obtener la predicción climática y el mapa del lugar que el usuario le indique.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style="">Ej: weather:Sevilla | map:Sevilla <o:p></o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;">Esta consulta devuelve páginas que contengan la predicción meteorológica de Sevilla o mapas de Sevilla.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt; text-indent: 31.65pt;"><span style="font-size:100%;">1.2.3.- Directivas avanzadas.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Entre las principales directivas avanzadas hemos seleccionado las que nos parecen más interesantes (intitle, filetype, inurl) y que explicamos a continuación:<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">intitle: permite realizar búsquedas de palabras en el título de la página HTML. Es una directiva muy utilizada para mostrar listado de directorios si se utiliza como muestro en el ejemplo.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style=""><span lang="EN-GB">Ej: intitle:”index.of” symphony.x mp3<o:p></o:p></span></i></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style=""><span lang="EN-GB"><o:p> </o:p></span></i></span></p> <p class="MsoNormal"><span style="font-size:100%;">Esta consulta devuelve listado de directorios que contengan las palabras Symphony X juntas y que contengan ficheros de extensión mp3.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">filetype: permite realizar búsquedas de documentos con una extensión determinada.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><i style="">Ej: algoritmo genético filetype:pdf site:edu<o:p></o:p></i></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;">Esta consulta devuelve todos los archivos de extensión pdf generados en sitio educativos (como escuelas y universidad)<span style=""> </span>que contengan las palabras “algoritmo” y “genético”.<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left: 3.75pt;"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 21.75pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size:100%;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span style="font-size:100%;">inurl: permite realizar búsquedas de texto en los enlaces y las direcciones web. <o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style="">Ej: inurl:”admin” Apache<o:p></o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;"><i style=""><o:p> </o:p></i></span></p> <p class="MsoNormal"><span style="font-size:100%;">Esta consulta devuelve las páginas que tengan en su url la palabra “admin” y en cuyo texto aparezca la palabra Apache.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p><br /></o:p></span></p><p class="MsoNormal"><span style="font-size:100%;"><o:p>Hay muchas más directivas, pero estas son una selección de las que yo he considerado más interesantes o más útiles.</o:p></span></p><p class="MsoNormal"><span style="font-size:100%;"><o:p><br /></o:p></span></p><p class="MsoNormal"><span style="font-size:100%;"><o:p>Si te ha gustado este post, deja un comentario</o:p></span></p><p class="MsoNormal"><span style="font-size:100%;"><o:p>Un saludo</o:p></span></p><p class="MsoNormal"><span style="font-size:100%;"><o:p>Juan </o:p></span></p> <p class="MsoNormal"><span style="font-size:100%;"><o:p> </o:p></span></p>Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com7tag:blogger.com,1999:blog-1963634635002429250.post-3007204601942722642008-05-20T05:47:00.000-07:002008-06-04T01:53:31.027-07:00SiNrAzA en directo en La Alameda: "Leal"<object height="355" width="425">Aquí dejo un video de una canción de nuestro último concierto, para que disfrutéis los que no pudisteis ir o para que la recordéis los que fuisteis. Si te ha gustado, deja un comentario.Un saludo!<br /><br /><param name="movie" value="http://www.youtube.com/v/P399BwAcdYc&hl=es"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/P399BwAcdYc&hl=es" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"></embed></object>Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com3tag:blogger.com,1999:blog-1963634635002429250.post-60539795377276975212008-05-15T03:46:00.000-07:002008-06-04T01:53:50.242-07:00Como configurar Joomla y virtuemart en modo SSLLo primero es crear la CA y su certificado e instalarlo en el servidor<br /><br />Una vez tengamos el certificado instalado en el dominio, el siguiente paso es activarlo, aqui es donde tenemos estas tres posibilidades:<br /><br />1.- Poner todo el sitio bajo SSL<br />2.- Poner solo el admin bajo SSL (esto es bastante útil)<br />3.- Poner una serie de links determinados bajo SSL (esto será lo que haremos en nuestra práctica)<br /><br /><br />1.- Poner el sitio entero bajo SSL: No es muy recomendable, porque normalmente ralentiza bastante toda la navegación en general.<br /><br />2.- Poner el administrator en SSL: Para poder loguearse al administrador en modo seguro SSL, es necesario editar los ficheros index.php e index2.php de la carpeta administrator. En el index.php inmediatamente después de la linea define( '_VALID_MOS', 1); teneis que poner el siguiente código:<br /><br />//Redirect to https if accessed over http (except when running locally)<br /><br />if ($_SERVER['SERVER_NAME'] != "localhost")<br />{<br />$port = $_SERVER["SERVER_PORT"];<br />$ssl_port = "443"; //Change 443 to whatever port you use for https (443 is the default and will work in most cases)<br />if ($port != $ssl_port)<br />{<br />$host = $_SERVER["HTTP_HOST"];<br />$uri = $_SERVER["REQUEST_URI"];<br />header("Location: https://$host$uri");<br />}<br />}<br /><br />Igualmente hay que añadirlo en el index2.php inmediatamente despues de las directivas require_once al principio del fichero.<br /><br />Con esto veréis que el administrator carga directamente en modo SSL. Una única cosa que he visto, es que en el editor WYSIWYG, no funcionan determinados popups de insertar imagen, etc. algo un poco molesto.<br /><br />3. Configurar Virtuemart para que funcione bajo SSL: Virtuemart trae una opción en la configuración general, para activar el modo SLL, simplemente ponemos la URL de nuestra web, con el https, por ejemplo: https://www.tutienda.com (bastante cutre!). El problema que te vas a encontrar, es que cuando entras a realizar el pedido a modo seguro, cuando termines la compra o cuando pinches en cualquier otro link, seguirás con toda la web en modo seguro, porque no vuelve a poner http, en vez de https. Para conseguir que tu web cambie automáticamente a modo no seguro al pinchar en cualquier link normal, hay que realizar los siguientes ajustes:<br /><br />Abrir el index.php de la raiz de joomla. En la línea 261, cerca de // loads template file cambiar todo ese bloque por esto:<br /><br />// loads template file<br />if ( !file_exists( 'templates/'. $cur_template .'/index.php' ) ) {<br />echo _TEMPLATE_WARN . $cur_template;<br />} else {<br />if( $_SERVER['SERVER_PORT'] == 443 || @$_SERVER['HTTPS'] == 'on' ) {<br />$option = mosgetparam($_REQUEST, "option");<br />$page = mosgetparam($_REQUEST, "page");<br /><br />if(@strstr($page, "account.") || @strstr($page, "checkout.") || @strstr($page, "shop.registration")){<br />$from_url = $mosConfig_live_site;<br />$to_url = str_replace("http:","https:",<br />$mosConfig_live_site);<br />ob_start();<br />require_once( 'templates/'. $cur_template .'/index.php' );<br />echo "<!-- ".time()." -->";<br />$my_content = str_replace( "src=\"".URL, "src=\"".SECUREURL, ob_get_contents());<br />$my_content = str_replace( "src=".URL, "src=".SECUREURL, $my_content);<br />$my_content = str_replace( "url('".URL, "url('".SECUREURL, $my_content);<br />$my_content = str_replace( "url(".URL, "url(".SECUREURL, $my_content);<br />ob_end_clean();<br />echo $my_content;<br />}<br />else {<br />$to_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];<br />mosRedirect( $to_url );<br />}<br />}<br />else {<br />require_once( 'templates/'. $cur_template .'/index.php' );<br />echo "<!-- ".time()." -->";<br />}<br />}<br /><br />Bibliografía util:<br />http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html<br />http://www.joomlaspanish.org/foros/showthread.php?t=15108<br />http://www.adstudio.es/2008/02/20/poner-joomla-bajo-ssl/Fandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com5tag:blogger.com,1999:blog-1963634635002429250.post-21978142993434713382008-05-08T03:29:00.000-07:002008-06-04T01:54:11.062-07:00Como configurar un servidor seguro con OpenSSLAqui os dejo un tutorial paso a paso que he hecho para configurar un servidor Apache con OpenSSL, crear una autoridad certificadora capaz de emitir certificados y generar certificados tanto para el servidor como para los clientes. Espero que os quede claro:<br /><br /><br />1.- Instalar OpenSSl en el servidor (si no esta ya)<br /><br /> apt-get install openssl<br /><br />2.- Crear la estructura de directorios que necesitamos (yo lo he hecho en /home/ pero eso depende del servidor. Como es en local, donde queramos)<br /><br /> mkdir ca ca/private ca/certs ca/conf<br /><br />3.- Para tener un numero de serie que controle el numero de certificados emitimos<br /><br /> cd /ca <br /> echo '01' > serial<br /> touch index.txt<br /><br /> (Posteriormente declararemos index.txt como nuestra base de datos de certificados)<br /><br />4.- Crear la Autoridad certificadora<br /><br /> 4.1.- Creamos el fichero de configuracion en ca/conf:<br /> cd /ca/conf<br /> gedit caconfig.cnf<br /><br /> 4.2.- Copiamos esta estructura con nuestra informacion en caconfig.cnf:<br />(también podemos actualizar el que viene por defecto en el servidor como openssl.cnf para ahorrarnos escribir tanto) -> rellenarlo con nuestros datos<br /><br /><br /> #…………………………….<br /> [ ca ]<br /> default_ca = CA_default<br /> [ CA_default ]<br /> dir = /home/ca<br /> serial = $dir/serial<br /> database = $dir/index.txt<br /> new_certs_dir = $dir/certs<br /> certificate = $dir/certs/cacert.pem<br /> private_key = $dir/private/cakey.pem<br /> default_days = 365<br /> default_md = md5<br /> preserve = no<br /> email_in_dn = no<br /> nameopt = default_ca<br /> certopt = default_ca<br /> policy = policy_match<br /> [ policy_match ]<br /> countryName = match<br /> stateOrProvinceName = match<br /> organizationName = match<br /> organizationalUnitName = optional<br /> commonName = supplied<br /> emailAddress = optional<br /> [ req ]<br /> default_bits = 1024 # Size of keys<br /> default_keyfile = key.pem # name of generated keys<br /> default_md = md5 # message digest algorithm<br /> string_mask = nombstr # permitted characters<br /> distinguished_name = req_distinguished_name<br /> req_extensions = v3_req<br /> [ req_distinguished_name ]<br /> # Variable name Prompt string<br /> #————————- ———————————-<br /> 0.organizationName = Organization Name (company)<br /> organizationalUnitName = Organizational Unit Name (department, division)<br /> emailAddress = Email Address<br /> emailAddress_max = 40<br /> localityName = Locality Name (city, district)<br /> stateOrProvinceName = State or Province Name (full name)<br /> countryName = Country Name (2 letter code)<br /> countryName_min = 2<br /> countryName_max = 2<br /> commonName = Common Name (hostname, IP, or your name)<br /> commonName_max = 64<br /> # Default values for the above, for consistency and less typing.<br /> # Variable name Value<br /> #———————— ——————————<br /> 0.organizationName_default = My Organization<br /> localityName_default = NEW YORK<br /> stateOrProvinceName_default = NEW YORK<br /> countryName_default = US<br /> emailAddress_default = email@mydomain.net<br /> [ v3_ca ]<br /> basicConstraints = CA:TRUE<br /> subjectKeyIdentifier = hash<br /> authorityKeyIdentifier = keyid:always,issuer:always<br /> [ v3_req ]<br /> basicConstraints = CA:FALSE<br /> subjectKeyIdentifier = hash<br /><br />5.- Generar la clave de la AC y su certificado raiz.<br /> OJO este paso es importante: aqui se nos pedira informacion del nombre de la CA y tiene que ser siempre igual para todos los certificados, asi que hay que ponerse de acuerdo a la hora de escribirlo y ademas hay que pensar una frase generadora de la clave que sea larga y dificililla.<br /><br /> openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out certs/cacert.pem -days 365 -config conf/caconfig.cnf<br /><br />Esto genera un certificado valido por 365 dias que se llama cacert.pem en la carpeta "certs" y una clave privada RSA cakey.pem que se guarda en el directorio "private"<br /><br />6.- Crear el certificado del servidor cliente<br /><br /> Aqui creamos una clave privada como cliente y una petición de firma para la CA. Aquí tenemos que poner el nombre del servidor, que sera www.miTiendaChunga.com o el que sea.<br /><br /> 6.1.- Nos vamos a nuestro directorio<br /><br /> cd /home/ca<br /> <br /> 6.2.- Lanzamos el comando de petición de certificado a la CA<br /><br /> openssl req -new -nodes -out certs/localhost.req.pem -keyout private/localhost.key.pem -config conf/caconfig.cnf<br /><br /> Y esto genera la clave en "private" y la peticion del certificado en "certs"<br /><br /> 6.3.- Ahora, como CA, firmamos el certificado (motivos de seguridad) y generamos el certificado definitivo, actualizando la base de datos de certificados<br /><br />openssl ca -in localhost.req.pem -notext -out certs/localhost.cert -config conf/caconfig.cnf<br /><br />[A partir de aquí ya no es realmente necesario]<br />8.- Los certificados generados tienen la extension .pem. Para que sean mas manejables y compatibles con los navegadores deberian tener la extension .crt, asi que los cambiamos:<br /><br /> cd /home/ca<br /><br /> rename 's/\.pem/\.crt/' *<br /><br />9.- A la hora de la implementacion real en el servidor, habria que llevar los certificados y claves a las carpetas correctas, ssl.key y ssl.crt y actualizar el fichero de configuracion del servidor, que debe acabar con algo asi como "ssl.conf". En caso de estar usando Lampp, está en /opt/lampp/etc/extra/httpd-ssl.conf. Esto es necesarios -> la creacion de un servidor virtual.<br /> Habria que escribir algo asi: (esto es solo un ejemplo) [la ip del localhost es 127.0.0.1 pero una real seria de la forma 192.168.1.1]<br />NameVirtualHost *:443 #para que se active cuando se acceda por el puerto seguro<br /><virtualhost><br /> DocumentRoot /var/www/html<br /> ServerName 127.0.0.1<br /> ServerAdmin someone@your.domain<br /><br /> ErrorLog /etc/httpd/logs/ssl_error_log<br /> TransferLog /etc/httpd/logs/ssl_access_log<br /> SSLEngine On<br /> SSLCertificateFile /opt/lampp/etc/ssl.crt/miCertificadoDelServidor.crt<br /> SSLCertificateKeyFile /opt/lampp/etc/ssl.key/miClaveDelServidor.key<br /> <files></files><directory></directory></virtualhost><br />Ojo: Hay que reiniciar el servidor (/opt/lampp/lampp restart ) despues modificar los ficheros de configuracion <br /><br />Nota: es MUY!!! importante comprobar que en un documento de configuracion existe una linea que ponga "Listen 443". Si no, debemos añadirla<br /><br />Aqui hay un truco bastante importante que puede servirnos para redireccionar una url accedida como http a un https. Yo lo he probado y funciona:<br /><br />Escribimos en la pagina, en vez de todo el html que contuviera, las siguientes lineas en la cabecera:<br /><br />[Entre las etiquetas de apertura y cierre html]<br /><br />MENOR_QUE<br /> meta http-equiv="refresh" content="0;url=https://localhost/web_prueba/contacto_seguro.html"<br />MAYOR_QUE<br /><br />(lo escribo así porque blogger no me deja escribir html:<br />MENOR_QUE es "<" y MAYOR_QUE es ">"<br />)<br /><br /><br />Y esto nos redirecciona a la web segura, que contiene todo el codigo html que tenia el anterior, pero emitiendo nuestro certificado.<br /><br /><br />Otra cosa interesante es (cito literalmente de http://www.linuxtotal.com.mx/ssl_apache.html):<br /><br />"Si quieres evitar que a tus clientes cada vez que ingresen a tu sitio salga el molesto diálogo que pide aceptar el certificado, la única solución es que distribuyas el archivo cacert.pem, recuerda que este archivo es el que te identifica como una autoridad certificadora. Lo puedes poner a descarga desde tu propio sitio, o mandarlo por correo, como sea. Cuando el cliente lo tenga en su equipo deberá importarlo dentro del browser o navegador. Todos los navegadores en sus preferencias o herramientas tienen una opción de certificados y desde ahí existe un botón importar para realizar esto."<br /><br /><br />[Informacion extraida y traducida de<br /> http://codeghar.wordpress.com/2008/03/17/create-a-certificate-authority-and-certificates-with-openssl/<br /> http://www.flatmtn.com/article/setting-openssl-create-certificates#SSLCert-8<br /> http://www.eclectica.ca//howto/ssl-cert-howto.php<br /> https://help.ubuntu.com/7.10/server/C/httpd.html#https-configuration<br /> http://www.linuxtotal.com.mx/ssl_apache.html<br />]<br /><br /><br />Espero que te haya sido util. Si te ha gustado, deja un comentario<br />Un saludoFandezhttp://www.blogger.com/profile/08411171776903718187noreply@blogger.com6