Aprendizaje automático en Stanford

stanford-logoEl aprendizaje automático es una rama de la Inteligencia Artificial, que tiene como objetivo el desarrollo de sistemas que sean capaces de aprender a partir de la experiencia. Las técnicas de aprendizaje automático puedes usarse en muchos campos. Por ejemplo, sistemas de recomendación (como Amazon), biología, juegos, medicina…

Si estás interesado en aprender acerca de aprendizaje automático, deberías visitar el canal de Youtube de la Universidad de Stanford, ya que allí podrás encontrar un curso completo sobre este tema. Esta es la información del curso:

This course (CS229) provides a broad introduction to machine learning and statistical pattern recognition. Topics include supervised learning, unsupervised learning, learning theory, reinforcement learning and adaptive control. Recent applications of machine learning, such as to robotic control, data mining, autonomous navigation, bioinformatics, speech recognition, and text and web data processing are also discussed.

Bookmark and Share

JScrollPane, JTable y scroll horizontal

Estaba implementando una interfaz gráfica con Java, y quería insertar un objeto JTable dentro de un JScrollPane. La tabla era más grande que el JScrollPane, pero pese a ello, no se porqué sólo se mostraba el scroll vertical. Gasté mucho tiempo leyendo manuales de Swing, revisando mi código… Era algo muy simple y todo parecía estar bien, pero entonces… ¿por que no funcionaba?

Finalmente, encontré la solución: resulta que hay un bug en Java que aparece cuando quieres usar una JTable dentro de un JScrollPane. La solución fue crear una clase que extendiera a JTable, para poder sobreescribir el método JTable.getScrollableTracksViewportWidth() por este otro:

public boolean getScrollableTracksViewportWidth() {

if (autoResizeMode != AUTO_RESIZE_OFF) {

if (getParent() instanceof JViewport) {

return (((JViewport)getParent()).getWidth() > getPreferredSize().width);

}

}

return false;

}

Fuente: DaniWeb Forum

Bookmark and Share

Error 500 en Wordpress

Después de esto, he aprendido que es conveniente desactivar todos los plugins antes de actualizar Wordpress automaticamente. No recuerdo cuando hice la última actualización, pero parece que la versión en inglés de este blog ha estado offline desde entonces.

Esta mañana quería leer un artículo del blog, y al entrar lo que veía era un mensaje de “Error 500″. Lo primero que hice fue intentar entrar en Wordpress, y no tuve problema. Despues probé a desactivar los plugins, por si alguno estuviera dando problemas, y tampoco funcionó. Lo siguiente que hice fue consultar el log de Apache, y esto fue lo que encontré:

SoftException in Application.cpp:252: File “/home/xxxxx/public_html/blog/index.php” is writeable by group

Ahí estaba: un problema de permisos. Así que usando Cyberduck (aunque cualquier programa de FTP sirve), lo arreglé, eliminando los permisos de escritura para Grupo y Otros:

Permisos Cyberduck

Nota: hay que aplicar este cambio a todos los archivos y directorios. En mi caso, marqué la opción “Aplicar cambios recursivamente”, pero todas las aplicaciones de FTP tienen que tener una opción similar.

Bookmark and Share

Resolviendo problemas con Subversion

Estaba actualizando mi copia local, cuando tuve el siguiente error:

Can’t copy / move ‘.svn-base’ to ‘.tmp’: The system cannot find the file specified.

El problema era que en el repositorio existían dos ficheros cuyo nombre se diferenciaba sólo por el uso de mayúsculas (por ejemplo, Fichero.txt y fichero.txt). Esto es posible en sistemas basados en Unix, pero en esta ocasión yo estaba usando un ordenador con Windows, donde no es posible tener ficheros con el mismo nombre. De ahí que no pudiera actualizar mi copia local. Así que si tienes el mismo error que yo, con borrar o renombrar uno de los dos ficheros en el servidor, se solucionará.

Bookmark and Share

Instalar Erlang en Mac

En primer lugar es necesario instalar XCode, para tener el compilador GCC. Despues, estos son los pasos que hay que seguir:

1. Bajar la última versión de Erlang. En mi caso, descargué la R13B02-1, obteniendo un fichero llamado otp_src_R13B02-1.tar.gz

2. Tras descomprimir el fichero:

$ cd otp_src_R12B-2
$. /configure
$ make
$ sudo make install

Estos son los pasos estandar, pero en mi caso tuve un problema con el comando “make”. El error que obtenía era el siguiente:

gen/wxe_events.cpp: In function ‘void initEventTable()’:
gen/wxe_events.cpp:277: error: ‘wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN’ was not declared in this scope
gen/wxe_events.cpp:278: error: ‘wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP’ was not declared in this scope
gen/wxe_events.cpp:279: error: ‘wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN’ was not declared in this scope
gen/wxe_events.cpp:280: error: ‘wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP’ was not declared in this scope
gen/wxe_events.cpp:281: error: ‘wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED’ was not declared in this scope
gen/wxe_events.cpp:282: error: ‘wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE’ was not declared in this scope
gen/wxe_events.cpp:283: error: ‘wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK’ was not declared in this scope
make[4]: *** [i386-apple-darwin9.8.0/wxe_events.o] Error 1
make[3]: *** [release] Error 2
make[2]: *** [release] Error 2
make[1]: *** [release] Error 2
make: *** [install.libs] Error 2

La solución fue compilar Erlang descativando el soporte para wxwidgets, así que los pasos que tuve que seguir fueron:

$ cd otp_src_R12B-2
$. /configure
$ touch lib/wx/SKIP
$ make
$ sudo make install

Bookmark and Share

Como arreglar las teclas Inicio y Fin en Mac

Hay una cosa que no me gusta de OS X: el comportamiento de las teclas Inicio, Fin, Avanzar Página y Retroceder Página. Para tener el mismo comportamiento con estas teclas que en Windows o Linux, abre un editor de texto y escribe:

{
“\UF729″ = “moveToBeginningOfLine:”;
“$\UF729″ = “moveToBeginningOfLineAndModifySelection:”;
“\UF72B” = “moveToEndOfLine:”;
“$\UF72B” = “moveToEndOfLineAndModifySelection:”;
“\UF72C” = “pageUp:”;
“\UF72D” = “pageDown:”;
}

Guarda el fichero como DefaultKeyBinding.dict en el directorio ~/Library/KeyBindings y reinicia tu Mac.

Bookmark and Share

Mostrar archivos ocultos en Leopard

He encontrado un widget muy util. Añade un botón en el dashboard, para poder mostrar u ocultar los archivos ocultos del sistema. Se instala, pulsas “Show” y ya tienes tus ficheros ocultos a la vista en el Finder.

Dashboard widget

Bookmark and Share

La clase java.util.Properties

No conocía esta clase hasta que la empecé a usar hace unos meses. Me encanta por lo fácil que hace la gestión de propiedades (o parámetros) en Java.

public class Properties extends Hashtable {

protected Properties defaults;
public Properties();
public Properties(Properties defaults);
public String getProperty(String key);
public String setProperty(String key, String defaultValue);
public Enumeration propertyNames();
public void load(InputStream in) throws IOException;
public void save(OutputStream out, String header);
public void list(PrintStream out);

}

Extiende java.util.HashTable, así que esta clase almacena cada propiedad como un par de (clave, valor). Si tu aplicación necesita diferentes parámetros para funcionar, puedes incluirlos en un fichero, y usar un objeto java.util.Properties para cargarlos.

Properties props = new Properties();
FileInputStream fichero = new FileInputStream(”fichero-de-propiedades.txt”);
props.load(fichero)

Con estas tres lineas, tendrás un objeto llamado “props” que contendrás las propiedades almacenadas en el fichero “fichero-de-propiedades.txt”. Pero, ¿cual debe ser el formato del fichero? Tiene que tener un par (propiedad, valor) por linea, ambos separados por un espacio en blanco, un “=” o “:”. Por ejemplo, el siguiente fichero sería válido:

Propiedad1=Valor1
#Esto es un comentario
Propiedad2:Valor2
Propiedad3 Valor3

Despues de cargar este fichero, ¿como accedemos a las propiedades? Si queremos usar el valor de “Propiedad1″:

String value = getProperty(”Propiedad1″);

O si quisieramos modificar el valor de “Propiedad2″:

setProperty(”Propiedad2″,”Nuevo valor”);

Más info: java.util.Properties

Bookmark and Share

Como editar la variable PATH en Mac

Para cambiar el PATH (u otra variable de entorno, como CLASSPATH) en Mac, es necesario editar un fichero llamado .profile situado en tu directorio home. Abre una ventana de terminal y escribe:

open -e ~/.profile

Si no teneis este fichero, podeis crearlo con:

touch ~/.profile

Ahora, hay que incluir una linea como la siguiente:

export PATH=(fichero-que-quieres-añadir):$PATH

Si por ejemplo, quisieras añadir un fichero llamado algo.jar, que guardas en tu carpeta de Documentos, tendrías que escribir:

export PATH=~/Documents/algo.jar:$PATH

Bookmark and Share

El término apropiado

Bookmark and Share

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.