tag:blogger.com,1999:blog-2018233879511361302024-03-13T06:20:34.791-06:00-- tekini --<hr width="40%" align="left">
Obrero informático...<br> ...maquilando códigopetrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.comBlogger87125tag:blogger.com,1999:blog-201823387951136130.post-47530010986269569962016-10-11T14:52:00.001-05:002016-10-11T15:22:46.637-05:00keybase.txt ==================================================================<br />
https://keybase.io/petrohs<br />
--------------------------------------------------------------------<br />
<br />
I hereby claim:<br />
<br />
* I am an admin of https://petrohs-log.blogspot.com<br />
* I am petrohs (https://keybase.io/petrohs) on keybase.<br />
* I have a public key ASB2xgvl3EcOsiO5eRMAXC8--cSwznPzuxT325Venxz5Qgo<br />
<br />
To do so, I am signing this object:<br />
<br />
{<br />
"body": {<br />
"key": {<br />
"eldest_kid": "0101619dfd1e745d91f95cb4ee46b5d28076b5c0e9ae7b342847459165d439337c870a",<br />
"host": "keybase.io",<br />
"kid": "012076c60be5dc470eb223b97913005c2f3ef9c4b0ce73f3bb14f7db955e9f1cf9420a",<br />
"uid": "cf183abefb49c7bb1188cdc3a532bd19",<br />
"username": "petrohs"<br />
},<br />
"service": {<br />
"hostname": "petrohs-log.blogspot.com",<br />
"protocol": "https:"<br />
},<br />
"type": "web_service_binding",<br />
"version": 1<br />
},<br />
"client": {<br />
"name": "keybase.io go client",<br />
"version": "1.0.17"<br />
},<br />
"ctime": 1476217146,<br />
"expire_in": 504576000,<br />
"merkle_root": {<br />
"ctime": 1476217080,<br />
"hash": "9824705b37df2c00dbc6c93058aeb5edfc6abfffcae021f26ac63b1e4bef906af7402a29f513b395dcd5a29d1908540897654240fa2e6119a83c52ac350fb9fc",<br />
"seqno": 673115<br />
},<br />
"prev": "61caded8eb365a778c648d9ffd6170ed2ce06d8a5a4f301deddc38143bb32cd8",<br />
"seqno": 11,<br />
"tag": "signature"<br />
}<br />
<br />
which yields the signature:<br />
<br />
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgdsYL5dxHDrIjuXkTAFwvPvnEsM5z87sU99uVXp8c+UIKp3BheWxvYWTFAwB7ImJvZHkiOnsia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTAxNjE5ZGZkMWU3NDVkOTFmOTVjYjRlZTQ2YjVkMjgwNzZiNWMwZTlhZTdiMzQyODQ3NDU5MTY1ZDQzOTMzN2M4NzBhIiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwNzZjNjBiZTVkYzQ3MGViMjIzYjk3OTEzMDA1YzJmM2VmOWM0YjBjZTczZjNiYjE0ZjdkYjk1NWU5ZjFjZjk0MjBhIiwidWlkIjoiY2YxODNhYmVmYjQ5YzdiYjExODhjZGMzYTUzMmJkMTkiLCJ1c2VybmFtZSI6InBldHJvaHMifSwic2VydmljZSI6eyJob3N0bmFtZSI6InBldHJvaHMtbG9nLmJsb2dzcG90LmNvbSIsInByb3RvY29sIjoiaHR0cHM6In0sInR5cGUiOiJ3ZWJfc2VydmljZV9iaW5kaW5nIiwidmVyc2lvbiI6MX0sImNsaWVudCI6eyJuYW1lIjoia2V5YmFzZS5pbyBnbyBjbGllbnQiLCJ2ZXJzaW9uIjoiMS4wLjE3In0sImN0aW1lIjoxNDc2MjE3MTQ2LCJleHBpcmVfaW4iOjUwNDU3NjAwMCwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE0NzYyMTcwODAsImhhc2giOiI5ODI0NzA1YjM3ZGYyYzAwZGJjNmM5MzA1OGFlYjVlZGZjNmFiZmZmY2FlMDIxZjI2YWM2M2IxZTRiZWY5MDZhZjc0MDJhMjlmNTEzYjM5NWRjZDVhMjlkMTkwODU0MDg5NzY1NDI0MGZhMmU2MTE5YTgzYzUyYWMzNTBmYjlmYyIsInNlcW5vIjo2NzMxMTV9LCJwcmV2IjoiNjFjYWRlZDhlYjM2NWE3NzhjNjQ4ZDlmZmQ2MTcwZWQyY2UwNmQ4YTVhNGYzMDFkZWRkYzM4MTQzYmIzMmNkOCIsInNlcW5vIjoxMSwidGFnIjoic2lnbmF0dXJlIn2jc2lnxEDM3KBtfH12AvAf+OIATH28Nc8WmLrbXWSUljJvydewUjDbbGmvNKuvia/mB6AGMIwVdOwSxQGXpJ2/ZoqwIbMDqHNpZ190eXBlIKRoYXNogqR0eXBlCKV2YWx1ZcQg+oL3ZJjKORLmyctWYDgLML+OBKyaVFkZnlAtlRvSdJejdGFnzQICp3ZlcnNpb24B<br />
<br />
And finally, I am proving ownership of this host by posting or<br />
appending to this document.<br />
<br />
View my publicly-auditable identity here: https://keybase.io/petrohs<br />
<br />
==================================================================petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.comtag:blogger.com,1999:blog-201823387951136130.post-79733534071471102102016-09-12T00:30:00.000-05:002016-09-12T00:30:33.449-05:00Diez mil ediciones es Wikipedia españolPues he superado las 10,000 ediciones en Wikipedia en español y pasado las 15,000 globales en el conjunto de proyectos de la fundación Wikimedia.
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-WUokRBmzZxA/V9Y65Dabc1I/AAAAAAAAINU/XI59Vn6kTI0fyUu4bFTAy0rMvKEIjiUQgCLcB/s1600/Cr8j6ccUIAADi6u.jpg%253Alarge.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-WUokRBmzZxA/V9Y65Dabc1I/AAAAAAAAINU/XI59Vn6kTI0fyUu4bFTAy0rMvKEIjiUQgCLcB/s320/Cr8j6ccUIAADi6u.jpg%253Alarge.jpeg" width="256" height="320" /></a></div>
Es grato que automagicamente Wikipedia agradezca las ediciones
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-FmtOHn07klo/V9Y7bCtVJaI/AAAAAAAAINY/7sILOwLcN8QZbzQARHWeLzuJ93lnJWy1ACLcB/s1600/Cr8h74bUsAAecKZ.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-FmtOHn07klo/V9Y7bCtVJaI/AAAAAAAAINY/7sILOwLcN8QZbzQARHWeLzuJ93lnJWy1ACLcB/s320/Cr8h74bUsAAecKZ.jpg" width="320" height="96" /></a></div>
Puede parecer una simpleza o pequeñez, pero me representa un trabajo hormiga en la construcción y mantenimiento de un proyecto de conocimiento libre y colaborativo.petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-3994804284859522842016-08-26T00:11:00.000-05:002016-08-26T00:11:53.928-05:00Configuración resources en nativefierLeí una <a href="http://www.muylinux.com/2016/08/24/aplicaciones-web-para-el-escritorio">nota</a> en <a href="http://www.muylinux.com">muylinux</a> sobre el uso de <a href="http://electron.atom.io/">Electron</a> para crear un cliente de escritorio de interfaces web con <a href="https://github.com/jiahaog/nativefier">nativefier</a>. Se me figuro interesante para emplear.
<code><pre>
$ aptitude update
$ aptitude install nodejs npm
$ sudo npm install nativefier -g
$ sudo ln -s /usr/bin/nodejs /usr/bin/node
$ mkdir /tmp/wiki
$ cd $_
$ nativefier -n eswiki es.wikipedia.org
$ ls -1FA
eswiki-linux-x64/
$ ls -1FA eswiki-linux-x64/
content_shell.pak
eswiki*
icudtl.dat
libffmpeg.so
libnode.so*
LICENSE
LICENSES.chromium.html
locales/
natives_blob.bin
resources/
snapshot_blob.bin
version
$ ./eswiki-linux-x64/eswiki
</pre></code>
Con esto ya tenemos una ventanita con la vista de wikipedia
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/--GN21spVyzo/V7-VagFrKRI/AAAAAAAAIHY/9SPJauzecnA91EItZ7G3nKVlgm77dWAxwCLcB/s1600/Wikipedia%252C%2Bla%2Benciclopedia%2Blibre_147.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/--GN21spVyzo/V7-VagFrKRI/AAAAAAAAIHY/9SPJauzecnA91EItZ7G3nKVlgm77dWAxwCLcB/s320/Wikipedia%252C%2Bla%2Benciclopedia%2Blibre_147.png" width="320" height="237" /></a></div>
Pues sigamos con otras webs
<code><pre>
$ nativefier -n esnews es.wikinews.org
$ nativefier -n wcommons commons.wikimedia.org
$ nativefier -n mxwiki mx.wikimedia.org
$ ls -FA1
esnews-linux-x64/
eswiki-linux-x64/
mxwiki-linux-x64/
wcommons-linux-x64/
$ du -hs *
104M esnews-linux-x64
104M eswiki-linux-x64
104M mxwiki-linux-x64
104M wcommons-linux-x64
</pre></code>
¿Qué? ¿Cuántos megas? Analizando que contiene cada directorio y comparándolos he identificado que solo existe diferencia en el contenido del directorio resources/app
<code><pre>
$ md5sum */*/* 2>/dev/null | sort | cut -d\ -f1 | uniq -c
4 026db20eb9f14ad800228c2f8cf076b6
4 03b11dc49fc2d42217879c2291340296
4 0f15d43cc55938a000de9c96d82263b1
$ md5sum */*/*/* 2>/dev/null | sort | cut -d\ -f1 | uniq -c
1 018fa69fbc5e49f08dc312b25872165d
1 332428d56785d857c0f02d4cba489ac2
1 53319562fc57e7269f1a787ab1d8cbf7
1 64b162a70352f1ee8c4a741e69ea494c
1 a20fc08726638a32ebe84c66fac0b258
1 a42fde1ea3bd4ba4dac1ad52e9a1893e
1 ab22d08f3326838e4f5490f4f2d7fbdf
1 b5ecc848c4f98fd0678dc9b434f6e6e7
1 b767bdadbacf5c6041239256181ff5f2
1 b862baf42092ce77dcc3289ea92e7cf7
1 be55ef6c199e8a94c48f3cf2030cba07
1 f026df95d4e616e6bdf0d4c990f1c100
$ md5sum */*/*/* 2>/dev/null | sort
018fa69fbc5e49f08dc312b25872165d wcommons-linux-x64/resources/app/nativefier.json
332428d56785d857c0f02d4cba489ac2 mxwiki-linux-x64/resources/app/package.json
53319562fc57e7269f1a787ab1d8cbf7 esnews-linux-x64/resources/app/icon.png
64b162a70352f1ee8c4a741e69ea494c wcommons-linux-x64/resources/app/package.json
a20fc08726638a32ebe84c66fac0b258 eswiki-linux-x64/resources/app/package.json
a42fde1ea3bd4ba4dac1ad52e9a1893e esnews-linux-x64/resources/app/package.json
ab22d08f3326838e4f5490f4f2d7fbdf eswiki-linux-x64/resources/app/icon.png
b5ecc848c4f98fd0678dc9b434f6e6e7 mxwiki-linux-x64/resources/app/nativefier.json
b767bdadbacf5c6041239256181ff5f2 esnews-linux-x64/resources/app/nativefier.json
b862baf42092ce77dcc3289ea92e7cf7 eswiki-linux-x64/resources/app/nativefier.json
be55ef6c199e8a94c48f3cf2030cba07 wcommons-linux-x64/resources/app/icon.png
f026df95d4e616e6bdf0d4c990f1c100 mxwiki-linux-x64/resources/app/icon.ico
$ more wcommons-linux-x64/resources/app/nativefier.json
{"name":"<b>wcommons</b>","targetUrl":"<b>http://commons.wikimedia.org</b>","counter":false,"w
idth":1280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozill
a/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.266
1.102 Safari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"inse
cure":false,"flashPluginDir":null,"fullScreen":false,"maximize":false}
$ more eswiki-linux-x64/resources/app/nativefier.json
{"name":"<b>eswiki</b>","targetUrl":"<b>http://es.wikipedia.org</b>","counter":false,"width":1
280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozilla/5.0 (
X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 S
afari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"insecure":f
alse,"flashPluginDir":null,"fullScreen":false,"maximize":false}
</pre></code>
De nativefier.json solo cambia la url, package.json el nombre de la web y el icono en icon.*
Viendo esto, el mismo paquete sirve para todos basta cambiar la configuración del url. Junte en un solo paquete las configuraciones
<code><pre>
$ cp -r eswiki-linux-x64/ wikis-nativefier/
$ mkdir wikis-nativefier/_perfiles
$ cp esnews-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/esnews-icon.png
$ cp esnews-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/esnews-nativefier.json
$ cp eswiki-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/eswiki-icon.png
$ cp eswiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/eswiki-nativefier.json
$ cp mxwiki-linux-x64/resources/app/icon.ico wikis-nativefier/_perfiles/mxwiki-icon.ico
$ cp mxwiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/mxwiki-nativefier.json
$ cp wcommons-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/wcommons-icon.png
$ cp wcommons-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/wcommons-nativefier.json
</pre></code>
Me puse a jugar con un script que cambia esos archivos de acuerdo a un argumento.
<code><pre>
$ more wikis-nativefier/wikis.sh
#!/bin/bash
cd /tmp/wiki/wikis-nativefier/
if [ -z "$1" ]
then
PERFIL=`cd _perfiles; ls -1 *.json | cut -d"-" -f1 | zenity --list --title="wiki nativefier" --text="¿Con qué perfil quieres ejecutar?" --column Perfiles 2>/dev/null`
else
PERFIL="$1";
fi
if [ -e resources/app/nativefier.json ]; then rm resources/app/nativefier.json; fi;
if [ -e resources/app/icon.png ]; then rm resources/app/icon.png; fi;
if [ -e resources/app/icon.ico ]; then rm resources/app/icon.ico; fi;
case "$PERFIL" in
eswiki)
cp _perfiles/eswiki-nativefier.json resources/app/nativefier.json
cp _perfiles/eswiki-icon.png resources/app/icon.png
;;
esnews)
cp _perfiles/esnews-nativefier.json resources/app/nativefier.json
cp _perfiles/esnews-icon.png resources/app/icon.png
;;
wcommons)
cp _perfiles/wcommons-nativefier.json resources/app/nativefier.json
cp _perfiles/wcommons-icon.png resources/app/icon.png
;;
mxwiki)
cp _perfiles/mxwiki-nativefier.json resources/app/nativefier.json
cp _perfiles/mxwiki-icon.ico resources/app/icon.ico
;;
*)
echo "Perfiles al momento:";
echo " eswiki";
echo " esnews";
echo " mxwiki";
echo " wcommons";
exit 1;
;;
esac
./eswiki
</pre></code>
Al ejecutar el script
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-AojQKhPPGZI/V7_OjPlZB8I/AAAAAAAAIHo/MRqQ6ZZi2egl4q19zGaQ4DGFw2rlbIv7QCLcB/s1600/wiki%2Bnativefier_055.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-AojQKhPPGZI/V7_OjPlZB8I/AAAAAAAAIHo/MRqQ6ZZi2egl4q19zGaQ4DGFw2rlbIv7QCLcB/s320/wiki%2Bnativefier_055.png" width="320" height="237" /></a></div>
Ahora un solo paquete puede lanzar diferentes configuraciones
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Vl0o60zWp-Q/V7_PAYOqASI/AAAAAAAAIHs/T233jbU6tWkuajj00V9884Z3fKOMB0fbQCLcB/s1600/Wikimedia%2BCommons_057.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-Vl0o60zWp-Q/V7_PAYOqASI/AAAAAAAAIHs/T233jbU6tWkuajj00V9884Z3fKOMB0fbQCLcB/s320/Wikimedia%2BCommons_057.png" width="320" height="224" /></a></div>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-41280215529439818262016-06-26T18:54:00.000-05:002016-08-26T00:14:58.425-05:00conectar vpnc usando zenityPara conectarme al trabajo empleo varios perfiles para <a href="https://www.unix-ag.uni-kl.de/~massar/vpnc/">vpnc</a>, normalmente lo <a href="http://petrohs-log.blogspot.mx/2008/10/en-las-empresas-puede-ser-comn-el-uso.html">ejecuto</a> por línea de comandos pero me puse a jugar un poco con <a href="https://es.wikipedia.org/wiki/Zenity">zenity</a>
<br /><br />
Cuando se ejecuta el script el proceso valida si existe una instancia corriendo de vpnc, en caso de no existir pregunta con que perfil se quiere conectar.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-wx-L2RBq8q0/V3Bik1l2wzI/AAAAAAAAHbQ/FkbS10SJ2nwC70dgi1qoJd28bj1oyll8QCLcB/s1600/VPNs_032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-wx-L2RBq8q0/V3Bik1l2wzI/AAAAAAAAHbQ/FkbS10SJ2nwC70dgi1qoJd28bj1oyll8QCLcB/s320/VPNs_032.png" /></a></div>
<br /><br />
Tras seleccionar el perfil, solicita la contraseña para poder conectar con la vpn.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-N5MLk5m_81w/V3BkG9Ab-eI/AAAAAAAAHbc/0MEpuv5Ii7ccl8pRBA87qgXTqAoZkyNbwCLcB/s1600/ii_033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-N5MLk5m_81w/V3BkG9Ab-eI/AAAAAAAAHbc/0MEpuv5Ii7ccl8pRBA87qgXTqAoZkyNbwCLcB/s320/ii_033.png" /></a></div>
<br /><br />
En la siguiente ventana muestra el resultado de la conexión.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-BXBYGz1ZyNg/V3BkvnE3U5I/AAAAAAAAHbk/FD5WXcAcdJUjmqQHpzfzgsrgBy5pFMOoQCLcB/s1600/Resultado%2Bde%2Bla%2Bconexi%25C3%25B3n_035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-BXBYGz1ZyNg/V3BkvnE3U5I/AAAAAAAAHbk/FD5WXcAcdJUjmqQHpzfzgsrgBy5pFMOoQCLcB/s320/Resultado%2Bde%2Bla%2Bconexi%25C3%25B3n_035.png" /></a></div>
<br /><br />
Si se presenta un error en la conexión lanza una terminal xterm para validar manualmente.
<br /><br />
En caso de ejecutar el script y este corriendo una instancia de vpnc pregunta si se quiere detener<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-EXtdxxoQGhs/V3BmgqHJGSI/AAAAAAAAHb0/ZjfI25x-lmc_u9JU3tvIOSsgrasTHhTTACLcB/s1600/VPNs_036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-EXtdxxoQGhs/V3BmgqHJGSI/AAAAAAAAHb0/ZjfI25x-lmc_u9JU3tvIOSsgrasTHhTTACLcB/s320/VPNs_036.png" /></a></div>
<br /><br />
Para desconectar solicita la contraseña.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-SGMy81qL8tQ/V3BnfDwVHiI/AAAAAAAAHcA/Xy-KY3XlpUoKWqYhn8FgrvT2Oc3Lf7kLgCLcB/s1600/ii_037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-SGMy81qL8tQ/V3BnfDwVHiI/AAAAAAAAHcA/Xy-KY3XlpUoKWqYhn8FgrvT2Oc3Lf7kLgCLcB/s320/ii_037.png" /></a></div>
<br /><br />
Y notifica el resultado.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-z7mjMCkMeww/V3BnpfaY4TI/AAAAAAAAHcI/1fsjbxWup6YVmxfzcCTPuBfk8i2xEkP2QCLcB/s1600/Resultado%2Bde%2Bla%2Bdesconexi%25C3%25B3n_038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-z7mjMCkMeww/V3BnpfaY4TI/AAAAAAAAHcI/1fsjbxWup6YVmxfzcCTPuBfk8i2xEkP2QCLcB/s320/Resultado%2Bde%2Bla%2Bdesconexi%25C3%25B3n_038.png" /></a></div>
<br /><br />
El código se encuentra en <a href="https://github.com/petrohs/listaVPN">https://github.com/petrohs/listaVPN</a>
<br /><br />
<pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(https://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> BASE="/tmp/listaVPN/perfiles";
REGISTRO=`ps -fea | grep vpnc | grep -v grep | awk '{print $9}'`
if [ -z "${REGISTRO}" ]
then
cd $BASE
PERFIL=`ls -1 | zenity --list --title="VPNs" --text="No hay VPN en ejecución\n¿Quieres conectar con un perfil?" --column Perfiles 2>/dev/null`
if [ -n "${PERFIL}" ]
then
gksudo -m "Ejecutar 'vpnc-connect $PERFIL'" "vpnc-connect ${BASE}/${PERFIL}" >/tmp/logVPNohs
zenity --text-info --title "Resultado de la conexión" --filename=/tmp/logVPNohs 2>/dev/null
fi
else
zenity --question --title="VPNs" --text="Esta conectado con perfil `basename $REGISTRO`\n¿Quiere detenerlo?" 2>/dev/null
if [ $? -eq 0 ]
then
gksudo -m "Ejecutar 'vpnc-disconnect $PERFIL'" "vpnc-disconnect" >/tmp/logVPNohs
zenity --text-info --title "Resultado de la desconexión" --filename=/tmp/logVPNohs 2>/dev/null
fi
fi
</code></pre>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-58144622390073626702016-02-14T01:47:00.000-06:002016-02-14T01:47:00.994-06:00Pausar reproducción de vlc por línea de comando<a href="http://www.videolan.org/vlc/">VLC</a> es un reproductor de multimedia muy potente, pero no tiene una opción directa para controlar desde línea de comando.<br>
<br>
Me interesa pausar desde un script, para ello se hace uso de <a href="https://es.wikipedia.org/wiki/D-Bus">D-Bus</a> con el comando:<br>
<code type=bash>
$ dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
</code><br>
<br>
Esto lo emplearé en un script que pause la musica antes de bloquear la pantalla.<br>
<code type=bash>
$ cat _lock.sh <br>
mocp -P <br>
dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause <br>
xset dpms force off <br>
xscreensaver-command -lock
</code>
petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-45496751791699773002015-12-31T01:10:00.000-06:002015-12-31T01:10:01.317-06:00Ian Murdock<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-TAWiZp3GjyE/VoTSx3OEjkI/AAAAAAAAHN4/JbPd2R04D3Y/s1600/debianLuto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-TAWiZp3GjyE/VoTSx3OEjkI/AAAAAAAAHN4/JbPd2R04D3Y/s400/debianLuto.png" /></a></div>
<a href="https://es.wikipedia.org/wiki/Ian_Murdock">Ian Murdock</a>, creador de la distribución y del proyecto Debian, falleció. Una gran pena embarga al mundo del software libre. petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-56553219555852638702015-09-08T18:17:00.000-05:002015-09-08T18:17:08.809-05:00Coloreado de sintaxis en formato wiki para vim<p align=justify>En ocasiones editamos algún artículo de <a href="http://es.wikipedia.org">Wikipedia</a> desconectados (cosas raras de wikimaniacos). Si empleamos como editor <a href="http://www.vim.org">Vim</a>, por omisión, no colorea las etiquetas wiki; sin embargo, existe el complemento <a href="http://www.vim.org/scripts/script.php?script_id=1787">wikipedia.vim</a> que resuelve este inconveniente.</p>
<p align=justify>Vamos a nuestro directorio de vim <i>(si no existe algun directorio lo creamos)</i><br>
Para colorear se emplea:</p>
<code>
$ cd ~/.vim/syntax/ <br>
$ wget '<a href="https://raw.githubusercontent.com/chikamichi/mediawiki.vim/master/syntax/mediawiki.vim">https://raw.githubusercontent.com/chikamichi/mediawiki.vim/master/syntax/mediawiki.vim</a>'
</code>
<p align=justify>En vim emplearíamos para llamar</p>
<code>
:setf mediawiki
</code>
<p align=justify>Para que vim detecte automáticamente</p>
<code>
$ cd ~/.vim/ftdetect/ <br>
$ wget '<a href="https://raw.githubusercontent.com/chikamichi/mediawiki.vim/master/ftdetect/mediawiki.vim">https://raw.githubusercontent.com/chikamichi/mediawiki.vim/master/ftdetect/mediawiki.vim</a>'
</code>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-aQMVRz-2swA/Ve9rb9lLheI/AAAAAAAAG0k/Trk9HF5sptw/s1600/mediawikisyntax01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-aQMVRz-2swA/Ve9rb9lLheI/AAAAAAAAG0k/Trk9HF5sptw/s320/mediawikisyntax01.png" /></a></div>
<p align=justify>Para que gvim muestre la opción en el menú</p>
<code>
$ cd ~/.vim/ <br>
$ vi synmenu.vim <br>
an 50.150.450 &Syntax.WXYZ.Wiki :cal SetSyn("mediawiki")<CR>
</code>
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-iKphBwXxFcM/Ve9sHKelQUI/AAAAAAAAG0s/5PeHBnPRx78/s1600/mediawikisyntax02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-iKphBwXxFcM/Ve9sHKelQUI/AAAAAAAAG0s/5PeHBnPRx78/s200/mediawikisyntax02.png" /></a></div>
<p align=justify>Tambien se puede hacer estas instalaciones por <a href="https://github.com/chikamichi/mediawiki.vim">git</a>. Esta información se detalla en la propia <a href="https://en.wikipedia.org/wiki/Wikipedia%3AText_editor_support#Vim">wikipedia</a></p>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-53917823418629384762015-08-13T00:51:00.000-05:002015-08-13T00:51:00.540-05:00ttytter, tuitear desde linea de comandos<a href="http://www.floodgap.com/software/ttytter/">TTYtter</a> es un herramienta para poder usar twitter desde la terminal en Linux.
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-E4Ly_ybjSIc/Vcv3Q14LL9I/AAAAAAAAGxE/BG1NGJXZ8q8/s1600/petrohs%2540meztli%253A%2B%257E_054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-E4Ly_ybjSIc/Vcv3Q14LL9I/AAAAAAAAGxE/BG1NGJXZ8q8/s320/petrohs%2540meztli%253A%2B%257E_054.png" /></a></div>
<p align=justify>Los siguientes pasos son para su instalación sobre <a href="http://www.debian.org">Debian</a>, configuración y ejecución desde linea de comandos.</p>
<p align=justify><li> Teniendo salida a internet y los repositorios actualizados: <br><code>$ apt-get install ttytter</code><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-b0w9-rfZa_A/Vcv48Efd14I/AAAAAAAAGxQ/hGKI5LUZ4-E/s1600/petrohs%2540meztli%253A%2B%257E_041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-b0w9-rfZa_A/Vcv48Efd14I/AAAAAAAAGxQ/hGKI5LUZ4-E/s1600/petrohs%2540meztli%253A%2B%257E_041.png" /></a></div></p>
<p align=justify><li> Si no presenta errores la instalación, lo ejecutamos: <br><code>$ ttytter</code><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-YzBUx8oreJg/Vcv5l7hMKwI/AAAAAAAAGyc/SLtCI0roEyY/s1600/petrohs%2540meztli%253A%2B%257E_042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-YzBUx8oreJg/Vcv5l7hMKwI/AAAAAAAAGyc/SLtCI0roEyY/s1600/petrohs%2540meztli%253A%2B%257E_042.png" /></a></div></p>
<p align=justify><li> Cuando lo solicita, <tt>«Press ENTER/RETURN to continue»</tt>, daremos enter</p>
<p align=justify><li> Solicitara a twitter un código de autorización e imprimiera una url que debemos copiar y pegar en un navegador<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-mSAhZxedDjk/Vcv5mKw4F3I/AAAAAAAAGyY/SCvYpncgvbY/s1600/petrohs%2540meztli%253A%2B%257E_043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-mSAhZxedDjk/Vcv5mKw4F3I/AAAAAAAAGyY/SCvYpncgvbY/s1600/petrohs%2540meztli%253A%2B%257E_043.png" /></a></div></p>
<p align=justify><li> En el navegador, autorizamos a ttytter<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-XMLaTpQJljI/Vcv5laYLPNI/AAAAAAAAGyw/4iddtz3yKDA/s1600/Twitter%2B-%2BAuthorize%2Ban%2Bapplication%2B-%2BIceweasel_044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-XMLaTpQJljI/Vcv5laYLPNI/AAAAAAAAGyw/4iddtz3yKDA/s320/Twitter%2B-%2BAuthorize%2Ban%2Bapplication%2B-%2BIceweasel_044.png" /></a></div></p>
<p align=justify><li> Al autorizar nos desplegara un código numérico que deberá copiarse y para pegar en la terminal. <div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-t_Lj3ME61I4/Vcv5ljTAOYI/AAAAAAAAGyg/w6EuI2bXncM/s1600/Twitter%2B-%2BAuthorize%2Ban%2Bapplication%2B-%2BIceweasel_045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-t_Lj3ME61I4/Vcv5ljTAOYI/AAAAAAAAGyg/w6EuI2bXncM/s320/Twitter%2B-%2BAuthorize%2Ban%2Bapplication%2B-%2BIceweasel_045.png" /></a></div></p>
<p align=justify><li> Escribimos el código y damos enter<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-Ho_a4FtOkEA/Vcv5mREk9II/AAAAAAAAGx8/zmPW6GfANHA/s1600/petrohs%2540meztli%253A%2B%257E_046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-Ho_a4FtOkEA/Vcv5mREk9II/AAAAAAAAGx8/zmPW6GfANHA/s1600/petrohs%2540meztli%253A%2B%257E_046.png" /></a></div></p>
<p align=justify><li> La aplicación termina de configurarse<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-WV_4z9-TpFE/Vcv5mvWcEnI/AAAAAAAAGyU/i2cJaGJezWk/s1600/petrohs%2540meztli%253A%2B%257E_047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-WV_4z9-TpFE/Vcv5mvWcEnI/AAAAAAAAGyU/i2cJaGJezWk/s1600/petrohs%2540meztli%253A%2B%257E_047.png" /></a></div></p>
<p align=justify><li> Para ejecutarlo desde linea de comandos basta pasar la cadena con el parámetro <tt>«status»</tt>: <br><code>$ ttytter -status="Nuestro seleccionado nacional @EduardoGtzC preparando para el panamericano"</code><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-pNWsNcu9OgM/Vcv5nHTF3BI/AAAAAAAAGyI/s3hcv44yXfo/s1600/petrohs%2540meztli%253A%2B%257E_048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-pNWsNcu9OgM/Vcv5nHTF3BI/AAAAAAAAGyI/s3hcv44yXfo/s1600/petrohs%2540meztli%253A%2B%257E_048.png" /></a></div></p>
<p align=justify><li> Podemos ir al navegador y ver el perfil de twitter<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-t9yfDgB7reo/Vcv5lI3DooI/AAAAAAAAGyk/CfLPWgMO7-g/s1600/EstudiosHernandez%2BJJ%2Ben%2BTwitter%253A%2B%2522Nuestro%2Bseleccionado%2Bnacional%2B%2540EduardoGtzC%2Bpreparando%2Bpara%2Bel%2Bpanamericano%2522%2B-%2BIceweasel_049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-t9yfDgB7reo/Vcv5lI3DooI/AAAAAAAAGyk/CfLPWgMO7-g/s1600/EstudiosHernandez%2BJJ%2Ben%2BTwitter%253A%2B%2522Nuestro%2Bseleccionado%2Bnacional%2B%2540EduardoGtzC%2Bpreparando%2Bpara%2Bel%2Bpanamericano%2522%2B-%2BIceweasel_049.png" /></a></div></p>
<p align=justify><li> Otra opción es pasar la cadena por una tubería haciendo uso del parámetro <tt>«script»</tt><br><code>$ echo "Viajaran el 27 de agosto" | ttytter -script</code><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-hKVyyhlnBrA/Vcv5nYJ9y3I/AAAAAAAAGyQ/xcO2Cl6JEH4/s1600/petrohs%2540meztli%253A%2B%257E_050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-hKVyyhlnBrA/Vcv5nYJ9y3I/AAAAAAAAGyQ/xcO2Cl6JEH4/s1600/petrohs%2540meztli%253A%2B%257E_050.png" /></a></div></p>
<p align=justify><li> La actualización se vera<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-5jHIxVTNKbQ/Vcv5lH-7GjI/AAAAAAAAGxo/GG66OWLTzMQ/s1600/EstudiosHernandez%2BJJ%2Ben%2BTwitter%253A%2B%2522Viajaran%2Bel%2B27%2Bde%2Bagosto%2522%2B-%2BIceweasel_051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-5jHIxVTNKbQ/Vcv5lH-7GjI/AAAAAAAAGxo/GG66OWLTzMQ/s1600/EstudiosHernandez%2BJJ%2Ben%2BTwitter%253A%2B%2522Viajaran%2Bel%2B27%2Bde%2Bagosto%2522%2B-%2BIceweasel_051.png" /></a></div></p>
<p align=justify><li> Para configurar mas perfiles se puede crear un directorio y mover el archivo generado por ttytter.<br><code>$ mkdir .ttytter<br>$ mv .ttytterkey .ttytter/EstHdzJJ.key</code></p>
<p align=justify><li> Empleamos el parámetro <tt>«keyf»</tt> para indicar que archivo de configuración usar: <br><code>$ echo "junto a Tania Cortez en la rama femenil" | ttytter -keyf=.ttytter/EstHdzJJ.key -script</code><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-jOMC_nuN4gk/Vcv5nrSPlHI/AAAAAAAAGyM/A0ai64tdek8/s1600/petrohs%2540meztli%253A%2B%257E_052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-jOMC_nuN4gk/Vcv5nrSPlHI/AAAAAAAAGyM/A0ai64tdek8/s1600/petrohs%2540meztli%253A%2B%257E_052.png" /></a></div></p>
petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-69769119614127603582015-08-11T17:05:00.000-05:002015-08-11T17:05:03.682-05:00Wikimanía 2015<div class="separator" style="clear: both; text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Wikimania_15_Mexico_logo.svg/176px-Wikimania_15_Mexico_logo.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Wikimania_15_Mexico_logo.svg/176px-Wikimania_15_Mexico_logo.svg.png" /></a></div><p align=justify>Del 15 al 19 de julio se llevó a cabo la décimo primera edición de <a href="https://wikimania2015.wikimedia.org/wiki/Wikimania">Wikimanía</a>, la convención de los fanáticos de <a href="https://www.wikipedia.org/">wikipedia</a> y <a href="https://wikimediafoundation.org/wiki/Nuestros_proyectos">anexas</a>.</p>
<p align=justify>La sede fue un hotel frente a la alameda central de la Ciudad de México. Pero no fue fortuito que un evento tan importante se realizara en la tierra <i>mexica</i>, esto corresponde al trabajo previo, realizado por la mesa directiva del <a href="https://mx.wikimedia.org/wiki/P%C3%A1gina_principal">Capítulo México</a> de la Fundación Wikimedia. Para <a href="https://meta.wikimedia.org/wiki/Wikimania_2015_bids">ganar</a> la sede se postulan diversas ciudades y se valora el trabajo del equipo y las condiciones sociales de las localidades. WMMX es uno de los capítulos mas activos y la cdmx suele ser muy amigable con los extranjeros.</p>
<p align=justify>Para recibir a los visitantes se convocó a un entusiasta y nutrido grupo de voluntarios. Algunos eran profesionistas, otros estudiantes; algunos bilingües, otros políglotas o monolingües; mujeres y hombres; todos con una actitud solidaria que contagiaban de tanta fuerza. En pocos días se forjó esa hermandad propia de las congregaciones. Me llamo la atención que algunos voluntarios no fueran editores de wikipedia, incluso no contaban con cuentas en el proyecto, lo que, definitivamente, no fue un problema para compartir el gusto por el conocimiento libre.</p>
<p align=justify>Wikimanía es un evento de alcance mundial y en sus pasillos se puede encontrar personas de todos colores, olores e idiomas. Culturas diversas que conviven sin prejuicios, con un único fin, compartir conocimiento en proyectos libres. Fue común ver wikipedistas de diferentes nacionalidades hablando en ingles o español comparando sus culturas y describiendo sus proyectos. Les brillan los ojos cuando hablan de sus ediciones y surge la emoción al charlar sobre sus contribuciones.</p>
<p align=justify>Hay personalidades y gustos variados; algunos son fotógrafos y su base es commons, otros les gusta wikinews, otros tantos son programadores y se entretienen en el código de mediawiki o bots, y claro wikipedistas en alguna de las tantas idiomas soportadas.</p>
<p align=justify>En este punto he de resaltar que conocí a:
<ul>
<li> <a href="https://commons.wikimedia.org/wiki/Special:ListFiles?limit=500&user=Poco_a_poco">Poco a poco</a> y <a href="https://commons.wikimedia.org/wiki/Special:ListFiles?limit=500&user=EneasMx">EneasMX</a>, ambos fotógrafos, el primero con gran experiencia y Eneas con sus primeras contribuciones.
<li> <a href="https://es.wikipedia.org/wiki/Usuario:Marrovi">Marrovi</a>, un editor políglota, gran impulsor de las ediciones en leguas originarias de México.
<li> <a href="https://meta.wikimedia.org/wiki/User:Superzerocool">Superzerocool</a>, un admirado hacker y gran persona, con quien espero contribuir pronto en código.
<li> <a href="https://es.wikinews.org/wiki/Usuario:MadriCR">MadriCR</a>, de quien tenia una idea distinta, siendo joven pero con gran experiencia.
<li> <a href="https://es.wikipedia.org/wiki/Usuario:Ezarate">Ezarate</a>, a quien salude pero no se generó la oportunidad de convivir tanto.
<li> Los wikicompas de wmmx, <a href="https://es.wikipedia.org/wiki/Usuario:Luisalvaz">Luisalvaz</a>, <a href="https://es.wikipedia.org/wiki/Usuario:Padaguan">Padaguan</a>, <a href="https://es.wikipedia.org/wiki/Usuario:Salvador_alc">Salvador_alc</a>, <a href="https://es.wikipedia.org/wiki/Usuaria:Christian_Cari%C3%B1o">Christian_Cariño</a>, <a href="https://es.wikipedia.org/wiki/Usuario:Omar_sansi">Omar_sansi</a>, <a href="https://es.wikipedia.org/wiki/Usuario:Andycyca">Andycyca</a>, <a href="https://es.wikipedia.org/wiki/Usuaria:Wotancito">Wotancito</a> y <a href="https://es.wikipedia.org/wiki/Usuario:ProtoplasmaKid">ProtoplasmaKid</a> con quien había tenido el gusto de contactarlos en linea pero tratarlos en persona es mucho mejor.
</ul>
Y me faltaron tantas personas, en particular <a href="https://es.wikipedia.org/wiki/Usuario:-jem-">-jem-</a> y <a href="https://es.wikipedia.org/wiki/Usuario:Allan_Aguilar">Allan Aguilar</a> quien no asistió.</p>
<p align=justify>En cuanto a las conferencias, algunas mas que otras, me dejaron <a href="https://commons.wikimedia.org/wiki/Category:Wikimania_2015_presentations">conocimiento</a> y <a href="https://commons.wikimedia.org/wiki/Category:Wikimania_2015_photographs_by_PetrohsW">satisfacción</a>; técnicas, teóricas, administrativas y disminución de brechas. No pude asistir a las que planee pero definitivamente la cantidad, variedad y calidad dejaría feliz a casi cualquiera.</p>
<p align=justify>Claro que existieron algunos puntos a <a href="https://wikimania2015.wikimedia.org/wiki/Feedback">mejorar</a>, pero que evento de esta importancia no los tiene. Es por ello que quiero expresar mi agradecimiento a todos y cada uno de los organizadores y participantes.</p>
<center>
<a title="Por EneasMx [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)]" href="https://commons.wikimedia.org/wiki/File%3AWikimania_2015_-_Group_photo.jpg"><img width="512" alt="Wikimania 2015 - Group photo" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Wikimania_2015_-_Group_photo.jpg/512px-Wikimania_2015_-_Group_photo.jpg"/></a>
</center>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com1tag:blogger.com,1999:blog-201823387951136130.post-68044902152793638072013-04-16T14:59:00.003-05:002013-04-16T14:59:43.099-05:00Instalar sqlite en HP UXVemos el tipo de sistema que tenemos<br />
<code>
$ uname -a
HP-UX servidor B.11.23 U ia64 3210103145 unlimited-user license
</code><br />
Se observa<br />
<pre> HP-UX <i><b>Unix HP-UX</b></i>
B.11.23 <b><i>Version 11.23</i></b>
ia64 <b><i>itanium a 64bits</i></b>
</pre>
<br />
<br />
Obtener el binario <a href="http://hpux.connect.org.uk/hppd/hpux/Development/Libraries/sqlite-3.7.15.2/">http://hpux.connect.org.uk/hppd/hpux/Development/Libraries/sqlite-3.7.15.2/</a><br />
<br />
<code>$ mkdir sqlite && cd $_</code><br />
<code>$ wget http://hpux.connect.org.uk/ftp/hpux/Development/Libraries/sqlite-3.7.15.2/sqlite-3.7.15.2-ia64-11.23.depot.gz
</code>
<br />
<br />
Desempaquetar<br />
<pre>$ gunzip sqlite-3.7.15.2-ia64-11.31.depot.gz
$ file sqlite-3.7.15.2-ia64-11.31.depot
sqlite-3.7.15.2-ia64-11.31.depot: tar file
$ tar -xvf sqlite-3.7.15.2-ia64-11.31.depot
x catalog/INDEX, 715 bytes, 2 tape blocks
x catalog/dfiles/INDEX, 193 bytes, 1 tape blocks
x catalog/dfiles/INFO, 138 bytes, 1 tape blocks
x catalog/sqlite/pfiles/INDEX, 359 bytes, 1 tape blocks
x catalog/sqlite/pfiles/INFO, 138 bytes, 1 tape blocks
x catalog/sqlite/sqlite-RUN/INDEX, 163 bytes, 1 tape blocks
x catalog/sqlite/sqlite-RUN/INFO, 1556 bytes, 4 tape blocks
x sqlite/sqlite-RUN/usr/local/bin/sqlite3, 242276 bytes, 474 tape blocks
x sqlite/sqlite-RUN/usr/local/doc/sqlite/HPUX.Install, 3827 bytes, 8 tape blocks
x sqlite/sqlite-RUN/usr/local/doc/sqlite/README, 1732 bytes, 4 tape blocks
x sqlite/sqlite-RUN/usr/local/doc/sqlite/VERSION, 9 bytes, 1 tape blocks
x sqlite/sqlite-RUN/usr/local/include/sqlite3.h, 343763 bytes, 672 tape blocks
x sqlite/sqlite-RUN/usr/local/include/sqlite3ext.h, 24158 bytes, 48 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.a, 2999758 bytes, 5859 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.la, 958 bytes, 2 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.so, 2361636 bytes, 4613 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/hpux32/pkgconfig/sqlite3.pc, 268 bytes, 1 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3/libtclsqlite3.so, 162364 bytes, 318 tape blocks
x sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3/pkgIndex.tcl, 100 bytes, 1 tape blocks
</pre>
<br />
<br />
Ejecutamos
<br />
<pre>$ sqlite/sqlite-RUN/usr/local/bin/sqlite3
/usr/lib/hpux32/dld.so: Unable to find library 'libsqlite3.so'.
Killed</pre>
<br />
Falla por la librería
Agregamos la ruta de la librería<br />
<code>$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3:sqlite/sqlite-RUN/usr/local/lib/hpux32</code>
<br />
<br />
Ejecutamos
<br />
<pre>$ sqlite/sqlite-RUN/usr/local/bin/sqlite3
/usr/lib/hpux32/dld.so: Unable to find library 'libreadline.so'.
Killed
</pre>
<br />
Nos falta la libería de readline<br />
<pre>$ wget http://hpux.connect.org.uk/ftp/hpux/Gnu/readline-6.2.004/readline-6.2.004-ia64-11.23.depot.gz
$ gunzip readline-6.2.004-ia64-11.23.depot.gz
$ tar -xvf readline-6.2.004-ia64-11.23.depot
x catalog/INDEX, 956 bytes, 2 tape blocks
x catalog/dfiles/INDEX, 193 bytes, 1 tape blocks
x catalog/dfiles/INFO, 138 bytes, 1 tape blocks
x catalog/readline/pfiles/INDEX, 431 bytes, 1 tape blocks
x catalog/readline/pfiles/INFO, 138 bytes, 1 tape blocks
x catalog/readline/readline-INC/INDEX, 165 bytes, 1 tape blocks
x catalog/readline/readline-INC/INFO, 1109 bytes, 3 tape blocks
x catalog/readline/readline-RUN/INDEX, 167 bytes, 1 tape blocks
x catalog/readline/readline-RUN/INFO, 3457 bytes, 7 tape blocks
x readline/readline-INC/usr/local/include/readline/chardefs.h, 4551 bytes, 9 tape blocks
x readline/readline-INC/usr/local/include/readline/history.h, 10078 bytes, 20 tape blocks
x readline/readline-INC/usr/local/include/readline/keymaps.h, 3163 bytes, 7 tape blocks
x readline/readline-INC/usr/local/include/readline/readline.h, 36517 bytes, 72 tape blocks
x readline/readline-INC/usr/local/include/readline/rlconf.h, 2189 bytes, 5 tape blocks
x readline/readline-INC/usr/local/include/readline/rlstdc.h, 1546 bytes, 4 tape blocks
x readline/readline-INC/usr/local/include/readline/rltypedefs.h, 2845 bytes, 6 tape blocks
x readline/readline-INC/usr/local/include/readline/tilde.h, 3046 bytes, 6 tape blocks
x readline/readline-RUN/usr/local/doc/readline/CHANGELOG, 27532 bytes, 54 tape blocks
x readline/readline-RUN/usr/local/doc/readline/CHANGES, 51509 bytes, 101 tape blocks
x readline/readline-RUN/usr/local/doc/readline/COPYING, 35147 bytes, 69 tape blocks
x readline/readline-RUN/usr/local/doc/readline/HPUX.Install, 2822 bytes, 6 tape blocks
x readline/readline-RUN/usr/local/doc/readline/INSTALL, 12304 bytes, 25 tape blocks
x readline/readline-RUN/usr/local/doc/readline/NEWS, 918 bytes, 2 tape blocks
x readline/readline-RUN/usr/local/doc/readline/README, 7680 bytes, 15 tape blocks
x readline/readline-RUN/usr/local/lib/hpux32/libhistory.a, 143990 bytes, 282 tape blocks
x readline/readline-RUN/usr/local/lib/hpux32/libhistory.so, 139356 bytes, 273 tape blocks
x readline/readline-RUN/usr/local/lib/hpux32/libreadline.a, 1066422 bytes, 2083 tape blocks
x readline/readline-RUN/usr/local/lib/hpux32/libreadline.so, 635132 bytes, 1241 tape blocks
x readline/readline-RUN/usr/local/share/info/dir, 747 bytes, 2 tape blocks
x readline/readline-RUN/usr/local/share/info/history.info, 61403 bytes, 120 tape blocks
x readline/readline-RUN/usr/local/share/info/readline.info, 206047 bytes, 403 tape blocks
x readline/readline-RUN/usr/local/share/info/rluserman.info, 79683 bytes, 156 tape blocks
x readline/readline-RUN/usr/local/share/man/man3/history.3, 22177 bytes, 44 tape blocks
x readline/readline-RUN/usr/local/share/man/man3/readline.3, 41974 bytes, 82 tape blocks
x readline/readline-RUN/usr/local/share/readline/excallback.c, 5734 bytes, 12 tape blocks
x readline/readline-RUN/usr/local/share/readline/fileman.c, 11426 bytes, 23 tape blocks
x readline/readline-RUN/usr/local/share/readline/histexamp.c, 2889 bytes, 6 tape blocks
x readline/readline-RUN/usr/local/share/readline/manexamp.c, 3300 bytes, 7 tape blocks
x readline/readline-RUN/usr/local/share/readline/rl-fgets.c, 11147 bytes, 22 tape blocks
x readline/readline-RUN/usr/local/share/readline/rl.c, 3179 bytes, 7 tape blocks
x readline/readline-RUN/usr/local/share/readline/rlcat.c, 3299 bytes, 7 tape blocks
x readline/readline-RUN/usr/local/share/readline/rlevent.c, 3295 bytes, 7 tape blocks
x readline/readline-RUN/usr/local/share/readline/rlptytest.c, 6531 bytes, 13 tape blocks
x readline/readline-RUN/usr/local/share/readline/rltest.c, 2146 bytes, 5 tape blocks
x readline/readline-RUN/usr/local/share/readline/rlversion.c, 1287 bytes, 3 tape blocks
</pre>
<br />
Agregamos al path<br />
<code>$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:readline/readline-RUN/usr/local/lib/hpux32</code>
<br />
<br />
Ejecutamos
<br />
<pre>$ sqlite/sqlite-RUN/usr/local/bin/sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .quit
$
</pre>
<br />
Listopetrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-6241834044412782162012-12-21T20:56:00.001-06:002012-12-21T20:56:47.461-06:00Feliz natividadFeliz navidad <i>(para quien celebra la tradición judeocristiana)</i> y prospero año 2013<br/>
<a href="https://twitpic.com/bo26xn" title="Celebremos el advenimiento de nuestro salvador... Goku on Twitpic"><img src="https://twitpic.com/show/thumb/bo26xn.jpg" width="300" height="500" alt="Celebremos el advenimiento de nuestro salvador... Goku on Twitpic"></a><br/>
Que el MEV los llene de bendiciones y nuestro salvador Goku continué protegiéndonos petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-78651036106242549412012-12-03T18:23:00.000-06:002012-12-03T18:23:50.587-06:00userbox antiepn<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-chi5NUL8iCs/UL1B2kdne0I/AAAAAAAAEg8/3OfCvN9n_bI/s1600/userBox_antiepn.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="59" width="261" src="http://1.bp.blogspot.com/-chi5NUL8iCs/UL1B2kdne0I/AAAAAAAAEg8/3OfCvN9n_bI/s400/userBox_antiepn.png" /></a></div>
<a href="http://es.wikipedia.org/wiki/Wikipedia:Userbox">Userbox</a> para <a href="http://es.wikipedia.org/">wikipedia</a>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-46224774649665972762012-11-20T00:01:00.000-06:002013-01-02T21:13:44.787-06:00Curso Radiofónico Historia del México AntiguoGenerado por IMER vía para escuchar en <a href="http://radiomexicointernacional.imer.gob.mx/index.php?option=com_content&view=article&id=564&Itemid=27">linea</a>. :p bueno, esa es la idea, pero yo los quiero escuchar fuera de linea en horario laboral.
Los cursos del imer son puestos en su sito Radio México Internacional en un playlist en flash.
Para descargarlos, vemos el código fuente, hay una etiqueta llamada <i>object codebase</i> y bajo ella esta la etiqueta <i>param name="flashvars" value="file=</i> el valor de file es la url a un xml.
Vamos a dicho xml y contiene url a cada uno de los modulos, listos para descargar con wget :)
<br><br>
<code>wget $(wget 'http://radiomexicointernacional.imer.gob.mx/index.php?option=com_content&view=article&id=623&Itemid=27' -o /dev/null -O - | grep 'param name="flashvars" value="file=' | cut -d= -f4 | cut -d\& -f1) -o /dev/null -O - |grep '.mp3' | sed -e "s/<location>//" -e "s/<\/location>.//" -e "s/./wget &/" | sh
</code>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com4tag:blogger.com,1999:blog-201823387951136130.post-16179486678058227062012-08-10T16:07:00.000-05:002012-08-10T16:07:00.776-05:00mocp errorAl intentar ejecutar <a href="http://moc.daper.net/">mocp</a> falla con el error<br />
<code> mocp: interface_elements.c:3891: iface_set_mixer_value: La declaración `value >= 0 && value <= 100' no se cumple. Abortado</code>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-etvzUbq9TEY/UCV3Vu7mefI/AAAAAAAAELA/Zl4-ksoRxWw/s1600/petrohs%2540tlahtolli%253A%2B%257E_001.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="226" width="320" src="http://4.bp.blogspot.com/-etvzUbq9TEY/UCV3Vu7mefI/AAAAAAAAELA/Zl4-ksoRxWw/s320/petrohs%2540tlahtolli%253A%2B%257E_001.png" /></a></div>
Recordé que usando <a href="http://library.gnome.org/users/gnome-volume-control/stable/">gnome-volume-control</a> había ajustado el volumen al máximo (150%).
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-MpiFz1qYY8k/UCV3V_JkvnI/AAAAAAAAELI/1jEdqErzR0E/s1600/Preferencias%2Bde%2Bsonido_002.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="291" width="320" src="http://3.bp.blogspot.com/-MpiFz1qYY8k/UCV3V_JkvnI/AAAAAAAAELI/1jEdqErzR0E/s320/Preferencias%2Bde%2Bsonido_002.png" /></a></div>
Basta con regresar a 100% y mocp vuelve a funcionar :Dpetrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com2tag:blogger.com,1999:blog-201823387951136130.post-13274513143064143402012-04-13T03:19:00.001-05:002012-04-13T03:19:53.480-05:00Reportar spamPoco pero pasa, llega a la lista <b>debian-user-spanish</b> <i>spam</i>. Probablemente sus clientes de correos tienen reglas para filtrarlos, sin embargo, en el <a href="http://lists.debian.org/debian-user-spanish/">histórico</a> queda registro y es recomendable, por espacio y no guardar basura, que los administradores puedan depurarlo.<br />
Pero la cantidad de listas y correos que tienen los administradores es tal que difícilmente puedan dedicarle tiempo completo, para ello existe el proyecto <i>'<a href="http://wiki.debian.org/I18n/SpanishSpamClean">Spanish Spam Clean</a>'<b></b></i> para eliminar esta basura. Se basa en que los usuarios reporten el spam y cuando al final de mes un correo tiene 5 reportes de spam el encargado procede a su borrado.<br />
Un proceso muy simple
<br />
<br />
<li> Llega un correo basura a la lista, el cual fácilmente se identifica
<table style="width: auto;"><tbody>
<tr><td><a href="https://picasaweb.google.com/lh/photo/uZlIMNOE_J31ipwDAhbDhtMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/-vuQqb8kVEIA/T4cqwl1iZII/AAAAAAAADho/QEPTJmMjjcs/s144/repSpam01.png" /></a></td></tr>
<tr><td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;">De <a href="https://picasaweb.google.com/lh/sredir?uname=111770922163278015935&target=ALBUM&id=5310744101228728785&feat=embedwebsite"></a></td></tr>
</tbody></table>
</li>
<li> Copiar el asunto del correo
<table style="width:auto;"><tr><td><a href="https://picasaweb.google.com/lh/photo/Z9uO-9abXEeVBh1nzy6mftMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/-PQYTVNO0b5Y/T4cqwhsrX9I/AAAAAAAADho/D6014FLAF2w/s144/repSpam02.png" /></a></td></tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">De <a href="https://picasaweb.google.com/lh/sredir?uname=111770922163278015935&target=ALBUM&id=5310744101228728785&feat=embedwebsite"></a></td></tr></table>
</li>
<li> Buscarlo en el histórico (podemos emplear complemento de firefox <a href="https://addons.mozilla.org/es-ES/firefox/addon/debserspanish/">DebserSpanish</a>)
<table style="width:auto;"><tr><td><a href="https://picasaweb.google.com/lh/photo/VUxQ3P17GFZQ8iLEAeJmtdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/-QNusD_7DyoM/T4cqwkeoqQI/AAAAAAAADho/fesTjyES-pA/s144/repSpam03.png" /></a></td></tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">De <a href="https://picasaweb.google.com/lh/sredir?uname=111770922163278015935&target=ALBUM&id=5310744101228728785&feat=embedwebsite"></a></td></tr></table>
</li>
<li> En la parte superior hay un botón "Report as spam"
<table style="width:auto;"><tr><td><a href="https://picasaweb.google.com/lh/photo/JyrKzX8nqN9cxWI_0LyqWNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/-bMG8Vi58ezQ/T4cqxSBy9nI/AAAAAAAADho/8AWgWweN7w4/s144/repSpam04.png" /></a></td></tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">De <a href="https://picasaweb.google.com/lh/sredir?uname=111770922163278015935&target=ALBUM&id=5310744101228728785&feat=embedwebsite"></a></td></tr></table>
</li>
<li> Tras presionarlo nos indica que el reporte fue aceptado
<table style="width:auto;"><tr><td><a href="https://picasaweb.google.com/lh/photo/WiT0AwCzV1mvfyhb2CB8rNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/-wMb2RWCuzy8/T4cqxbJmG_I/AAAAAAAADho/mVY7-_QH44w/s144/repSpam05.png" /></a></td></tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">De <a href="https://picasaweb.google.com/lh/sredir?uname=111770922163278015935&target=ALBUM&id=5310744101228728785&feat=embedwebsite"></a></td></tr></table>
</li>
Listo
<p>Al final del mes y reportar cada spam en la lista se puede ir a 'Spanish Spam Clean' buscar el año, lista y mes correspondiente, para nuestro ejemplo <a href="http://wiki.debian.org/I18n/SpanishSpamClean#debian-user-spanish">2012/debian-user-spanish/Abril</a> prender la estrella y colocar nuestro nombre</p>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com1tag:blogger.com,1999:blog-201823387951136130.post-815659657930151012012-04-05T00:52:00.000-05:002012-08-14T16:41:37.688-05:00convertir de decimal a hexadecimalDe hexadecimal a decimal<code></code><br />
<pre><code>$ echo "ibase=16; 28"|bc
40
$ echo "ibase=16; 13"|bc
19
</code></pre>
De decimal a hexadecimal<code><pre>$ echo "obase=16; 40"|bc
28
$ echo "obase=16; 19"|bc
13
</pre>
</code>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com1tag:blogger.com,1999:blog-201823387951136130.post-64751156030706861862012-03-10T02:55:00.002-06:002016-08-26T00:17:03.634-05:00script llamando a consola, whiptail y zenityHay usuarios que prefieren la interfaz gráfica, los que gustan de consola o en la misma terminal. Se puede realizar un script que se ejecute de acuerdo el parámetro con una interfaz distinta.<br />
<br />
<div style="font-family: inherit;">
Para esto es muy útil separar funciones y dejar en el script sola la lógica</div>
<div style="font-family: inherit;">
<tt><code><span style="font-size: small;">$ cat eje.bash</span></code></tt></div>
<div style="font-family: inherit;">
<tt><code><span style="font-size: small;">#!/bin/bash<br /><br />#tipo de funcion<br /> if [ "$1" == "-w" ] #emplear version whiptail<br /> then source lib/wFunc.eje;<br /> elif [ "$1" == "-z" ] #emplear version zenity<br /> then source lib/zFunc.eje;<br /> else #version consola <br /> nombre="$@"; <br /> source lib/cFunc.eje;<br /> fi ;<br /><br />#obtener el nombre<br /> if [ -z "$nombre" ]<br /> then<br /> ObtenNom; <br /> nombre=`cat /tmp/algo`; <br /> rm /tmp/algo<br /> fi<br /><br />#mostrar nombre<br /> Saluda "$nombre";</span></code></tt></div>
<br />
<br />
<b>terminal</b><br />
<code>$ ./eje.bash</code><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-IYyV8_3vSw0/T1sRk-aUDLI/AAAAAAAADbY/D6xvJCVmIPo/s1600/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://4.bp.blogspot.com/-IYyV8_3vSw0/T1sRk-aUDLI/AAAAAAAADbY/D6xvJCVmIPo/s320/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_001.png" width="320"></a></div>
<br />
<code><tt><span style="font-family: inherit; font-size: small;">$ cat lib/cFunc.eje</span></tt></code><br />
<code><tt><span style="font-family: inherit; font-size: small;"> #consola<br /> function ObtenNom<br /> {<br /> read -p "como te llamas?<br />nombre: " nom;<br /> echo "$nom" > /tmp/algo;<br /> return 0;<br /> }<br /> function Saluda<br /> {<br /> echo "Mucho gusto, $1";<br /> }</span></tt></code><br />
<br />
<b>whiptail</b><br />
<code>$ ./eje.bash -w</code><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-26HLIZ0sPuY/T1sTesHOAjI/AAAAAAAADbo/81jhq4W27Ww/s1600/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://1.bp.blogspot.com/-26HLIZ0sPuY/T1sTesHOAjI/AAAAAAAADbo/81jhq4W27Ww/s320/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_002.png" width="320"></a><a href="http://3.bp.blogspot.com/-IZ4jqe6dL48/T1sTevRw2sI/AAAAAAAADbk/gc8hBI4gp0o/s1600/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://3.bp.blogspot.com/-IZ4jqe6dL48/T1sTevRw2sI/AAAAAAAADbk/gc8hBI4gp0o/s320/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_003.png" width="320"></a></div>
<br />
<code><tt><span style="font-family: inherit; font-size: small;">$ cat lib/wFunc.eje<br /> #whiptail<br /> function ObtenNom<br /> {<br /> whiptail --title "como se llama?" --inputbox "Nombre:" 10 40 2>/tmp/algo;<br /> }<br /> function Saluda<br /> {<br /> whiptail --msgbox "Mucho gusto, $1" 10 40<br /> }</span></tt></code><br />
<br />
<b>zenity</b><br />
<code>$ ./eje.bash -z</code><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-QDefEW0xkwA/T1sUfY3V8BI/AAAAAAAADb8/rDjHRGfLvYY/s1600/Informaci%25C3%25B3n_005.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="137" src="https://1.bp.blogspot.com/-QDefEW0xkwA/T1sUfY3V8BI/AAAAAAAADb8/rDjHRGfLvYY/s200/Informaci%25C3%25B3n_005.png" width="200"></a><a href="http://1.bp.blogspot.com/-I8IaMHfwlN4/T1sUfQDs5HI/AAAAAAAADcA/dYJcslHiTDI/s1600/Como+se+llama%253F_004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://1.bp.blogspot.com/-I8IaMHfwlN4/T1sUfQDs5HI/AAAAAAAADcA/dYJcslHiTDI/s200/Como+se+llama%253F_004.png" width="200"></a></div>
<br />
<code><tt>$ cat lib/zFunc.eje<br /> #zenity<br /> function ObtenNom<br /> {<br /> nom=`zenity --title "Como se llama?" --entry --text "Nombre:"`;<br /> echo "$nom" >/tmp/algo;<br /> return 0;<br /> }<br /> function Saluda<br /> {<br /> zenity --info --text "Mucho gusto, $1";<br /> }</tt></code><br />
<br />
<b>terminal</b><br />
<code>$ ./eje.bash petrohs</code><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-F6liewxVZas/T1sVOM87CMI/AAAAAAAADcU/0Zm6dZS6yvQ/s1600/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://1.bp.blogspot.com/-F6liewxVZas/T1sVOM87CMI/AAAAAAAADcU/0Zm6dZS6yvQ/s320/petrohs%2540tlahtolli%253A+%257E-tmp-control-tmp-eje_006.png" width="320"></a></div>
<br />petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com2tag:blogger.com,1999:blog-201823387951136130.post-63945726139647208412012-03-10T00:41:00.003-06:002012-03-10T00:41:53.283-06:00arrancar vaio por usbPara poder arrancar una <i>sony vaio vng sz450fn por usb para probar o instalar un linux</i><br />
<ol>
<li>Entrar al menú de arranque, se logra presionando la tecla <i>esc</i> cuando aparece la pantalla de inicio de vaio</li>
<li>En el menú con la flecha hacia abajo ir a la opción <i><enter setup=""></enter></i> y presionar <i>enter</i></li>
<li>En la consola con la flecha a la derecha ir a la pestaña <i>Advanced</i></li>
<li>Con la flecha hacia abajo ir a la opción <i>External Drive Boot</i>, presionar <i>enter</i>, seleccionar la opción <i>Enabled</i>, presionar <i>enter</i></li>
<li>Presionar <i>F10</i> y <i>enter</i></li>
</ol>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com3tag:blogger.com,1999:blog-201823387951136130.post-15043566970070706972012-03-09T20:10:00.004-06:002012-03-09T20:10:59.345-06:00generar secuenciasPara obtener la cadena correspondiente a una secuencia que va de 0-Z<br /><code><br />$ cat sec.bash<br />#!/bin/bash<br />sec="S0000000A9Z";<br />ad=1; <br />for s in `seq -w 02 11 | sort -rn` <br /> do<br /> c=`expr substr $sec $s 1`; cc=`printf '%d' "'$c"`;<br /> e=`expr $cc + $ad`; ad=0; </code><br />
<code> if [ $e -eq 58 ]; then e=65; fi;</code><br />
<code> if [ $e -eq 91 ]; then e=48; ad=1; fi;<br /> nsec="$(printf "\\$(printf '%03o' $e)")${nsec}"<br /> done<br />echo -e " $sec \n S$nsec";<br />$ ./sec.bash <br /> S0000000A9Z <br /> S0000000AA0</code>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-6359142216857251002012-03-09T20:01:00.001-06:002012-03-09T20:01:45.773-06:00convertir una letra en su codigo asciiPara imprimir la representación de una letra en su valor ascii correspondiente<br />
<ul>
<li>decimal </li>
</ul>
<code>$ printf '%d\n' "'A"<br />65</code><br />
<ul>
<li>hexadecimal</li>
</ul>
<code>$ printf '%x\n' "'A"<br />41</code><br />
<ul>
<li>octal</li>
</ul>
<code>$ printf '%o\n' "'A"<br />101</code><br /><br />Para imprimir la representación de un valor ascii a su letra correspondiente<br />
<ul>
<li>decimal</li>
</ul>
<code>$ printf "\\`printf '%o\n' "65"`\n"<br />A</code><br />
<ul>
<li>hexadecimal</li>
</ul>
<code>$ printf "\\x41\n"<br />A</code><br />
<ul>
<li>octal</li>
</ul>
<code>$ printf "\\101\n"<br />A</code>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-81270950881868797962012-03-07T20:17:00.000-06:002012-03-07T20:17:40.522-06:00cofradia: Necesito ayuda o “Crowd funding” para salir de atolladero y demostrar la naturaleza de la gente<span class="kH">Por <a href="http://cofradia.org/" target="_blank">cofradía</a> me he ganado unas cortesías, mi primer
disco original de ubuntu, creo que hasta mi cuenta de gmail,
entretenidos comentarios con las cofradivas y harto conocimiento</span><br />
<br />
<a href="http://cofradia.org/2012/03/07/necesito-ayuda-o-crowd-funding-para-salir-de-atolladero-y-demostrar-la-naturaleza-de-la-gente/">http://cofradia.org/2012/03/07/necesito-ayuda-o-crowd-funding-para-salir-de-atolladero-y-demostrar-la-naturaleza-de-la-gente/</a><br />
<br />
<div style="background-color: #444444; color: #cccccc;">
<span style="font-size: x-small;"><i>Pues despues de varios años de ayudar a la gente, ahora me veo en una
situación realmente extrema, provocada en parte por confianza, descuido
o pendejez (si así quieren llamarlo). El caso es que por unos cargos
fraudolentos que me hicieron en mi tarjeta de crédito y que tengo en
disputa en HSBC (<a href="http://www.verotel.com/">Vtsetup.comverotel NL</a> y que <a href="http://www.ripoffreport.com/criminal-justice-system/veritol/veritol-stole-money-from-my-cr-52zae.htm">esta reportado en multiples sitios</a>), me negaron una línea de crédito que necesitaba urgentemente para levantarme personalmente y en mi negocio.</i></span></div>
<div style="background-color: #444444; color: #cccccc;">
<span style="font-size: x-small;"><i>Al platicar con mi familia se me ocurrió la idea de pedir fondeo por medio de donativos pequeños (<a href="http://en.wikipedia.org/wiki/Crowd_funding">Crowd funding</a>),
o sea 100.00 (Pesos mexicanos o MXN) de tal suerte que si podía recibir
900 donaciones salvo el rancho (como coloquialmente se dice).</i></span></div>
<div style="background-color: #444444; color: #cccccc;">
<span style="font-size: x-small;"><i>Mi hijo mayor me dijo que eso no era posible, que la gente no ayuda a
nadie, a lo cual yo le dije que yo he ayudado a muchas personas y que
creo que en la naturaleza humana esta el ayudar.</i></span></div>
<div style="background-color: #444444; color: #cccccc;">
<span style="font-size: x-small;"><i>Esto, independientemente de mi problema económico, quiero demostrarle
a mi hijo que es posible recibir y pedir ayuda de la gente por medio de
una interacción social. obviamente si esto tiene exito y excede mis
espectativas, donaremos el remanente a la causa que sugieran.</i></span></div>
<span style="background-color: #444444; color: #cccccc; font-size: x-small;"><i>Ya me dijeron de todo, empezando con pendejo, descarado y el más
atractivo fué “Cyber-mendigo”. pero quiero sentar precedente en México
de que si es posible hacer “Crowd funding”. Si me pueden ayudar puede
ser vía Paypal (aparece el cargo como “PAYPAL COFRADIA”)</i></span>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-74010443614872209862012-03-02T17:58:00.000-06:002012-03-02T17:58:37.300-06:00eliminar archivos swap vim<a href="http://www.vim.org/" target="_blank">Vi</a> emplea un archivo swap temporal para almacenar los cambios mientras se edita. Cuando por alguna razón no se cierra correctamente quedan esos archivos huérfanos.<br />
<br />Para poder listar desde vim los archivos que tiene identificados<br /><code>$ vim -r</code><br />Si se quiere obtener archivos <br /><code>$ vim -r archivo</code><br /><br />Suele pasar que no siempre se recuperan y quedan perdidos estos archivos.<br />Para buscarlos<br /><b>v1 <i>listado manual</i></b><br />
<code><br />$ find ~ -name ".sw*"<br />$ find ~ -name ".*.sw*"</code><br /><br />
<b>v2 <i>listado con alias</i></b><br /><code> </code><br />
<code>$ alias _swpFile='find ~ -name ".sw*" -or -name ".*.sw*"'</code><br />
<code>$ _swpFile</code><br />
<br /><br /><b>v3 <i>shell empleando zenity</i></b><br /><code> </code><br />
<code>#!/bin/bash<br /><br />if [ -n "$1" ]<br /> then #se le pasa por argumento<br /> _dirF="$1";<br /> else #ventana pregunta por directorio<br /> _dirF=`zenity --title "swpHuerf" --text "Indique el directorio a buscar" --entry`;<br /> if [ -z "$_dirF" ]<br /> then #si no pone nada asigna home<br /> _dirF="$HOME";<br /> fi<br /> fi<br /><br />if [ ! -d $_dirF ] #no existe el directorio<br /> then<br /> zenity --title "swpHuerf" --text "No existe el directorio" --error<br /> exit 1;<br /> fi<br /><br />Aborrar="$(zenity --title "swpHuerf" --text "Selecciona los archivos a eliminar" --list --multiple --column archivos `find ~ -name ".sw*" -or -name ".*.sw*" | sort`)";<br /><br />echo "$Aborrar" | sed -e "s/.*/rm '&'/" -e "s/|/' '/g" | sh;</code><br />
<br />petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com2tag:blogger.com,1999:blog-201823387951136130.post-85696652905466180222012-02-21T19:08:00.000-06:002012-02-21T19:08:12.471-06:00uuencode mailxCuando se intenta enviar por correo un archivo adjunto desde linea de comando
<pre><code>
$ uuencode $archivo $archivo | mailx -s "$asunto" $correo
</code></pre>
Puede llegar el texto dentro del correo como<br>
<pre><code>
begin 660 archivo
M;65NV%J97,@=&5X=&\);7-J"FEN=')A;F5X=&5L"3,V,C*:6-M('1E>'1O
M(`DQ,SDR,`II8VT@=&5X=&\@"3$P-#(W"FEC;2!T97AT;R!496QE9D,S;FEC
M80DQ,C@U"FEC;2!T97AT;R!)=7-A8V5L;`DR,S$*:6-M('1E>'1O(%5N969O
M;@DV,@II8VT@=&5X=&\@5&5L8V5L"3@Q-S(*:6-M('1E>'1O(`DV.#8*:6-M
M('1E>'1O(`DX"FEC;2!I;G0@0V%N861A"3*:6-M(&EN="!%W1A9&]S(%5N
M:61OPDR,C`*96UA:6P@='AT"3*"E-H;W)T0V]D90DS-C(W"@IE;6%I;"!M
M=6QT:6UE9&EA"3(*26YTF%N97AT96P@;75L=&EM961I80DV,`II8VT@;75L
,=&EM961I80IP='8*
`
end
</code></pre>
Para evitar eso emplear la bandera <b>-m</b>
<pre><code>
$ uuencode $archivo $archivo | mailx -m -s "$asunto" $correo
</code></pre>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-40904448027425559472012-02-20T17:39:00.000-06:002012-02-20T17:39:33.189-06:00vi :Terminal too wideAl ejecutar <code>vi</code> en un servidor remoto obtengo el error<br>
<code>:Terminal too wide</code><br>
Para solucionarlo ejecutar en consola<br>
<code>$ stty columns 180</code>petrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0tag:blogger.com,1999:blog-201823387951136130.post-73101455073636947702012-02-20T11:26:00.001-06:002012-02-20T11:26:58.676-06:00imprimir logPrimera versión de función para controlar el nivel de debug
<pre></code>
$ cat test.sh
DEBUG=2; #0 apagado
bicho ()
{
if [ $DEBUG -gt $1 ]
then
t=0; c="";
while [ $t -lt $1 ]
do
c=" $c";
t=`expr $t + 1`;
done
echo "$c`date +%Y%m%d_%H%M%S` $2";
fi
}
bicho 1 "nivel 1";
bicho 2 "nivel 2";
bicho 3 "nivel 3";
$ sh /tmp/test.sh
20120220_112448 nivel 1
20120220_112448 nivel 2
</pre></code>
Pone fecha, hora y por cada nivel pone un espacio en blancopetrohshttp://www.blogger.com/profile/05038541140591911247noreply@blogger.com0