jueves, 30 de abril de 2009

Matar tty, u otro proceso

Un error tipico (que suelo tener) es el de dejarme un sesion o dos abierta en el servidor que tenemos en la universidad para las asociaciones del cual, junto con otro compañero, soy administrador. Es un error grabe pero por desgracia muy comun. La solución a esto es bastante simple, de hecho esta entrada puede parecer un poco n00b pero estoy seguro que será util a alguien.

Lo normal en estos casos (y si quiseramos matar otro proceso), sería buscar el PID del proceso con un ps -ef y un grep, en el caso de una tty se podría buscar asi: ps -ef | grep tty ahora buscamos el PID, que es la segunda columna; y hacemos un kill -9 PID y listo. En el caso de la tty habria que fijarse no solo en la tty si no que el PID sea de una shell, vease bash o zsh. Si no, podriamos estar matando procesos dependientes de la sesion pero no la sesión en sí.

¡Espero que os sea util!

martes, 14 de abril de 2009

Ext4, kernel 2.6.29 y los bloques grandes

La semana pasada fue mi cumpleaños y por fin tengo mi deseado portatil: un Asus eee 901 20G. (En otra entrada comentaré algunas cosas del equipo).

Tras probar Xandros durante más o menos media hora, y ver que todo funcionaba, me dispuse a instalar una distro más completa y no ese juguete. Ya había tomado la decisión y tras leer la documentación detenidamente me lance a por Gentoo. Hay bastante gente que desaconseja el uso de esta distro en este tipo de equipos, pero tras usarla durante unos dias (luego formatee para probar Arch) no puedo estar mas encontra de ese opinión: le viene perfecta. EL unico problema es que lleva muchisimo tiempo compilar en un procesador tan poco potente (esto tiene solución si usas distcc)

El principal problema me surgio cuando tras terminar la instalación (despues de borrar Arch, que desde mi humilde punto de vista va de culete en este equipo) de Gentoo no me montaba dos particiones: /usr y /home que se encuentran bajo lvm en ext4

Con dmesg | tail pude ver el error:

EXT4-fs: dm-0: Filesystem with huge files cannot be mounted read-write without CONFIG_LBD.

¿El problema? Al compilar el kernel en el menu principal en “Enable the block layer” la opción “Support for large block devices and files” no estaba seleccionada. Se selecciona se vuelve a compilar y listo.

Hay que decir que esto me paso en el kernel 2.6.29-r1 que esta enmascarado por arquitectura en portage. Este kernel soporta todo el hardware que tiene mi asus 901 y tengo entendido que el resto de eee :D

Por si a alguien le interesa, cuando me asegure de que todo todo todo funciona con este kernel pondre mi .config

lunes, 23 de marzo de 2009

API LeJos en GNU/Linux con soporte para Eclipse

En esta entrada voy a mostrar como instalar la API LeJos para NXT (la versión 0.7 a día de hoy) en GNU/Linux. El conjunto de pasos es el mismo en cualquier sistema operativo GNU/Linux salvo extrañas excepciones que supongo que no se cumplirán (me refiero a paths extraños en los ficheros de eclipse por ejemplo)

Tras tener la instalación voy también a mostrar como instalar un plugin para el desarrollo de aplicaciones usando esta API en el entorno Eclipse aunque tras la instalación podréis llamar siempre a nxjc *.java, para los que estén más cómodos en vim :)

Al lio.

Lo primero es bajarse la API de la web: http://lejos.sourceforge.net/nxj-downloads.php y elegís la ultima versión, que en el momento de esta entrada es la 0.7.

Ahora movéis ese fichero tar.gz que acabáis de bajar (si es otro tipo sustituir las ordenes de descompresión por las correspondientes xD) a el path donde vamos a instalarlo. Yo por comodidad y por costumbre lo muevo a /usr/local/share/ de manera que cuando descomprima me quedare con un directorio /usr/local/share/lejos_nxj/

#Copiamos el tar.gz a /usr/local/share/
cp /path/del/archivo/targz/nombreDelArchivo.tar.gz /usr/local/share/
#Lo descomprimimos
tar zxvf /usr/local/share/nombreDelArchivo.tar.gz

Lo siguiente es ver que los archivos contenidos dentro de bin/ (dentro de la nueva carpeta que en mi caso es lejos_nxj: /usr/local/share/lejos_nxj/bin ) son ejecutables (el fichero StartUpText.bin no hace falta que sea ejecutable) para comprobarlo dentro del directorio ejecutamos:

ls -l

Y veríamos algo parecido a esto:
-rwxr-xr-x 1 root root 48096 nov 11 16:37 lejos_nxt_rom.bin
-rwxr-xr-x 1 root root 1000 nov 11 16:37 nxj
-rwxr-xr-x 1 root root 862 nov 11 16:37 nxjbrowse
-rwxr-xr-x 1 root root 319 nov 11 16:37 nxjc
-rwxr-xr-x 1 root root 784 nov 11 16:37 nxjconsole
-rwxr-xr-x 1 root root 784 nov 11 16:37 nxjconsoleviewer
-rwxr-xr-x 1 root root 799 nov 11 16:37 nxjdataviewer
-rwxr-xr-x 1 root root 627 nov 11 16:37 nxjflash
-rwxr-xr-x 1 root root 460 nov 11 16:37 nxjflashg
-rwxr-xr-x 1 root root 737 nov 11 16:37 nxjlink
-rwxr-xr-x 1 root root 793 nov 11 16:37 nxjmonitor
-rwxr-xr-x 1 root root 729 nov 11 16:37 nxjpccomm
-rwxr-xr-x 1 root root 795 nov 11 16:37 nxjsocketproxy
-rwxr-xr-x 1 root root 917 nov 11 16:37 nxjupload
-rw-r--r-- 1 root root 32527 nov 11 16:37 StartUpText.bin
Las x es que son ejecutables, como veis en el StartUpText.bin no hay x. Si no las hubiera (que lo normal es que no las haya podéis hacer un:

chmod a+x -R *
dentro de la carpeta, y después un
chmod a-x -R StartUpText.bin

para quitar los permisos de ejecución globales a StartUpText.bin

Ahora vamos a /usr/local/share/lejos_nxj/build y ejecutamos:

ant
Y listo, ya solo queda añadir los PATH. En el fichero /etc/profiles debéis añadir el nuevo PATH. Todo esto puede variar, pensar las cosas antes.
Veréis una cosa tal que así:

if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${ROOTPATH}"
else
PATH="/usr/local/bin:/usr/bin:/bin:${PATH}"

añadís
añadís las siguientes lineas:

PATH="/usr/local/share/lejos_nxj/bin"
NXJ_HOME="/usr/local/share/lejos_nxj"
LD_LIBRARY_PATH="/usr/local/share/lejos_nxj/bin"


quedando así:

if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${ROOTPATH}:/usr/local/share/lejos_nxj/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:${PATH}:/usr/local/share/lejos_nxj/bin"
NXJ_HOME="/usr/local/share/lejos_nxj"
LD_LIBRARY_PATH="/usr/local/share/lejos_nxj/bin"
fi

Y ya tenéis todo listo, para comprobar que funciona como un usuario normal deberías poder ver el comando nxjc.

Ahora vamos a añadir a Eclipse un plugin para poder usar esta nueva API.

La web de descarga es esta: http://lejos.sourceforge.net/tools/eclipse/ldt/

En mi caso tengo dos Eclipse instalados, ya que Gentoo permite tener instaladas una misma aplicación pero de diferentes versiones. (Tengo la 3.2 y la 3.4, ya que el editor Visual Editor solo funciona hasta la 3.2 y me gusta también estar a la ultima) Este plugin funciona en ambas versiones así que sea cual sea la tuya debería funcionar.

Copiamos el .zip a /usr/lib/eclipse-3.2 (el path puede variar)
Y lo descomprimimos con unzip. Y ya debería el situar las carpetas en su sitio.

Para comprobar que funciona abrir el eclipse y veréis una nueva pestaña que pone LeJos.

Espero que os sea útil :)

EDITO: Para los que les sirva hay un plugin para netbeans, aquí hay una manera de instalarlo: http://homepages.feis.herts.ac.uk/~comqdhb/lego/netbeans.php

viernes, 13 de marzo de 2009

Error #132 en el WoW

Una de las cosas que siempre quise hacer cuando tubiera una grafica decente era jugar a juegos con wine. Y como no el WoW tenía que caer.

La instalacion va perfecta hasta que tachan, instalas el ultimo parche y no arranca el juego. Suelta un error y una salida que la va a leer su madre encabezada por #132. Bueno pues tras mucho buscar di con una solucion. Hay que decir que uso una NVIDIA asi que si usas una ATI o una Intel y te da este error (que creo que es solo de nvidia) no te fies de mi solucion. A mi al menos me ha ido de lujo.

En el fichero Config.wtf (xD que cachondos) que se encuentra en la carpeta WTF dentro de la de la instalacion del WoW añadis la siguiente linea:

SET gxApi "opengl"
Y listo. Ahora a subir de nivel :)

lunes, 23 de febrero de 2009

Gentoo y Eclipe

Llevo un par de dias con Gentoo y estoy encantado, mucho me temo que Debian no volverá a este equipo, pero en otros si :D

No he tenido muchos problemas con Gentoo salvo con mi querido Eclipse.

Cuando iniciaba Eclipse 3.2 me aparecia una aviso:

JVM terminated. Exit code=127
/usr/bin/java
-jar /usr/lib/eclipse-3.2/startup.jar
-os linux
-ws gtk
-arch x86
-launcher /usr/lib/eclipse-3.2/eclipse
-name Eclipse
-showsplash 600
-exitdata ff002d
-vm /usr/bin/java
-vmargs
-jar /usr/lib/eclipse-3.2/startup.jar

Y tras esto se quedaba colgado y había que matarlo.

Lo primero que pensé fue: Xulrunner fijo.

Y si, es Xulrunner. Tras mucho buscar encontre dos soluciones en este blog: http://blog.ich-wars-nicht.ch

La primera que fue la que hice, consiste en remover xulrunner y y recompilar firefox sin este. La otra opcion es la de instalar un Eclipse mas moderno pero es de la rama inestable y no estoy yo muy acostumbrado a Gentoo todavia xD

En ese link viene ampliamente detallado lo que hay que hacer. Espero que le sea util a alguien, a mi me ha salvado.

sábado, 14 de febrero de 2009

Ver actualizaciones disponibles en tu movil

EDITO: Un amigo mio me ha dejado con dos palmos de narices... Me ha demostrado que me comí exageradamente la cabeza... como se nota que aun soy un primerizo en la carrera xD aquí esta su versión, que es sin duda alguna mil veces mejor:

#!/bin/bash

updates=$(aptitude search "~U" | wc -l)

if [ $updates -ge 1 ]
then
date=$(date +%H:%M -d 'today +180 seconds')
gcalcli quick "$date You have $updates updates in $(uname -n)"
fi


Animo a que useis este en lugar de el mio. Está mucho mejor hecho. Gracias Doti :)



En esta entrada voy a poner un script de mi cosecha (creo que es el segundo script que hago entero mio sin basarme en ideas de otros)

Este script básicamente lo que hace es enviarte un SMS a tu móvil con las actualizaciones disponibles de tu Debian.

Vayamos por partes:

El sistema se basa en Google Calendar y en usar gcalcli, un programa que te permite trabajar desde el Shell con Google Calendar. Este genial programa esta disponible para GNU/Linux y Mac OS X.

En Debian (al menos en sid) esta disponible en los repositorios.

aptitude install gcalcli

Eso es todo lo que necesitamos para empezar, aparte lógicamente de una cuenta de gmail y un calendario en Google Calendar.

Una vez que tengamos instalado gcalcli lo siguiente es crear en tu HOME un documento que se llame .gcalclirc y dentro poner:

[gcalcli]
user: mail sin @gmail.com
pw: tu contraseña

Lo siguiente es configurar en Google Calendar tu móvil. Es un servicio gratuito al menos en España. En la opción de notificaciones del calendario tenéis que poner recibir un SMS 1 minuto antes del evento.

Tras tener todo eso listo solo queda usar el scipt que pongo a continuación.
Está bajo licencia GPL :D


#!/bin/bash

#######################################################################
#By Alejandro Sáez Morollón #
#14/02/09 21:48 #
#######################################################################
#This program is free software; you can redistribute it and/or modify #
#it under the terms of the GNU General Public License as published by #
#the Free Software Foundation; either version 2 of the License, or #
#(at your option) any later version. #
# #
#This program is distributed in the hope that it will be useful, #
#but WITHOUT ANY WARRANTY; without even the implied warranty of #
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
#GNU General Public License for more details. #
# #
#You should have received a copy of the GNU General Public License #
#along with GNU gv; see the file COPYING. If not, write to #
#the Free Software Foundation, Inc., 59 Temple Place - Suite 330, #
#Boston, MA 02111-1307, USA. #
#######################################################################


hora=$(date +%H)
minuto=$(date +%M)
min=3
hor=1
if [ "$minuto" -ge 57 ]; then
fecha1=$(($hora+$hor))
fecha2=$(($minuto-$minuto))$(($minuto-$minuto))
else
fecha1=$hora
fecha2=$(($minuto+$min))
fi
update=$(aptitude search "~U" | wc -l)
if [ "$update" -ge 1 ]; then
host=$(uname -n)
gcalcli quick "$fecha1:$fecha2 Tiene $update actualizaciones en $host"
else
gxmessage -center -title "GcalcliEvent" -timeout 5 "No hay actualizaciones, no se enviaran datos a Google Calendar"
fi

Solo quedaría añadirlo a cron para que se haga cuando quieres.


No solo vale para esto, ni solo para Debian lógicamente. Otras utilidades serian por ejemplo ver los emails nuevos o ver los usuarios logeados. Hay mil y un posibilidades. Este script es una primer versión, se que tiene un fallo y es que no está contemplada la situación del cambio de día. En siguientes versiones lo modificare y pondré nuevas funcionalidades.

Si se os ocurren nuevas ideas y/o hacéis modificaciones me encantaría saber de ellas.

Espero que os sea útil.

domingo, 11 de enero de 2009

Otro problema con eclipse... JDK 1.6

Antes de empezar a la universidad ya usaba GNU/Linux junto con Windows y tras ver que en mi facultad se dan facilidades para el uso de plataformas que no sean Windows claramente GNU/Linux se convirtió en mi único sistema operativo. Sin embargo he de decir que no todo han sido comodidades. Si bien es cierto que hasta ahora las he solucionado todas.

Este es uno de los problemas más engorrosos que he tenido y a la par más estúpidos de solucionar. Pero que nunca me había puesto con el en serio dado que no me había presentado a la asignatura.

En CPM (Comunicación Persona-Maquina) se da entre otras cosas interfaces en java. Y siempre que ejecutaba mi código si este generaba una ventana se colgaba. No sabía por que era y es un incordio. Hasta que recientemente me di cuenta de que era cosa del JDK.

La versión 1.5 no me ha dado más que problemas así que instalé la 1.6 que era la que se usaba en clase. Sin embargo eclipse (el entorno de programación que usamos) no me cogía la nueva versión de la VM (Maquina Virtual)

Tras instalar el JDK 1.6 en Debian se instala en el path
/usr/lib/jvm/java-6-sun-1.6.0.10


Lo que tenemos que hacer es "decirle" a Eclipse en que path hay una nueva VM.
Cuando creamos un nuevo proyecto de java nos sale una ventana tal que así:

Seleccionamos la opción: Configure JRE

y aparecerá una algo tal que así: tras darle a Add.

Lo siguiente es seleccionar browser y darle el path de nuestra VM: /usr/lib/jvm/java-6-sun-1.6.0.10

Y listo. Ya tenemos nuestro eclipse con la ultima versión.

Nota: Logicamente sustituir java-6-sun-1.6.0.10 por vuestra versión correspondiente.