viernes, 24 de julio de 2009

Ideas para cambiar el mundo: proyecto 10 al 100

Leyendo el blog microsiervos 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.

La cuestión es que, para celebrar el décimo aniversario de la creación de la empresa, Google lanza el concurso Proyecto 10 al 100 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 diez millones de dólares a las cinco mejores ideas enviadas.

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.

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 este enlace.

Me parece increíble la cantidad de gente con ganas de cambiar las cosas y seguro que habrá miles de ideas geniales.

Desde aquí aplaudo personalmente la iniciativa de Google y espero impaciente la publicación de las ideas para votar las mejores

Os dejo el video del concurso:



Un saludo
Juan Fernández

viernes, 5 de junio de 2009

Debugeo remoto con Eclipse y Tomcat

Para poder debugar en el Eclipse una aplicación alojada en un servidor remoto que contenga EXACTAMENTE tu mismo código, es necesario configurar
de la siguiente manera el Tomcat y el Eclipse.

Los pasos a dar son los siguientes:

0.- Antes de nada, parar el servidor

1.- En catalina.sh, escribir:
JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=8081 (un puerto de escucha)

2.- En Eclipse:
Run -> debug configurations -> Remote Java Application -> New Configuration:
Nombre del proyecto (tu código)
Ip del servidor que quieres debugear
Puerto de escucha (8081)

3.- Arrancar el servidor con la opción "jpda start"
./startup.sh jpda start

4.- Poner los breakpoints que quieras en el código

5.- ¡Listo!

Espero que sea útil.
Un saludo

[pd: gracias a Nacho por la explicación]

domingo, 31 de mayo de 2009

Ingenierí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.

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?.

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.

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.

Recientemente asistí a un curso para analistas software y en ella se dió una idea muy interesante, y esta es: "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.

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."

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.

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.

Espero vuestras opiniones al respecto. Yo por mi parte iré escribiendo los resultados de este "paradigm shift", este cambio de mentalidad.

Un saludo
Juan Fernández

viernes, 13 de marzo de 2009

Cómo reducir el consumo de memoria de Firefox

Se puede configurar el navegador para reducir los (escandalosamente) altos niveles de consumo de memoria ram que tiene si realizamos los siguientes pasos:

1.- Escribe en el navegador about:config

2.- Comprueba que la variable browser.cache.memory.enable vale "true"

3.- Pulsa el botón secundario y crea una nueva variable "Entero" que se llame "browser.cache.memory.capacity".

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))

5.- En Herramientas, Opciones, Privacidad:
5.1.- Guardar mi historial por al menos 10 días (o los que quieras, ¡pero más pequeño!)
5.2.- NO recordar las descargas

6.- Reiniciar el navegador

Espero que sea útil
Un saludo
Juan Fernández

martes, 17 de febrero de 2009

Cómo crear un archivo .WAR

Para 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:

jar cvf mifichero.war nombre_carpeta_aplicacion


en mi caso, por ejemplo la instrucción queda de la siguiente manera:

jar cvf liferay-portal.war ROOT

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)

Un saludo
Juan Fernández

sábado, 29 de noviembre de 2008

Informá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.

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.

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.

Espero vuestras ofertas,
Un saludo
Juan Fernández

Actualización [4/12/2008]:
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

Actualización [29/12/2008]:
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.

viernes, 21 de noviembre de 2008

Como rotar una sola página de un documento word

1.- Seleccionar el texto de la página a rotar
2- En el menú "Configuración de página" seleccionar en una de las pestañas la orientación deseada
3.- Pulsar "Aplicar sólo al texto seleccionado"
4.- Pulsar "Aceptar"

How to get the actual url using php

This is a piece of code I find quite useful. I hope you too: Greetings

$url_base = $_SERVER['SERVER_NAME'];

$url_end= $_SERVER['REQUEST_URI'];

$url = "http://".$url_base.$url_end;

Greetings

Winds of Change

We live in a historical moment of global change.
This change has been provoked by the excess, greed, and selfishness of a handful of rich people, resulting in a world economy crash.

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.

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.

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

I wait for your comments

Greetings

miércoles, 19 de noviembre de 2008

Vientos de Cambio

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.

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.

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.

Un saludo

[English translation comming soon]

domingo, 2 de noviembre de 2008

How to eliminate WGA

The better way to eliminate WGA is creating a .BAT file with the following commands:

taskkill /im wgatray.exe
Del c:\Windows\System32\WgaTray.exe
Del c:\Windows\System32\dllcache\WgaTray.exe
echo Windows Registry Editor Version 5.00 >%temp%\WGANFIX.REG
echo. >>%temp%\WGANFIX.REG
echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon] >>%temp%\WGANFIX.REG
regedit /s %temp%\WGANFIX.REG
del %temp%\WGANFIX.REG
del c:windows\system32\wgalogon.dll
del c:windows\system32\dllcache\wgalogon.dll

Execute it and then restart your computer
I hope it will be useful for you
Greetings

UPDATE[16/11/08]: download this, uncompress it, execute "installer.bat" and reboot your computer. It works fine!! :)

Un año de blog

Hola a todos:

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.

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.

Esto es una gran motivación para mí y quería agradecer aquí a todos los que han dejado comentarios de agradecimiento

Un saludo a todos los que me leéis

Cómo eliminar el WGA de Windows

Cuando este programa se instala en Windows (normalmente sin darte cuenta en una actualización) lanza unos super molestos avisos.
La manera de evitarlo es ejecutando una serie de comandos que listo a continuación.
Lo mejor es crear un documento de texto (*.txt), copiar los comandos en él y luego cambiar la extensión txt por bat.
Después de su ejecución debemos reiniciar el ordenador y ya estará solucionado.

taskkill /im wgatray.exe
Del c:\Windows\System32\WgaTray.exe
Del c:\Windows\System32\dllcache\WgaTray.exe
echo Windows Registry Editor Version 5.00 >%temp%\WGANFIX.REG
echo. >>%temp%\WGANFIX.REG
echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon] >>%temp%\WGANFIX.REG
regedit /s %temp%\WGANFIX.REG
del %temp%\WGANFIX.REG
del c:windows\system32\wgalogon.dll
del c:windows\system32\dllcache\wgalogon.dll


Espero que les sea útil
Un saludo

Actualización (8-11-08):
para los que no le funcione este método, os dejo un video de cómo hacerlo a mano.
http://www.terra.es/tecnologia/docuweb/docuweb31.htm
Un saludo

Actualización (16/11/08):
Para las últimas versiones de WGA, descargar este fichero, descomprimirlo, ejecutar installer.bat y reiniciar el ordenador. ¡¡Funciona!! :)

martes, 21 de octubre de 2008

Google Calendar: cómo recibir alertas por sms

Para gente olvidadiza como yo, este tipo de herramientas tiene un valor incalculable. Google Calendar ofrece la posibilidad de enviar de forma gratuita sms de alerta a tu movil para recordarte las citas o eventos que tengas dados de alta en dicha agenda.
Los pasos a seguir para ello son los siguientes:

1.- Entra en google calendar y pulsa "Settings"
2.- Pulsa "Mobile setup"
3.- Introduce tu pais y teléfono y recibirás un sms con tu código de verificación
4.- Introduce el código de verificación recibido
5.- Pulsa "Finish Setup"
6.- Pulsa "Save" y ¡listo!
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.

Espero que os haya sido útil
Un saludo

ACTUALIZACIÓN[24/04/2009]: acabo de leer que Google ha retirado este servicio. :(
ACTUALIZACIÓN[05/06/2009]: ¡El servicio vuelve a estar disponible! :)

miércoles, 15 de octubre de 2008

Cómo montar Liferay en Eclipse

Requerimientos:

JDK (http://java.sun.com/javase/downloads/index jdk5.jsp)
Ant (http://apache.eu.lucid.dk/ant/binaries/apache-ant-1.7.0-bin.zip)
Jikes (http://downloads.sourceforge.net/jikes/jikes-1.22-1.windows.zip?modtime=1096862035&big mirror=0)
Codigo fuente Liferay (http://downloads.sourceforge.net/lportal/liferay-portal-src-5.1.0.zip)
Liferay-Tomcat5.5 Bundle for JDK 5 (http://downloads.sourceforge.net/lportal/liferay-portal-tomcat-5.5-5.1.0.zip)
Eclipse (http://www.eclipse.org/downloads/)

Pasos a dar (tras instalar JDK, Ant, Jikes y Eclipse)

1.- Descargar la versión del código fuente que se quiera (http://downloads.sourceforge.net/lportal/liferay-portal-src-5.1.0.zip)
2.- New Java Project
3.- Create Project From Existing Source y cargar la carpeta donde esta el codigo
4.- Crear release.miusuario.properties con la configuracion del equipo y la ruta de ext
5.- Lanzar desde consola las tareas clean, start y build-ext de ant para crear el ext
6.- En el ext crear app.server.miusuario.properties con el siguiente contenido>
app.server.type=tomcat
app.server.tomcat.dir=C:/projects/liferay/tomcat (direccion donde hemos extraido el bundle del tomcat)
7.- Lanzar desde consola las tareas clean y deploy
8.- Arrancar el tomcat y ya tendras el Liferay funcionando en localhost:8080

lunes, 29 de septiembre de 2008

¿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:

Desde el menú File, pulsar
-> new project
-> CVS
-> Projects from CVS

En la pantalla de configuración que sale, hacer lo siguiente
- "Use existing repository location":
selecciona tu repositorio y haz clic en "Next"
- "Use an existing module"
selecciona la carpeta de proyecto y haz clic en "Next"
- Checkout as a project in the workspace
escribe un nombre de proyecto o deja el que tenía
- Use Default workspace location (o elegir uno)
- Ignorar la sección TAG
- Pulsar Finish

A partir de ese momento, Eclipse descarga desde el servidor la versión sincronizada del proyecto y ya puedes empezar a trabajar.

Espero que te haya sido útil
Un saludo

viernes, 26 de septiembre de 2008

¿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.

La solución a este problema consiste en tres sencillos pasos:
1.- Apaga el eclipse
2.- En la carpeta-de-eclipse/configuration/.settings editar (por ejemplo con el block de notas) el fichero org.eclipse.ui.ide.prefs.
En el campo RECENT_WORKSPACES eliminar la ruta del workspace que se quiere eliminar (normalmente termina en \n)
Guardar el fichero
3.- Reinicia el eclipse

Espero que te sea útil
Un saludo

jueves, 28 de agosto de 2008

¿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

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.

Esto, para uno o dos jars no es problemático, pero cuando trabajas con 20 ó 30 jars, esta operación es MUY engorrosa.

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.

A continuación dejo una captura, para que veáis lo simple que es:




Espero que os haya servido. Si es así deja un comentario
un saludo

pd: la web del proyecto es esta. Ahí tenéis la información de descarga e instalación del plugin

martes, 15 de julio de 2008

Como conectar Java con MySQL

Para conectar Java con una base de datos MySQL hay que realizar siempre una serie de pasos.


Lo primero es descargar el driver de la base de datos.

http://dev.mysql.com/downloads/connector/j/3.1.html


Luego lo añades a tu classpath de java, para que al ejecutarlo java lo vea.

Supongamos declaradas las siguientes cadenas:

private static String DBdriver = "com.mysql.jdbc.Driver";
private static String DBUrl = "jdbc:mysql://localhost/miDB";
private static String DBUser = "usuario";
private static String DBpwd = "contraseña";

Añadimos import java.sql.*;

Conectamos a la base de datos así:


Connection conn = null;

try {
Class.forName(
DBdriver);
conn = DriverManager.getConnection(DBUrl, DBUser, DBpwd);
}
catch (SQLException e) {
e.printStackTrace();

}
catch (ClassNotFoundException e1) {
e1.printStackTrace();

}

Y nos desconectamos para cerrar la sesión, así:

try {
conn.close();

} catch (SQLException e) {
e.printStackTrace();
}

Para hacer una consulta a la base de datos necesitamos un objeto Statement, que se usa de la siguiente manera :

Statement stmt = conn.createStatement();
String query = “SELECT * FROM mi_tabla”;
ResultSet res = stmt.executeQuery(query);

res.next();
String r1 = res.getString("campo1");
System.out.println("El campo 1 de mi tabla para la consulta dada vale "+r1);
stmt.close(); //Importante cerrar para liberar recursos
res.close();
conn.close();

Y eso es todo.

Espero que les haya sido útil...si es así, deja un comentario
Un saludo

lunes, 23 de junio de 2008

PHP: ¿Cómo extraer la URL actual?

Buenas:
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.

$url_base = $_SERVER['SERVER_NAME'];

$url_fin = $_SERVER['REQUEST_URI'];

$url = "http://".$url_base.$url_fin;


Espero que os haya servido
un saludo

lunes, 2 de junio de 2008

Cómo añadir Google Analytics a tu blog

Para utilizar esta potente herramienta de Google para análisis de tráfico en tu blog, los pasos que tienes que dar son los siguientes:

1.- Ingresa en la página de Google Analytics

2.- Pulsa en “añadir perfil de sitio web”

3.- Introduce los datos que pide sobre tu blog

4.- Copia (ctrl+c) el código que se ha generado

5.- Ingresa en blogger.com

6.- Haz clic en el enlace “Diseño” de tu blog

7.- Pulsa “Edición de HTML”

8.- Ve al final del código HTML que sale y detrás de la etiqueta "end outer-wrapper"

Pega (ctrl+v) el código de Google Analytics

9.- Pulsa en “Guardar cambios” y ¡listo!

Espero que te haya servido. Si es así, deja un comentario
Un saludo

jueves, 29 de mayo de 2008

Uso avanzado de Google

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.


¿Qué son las directivas de Google?

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.

1.2.1.- Directivas básicas:

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:

- 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.

Ej: carnet de conducir "por puntos"

Esta consulta devolverá todas las páginas que contengan las palabras carnet, conducir y por-puntos (todo junto)

- Operadores booleanos: estos operadores (and, or y not) se sustituyen por “+”, “|” y “–“ respectivamente en las consultas Google, y realizan las siguientes funciones.

And (“+”): fuerza la búsqueda para que contenga exactamente esa palabra.

Or (“|”): permite la elección entre dos o más opciones.

Not(“-“): fuerza a ignorar esa palabra en los resultados.

Ej: (casa|piso) +playa –campo – montaña +alquiler –(comprar|compra)

Esta consulta devolverá 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.

- 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.

Ej: “El carácter * en Google”

Esta consulta devuelve páginas que contienen “El carácter crítico en Google” o “El carácter pendenciero en Google”

Ej: index.of

Esta consulta devuelve páginas que contienen cualquier cosa entre las palabras “index” y “of”, ya sean palabras, espacios o signos de puntuación.

1.2.2.- Directivas medias: hemos clasificado como directivas de dificultad media las siguientes:

- site: permite acotar una búsqueda a una sola dirección web.

Ej: pl2 site:lsi.us.es

Esta consulta devuelve páginas del sitio “lsi.us.es” que contienen la palabra “PL2”

- link: permite obtener las páginas que contienen algún enlace que apunte a la página especificada.

Ej: link:last.fm

Esta consulta devuelve páginas que contienen un enlace que apunta a la web last.fm

- define: permite obtener definiciones que haya en la web de la palabra especificada por el usuario

Ej: define:algoritmo

Esta consulta devuelve páginas que contengan la definición de “algoritmo”

- weather y map: permiten obtener la predicción climática y el mapa del lugar que el usuario le indique.

Ej: weather:Sevilla | map:Sevilla

Esta consulta devuelve páginas que contengan la predicción meteorológica de Sevilla o mapas de Sevilla.

1.2.3.- Directivas avanzadas.

Entre las principales directivas avanzadas hemos seleccionado las que nos parecen más interesantes (intitle, filetype, inurl) y que explicamos a continuación:

- 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.

Ej: intitle:”index.of” symphony.x mp3

Esta consulta devuelve listado de directorios que contengan las palabras Symphony X juntas y que contengan ficheros de extensión mp3.

- filetype: permite realizar búsquedas de documentos con una extensión determinada.

Ej: algoritmo genético filetype:pdf site:edu

Esta consulta devuelve todos los archivos de extensión pdf generados en sitio educativos (como escuelas y universidad) que contengan las palabras “algoritmo” y “genético”.

- inurl: permite realizar búsquedas de texto en los enlaces y las direcciones web.

Ej: inurl:”admin” Apache

Esta consulta devuelve las páginas que tengan en su url la palabra “admin” y en cuyo texto aparezca la palabra Apache.


Hay muchas más directivas, pero estas son una selección de las que yo he considerado más interesantes o más útiles.


Si te ha gustado este post, deja un comentario

Un saludo

Juan

martes, 20 de mayo de 2008

SiNrAzA en directo en La Alameda: "Leal"

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!

jueves, 15 de mayo de 2008

Como configurar Joomla y virtuemart en modo SSL

Lo primero es crear la CA y su certificado e instalarlo en el servidor

Una vez tengamos el certificado instalado en el dominio, el siguiente paso es activarlo, aqui es donde tenemos estas tres posibilidades:

1.- Poner todo el sitio bajo SSL
2.- Poner solo el admin bajo SSL (esto es bastante útil)
3.- Poner una serie de links determinados bajo SSL (esto será lo que haremos en nuestra práctica)


1.- Poner el sitio entero bajo SSL: No es muy recomendable, porque normalmente ralentiza bastante toda la navegación en general.

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:

//Redirect to https if accessed over http (except when running locally)

if ($_SERVER['SERVER_NAME'] != "localhost")
{
$port = $_SERVER["SERVER_PORT"];
$ssl_port = "443"; //Change 443 to whatever port you use for https (443 is the default and will work in most cases)
if ($port != $ssl_port)
{
$host = $_SERVER["HTTP_HOST"];
$uri = $_SERVER["REQUEST_URI"];
header("Location: https://$host$uri");
}
}

Igualmente hay que añadirlo en el index2.php inmediatamente despues de las directivas require_once al principio del fichero.

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.

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:

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:

// loads template file
if ( !file_exists( 'templates/'. $cur_template .'/index.php' ) ) {
echo _TEMPLATE_WARN . $cur_template;
} else {
if( $_SERVER['SERVER_PORT'] == 443 || @$_SERVER['HTTPS'] == 'on' ) {
$option = mosgetparam($_REQUEST, "option");
$page = mosgetparam($_REQUEST, "page");

if(@strstr($page, "account.") || @strstr($page, "checkout.") || @strstr($page, "shop.registration")){
$from_url = $mosConfig_live_site;
$to_url = str_replace("http:","https:",
$mosConfig_live_site);
ob_start();
require_once( 'templates/'. $cur_template .'/index.php' );
echo "";
$my_content = str_replace( "src=\"".URL, "src=\"".SECUREURL, ob_get_contents());
$my_content = str_replace( "src=".URL, "src=".SECUREURL, $my_content);
$my_content = str_replace( "url('".URL, "url('".SECUREURL, $my_content);
$my_content = str_replace( "url(".URL, "url(".SECUREURL, $my_content);
ob_end_clean();
echo $my_content;
}
else {
$to_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
mosRedirect( $to_url );
}
}
else {
require_once( 'templates/'. $cur_template .'/index.php' );
echo "";
}
}

Bibliografía util:
http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html
http://www.joomlaspanish.org/foros/showthread.php?t=15108
http://www.adstudio.es/2008/02/20/poner-joomla-bajo-ssl/

jueves, 8 de mayo de 2008

Como configurar un servidor seguro con OpenSSL

Aqui 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:


1.- Instalar OpenSSl en el servidor (si no esta ya)

apt-get install openssl

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)

mkdir ca ca/private ca/certs ca/conf

3.- Para tener un numero de serie que controle el numero de certificados emitimos

cd /ca
echo '01' > serial
touch index.txt

(Posteriormente declararemos index.txt como nuestra base de datos de certificados)

4.- Crear la Autoridad certificadora

4.1.- Creamos el fichero de configuracion en ca/conf:
cd /ca/conf
gedit caconfig.cnf

4.2.- Copiamos esta estructura con nuestra informacion en caconfig.cnf:
(también podemos actualizar el que viene por defecto en el servidor como openssl.cnf para ahorrarnos escribir tanto) -> rellenarlo con nuestros datos


#…………………………….
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /home/ca
serial = $dir/serial
database = $dir/index.txt
new_certs_dir = $dir/certs
certificate = $dir/certs/cacert.pem
private_key = $dir/private/cakey.pem
default_days = 365
default_md = md5
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 1024 # Size of keys
default_keyfile = key.pem # name of generated keys
default_md = md5 # message digest algorithm
string_mask = nombstr # permitted characters
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
# Variable name Prompt string
#————————- ———————————-
0.organizationName = Organization Name (company)
organizationalUnitName = Organizational Unit Name (department, division)
emailAddress = Email Address
emailAddress_max = 40
localityName = Locality Name (city, district)
stateOrProvinceName = State or Province Name (full name)
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
commonName = Common Name (hostname, IP, or your name)
commonName_max = 64
# Default values for the above, for consistency and less typing.
# Variable name Value
#———————— ——————————
0.organizationName_default = My Organization
localityName_default = NEW YORK
stateOrProvinceName_default = NEW YORK
countryName_default = US
emailAddress_default = email@mydomain.net
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash

5.- Generar la clave de la AC y su certificado raiz.
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.

openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out certs/cacert.pem -days 365 -config conf/caconfig.cnf

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"

6.- Crear el certificado del servidor cliente

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.

6.1.- Nos vamos a nuestro directorio

cd /home/ca

6.2.- Lanzamos el comando de petición de certificado a la CA

openssl req -new -nodes -out certs/localhost.req.pem -keyout private/localhost.key.pem -config conf/caconfig.cnf

Y esto genera la clave en "private" y la peticion del certificado en "certs"

6.3.- Ahora, como CA, firmamos el certificado (motivos de seguridad) y generamos el certificado definitivo, actualizando la base de datos de certificados

openssl ca -in localhost.req.pem -notext -out certs/localhost.cert -config conf/caconfig.cnf

[A partir de aquí ya no es realmente necesario]
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:

cd /home/ca

rename 's/\.pem/\.crt/' *

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.
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]
NameVirtualHost *:443 #para que se active cuando se acceda por el puerto seguro

DocumentRoot /var/www/html
ServerName 127.0.0.1
ServerAdmin someone@your.domain

ErrorLog /etc/httpd/logs/ssl_error_log
TransferLog /etc/httpd/logs/ssl_access_log
SSLEngine On
SSLCertificateFile /opt/lampp/etc/ssl.crt/miCertificadoDelServidor.crt
SSLCertificateKeyFile /opt/lampp/etc/ssl.key/miClaveDelServidor.key

Ojo: Hay que reiniciar el servidor (/opt/lampp/lampp restart ) despues modificar los ficheros de configuracion

Nota: es MUY!!! importante comprobar que en un documento de configuracion existe una linea que ponga "Listen 443". Si no, debemos añadirla

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:

Escribimos en la pagina, en vez de todo el html que contuviera, las siguientes lineas en la cabecera:

[Entre las etiquetas de apertura y cierre html]

MENOR_QUE
meta http-equiv="refresh" content="0;url=https://localhost/web_prueba/contacto_seguro.html"
MAYOR_QUE

(lo escribo así porque blogger no me deja escribir html:
MENOR_QUE es "<" y MAYOR_QUE es ">"
)


Y esto nos redirecciona a la web segura, que contiene todo el codigo html que tenia el anterior, pero emitiendo nuestro certificado.


Otra cosa interesante es (cito literalmente de http://www.linuxtotal.com.mx/ssl_apache.html):

"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."


[Informacion extraida y traducida de
http://codeghar.wordpress.com/2008/03/17/create-a-certificate-authority-and-certificates-with-openssl/
http://www.flatmtn.com/article/setting-openssl-create-certificates#SSLCert-8
http://www.eclectica.ca//howto/ssl-cert-howto.php
https://help.ubuntu.com/7.10/server/C/httpd.html#https-configuration
http://www.linuxtotal.com.mx/ssl_apache.html
]


Espero que te haya sido util. Si te ha gustado, deja un comentario
Un saludo

Como cambiar la extension de varios ficheros al mismo tiempo

Buenas:
varias veces he tenido que cambiar la extensión de un montón de ficheros y algunas veces ha sido mortalmente PESADO. Se me ha vuelto a cruzar la necesidad en mi camino y me he negado a hacerlo a mano, así que investigando un poco he descubierto el comando rename. Os explico como funciona:

rename 's/antigua-cadena-de-texto/nueva-cadena-de-texto/' archivos-a-modificar

En mi caso tengo que pasar 150 archivos .pem a .crt en mi carpeta actual, así que escribiría este comando:

rename 's/\.pem/\.crt' *

Notas: tengo que protejer el . con una barra. Con el asterisco indico que se aplique a todo el directorio actual.

Si te ha sido util deja un comentario

Un saludo
Juan

lunes, 21 de abril de 2008

Cómo instalar Joomla

Buenas: para los que estén interesados en instalar este gestor de contenidos (CMS), aquí dejo paso a paso cómo hacerlo. Vale tanto para windows como para linux.

1.- Instala lampp (en linux) o wampp (en windows) bajándolo de su página oficial

2.- Descarga joomla de su página oficial (la última versión que haya)

3.- Descomprime el .zip en la carpeta htdocs del servidor

4.- Accede a través de tu navegador a joomla (en mi caso http://localhost/joomla/) y si todo está en verde, next. Si no, deberás configurar algunas cosas, aunque no todas las opciones son importantes.

5.- Crea en localhost/phpmyadmin una base de datos y rellena con esos datos el Step1 (primer paso de la instalación)

6.- Rellena los datos que te piden

7.- Elimina la carpeta installation de la carpeta htdocs

8.- Comprueba que la instalación ha sido correcta accediendo a htpp://localhost/tucarpeta_de_joomla_en_htdocs/

Si funciona...¡Enhorabuena y a trabajar!

Espero que haya sido util. Si es así, deja un comentario

Un saludo

Cómo hacer una página web en cinco minutos

Buenas:

acabo de descubrir un sitio genial para hacer páginas web. Se llama weebly.com y te permite hacer páginas arrastrando elementos, de manera que con unos cuantos clicks y sin escribir ni una sola linea de código html, tienes una web montada, publicada y accesible a través de internet. Como ejemplo os dejo el enlace a una mini-web que me he montado en cinco minutos para mi proyecto fin de carrera.

Soy consciente de que se podrían haber metido un montón de cosas más, pero estaba probando.

http://jclic-sqilor.weebly.com/

simple, sencilla y ciertamente limitada, pero muy util para la gente que no tenga grandes necesidades específicas

Espero que os sea útil
Un saludo
Juan

Introducción a los certificados digitales

Qué son:

Un certificado digital es un documento que contiene una clave pública del usuario, un identificador y los datos personales del usuario.

El documento está firmado digitalmente por una autoridad certificadora (Certification Authority, CA)

Para qué se usan:

Un certificado sirve para que el usuario pueda realizar tareas que requieran seguridad y confidencialidad.

Al estar firmado el ciertificado por una autoridad de confianza (una CA), confirma a terceros (por ejemplo los navegadores web) su validez y demuestra que las claves pertenecen a ese usuario.

Quién los emite:

Cualquiera puede emitir un certificado digital, pero deben estar firmados digitalemente por una CA.

Qué información contienen:

El certificado digital contiene una serie de campos contenidos como fichero .cert:

Algoritmo de cifrado y resumen
Clave pública del usuario
Información personal del usuario
Periodo de validez
Información del CA emisor
Firma digital del emisor, que valida el enlace entre la clave pública y la identificación de usuario (es la forma que tiene el CA de decir "tío, te juro que esta clave es de Paco").
Usos permitidos, es decir, para qué se puede usar el certificado.

Claves privadas:

Cuando un usuario instala un certificado (como fichero .pfx) en un navegador, almacena la clave privada en su ordenador.


Pasos que se dan en un sistema seguro:

1.- Al darse de alta en el sistema, se le envía al usuario un .pfx con su certificado y su clave privada. Esto se hace como CA

2.- Cada vez que hagas login o una compra hay un intercambio de certificados (ficheros .cert sin clave privada, sólo con la clave pública y la información de usuario), en el que el sistema al que te conectas como usuario te demuestra que realmente es el sistema que afirma ser, y el sistema a continuación te pide tu certificado para saber que eres realmente quien afirmas ser, validándose así la identidad de ambos para evitar los problemas de la suplantación, así como evitar el repudio, ya que es prueba de que ambos han enviado o recibido la información.



nota: podéis examinar el contenido de un certificado accediendo a un sitio seguro como éste y haciendo clic en examinar el certificado.

Espero que os haya servido. Si os a gustado dejad un comentario

Un saludo

Cómo funciona la firma digital RSA

¿Para qué sirve?

Sirve para enviar mensajes no necesariamente secretos sin que nadie los pueda modificar.

En la situación en que A quiere enviar un mensaje a B, A tiene una clave pública de dos valores (e y n) y una clave privada (d)


¿Qué pasos se dan?

1.- A hace un resumen (r) del mensaje con una función resumen (por ejemplo MD5 o SHA1)

2.- La firma digital (f) será la codificación del resumen con su clave privada:

f = r^d, mod n

3.- A envía el mensaje junto con la firma f.

4.- B, el receptor, resume el mensaje con la misma función resumen que A, obteniendo r'

5.- B compara: cifra la firma (f) con la pública de A y debe obtener su r'

[f ^e, mod n] debe ser igual a r'

Si son iguales, se puede afirmar que nadie ha modificado el mensaje que A envió.


Espero que os sirva.

Si os ha servido dejad un comentario


Un saludo

jueves, 3 de abril de 2008

How to crack a website based on cookies

To avoid some websites to control when you get in and do your queries, all you have to do is block the communication between that site and your computer. This is one of the easiest ways to fool websites that rely on cookies to do authentification.

This process depends on which web browser you use. I always recommend using Firefox (it's secure and free), but I'll explain how to do it with Micro$oft Internet Explorer too.

a) In Mozilla Firefox:

1.- Click on "Edit" -> "Preferences" -> "Privacy" -> "Exceptions..."
2.- Write the URL of the website you want to block
(for example www.mysite.com)
3.- Click on "Block"
4.- Click on "Close"

b) In Internet Explorer:

1.- Click on "Tools" -> "Internet Options" -> "Privacy" -> "Sites"
2.- Write the URL of the website you want to block
(for example www.mysite.com)
3.- Click on "Block"
4.- Click on "Close"

I hope it will be useful (above all, for my English IV partners!). If so, leave a comment
greetings

miércoles, 2 de abril de 2008

Cómo instalar ANTLR en el Eclipse

Siempre que tengo que instalar el AntLr se me olvidan los pasos, así que aquí los reflejo para compartirlo con quien le interese

1.- Ir a "Help" -> "Software Updates" -> "Find and Install"
2.- Seleccionar "Search new features to install" y pulsar "Next"
3.- Pulsar "new remote site", escribir un nombre y la siguiente dirección http://antlreclipse.sourceforge.net/updates/" y luego (comprobar que se ha marcado con un tick la casilla que acabamos de añadir) pulsar "Finish"
4.- Seleccionar el plugin, pulsar "Siguiente", aceptar la licencia y terminar de instalarlo


Un saludo

jueves, 28 de febrero de 2008

Apertura de puertos para el eMule con imagenio

Siempre se me olvida de una vez para otra como hacer esto, así que lo dejo aquí para las siguientes veces y para quien le haga falta. Dejad un comentario si teneis alguna duda o si os ha sido de ayuda.

1- Abrimos el Menu Inicio y pinchamos en Ejecutar.

2- Tecleamos en la ventana cmd y pinchamos en Aceptar. Se nos abrira una ventana negra donde tecleamos ipconfig y apuntamos la Dirección IP que nos aparece.

3- Abrimos nuestro explorador de Internet (Firefox o Internet Explorer, que son los más habituales) y tecleamos la siguiente direccion www.telefonicaonline.com/portalalejandra

4- Se nos abre una pagina donde nos pide nuestro numero de telefono, lo introducimos y pinchamos en Aceptar.

5- Se nos cargara otra pagina con diversas opciones, seleccionamos la pestaña Puertos. En Protocolo seleccionamos TCP y en IP Interna escribimos la IP que antes habiamos tomado. Seleccionamos Abrir Puertos Individuales y en las casillas Puerto Externo y Puerto Interno escribimos el numero de puerto TCP que queremos abrir (4662 para eMule) y pinchamos en aceptar.

6- Despues de haber guardado el puerto volvemos a seleccionar la pestaña Puertos. En Protocolo seleccionamos UDP y en IP Interna escribimos la IP que antes habiamos tomado. Seleccionamos Abrir Puertos Individuales y en las casillas Puerto Externo y Puerto Interno escribimos el numero de puerto UDP que queremos abrir (4672 para eMule) y pinchamos en aceptar.

7- si no queremos seguir abriendo puertos, pinchamos en añadir y en Aceptar y tras unos segundos se nos confirmara la abertura de estos puertos.

8- A Disfrutar de
eMule con una ID alta


Un saludo

domingo, 20 de enero de 2008

Hacia la reproducción artificial del cerebro

Un grupo de científicos del IBM Almaden Research Lab y la Universidad de Nevada, han conseguido simular la mitad del cerebro de un ratón por medio del ordenador gigantesco BlueGene L.
James Frye, Rajagopal Ananthanarayanan y Dharmendra S Modha, adaptaron las columnas corticales de la mitad del cerebro del roedor. Asimismo, observaron los comportamientos cerebrales propios del cerebro de un ratón, aunque con algunos segundos de retraso con respecto a la realidad.

Según el estudio breve "Towards Real-Time, Mouse-Scale Cortical Simulations ", los científicos han conseguido que el cerebro virtual reaccionara con unas 8.000 neuronas ejecutando aproximadamente 6.300 sipnasis. Normalmente, la mitad del cerebro de un ratón tiene 8 millones de neuronas y las conexiones suelen ser 8.000. “Se han invertido enormes esfuerzos en computación, comunicación y capacidad de memoria para este sistema”, afirman los científicos. Para el estudio se han utilizado 4096 procesadores con una capacidad de 256 Mb cada uno.

Los investigados sostienen que la simulación guarda similitudes con el funcionamiento mental de los ratones, principalmente en términos de nervios y conexiones, pero carece de algunas estructuras de los cerebros reales.
Para futuros informes, el equipo pretende aumentar la velocidad de la simulación, avanzar en su concepto neurobiológico y añadir más estructuras para asemejar el cerebro artificial con el propio del roedor.

Super interesante noticia para los amantes de la biotecnología, y motivación para seguir estudiando y unirme a DINET

viernes, 11 de enero de 2008

La música y las máquinas

En muchos textos científicos e informáticos (ver "Controversia sobre mentes y máquinas" de Allan Ross) se plantea como refutación de la idea de que las máquinas piensen el hecho de que no son capaces de escribir un soneto o componer una sinfonía.

Aparte de que considero este argumento completamente sin fundamento (¿Cuántos seres humanos son capaces de realizar esas actividades?¿Significa ello que no piensan?), se me plantean dos dudas: (1)¿Es realmente un imposible el que las máquinas puedan componer? Y en el caso de pudieran, (2)¿significaría eso que las máquinas piensan?

En el conservatorio profesional de música pasé dos años completos estudiando armonía antes de poder estudiar el primer año de composición. Aquellos dos años consistieron en la realización de cientos de ejercicios mecánicos (repito, mecánicos) de enlace de acordes, saltos melódicos, etc. para interiorizar las reglas de la armonía. Reglas perfecta y, podríamos decir, "científicamente" determinadas.

Existen cientos de manuales de armonía con información del tipo:
"En la situación A, hacer B" o "Siempre que C, hacer D".

Según los profesores de música, así como los compositores, siguiendo las leyes de la armonía clásica puedes realizar composiciones musicales que se pueden considerar correctas - que no geniales, pues los genios son los que han sabido romper esas normas a lo largo de los siglos - y aquí surge mi planteamiento: (3)¿Sería posible introducir en una máquina todas las reglas de la armonía clásica y, en base a seleccionadores aleatorios de compás, tempo, tonalidad, melodía, ritmo y armonización, generar una obra musical original? Todos estos son parámetros finitos (hay un número finito de tonalidades - 28 exactamente -, de compases, etc), así que sus combinaciones, a pesar de ser enormes, son finitas.

Se podría argumentar que nunca una máquina tendrá la expresividad de un humano, pero ¿no sería también programable la expresividad al igual que se le enseña a un niño humano de ocho o diez años?¿No son los "sforzando", los "disminuiendo" o los "piano" simples factores adicionales o variables a añadir a nuestra máquina?¿No son al fin y al cabo pequeñas modificaciones en la intensidad del sonido o la velocidad de la interpretación?

Personalmente creo que un sistema de estas características podría ser viable, además de suponer un reto apasionante, ya que el problema no dista mucho de los sistemas expertos desarrollados en Inteligencia Artificial, que se rigen por bases de conocimiento traducidas en reglas como las que he expuesto antes.

Respecto a la segunda cuestión que planteo, (si pudieran componer ¿significaría eso que las máquinas piensan?) creo que está claro que el hecho de que una máquina realizara una composición original no llevaría a nadie a pensar que las máquinas piensan, aunque daría mucho que pensar respecto a las habilidades artísticas y estéticas de los seres humanos, así de su supuestamente única e inimitable genialidad.

¿Utilidad práctica de este sistema? Pues supongo que ninguna, pero sería interesante ver la reacción de los compositores-no-genios al descubrir que una máquina puede realizar esa tarea, acallar el argumento de que si las máquinas compusieran pensarían y poder disfrutar en casa de composiciones originales interpretadas e improvisadas para el momento.


Juan Fernández Rubio, Sevilla, 11/01/08

martes, 11 de diciembre de 2007

Cómo leer un documento XML con Java

Buenas:

aquí os dejo otro "cómo" que he escrito tras estar dando vueltas por internet. Creo que es algo muy util para todo programador, y como a mi me ha servido para el proyecto en el que estoy metido, espero que a vosotros también os sirva. (Si te interesa o te ha sido útil, deja un comentario, que es gratis! XD )


/* Pasos que hay quue hacer para leer un XML:
* 1.- Crear un DocumentBuilderFactory
* 2.- Con él, crear un DocumentBuilder
* 3.- Crear un File a partir de la ruta a tu XML
* 4.- Crear un Document
* 5.- Volcar el contenido del xml mediante el método parser del builder
* 6.- Crear un XmlDocument
* 7.- Imprimirlo por pantalla
*/


import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.io.IOException;
import org.apache.crimson.tree.XmlDocument;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentFilter;


public class lectorXML{

static Document document;
static String mixml = "unficheroXML.xml";

public static void main(String args[]){

DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(mixml));

XmlDocument xdoc = (XmlDocument) document;
xdoc.write(System.out);

} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

domingo, 2 de diciembre de 2007

Cómo insertar una presentación de álbum Picasa en un blog o página web

Aquí he encontrado una plantilla de Blogger con la que puedes obtener el código HTML para incrustar un album de fotos Picasa en tu página web o blog:

"Embedding a Picasa Web Albums Slideshow"


Próximamente lo traduciré al castellano por si a alguno le cuesta trabajillo entender algo.

Me ha resultado util para el blog de bakau
Un saludo a mis cero lectores/comentaristas

domingo, 18 de noviembre de 2007

Asociación Humanista Bakau

En el marco de "activismo informático" en el que últimamente estoy metido, acabo de poner en funcionamiento un blog pensado para publicar toda la información sobre las actividades de la Asociación Humanista Bakau, ONG residente en Málaga y la verdad es que tiene unas ideas bastante interesantes.

En "¿Quiénes somos?" podéis leer las ideas que tienen, sus planes de acción, areas de actividad, su forma de pensar, etc.

Desde aquí desearles mucha suerte y todo el apoyo técnico que necesiten.

Un saludo

domingo, 11 de noviembre de 2007

Jornadas África Se Mueve (2)

[continuación de este artículo]

La segunda charla a la que asistí fué dada por Seynabu Tall Wade, presidenta de la ONG AFEE, de Senegal.
El titulo de su charla era "Aportación de las ONG: las ONG y la problemática de la deuda externa", sin embargo se centró sobre todo en el tema de la deuda externa.

La charla fué en francés con una intérprete y las ideas resultaban un poco inconexas por la necesidad de estar continuamente parando para traducir, pero transcribo lo que pude entender bien:

"Una vez que se consiguió la independencia de los países africanos entraron en juego una serie de entidades internacionales para definir lo que sería el futuro de África. Estas entidades fueron los bancos, los países ricos (europeos y Estados Unidos) así como organismos multilaterales (grandes multinacionales, compañías, etcétera). Y con ellos aparecieron las deudas, la deuda privada tras el plan marshall de E.E.U.U., la deuda generada tras el crash del petróleo, la deuda multilateral (dinero prestado por un pais rico a uno pobre) y la deuda pública, que es la que va dirigida a los intereses estrategicos de los donantes (grandes multinacionales).


Por diversos motivos, políticos y económicos, se ha incitado al endeudamiento de África, en lugar de incitar a la inversión en desarrollo, se incitaba a la inversión en la exportación para la lucración del norte: todo el dinero que se invierte en África sirve para generar riqueza en el norte y pobreza en el sur.

El problema más importante es que los intereses han pasado de estar en el 4-5% al 16-18%. La deuda externa de los países pobres crece exponencialmente (incluso hay casos en los que la deuda externa se ha multiplicado por doce en un solo año), impidiendo dirigir sus esfuerzos al desarrollo interno: simplemente se trabaja para intentar saldar la deuda externa, no invirtiendo en el propio país, con lo cual no se pueden generar riquezas y el problema se agrava.

Otro motivo por el que no pueden hacer frente a la deuda externa es la bajada de precios de las materias primas que se exporta de los países productores.

Hay una serie de paises, como Méjico, que han tirado la toalla, dándose cuenta de que no son capaces, ni lo serán nunca, de hacer frente a la deuda externa, y a raiz de esto surgen los Planes de Ajuste Estructural (P.A.E.) que consisten en abandonar las subvenciones a las necesidades no primarias y reducir la producción de bienes no primarios, siendo estos planes la puntilla final para la miseria de un pais.

Para los países desarrollados, la deuda externa supone el mantener el poder sobre los pueblos pobres, permitiendo dirigir sus futuros según los intereses económicos de los ricos.

Y es en este panorama cuando empiezan a aparecer los movimientos por la cancelación de la deuda externa.

Hay un nuevo mensaje para África: "la pobreza no es una fatalidad y las políticas caritativas no llevan a nada".

La solución al desarrollo de África está en manos de los propios africanos: nadie más lo hará por ellos. La ayuda económica de los países ricos no ha servido para nada, sólo para hundir más a los países pobres ahogándolos en una deuda imposible de saldar. Nadie, ningún pais puede desarrollarse solamente con la ayuda externa.

Ahí tenermos el ejeplo de los países asiáticos. Los paises asiáticos han podido desarrollarse por sus propios medios.
¿Y si África rechazara la ayuda al desarrollo? ¿Y si rechazara esa ayuda que la hunde? ¿Porqué no?

Hay una serie de acciones que pueden llevar a cabo los propios africanos para desarrollarse desde dentro.

El caso de Senegal: es un país donde más del 50% de la población sobrevive con menos de 1 dólar al día.
Sin embargo, en los pueblos, los propietarios de la ganadería no se lo piensan cuando matan a un toro que podrían vender por muchísimo dinero (unos 500 €) y se sacrifica para funerales y bodas. Todo ese dinero podría dedicarse a educación o sanidad, pero para ellos es más importante la ostentación, aunque son los más pobres según todos los indicadores de desarrollo (educación, sanidad, alimentación, etcétera).
Muchos prefieren gastar dinero en el teatro o cenas en galas que se celebran en lujosos hoteles, comprar cuadros carísimos, etcétera, ignorando que a unos kilómetros de allí viven niños sin ninguna atención de sanitaria, educación, y no conocen siquiera la electricidad.

¿Cómo queremos que estén al corriente de lo que pasa en el mundo si no tienen acceso a los medios de comunicación? Con unos pocos francos se puede construir una guardería o una escuela (como ha hecho MAD África).

El D.E.R.P. (nota del transcriptor: buscar el significado de las siglas) provoca tensión en Senegal, donde ha dividido a la población. La asociacion AFEE, lo llama el "Documento de Aumento de la Pobreza", por que la población no recibe las mejoras que el poder dice que se están llevando a cabo. Los precios de las cosas más necesarias no dejan de aumentar.

Si la puesta en marcha del D.E.R.P. lo único que está haciendo es que la población sea mas pobre, (los dirigentes se reúnen en grandes hoteles para las reuniones), ese dinero debería invertirse en la población, no en esos pocos privilegiados.

Respecto a las ONGs, hay una serie de cuestiones que TODAS deben cumplir:

1.- Continuar actuando en sus zonas de intervención, y cambiar la forma de pensar radicalmente: siempre es mejor aprender a pescar a que te den un pez cada día.
2.- Desafiar las tradiciones y cambiar la escala de prioridades (salud, educación y medio ambiente por delante de las tradiciones absurdas y la ostentacion)
3.- Dar prioridad a la formación y comprometerse con la democracia, potenciándola.
4.- Ser transparentes con los beneficiarios, dejar siempre claro en qué se invierten los fondos.
5.- Los proyectos que requieran una inversión deben generar siempre dinero para reinvertirlo en otros proyectos, a excepción de los proyectos educativos y sanitarios, que se deben hacer sin buscar rentabilidad económica, sólo buscando desarrollo de los pueblos.

Si piensas que este texto puede ser interesante para algún conocido, pásalo, y si deseas decir algo, deja un comentario.
Un saludo

Jornadas África Se Mueve (1)

El pasado Viernes 9 de Noviembre tuve la gran oportunidad de asistir a las Jornadas África Se Mueve en la Escuela de Aruitectura de la Universidad de Sevilla, organizadas por la ONG MAD África. Tristemente y por motivos personales sólo pude asistir a las jornadas del viernes, pero sólo viendo el programa, la verdad es que la cosa prometía.

El viernes se tratan principalmente tres temas:
- Panorama de África
- Las instituciones públicas en la cooperación para el desarrollo de África
- Experiencias de desarrollo en África impulsadas por colectivos locales

Las jornadas empezaron a las cuatro y media de la tarde y comenzó con la participación del profesor Mbuyi Kabunda, profesor de relaciones internacionales de la Universidad de Basilea y miembro del Instituto de Estudios Africanos de la UAM.

En la resentación se dijo que el día estaba dedicado a la cooperación y lo primero que hay que hacer para poder cooperar es conocer las causas a fondo. Se insistió en el hecho de que la cooperación es un intercambio entre personas, gobiernos, países, etcétera: es un trabajo común.

El profesor Kabunda comenzó diciendo que quería dar una visión global de África en su charla y transcribo (más o menos) literalmente (hasta donde daban mis dedos, porque había algunas cosas que se me escaparon por no poder transcribirlas lo suficientemente rápido):

"Cuando hablamos de África hablamos de 53 estados: No se puede entender como una sola cosa debido a su pluralidad cultural, de lenguas, de pueblos.

En esta charla no quiero caer en el afro-pesimismo, una moda que consiste en atribuir los malos resultados a los africanos, una vision negativa, mostrando sólo negritos famélicos y guerras. Ni quiero caer en el afro-optimismo, lo contrario...quiero reflejar el afro-objetivismo: África tal y como es.

Es necesario hacer un ecorrido de cinco siglos de historia para poder comprender la actualidad a fondo.

Hay en los países del norte una visión egocéntrica que considera África como una sola cosa y no hay nada más falso.
Podemos decir que hay dos partes totalmente diferenciadas en África, separadas por el Sahara en norte-sur. Tenemos así el África del norte, el África blanca, basada en el islamismo y el África del sur, que se denomina el África negra o el África profunda.

Cuando me refiera a África en esta charla me refiero al África Subsahariana y es de lo que voy a hablar.

En el África negra se vive de ganadería y la agricultura.

La historia aquí tiene una triple herencia: la pre-colonial, colonial y post-colonial.
En la conferencia de Berlin se destruye la forma de vida africana y se introduce un sistema diferente. La colonización fue una AGRESIÓN, la erradicación de las tradiciones del pueblo africano.

En los años cincuenta se llega al africa post-colonial: con objetivos como el desarrollo económico y la modernidad, que en algunos casos han fracasado.

Podemos decir que en África conviven tres culturas en una:
El animismo: se cree en las fuerzas de la naturaleza. Es una ideología más que una religión, vivir en cohesión y respeto con la naturaleza.
El Islam (desde el siglo V)
El cristianismo

Distintos aspectos políticos del África pre-colonial, la forma política antes de la llegada del hombre blanco:
el poder de los ancianos
el igualitarismo
el comunitarismo (comunismo primitivo)
el socialismo por encima de la riqueza privada

Después llega el colonialismo: se crean imperios (francés, británico, portugués, belga, español, italiano, etc.) y se fundamenta en la cosificación de los africanos, considerarlos meramente animales para que trabajen, la destrucción de la cultura africana.

Y luego la descolonización que está por hacer aún.Cuando los colonos se fueron se dió el poder a los colegas y los que eran cercanos a las ideologías occidentales y apareció otro fenómeno aún peor: el neocolonianismo. Una forma de manipulación más sutil y más peligrosa, como hemos podido ver con Francia en Chad. Llega el presidente francés y se hace la justicia que él quiere, no la del pueblo de Chad.

Podemos ver tres etapas post-coloniales:
multipartidismo étnico
monopartidismo (65-89): funcionarios, intelectuales y militares manipulando
democratizacion (hasta hoy): tiene aspectos positivos y negativos
positivos: elecciones en 42 de los 48 países
no hay presidencias vitalcias (al menos de derecho, aunque sí de hecho en algunos casos)
no hay marcha atrás (el pueblo no está dispuesto a ceder las libertades conseguidas con esfuerzo)
negativos:
fraudes masivos (todo sigue igual): los funcionarios, intelectuales y militares controlan todo.
Se ha dado prioridad a la democratización política en vez de la económica y social, buscando dinero para lucrarse antes de sacar adelante al pueblo dando sanidad, educación e infraestructuras.

Actualmente en África hay tres tipos de estado:
Hay estados débiles e inestables, contínuos cambios gubernamentales(Chad)
Hay estados fuertes (Senegal, Kenia)
estados anémicos (República Democrática del Congo, Sudán y Nigeria): estados amenazados de desaparición.

Pero estos estados son estados artificiales, gobernados con lenguas extranjeras y armas extranjeras, excéntricos (gobernados desde fuera y con economías que están enfocadas a la lucración de potencias extranjeras).

Antes del colonialismo se recogía de la naturaleza lo que se podía recuperar, respetándola y respetando sus ciclos, pero con el colonialismo se llegó a convertir a África en el granero de Europa, dejando insatisfechas las necesidades africanas. Se construyeron infraestructuras que unían los campos con los graneros, los puertos y los aeropuertos, siendo apenas útiles para el pueblo africano. Además estas infraestructuras en algunos casos han desaparecido destruidas por los gobiernos.

Podríamos decir que hay distintos tipos de economía de África:

Economías pre-industriales (agricultura): sometidas a los caprichos de los mercados internacionales y el clima, provocando hambre en caso de sequía.
Economías mineras
Economías agro-pastoriles: fomentan los cultivos comerciales para exportar y son los que consiguen industrializar el continente.
Economías de la guerra: saqueo de recursos naturales para subvencionar la guerra, los señores de la guerra.
Economías narcotraficantes: muchos de los altos cargos africanos están implicados en narcotrafico.
Economías contrabandistas.

Explicación del fracaso del desarrollo en África:

1.- Neopatrimonialismo: se confunde lo publico y lo privado. Los dirigentes utilizan las arcas públicas para sus propios intereses, en detrimento del pueblo, dejando de lado las necesidades básicas como alimentación, educación, desarrollo industrial y un largo etcétera.

2.- El desorden utilitarista: consiste en aprovechar el desorden, sacando partido para destruir África, expoliarla de sus recursos naturales.

Propuestas para comenzar un desarrollo real en África:

1.- Adopción del afro-federalismo: respetar el pluralismo cultural africano, el derecho al etno-desarrollo, el desarrollo de los pueblos no segun su país, sino su cultura, su idioma, rechazando lo propuesto y diseñado por los colonos para su propio lucro.

2.- Adoptar otro modelo de desarrollo, no el mimetismo de occidente (neoliberalismo económico), que ya está más que demostrado que es inviable. Debe ser socialmente justo y económicamente sostenible, produciendo bienes que produzcan puestos de trabajo y más bienes.

3.- Potenciación de la integración regional, dando prioridad a las aspiraciones de los pueblos.

4.- Potenciación de la economia social, interna de cada pueblo.

5.- Fomentar la cooperacion sur-sur (África-Sud América) para tener un peso real en las negociaciones internacionales y acabar con las asimetrías.

6.- Evitar la fuga de cerebros que se da en África, potenciando la permanencia para apoyar al desarrollo de los pueblos de origen.

7.- Utilizar el capital humano (los jóvenes africanos) que está predestinado o al cayuco,o a la kalashnikov o a la muerte a fuego lento del sida y la droga."

Fué una lección abrumadora de la realidad africana de mano de un original testigo de la problemática de su continente. Si piensas que este texto puede ser interesante para algún conocido, pásalo, y si deseas decir algo, deja un comentario.

Un saludo

jueves, 8 de noviembre de 2007

Comienza la fabricación del OLPC

Buenas noticias:

Cinco años después de lanzar la idea, Quanta empieza a fabricar los primeros ordenadores para la OLPC

El fabricante de ordenadores taiwanés Quanta ha comenzado la producción masiva de los denominados “PCs de 100 dólares” en una panta de Changshu, China. De esta forma, la fundación OLPC (One Laptop Per Chile) podrá empezar a hacer llegar los primeros ordenadores a niños de países en desarrollo a finales de este mes, casi cinco años después de que Nicolas Negroponte lanzara la idea de los PCs de bajo coste

La fundación OLPC ya ha recibido dos pedidos, de Uruguay y Mongolia, Además, tiene previsto lanzar una campaña benéfica en Estados Unidos y Canadá, “Give 1 Get 1”, en la que ofrecerá a niños de ese país la posibilidad de hacerse con dos ordenadores por 399 dólares, uno para su propio uso y otro para ser donado a un niño de un país en desarrollo.

El ordenador que está fabricando Quanta es el denominado XO, diseñado para niños de educación primaria. Funciona con software libre y está pensado para sustituir a los libros de texto, de manera que los estudiantes lo puedan utilizar en sus clases. La pantalla puede leerse incluso con luz solar, utliza poca energía y puede recargarse con la luz solar.

Aunque en un principio estaba previsto que los ordenadores se vendieran a un precio de 100 dólares, su coste actual asciende a casi el doble, 189 dólares,

[leído en www.baquia.com]