A partir d'ara, totes les entrades del blog sortiran a pvilas.ghost.io
A partir de ahora, todas las entradas del blog saltrán en pvilas.ghost.io
Right now, all the new entries will appear on pvilas.ghost.io
viernes, 11 de abril de 2014
Linux esborrar directoris ocults
Windows o macos tenen el costum de crear directoris o fitxers ocults de thumnails o similars a qualsevol unitat a la que accedeixen. Si des de Linux volem veure aquests directoris podem fer:
Per a els fitxers
find . -name ".*" -type f -iname ".*" -ls
Per als directoris
find . -name ".*" -type d -iname ".*" -ls
I si volem esborrar-los (enseny!!)
Per a els fitxers
find . -name ".*" -type f -iname ".*" -ls
Per als directoris
find . -name ".*" -type d -iname ".*" -ls
I si volem esborrar-los (enseny!!)
find . -type d -iname ".*" -exec rm -r {} \;
jueves, 27 de marzo de 2014
Cita apropiada para ITs - Alfred North Whitehead
Civilization advances by extending the number of important operations that we can perform without thinking about them.
Alfred North Whitehead realizó grandes aportaciones a la lógica matemática y la filosofía, especialmente al estudio de las relaciones. Se le considera uno de los padres del naturalismo. Extraído de la wikipedia:
...sostuvo que la realidad es un proceso construido por acontecimientos en vez de sustancias, de manera que estos no se pueden definir fuera de sus relaciones con otros eventos. Rechazaba así la teoría de las sustancias con existencia independiente y creaba la Filosofía del proceso...
También se interesó por la didáctica, en 1928 escribe Los fines de la educación dejando perlas como esta:
A pesar de ser un gran británico, durante su estancia en USA quedó admirado del carácter norteamericano:
Desde los primeros pasos de su educación el niño debe experimentar el placer del descubrimiento.
A pesar de ser un gran británico, durante su estancia en USA quedó admirado del carácter norteamericano:
De las ideas no se puede vivir, hay que hacer algo con ellas.
Más info:
martes, 25 de marzo de 2014
Django llamar a procedimientos almacenados Oracle con parámetros de salida
En el momento de escribir esto (1.6 de django) y después de darle varias vueltas, he llegado a la conclusión de que no es factible acceder al contenido de los parámetros de retorno sin usar directamente cx_Oracle, lo que en un momento dado puede repercutir en la portabilidad de la aplicación.
Teniendo esto claro, se trata de diseñar una estrategia que nos permita usar toda la potencia de los procedimientos almacenados con el mínimo coste en caso de cambiar de gestor de base de datos.
He intentado alejarme del estándar lo menos posible pero, como he comentado, no veo forma de librarse del uso directo de cx_Oracle. Esto es debido a las particularidades que presenta cada gestor a la hora de reservar espacio para las variables de salida en función del tipo. Por ello, lo que he hecho es escribir una función para cada tipo de parámetro de salida, por ejemplo,
Para un procedimiento como este:
En resumen; No es la mejor solución del mundo pero es fácil de portar si cambiamos de gestor de base de datos.
Teniendo esto claro, se trata de diseñar una estrategia que nos permita usar toda la potencia de los procedimientos almacenados con el mínimo coste en caso de cambiar de gestor de base de datos.
He intentado alejarme del estándar lo menos posible pero, como he comentado, no veo forma de librarse del uso directo de cx_Oracle. Esto es debido a las particularidades que presenta cada gestor a la hora de reservar espacio para las variables de salida en función del tipo. Por ello, lo que he hecho es escribir una función para cada tipo de parámetro de salida, por ejemplo,
from django.db import connection import cx_Oracle def call_proc_str1(cadena, valors=None): """ llama a un procedimiento Oracle cuyo ultimo parámetro es un string de salida """ cur = connection.cursor() # preparam cadena per a Oracle cadena="BEGIN %s; END;;" % (cadena,) # preparam el parametre de sortida sortida=cur.cursor.var(cx_Oracle.STRING) # afeixim paràmetre com a darrer valors.append(sortida) try: cur.execute(cadena, valors) # retornam paràmetre de sortida return sortida.getvalue() except Exception, e: mensaje="%s Error: call_proc cadena#%s valors#%s" % (e, cadena, valors) logger.error(mensaje) raise Exception(mensaje) finally: cur.close()
Se observan varios detalles:
- Hay que formar la cadena de la llamada como cadena="BEGIN %s; END;;" % (cadena,). Es debido a la forma cómo se hace la llamada via execute.
- Se crea y se reserva espacio para un string mediante cur.cursor.var(cx_Oracle.STRING) y se añade al final de los parámetros de conexión.
- Extraemos el valor del parámetro mediante sortida.getvalue()
Para un procedimiento como este:
create or replace procedure prueba( param1 in varchar2, param2 in varchar2, param3 out varchar2) as .....La llamada sería
try: plsql="prueba(%s, %s, %s)" param3=call_proc_str1(plsql, [param1, param2]) return jOk(param3) except Exception, ex: return jErr(str(ex))
Notar que usamos el placeholder %s de python-db en vez de el de Oracle.
En resumen; No es la mejor solución del mundo pero es fácil de portar si cambiamos de gestor de base de datos.
lunes, 24 de marzo de 2014
python cx_oracle code patterns
Here some useful notes about cx_Oracle taken from dbaportal.eu
http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/
and a pdf backup.
http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/
and a pdf backup.
miércoles, 19 de marzo de 2014
Ejecutar aplicación local desde el navegador (Chrome en windows)
Este pequeño workaround nos permitirá ejecutar una aplicación local desde "el navegador" sin que al usuario le parezca que "sale" de él. Es útil si tenemos que lanzar algo en batch.
El truco está en salvar un marcador en la barra de marcadores cuya url es un ejecutable o un bat que está en el sistema local.
Para evitar que el navegador nos muestre el contenido del fichero en vez de ejecutarlo, tenemos que crear un nuevo "protocolo" que en realidad no es más que la ejecución de una shell para nuestro programa.
Para crear el protocolo, creamos una entrada de registro como, por ejemplo, appurl.reg
Finalmente, en el chrome vamos a Marcadores->Añadir página y en la url ponemos
Si queremos llamar al protocolo desde chrome, podemos usar
Referencias:
http://www.autohotkey.com/board/topic/71831-application-url-launch-local-application-from-browser/
http://stackoverflow.com/questions/2330545/is-it-possible-to-open-custom-url-scheme-with-google-chrome
El truco está en salvar un marcador en la barra de marcadores cuya url es un ejecutable o un bat que está en el sistema local.
Para evitar que el navegador nos muestre el contenido del fichero en vez de ejecutarlo, tenemos que crear un nuevo "protocolo" que en realidad no es más que la ejecución de una shell para nuestro programa.
Para crear el protocolo, creamos una entrada de registro como, por ejemplo, appurl.reg
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\appurl] @="URL:AutoHotKey AppURL Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\appurl\DefaultIcon] @="appurl.exe,1" [HKEY_CLASSES_ROOT\appurl\shell] [HKEY_CLASSES_ROOT\appurl\shell\open] [HKEY_CLASSES_ROOT\appurl\shell\open\command] @="\"C:\\directorio\\programa.bat\" \"%1\""y lo registramos (click derecho-> Combinar). Esto nos crea el "protocolo" appurl. Ahora creamos el fichero
c:\directorio\programa.batcon nuestro código.
Finalmente, en el chrome vamos a Marcadores->Añadir página y en la url ponemos
appurl://lo-que-queramos-pasar-a-programaba.bat
Si queremos llamar al protocolo desde chrome, podemos usar
window.location.assign("appurl://algo");
Referencias:
http://www.autohotkey.com/board/topic/71831-application-url-launch-local-application-from-browser/
http://stackoverflow.com/questions/2330545/is-it-possible-to-open-custom-url-scheme-with-google-chrome
martes, 11 de marzo de 2014
Linux networking (ubuntu)
Ver tarjetas de red instaladas en el equipo:
/proc/net/dev
Ver los interfaces up
sudo ifconfig -s
Configuración de los interfaces
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8
Habilitar/deshabititar interface
sudo ifup eth1
sudo ifdown eth1
Hacer cambios temporales
sudo ifconfig eth1 10.0.0.100 netmask 255.255.255.0
sudo route add default gw 10.0.0.1 eth1
para añadir servidor dns, poner ip en /etc/resolv.conf
para purgar esta config temporal
ip addr flush eth1
Cambiar la configuración de hardware de la tarjeta
sudo apt-get install ethtool
sudo ethtool eth1
Si queremos fijar algún parámetro, editamos /etc/networking/interfaces y añadimos un pre-up:
auto eth1
iface eth1 inet static
pre-up /usr/bin/ethtool -s eth1 speed 1000 duplex full
/proc/net/dev
Ver los interfaces up
sudo ifconfig -s
Configuración de los interfaces
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8
Habilitar/deshabititar interface
sudo ifup eth1
sudo ifdown eth1
Hacer cambios temporales
sudo ifconfig eth1 10.0.0.100 netmask 255.255.255.0
sudo route add default gw 10.0.0.1 eth1
para añadir servidor dns, poner ip en /etc/resolv.conf
para purgar esta config temporal
ip addr flush eth1
Cambiar la configuración de hardware de la tarjeta
sudo apt-get install ethtool
sudo ethtool eth1
Si queremos fijar algún parámetro, editamos /etc/networking/interfaces y añadimos un pre-up:
auto eth1
iface eth1 inet static
pre-up /usr/bin/ethtool -s eth1 speed 1000 duplex full
Suscribirse a:
Entradas (Atom)