Ante la petición "http://localhost:8080/contexto/action.do?campoa=a&campob=b"
request.getQueryString() = campoa=a&campob=b
request.getRequestURI() = /contexto/action.do
request.getRequestURL() = http://localhost:8080/contexto/action.do
request.getServletPath() = /action.do
request.getLocalName() = localhost
request.getLocalPort() = 8080
request.getProtocol() = HTTP/1.1
request.getRemotePort() = 2075
request.getScheme() = http
request.getServerName() = localhost
request.getServerPort() = 8080
martes, 27 de diciembre de 2011
miércoles, 31 de agosto de 2011
Monitorización con Nagios
Artículos sobre Nagios
taller nagios: http://www.caldum.org/?p=4899
monitorizar tomcat: http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=jmx4perl
PNP4nagios (gráficas): http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=nagios_nagiosql_pnp4nagios
taller nagios: http://www.caldum.org/?p=4899
monitorizar tomcat: http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=jmx4perl
PNP4nagios (gráficas): http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=nagios_nagiosql_pnp4nagios
Añadir a nuestras páginas comentarios de Facebook
En la siguiente URL hay un interesante artículo de como integrar en nuestras páginas WEB la opción de que los usuarios puedan añadir comentarios de Facebook.
http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=facebook-comment-plugin
con las siguientes opciones:
* No tenemos que preocuparnos en nuestro web de guardar los comentarios, se guardan en los almacenes de datos de Facebook.
* Los administradores se enteran de los comentarios por que te llega una notificación a su Facebook.
* El autor del comentario puede borrar el comentario en cualquier momento.
* Una vez que un administrador aprueba un comentario no lo puede borrar, aunque si lo puede ocultar, de manera que sólo el autor del comentario y sus amigos podrán verlo.
* Cualquier usuario logado en Facebook y que visite tu web, puede indicar que un comentario es spam o un abuso.
* Cualquier usuario logado en Facebook puede usar el botón de "Me gusta" o "Reponder" sobre cualquier comentario.
* Cualquier usuario logado en Facebook puede subscribirse a la página donde está el plugin de manera que cualquier comentario se se produzca en la misma lo verá en tu muro cuanto se conecte a Facebook.
* El administrador puede banear a un usuario, de manera que aunque pueda continuar publicando, sólo lo verán dichos comentarios él y sus amigos.
* Cuando uno comenta identificándose con Hotmail y un usuario responda le llegará un email notificándoselo.
http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=facebook-comment-plugin
con las siguientes opciones:
* No tenemos que preocuparnos en nuestro web de guardar los comentarios, se guardan en los almacenes de datos de Facebook.
* Los administradores se enteran de los comentarios por que te llega una notificación a su Facebook.
* El autor del comentario puede borrar el comentario en cualquier momento.
* Una vez que un administrador aprueba un comentario no lo puede borrar, aunque si lo puede ocultar, de manera que sólo el autor del comentario y sus amigos podrán verlo.
* Cualquier usuario logado en Facebook y que visite tu web, puede indicar que un comentario es spam o un abuso.
* Cualquier usuario logado en Facebook puede usar el botón de "Me gusta" o "Reponder" sobre cualquier comentario.
* Cualquier usuario logado en Facebook puede subscribirse a la página donde está el plugin de manera que cualquier comentario se se produzca en la misma lo verá en tu muro cuanto se conecte a Facebook.
* El administrador puede banear a un usuario, de manera que aunque pueda continuar publicando, sólo lo verán dichos comentarios él y sus amigos.
* Cuando uno comenta identificándose con Hotmail y un usuario responda le llegará un email notificándoselo.
miércoles, 6 de julio de 2011
ORACLE función para retornar subcadenas
CREATE OR REPLACE FUNCTION GET_TOKEN(TEXTO IN VARCHAR2, POSICION IN NUMBER, SEPARADOR IN VARCHAR2 DEFAULT '|') RETURN VARCHAR2 IS
tmpVar NUMBER;
/*
retorna el substring indicado en POSICION de la cadena TEXTO utilizando el
separador indicado
Ejemplo:
select get_token('1234|ABC', 1, '|'), get_token('1234ABC', 1, '|') from dual
retorna '1234' y '1234ABC'
*/
VALOR VARCHAR2(32767) := '';
POSTTEXTO VARCHAR2(32767) := TEXTO;
CONTADOR NUMBER := 1;
BEGIN
IF ((LENGTH(TEXTO) = 0) OR (POSICION = 0)) THEN
RETURN NULL;
END IF;
WHILE ((CONTADOR < ABS(POSICION)) AND (LENGTH(POSTTEXTO) > 0)) LOOP
IF (SUBSTR(POSTTEXTO, SIGN(POSICION), 1) = SEPARADOR) THEN
CONTADOR := CONTADOR + 1;
END IF;
IF POSICION > 0 THEN
POSTTEXTO := SUBSTR(POSTTEXTO, 2);
ELSE
POSTTEXTO := SUBSTR(POSTTEXTO, 1, LENGTH(POSTTEXTO) - 1);
END IF;
END LOOP;
IF (LENGTH(POSTTEXTO) = 0) THEN
RETURN NULL;
END IF;
WHILE ((SUBSTR(POSTTEXTO, SIGN(POSICION), 1) <> SEPARADOR) AND (LENGTH(POSTTEXTO) > 0)) LOOP
IF POSICION > 0 THEN
VALOR := VALOR || SUBSTR(POSTTEXTO, 1, 1);
POSTTEXTO := SUBSTR(POSTTEXTO, 2);
ELSE
VALOR := SUBSTR(POSTTEXTO, -1, 1) || VALOR;
POSTTEXTO := SUBSTR(POSTTEXTO, 1, LENGTH(POSTTEXTO) - 1);
END IF;
END LOOP;
RETURN VALOR;
END;
martes, 12 de abril de 2011
Librerías JQuery
ptTimeSelect: time picket
http://pttimeselect.sourceforge.net/
jGrowl: notificaciones zona inferior derecha
http://stanlemon.net/projects/jgrowl.html
ContextMenu: menu popup
http://www.trendskitchens.co.nz/jquery/contextmenu/
Color picker: selector de color
http://www.eyecon.ro/colorpicker/
BlockUI: bloquear interfaz cuando se están haciendo peticiones AJAX
http://malsup.com/jquery/block/
http://pttimeselect.sourceforge.net/
jGrowl: notificaciones zona inferior derecha
http://stanlemon.net/projects/jgrowl.html
ContextMenu: menu popup
http://www.trendskitchens.co.nz/jquery/contextmenu/
Color picker: selector de color
http://www.eyecon.ro/colorpicker/
BlockUI: bloquear interfaz cuando se están haciendo peticiones AJAX
http://malsup.com/jquery/block/
Librerías de interés para PHP
FPDF: herramientas para generar PDF online
http://www.fpdf.org/
PHPExcel: exporta a varios formatos
http://www.codeplex.com/PHPExcel
PHPLOT: generar gráficos de barras, lineas y tarta
http://sourceforge.net/projects/phplot/
QR-Code generator: para generar códigos QR
http://prgm.spipu.net/php_qrcode
Google Data APIs: Permite sincronizar la agenda con el servicio de Google Calendar
http://www.rcdtokyo.com/etc/gdataapis/
MimeParser: parsea un fichero RFC822 y retorna un array con toda la información del fichero
http://www.phpclasses.org/package/3169-PHP-Decode-MIME-e-mail-messages.html
Pop3Class: control de una cuenta mediante pop3
http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html
PHPMailer: envio de correo smtp
http://phpmailer.codeworxtech.com/
PHPThumb: tratamiento de imagenes
http://phpthumb.sourceforge.net/
TAR: generar TAR y ZIP
http://www.phpclasses.org/package/945-PHP-Create-tar-gzip-bzip2-zip-extract-tar-gzip-bzip2-.html
Detertar dispositivo movil:
http://code.google.com/p/php-mobile-detect/
Iconos
http://www.everaldo.com/crystal/
http://www.fpdf.org/
PHPExcel: exporta a varios formatos
http://www.codeplex.com/PHPExcel
PHPLOT: generar gráficos de barras, lineas y tarta
http://sourceforge.net/projects/phplot/
QR-Code generator: para generar códigos QR
http://prgm.spipu.net/php_qrcode
Google Data APIs: Permite sincronizar la agenda con el servicio de Google Calendar
http://www.rcdtokyo.com/etc/gdataapis/
MimeParser: parsea un fichero RFC822 y retorna un array con toda la información del fichero
http://www.phpclasses.org/package/3169-PHP-Decode-MIME-e-mail-messages.html
Pop3Class: control de una cuenta mediante pop3
http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html
PHPMailer: envio de correo smtp
http://phpmailer.codeworxtech.com/
PHPThumb: tratamiento de imagenes
http://phpthumb.sourceforge.net/
TAR: generar TAR y ZIP
http://www.phpclasses.org/package/945-PHP-Create-tar-gzip-bzip2-zip-extract-tar-gzip-bzip2-.html
Detertar dispositivo movil:
http://code.google.com/p/php-mobile-detect/
Iconos
http://www.everaldo.com/crystal/
jueves, 7 de abril de 2011
Capturar presentaciones de Slideshare
Acabo de encontrar el siguiente enlace con indicaciones de como poder capturar presentaciones "protegidas" para descargas de Slideshare
http://blog.txipinet.com/2009/07/26/bajar-presentaciones-no-disponibles-para-descarga-en-slideshare/
y este otro enlace
http://techawakening.org/download-author-disabled-slideshare-presentations/1361/
http://blog.txipinet.com/2009/07/26/bajar-presentaciones-no-disponibles-para-descarga-en-slideshare/
y este otro enlace
http://techawakening.org/download-author-disabled-slideshare-presentations/1361/
martes, 22 de marzo de 2011
ORACLE Utilidades
PL/SQL
.$$plsql_unit > nombre del paquete o procedimiento|función en ejecución
.$$plsql_line > número de línea actual de un procedimiento|función
.OWA_UTIL.WHO_CALLED_ME(owner_name,caller_name,line_number,caller_type) > datos de quien ha invocado el PL/SQL
.$$plsql_unit > nombre del paquete o procedimiento|función en ejecución
.$$plsql_line > número de línea actual de un procedimiento|función
.OWA_UTIL.WHO_CALLED_ME(owner_name,caller_name,line_number,caller_type) > datos de quien ha invocado el PL/SQL
miércoles, 16 de marzo de 2011
ORACLE sentencia MERGE
Oracle permite con la sentencia MERGE insertar y/o actualizar una tabla desde otra tabla/consulta.
Para situaciones de volcado de datos, se puede insertar/actualizar una tabla respecto a otra consulta, y realizar insert/update dependiendo de si existe el registro en la tabla destino, para ello se indican ambas tablas y el criterio de comparación.
http://mioracle.blogspot.com/2008/01/sql-y-plsql-la-nueva-sentencia-merge.html
http://www.oracle-developer.net/display.php?id=203
http://www.idevelopment.info/data/Oracle/DBA_tips/SQL/SQL_14.shtml
Para situaciones de volcado de datos, se puede insertar/actualizar una tabla respecto a otra consulta, y realizar insert/update dependiendo de si existe el registro en la tabla destino, para ello se indican ambas tablas y el criterio de comparación.
http://mioracle.blogspot.com/2008/01/sql-y-plsql-la-nueva-sentencia-merge.html
http://www.oracle-developer.net/display.php?id=203
http://www.idevelopment.info/data/Oracle/DBA_tips/SQL/SQL_14.shtml
miércoles, 16 de febrero de 2011
TOMCAT + SSL
En la URL http://libra.dif.um.es/~edumart/asignaturas/servicios/apuntes/TomcatSSL.pdf indican los pasos a seguir para instalar SSL en TOMCAT.
Para crear uno mismo un certificado, debemos ejecutar el comando:
JAVA_HOME\bin\keytool -genkey -alias tomcat -keyalg RSA
lo que crea el fichero .keystore en la carpeta "Document and Settings" del usuario. La clave original del keystore es "changeit".
Después configuramos en el server.xml del TOMCAT el conector HTTPS:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
y a rular
Para crear uno mismo un certificado, debemos ejecutar el comando:
JAVA_HOME\bin\keytool -genkey -alias tomcat -keyalg RSA
lo que crea el fichero .keystore en la carpeta "Document and Settings" del usuario. La clave original del keystore es "changeit".
Después configuramos en el server.xml del TOMCAT el conector HTTPS:
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
y a rular
viernes, 21 de enero de 2011
ORACLE y UPDATE con varias tablas
hay situaciones en las que tienes que actualizar el valor del campo de una tabla, con el valor de una consulta (mediante una relación 1 a 1).
La primera manera es:
UPDATE tablaA set
campoA1 = (
select distinct campoB1
from tablaB
where tablaB.campoBi = tablaA.campoAi
)
...
una forma eficiente más eficiente es la siguiente:
UPDATE (
SELECT
tablaA.campoA1,
tablaB.campoB1
FROM tablaA
INNER JOIN tablaB on tablaB.campoBi = tablaA.campoAi)
)
SET campoA1 = campoB1;
Para que esta segunda opción funcione necesitamos tener UNIQUE or PRIMARY KEY constraint en la relación entre tablas.
Si no tienes esta constraint, puedes utilizar el hint /*+BYPASS_UJVC*/ después de la palabra UPDATE
(bypass update join view constraint).
La primera manera es:
UPDATE tablaA set
campoA1 = (
select distinct campoB1
from tablaB
where tablaB.campoBi = tablaA.campoAi
)
...
una forma eficiente más eficiente es la siguiente:
UPDATE (
SELECT
tablaA.campoA1,
tablaB.campoB1
FROM tablaA
INNER JOIN tablaB on tablaB.campoBi = tablaA.campoAi)
)
SET campoA1 = campoB1;
Para que esta segunda opción funcione necesitamos tener UNIQUE or PRIMARY KEY constraint en la relación entre tablas.
Si no tienes esta constraint, puedes utilizar el hint /*+BYPASS_UJVC*/ después de la palabra UPDATE
(bypass update join view constraint).
Vistas de ORACLE
//listado del diccionario de datos
select * from dictionary
//tablas de un esquema
select * from user_tables
//todos los objetos de un esquema
select * from user_catalog
//productos ORACLE instalados
select * from product_component_version
//listado de constraint con columnas
select * from sys.all_cons_columns
//listado de todos los sinonimos
SELECT * from sys.all_synonyms
//listado de usuarios
Select * FROM dba_users
//listado de los argumentos de las funciones/procedimientos de PL/SQL
SELECT * FROM all_arguments
select * from dictionary
//tablas de un esquema
select * from user_tables
//todos los objetos de un esquema
select * from user_catalog
//productos ORACLE instalados
select * from product_component_version
//listado de constraint con columnas
select * from sys.all_cons_columns
//listado de todos los sinonimos
SELECT * from sys.all_synonyms
//listado de usuarios
Select * FROM dba_users
//listado de los argumentos de las funciones/procedimientos de PL/SQL
SELECT * FROM all_arguments
Suscribirse a:
Entradas (Atom)