Mostrando las entradas con la etiqueta shellscript. Mostrar todas las entradas
Mostrando las entradas con la etiqueta shellscript. Mostrar todas las entradas

miércoles, abril 11, 2012

Sobre los archivos .desktop

Tengo localizado mi linux/gnu/debian/Gnome en el idioma gabacho, pero hay una herramienta que hoy ocupo mucho y que es importante que este en mi idioma natal, español de México, por qué, si no entiendo algo podría cometer una equivocacion, este programa es homebank

Bueno, la primera tarea fue hacer que la aplicación se ejecutara al principio, cuando se inicia sesión, no encontré nada fácil en gnome shell, así que googleando se llega a la solución:

Meter un archivo .desktop en ~/.config/autostart/

Para encontrar el archivo .desktop de homebank realicé la siguiente búsqueda:
chicuace1 in ~/
○ → find /usr/share/ -name "homebank*desktop"
/usr/share/app-install/desktop/homebank.desktop

Una vez encontrado el archivo lo copiamos a la ruta de autostart y listo, volvemos ha entrar a la sesión y se ejecuta automáticamente. Hasta ahí todo bien, pero se sigue ejecutando con el locale de US.

Para cambiar el locale necesitamos saber si tenemos el locale que queremos, para eso ejecutamos:

chicuace1 in ~/
○ → locale -a
C
C.UTF-8
en_US.utf8
es_MX.utf8
POSIX


Y ahí esta, el que me interesa es es_MX.utf8, en caso de no hayarlo en mi debian debo de hacer dpkg-reconfigure locales, para otras distribuciones habrá un comando similar. Ahora si ejecutamos lo siguiente tendremos nuestra aplicación traducida al español

chicuace1 in ~/bin
○ → LANG=es_MX.utf8 homebank


Bien, no encontré en la especificación de freedesktop una manera de modificar el LANG, así que no me quedó de otra que crear un sh con esa instrucción :

chicuace1 in ~/bin
○ → echo "LANG=es_MX.utf8 homebank" > homebank.sh && chmod a+x homebank.sh

Una vez probado ese script hay que modificar nuestro ~/.config/autostart/homebank.desktop sustituyendo Exec=homebank %F por Exec=/home/usuario/bin/homebank.sh %F

Y ahora ya tendremos nuestra aplicacion localizada al español y ejecutandoce cada inicio de sesión.

P.D. si ven este símbolo ○ → en mi shell es porque ocupo bash-it, les recomiendo ampliamente ocuparlo, muchos otros recomiendan zsh...

martes, julio 05, 2011

cd suffle

Hoy me hicieron el día: tenía tiempo que no encontraba una opción tan oscura y a la vez tan útil de un comando que uso diario, a todas horas y del cual pensaba ya no sacar más provecho, el hecho en cuestion es cd shuffle...

Cabe aclarar que sólo funciona con ksh, si estas con bash no funcionará... Pasemos al pedazo del man ksh que nos interesa:

cd [ -LP ] [ arg ]
cd [ -LP ] old new
..explicaciones mas, explicaciones menos...
The second form of cd substitutes the string new for the string old in the current directory name, PWD, and tries to change to this new directory.
..explicaciones mas, explicaciones menos...


Y a la demostracion:

[root@macuile .gnome2]# ksh
# echo $SHELL

/bin/bash
#Nota: no tengo idea de donde guarda ksh el shell utilizado actualmente
# como podrán darse cuenta no se borró el SHELL anterior
# echo $$
12330
# ps -ef | grep $$
root 12330 12277 0 22:53 pts/0 00:00:00 ksh
root 12339 12330 0 22:53 pts/0 00:00:00 ps -ef
root 12340 12330 0 22:53 pts/0 00:00:00 grep 12330
#Nota: con esto nos aseguramos de que sea ksh
# cd /home/db2inst1/.gnome2
# cd db2inst1 miguel

/home/miguel/.gnome2
# pwd
/home/miguel/.gnome2
#Nota: magia, nos cambiamos de directorio
[root@macuile .gnome2]# echo $SHELL
/bin/bash
[root@macuile .gnome2]# pwd
/home/db2inst1/.gnome2
[root@macuile .gnome2]# cd db2inst1 miguel
-bash: cd: db2inst1: No such file or directory
[root@macuile .gnome2]# mkdir db2inst1 miguel
[root@macuile .gnome2]# cd db2inst1 miguel
#Nota: A mi parecer este comportamiento es peor que no hacer nada y fallar
[root@macuile db2inst1]# pwd
/home/db2inst1/.gnome2/db2inst1
[root@macuile db2inst1]# mkdir miguel
[root@macuile db2inst1]# cd ..
[root@macuile .gnome2]# cd db2inst1 miguel
#Nota: sería interesante que hubiera entrado hasta miguel, no hubo suerte
[root@macuile db2inst1]# pwd
/home/db2inst1/.gnome2/db2inst1
[root@macuile db2inst1]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Jul 5 23:20 miguel


miércoles, febrero 02, 2011

Sobre la decompilación o la reingeniería


De estos requerimientos que nadie quiere hacer y una vez hecho ya no se ocupan, la cosa va mas o menos asi:

Hay varios appserver, cada uno con sus app, cada app contiene un jar (modelo.jar) que se ocupa, entre otras cosas, para saber
si la app se encuentra en produccion, desarrollo o pruebas. Muy listo el truco, la app se da cuenta mediante el hostname de la
maquina donde esta alojada la app. Erroneamente se pensaría que el modelo.jar es el mismo para todas las app, pero no, hay 260
y tantos jars diferentes y de los cuales yo no tenía ni idea de como funcionaban.

solucion:
Agarra todos los jar decompilar la clase que hace referencia al hostna, compilarla con el nuevo hostname y actualizar el jar...
Y para esto nuestro buen amigo sed viene al rescate.

1 #!/bin/ksh -
2 #===============================================================================
3 #
4 # FILE: reemplazar_ambiente.sh
5 #
6 # USAGE: ./reemplazar_ambiente.sh
7 #
8 # DESCRIPTION:
9 #
10 # OPTIONS: ---
11 # REQUIREMENTS: ---
12 # BUGS: ---
13 # NOTES: ---
14 # AUTHOR: Miguel Angel Huerta Gonzalez
15 # COMPANY:
16 # CREATED: 26/01/2011 12:35:06 p.m. Hora estándar central (México)
17 # REVISION: ---
18 #===============================================================================
19
20 set -o nounset # Treat unset variables as an error
21
22 JDEC=/home/user/jode-1.1.2-pre1.jar
23
24 #A_REEMPLAZAR="/app-2709/webapps/WEB-INF/lib/modelo.jar \
25 #/app-2709/webapps1/WEB-INF/lib/modelo.jar \
26 #/app-2709/webapps3/WEB-INF/lib/modelo.jar \
27 #/app-2709/webapps4/WEB-INF/lib/modelo.jar"
28
29 for MODELO in $A_REEMPLAZAR ; do
30 echo "=======================$WEBAPP============================="
31 ls -l $MODELO
32 cp $MODELO .
33 WEBAPP=$(echo $MODELO | awk -F/ '{printf "%s/%s\n", $6,$7}')
34 mkdir -p respaldo/$WEBAPP
35 cp $MODELO respaldo/$WEBAPP
36 AMBIENTE=$(jar tf modelo.jar | grep Ambiente)
37 echo $AMBIENTE
38 mkdir -p $(dirname $AMBIENTE)
39 java -cp $JDEC jode.decompiler.Main -c modelo.jar com.app.modelo.apConfig.Ambiente > Ambiente.java
40 FILE=$(dirname $AMBIENTE)
41 sed '
42 /apphostname.*PRODUCCION/ i\
43 ambientes.put("apphostnamenew".toUpperCase(), PRODUCCION);
44 ' Ambiente.java > Ambiente2.java
45 mv Ambiente2.java Ambiente.java
46 javac -classpath modelo.jar Ambiente.java
47 mv Ambiente.class $(dirname $AMBIENTE)/
48 jar uf modelo.jar $AMBIENTE
49 mkdir -p output/$WEBAPP
50 #cp modelo.jar output/$WEBAPP
51 cp modelo.jar $MODELO
52 echo "=======================$WEBAPP============================="
53 done
54

domingo, enero 16, 2011

Sobre el spam y las cadena

Como no todo lo que esta por internet es cierto, me comentaron de una cadena muy curiosa, la cosa iba más o menos asi:

Bla bla bla, este mes es especial porque tiene 5 Lunes, 5 Sábados y 5 Domingos, y esto solo se repite cada 834 años... bla bla bla si no mandas esto tendras 5 años de perdición...

Y como todos los fines de semana termino haciendo muchas cosas menos las que tenía que hacer, he aqui que esta cadena es una mentira...

#!/bin/bash - 

ANIO=1176
while [ $ANIO -lt 2011 ]; do
ANIO=$(($ANIO+1))
if [ "$(cal 1 $ANIO|tail -n+3)" == "$(cal|tail -n+3)" ]; then
echo "otro año maravilloso $ANIO"
fi
done


$ ./prueba_cadena.sh otro año maravilloso 1177
otro año maravilloso 1183
otro año maravilloso 1194
...

otro año maravilloso 1994
otro año maravilloso 2000
otro año maravilloso 2005
otro año maravilloso 2011
$


Pues parece que tenemos bastantes años más para pedir nuestros deseos...


$ cal 1 2005
Enero 2005
do lu ma mi ju vi sá
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
$ cal
Enero 2011
do lu ma mi ju vi sá
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
$


En fin, es una estupidez haberlo comprobado, pero me sirve para repasar el scripting.

Y entre otros temas, opencv; cuando me siento frente a mi lap siento que alguien me observa, y asi es, el lente de la webcam que viene inscrutada por defecto (en estricto sentido el defecto), pero se le puede sacar algun provecho..



Y la cosa funciona, he modificado un poco un ejemplo que viene por ahi lkdemo.py y la cosa anda, se puede mover el mouse con las manos, y ahi estoy, falta hacer algo como un lenguaje para interactuar con la pantalla...