Quien soy? RSS feed Enviar por email Imprimir Parar este menu Ir arriba
Blogzote.com
Mexico, informatica, internet, musica y algo mas…
Pagina 1 de 212

Llego a cien mil

Después de muchas aventuras, de muchas horas en el, de varios golpes, de una buena lana, de calores y fríos, de muchos lugares conocidos y varios desconocidos, de varios policías queriendo extorsionar, de sufrir en el trafico y gozar a altas velocidades (mientras no nos saque foto el radar), de una subida a un camellón, dos retrovisores rotos, uno que otro rayón, una que otra mujer al volante, una cambio de llantas, varias visitas al mecánico, de ver como la gasolina sube y sube y cada vez se llena con mas dinero, de parrandas, amigos, amigas, niños, subidas, bajadas, de los mil y un topes de la ciudad, de los diez mil y un baches.

Después de todo eso y muchas cosas mas, mi caballo blanco llego a los cien mil kilómetros, parece que fue ayer cuando lo veía con cero kilómetros, era apenas un bebe, como el kilometraje de los coches es como los cumpleaños de nosotros, le escribo esta nota para festejarle, para rendirle tributo a mi “Caballo Blanco”, aunque siendo sinceros ya va siendo hora de pensar en nuevos aires (no le vallan a decir, me valla a fallar por ahí).

100000 kms de mi caballo blanco
Sin comentarios Email Imprimir

Nosotros vs nosotros

El otro día tuve la desfortuna de querer pasar por una zona donde se realizaba una marcha, en esta ocasión fue los trabajadores del IMSS apoyando a los del ISSSTE (apenas me entere que fueron varias mas organizaciones), que marcharon desde el ángel de la independencia hasta el zócalo de la ciudad de México, el resultado no fue mas que unas horas perdidas debido al cierre de algunas arterias y el consecuente trafico ocasionado.

marcha en reforma

No voy a hablar de lo que reclamaba la marcha, seguramente tienen alguna razón valida para hacerlo, no será la primera ni la ultima que se realice, voy a hablar de las marchas en si, de algunas cosas en las que no estoy de acuerdo con ellas.

Para empezar, los mas contentos (o al menos, menos preocupados) de que se realicen las marchas deben de ser los mismos gobernantes, gobernantes causantes del problema, ellos desde su lugar de trabajo agarran, prenden la tele y ven en las noticias que se desarrolla una marcha de tal a cual punto reclamando tal o cual cosa, total, ellos agarran, levantan el teléfono y le marcan a su grupo de granaderos para que los protejan y no pasa de ahí.

Los amolados somos nosotros, haciendo marchas afectándonos a nosotros mismos, con el tiempo perdido, con los negocios que cierran, con el peligro de que un granadero te de un mal golpe, al final no es mas que un nosotros vs nosotros, los granaderos no creo que pertenezcan a la clase política y salgan a defender sus intereses, son iguales a nosotros buscándose el pan de cada día, nada mas que a ellos les pagan por repeler a los demás, y los mas irónico es que les pagan con nuestro dinero, mientras el gobernante desde su sillón solo observa riéndose de cómo nos peleamos entre nosotros, de cómo nos amolamos mas unos a otros, total, el dinero no es suyo, el problema es para nosotros, los jodidos somos nosotros.

Siempre he pensado, ¿Por qué ese grupo de personas, no va directamente a donde este el gobernante? ¿Por qué no va a los pinos, al palacio de gobierno o el lugar donde se encuentre el responsable? Lo saca de los … y le exige que cumpla con su trabajo, trabajo para el cual le estamos pagando (en la mayoría de los casos mucho muy bien pagados), y no lo dejan ir hasta que se encuentre la solución al problema, hasta que haga realmente su trabajo, hasta que cumpla con lo que ofrece o lo que se espera de su cargo.

Sin comentarios Email Imprimir

Oracle UTL_FTP

Hace unos me surgió la necesidad de realizar el paso de algunos archivos planos entre servidores, el problema es que este paso se va a realizar constantemente, entonces tuve que pensar en una solución que fuera fácil, aparte esos archivos no son mas que información que se procesa e ingresa a una tabla de base de datos.

De entrada la solución que se proponía era realizar un shell script para realizar el paso de archivos vía ftp de un servidor a otro, soluciona el problema pero no estaba muy de acuerdo, primero tener que llamar a un shell para después conectarte a Oracle y llamar a un procedimiento, le quita el control a Oracle sobre el manejo de esos archivos, otra era usar directamente UTL_FILE, pero este paquete sirve para el manejo de archivos en el mismo servidor de base de datos, que yo sepa, con utl_file no se puede manejar archivos de otras maquinas.

Tiempo atrás ya había leído de la existencia de un paquete para el manejo de conexiones tcp, el paquete se llama UTL_TCP, suponía entonces que ya debería de existir algo relacionado con el manejo de archivos entre servidores, la opción lógica era buscar el paquete UTL_FTP pero sorpresa, este no existe, bueno y ¿que dice Google al respecto? le di buscar utl_ftp y me regreso varias paginas, me encontré primero con un script guardado en sourceforce llamado “plsqlftp“, pero no me convenció, su desarrollo se ve casi abandonado y no encontré un solo ejemplo de cómo se usa, acabe descartándolo.

Rascándole un poquito mas a los resultados me tope con el que finalmente implemente, le llamaron “FTP Interfase“, me quedo perfecto para lo que necesitaba, se ve bastante robusto y completo, yo solo use tres funciones, “VERIFY_SERVER”, “PUT” y “GET” pero tiene muchas mas, igual más adelante las pueda necesitar, aquí les dejo el procedimiento que generé para realizar los movimientos de archivos:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  --
  -- MOVE_FILE
  --
  -- move file "p_filename" with ftp interfase, use put or get "p_type_move
  -- "p_type_move" = "PUT" => from "p_localpath" to "p_remotepath"
  -- "p_type_move" = "GET" => from "p_remotepath" to "p_localpath"
  -- use ftp server "p_hostname" with usr "p_username" and pwd "p_password"
  --   
  PROCEDURE move_file    (
     p_type_move           IN      VARCHAR2,
     p_localpath           IN      VARCHAR2,
     p_remotepath          IN      VARCHAR2,
     p_filename            IN      VARCHAR2, 
     p_username            IN      VARCHAR2,
     p_password            IN      VARCHAR2,
     p_hostname            IN      VARCHAR2,
     p_error               OUT     VARCHAR2) IS
 
     v_exception    EXCEPTION;
     p_status       VARCHAR2(32000);
     p_bytes_trans  NUMBER;
     p_trans_start  DATE;
     p_trans_end    DATE;
     dummy          BOOLEAN;
  BEGIN
 
     IF (p_type_move != 'PUT') AND
        (p_type_move != 'GET') THEN
        p_error := 'ERROR: value for p_type_move not supported.';
        RAISE v_exception;
     END IF;
 
     dummy := ftp_interface.verify_server ( 
                    p_remotepath           => p_remotepath,
                    p_username             => p_username,
                    p_password             => p_password,
                    p_hostname             => p_hostname,
                    v_status               => p_status,
                    v_error_message        => p_error,
                    p_port                 => 21,
                    p_filetype             => 'ASCII',
                    p_mainframe_connection => FALSE );
 
     IF p_status != 'SUCCESS' THEN
        RAISE v_exception;
     END IF;
 
	 IF p_type_move = 'PUT' THEN
 
	     dummy := ftp_interface.put (
                    p_localpath            => p_localpath,
                    p_filename             => p_filename,
                    p_remotepath           => p_remotepath,
                    p_username             => p_username,
                    p_password             => p_password,
                    p_hostname             => p_hostname,
                    v_status               => p_status,
                    v_error_message        => p_error,
                    n_bytes_transmitted    => p_bytes_trans,
                    d_trans_start          => p_trans_start,
                    d_trans_end            => p_trans_end,
                    p_port                 => 21,
                    p_filetype             => 'ASCII',
                    p_mainframe_ftp        => FALSE,
                    p_mainframe_cmd        => '' );
 
         IF p_status != 'SUCCESS' THEN
            RAISE v_exception;
         END IF;
 
     ELSIF p_type_move = 'GET' THEN
 
		 dummy := ftp_interface.get (
                    p_localpath            => p_localpath,
                    p_filename             => p_filename,
                    p_remotepath           => p_remotepath,
                    p_username             => p_username,
                    p_password             => p_password,
                    p_hostname             => p_hostname,
                    v_status               => p_status,
                    v_error_message        => p_error,
                    n_bytes_transmitted    => p_bytes_trans,
                    d_trans_start          => p_trans_start,
                    d_trans_end            => p_trans_end,
                    p_port                 => 21,
                    p_filetype             => 'ASCII',
                    p_mainframe_ftp        => FALSE,
                    p_mainframe_cmd        => '' );
 
         IF p_status != 'SUCCESS' THEN
            RAISE v_exception;
         END IF;
 
     END IF;
 
     p_error := 'OK';
 
  EXCEPTION 
     WHEN v_exception THEN
         NULL;
     WHEN OTHERS THEN
         p_error := 'ERROR: ' || SQLERRM;
  END move_file;

La llamada al procedimiento se realiza de manera muy fácil:

1
2
3
4
5
6
7
8
move_file('GET',
          '/datos',
          '/home',
          'test.txt',
          'usuario',
          'password',
          'ip_del_host',
          v_error);
* 49 Comentarios Email Imprimir

Me heredaron 60 Millones

Tiene apenas unos días que hablaba de los fraudes nigerianos y hoy que abro mi mail, resulta que me acaban de heredar nada mas y nada menos que la muy jugosa cifra de $60,000,000.00 de dólares de quien sabe que persona que quien sabe cuando conocí, ¡a que memoria la mía!, pero bueno con tanta lana ¿Qué importa mi memoria? A disfrutar de unas merecidas vacaciones en Hawai, de un gran casa en Miami y un Ferrari a la puerta de mi garage.

Después de despertar de mi sueño (soñar no cuesta) lamentablemente no es más que otro tipo de estafa, de esas que abundan por Internet, si se me ocurriera contestar el email, en unos días tendría como respuesta que necesito depositar tanta cantidad a tal cuenta por concepto de gastos, honorarios, etc. Por supuesto habrá gente tan ilusa, que gracias a su ambición caigan en la estafa, si no fuera así no existirían estos estafadores, y al final nunca volverían a saber de la susodicha persona y por supuesto de su susodicha herencia, aquí les dejo el mail para que se den una idea:

MANAGING PARTNER
AIDAN WALSH & ASSOCIATES
LONDON – UK.
TEL:+447045709248

NOTIFICATION OF BEQUEST

Attn:Beneficiary

On behalf of the Trustees and Executor of the estate of Late Engr.Jürgen Krügger, I once again try to notify you as my earlier letter was returned undelivered. I hereby attempt to reach you again by this same email address on the WILL. I wish to notify you that late Engr.Jürgen Krügger made you a beneficiary to his WILL. He left the sum of Sixty Million Dollars (USD$60,000.000.00 ) to you in the codicil and last testament to his WILL.This may sound strange and unbelievable to you,but it is real and true. Being a widely travelled man,he must have been in contact with you in the past or simply you were ecommended to him by one of his numerous friends abroad who wished you good.

Engr.Jürgen Krügger until his death was a member of the Helicopter Society and the Institute of Electronic & Electrical Engineers. He was a very dedicated Christian who loved to give out. His great philanthropy earned him numerous awards during his life time.Late Engr. Jürgen Krügger died on the 13th day of December, 2004 at the age of 80 years, and his WILL is now ready for execution.

According to him this money is to support your humanitarian activities and to help the poor and the needy in our society.Please if I reach you this time as I am hopeful, endeavor to get back to me as soon as possible to enable me conclude my job. Please do send your responces.

via my contact information as

NAME:BARRISTER AIDAN WALSH ESQ.
EMAIL:barrister_aidanwalshesq@yahoo.co.uk

I hope to hear from you in no distant time.
Yours in Service,

* 19 Comentarios Email Imprimir

Heterogeneous Services

Hace unos días me surgió la necesidad de conectar mi base de datos Oracle xe con Mysql, quería intentar procesar unos datos de una tabla Mysql para después pasarlos a otra tabla, de entrada tenia la posibilidad de hacerlo con php, ¿pero cada que necesitara procesar datos tendría que hacer una pagina php? Por eso pensé mejor en conectar Oracle con Mysql, me sería mas fácil jalar los datos de Mysql, procesarlos con PL/SQL para después depositarlos en otra tabla Mysql.

Me tope con un concepto que Oracle llama “heterogeneous services” que no es más que una vía rápida para conectarse con otras bases de datos, en este caso Mysql, aquí los pasos que seguí para lograr la conexión, es importante mencionar que esto lo logre bajo Windows:

1) Descargar el producto llamado “Mysql connector/ODBC” para Windows por supuesto e instalarlo.

2) Es necesario crear una conexión vía ODBC, la opción se llama “Orígenes de datos ODBC” esta dentro de “herramientas administrativas”, dentro existen varias opciones, es necesario crearla bajo “System DNS”, al valor de “data source name” en este caso le llame “mysqldb”, los valores servidor, usuario, password, base de datos, etc. no son mas que los usados para conectarte normalmente a Mysql, tiene una opción para probar la conexión, es preferible probar desde ahí si se logra la conexión.

3) Dentro de la estructura de archivos de Oracle ya existe una carpeta llamada “HS”, dentro de esa carpeta existen otras dos “admin” y “bin”, dentro de la carpeta admin es necesario crear un archivo init“nombre de nuestro servicio”.ora quedando: initmysqldb.ora, dentro de el deben de ir las siguientes entradas:

HS_FDS_CONNECT_INFO = mysqldb
HS_FDS_TRACE_LEVEL = 0
HS_FDS_TRACE_FILE_NAME = mysqldb.trc
HS_AUTOREGISTER = TRUE

4) Dentro de la estructura de archivos de Oracle ya existe otra carpeta llamada
“NETWORK”, dentro de ella existe otra llamada “admin”, dentro de la carpeta admin existen tres archivos, “listener.ora”, “sqlnet.ora” y “tnsnames.ora” ( ya muchos los conocerán, el tnsnames.ora se usa para configurar las conexiones a base de datos oracle cuando se esta usando el resolver nombres por tnsnames, dentro del “sqlnet.ora” se define como “names.directory_path = (TNSNAMES, HOSTNAME)” pero eso es harina de otro costal) dentro del archivo “listener.ora” debe de insertarse una nueva entrada (por supuesto la ruta del producto puede variar según tu instalación):

(SID_DESC =
      (SID_NAME = mysqldb)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = hsodbc)
    )

Que junto con lo que ya tenía el archivo quedaría algo como (dependiendo de tu base de datos y servicios instalados, solo añadí la primera parte del contenido de archivo, debajo de eso no se toca el contenido):

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = mysqldb)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = hsodbc)
    )
  )
(…)

5) Al archivo “tnsnames.ora” se le añade una nueva entrada:

mysqldb =
   (DESCRIPTION=
      (ADDRESS= (PROTOCOL=tcp)
                (HOST=localhost)
                (PORT=1521)
     )
     (CONNECT_DATA =
         (SERVICE_NAME=mysqldb)
     )
     (HS = OK)
)

6) Bajas y subes el servicio de tu base de datos, en este caso se llama
“OracleXETNSListener”, una vez levantado entras a tu sql*plus, cuando instalas xe te crea un iconito que llama “Ejecutar línea de comandos SQL” que no es mas que sql*plus ejecutado en un ambiente MSDOS, para los que tengan otra versión de Oracle entran directo a su sql*plus y creas un Database link con el siguiente comando, observa que el usuario y password lleva comillas dobles y el using lleva comillas simples:

1
2
3
4
CREATE database link mysqldb 
 CONNECT TO “usuario_mysql" 
 identified by “password_mysql" 
 using ‘mysqldb’;

Listo, ahora pueden accesar a su base de datos Mysql desde Oracle, simplemente deben referenciar que el objeto viene del dblink, o sea “tabla@mysqldb”

Es importante mencionar que esto lo logre estando tanto Oracle como Mysql en la misma maquina, he intentado conectarlos estando Mysql en otro host pero hasta el momento no han sido exitosas mis pruebas, ahí se los dejo de tarea.

* 29 Comentarios Email Imprimir

Pagina 1 de 212