lunes, 19 de noviembre de 2007

The Dojo Toolkit

Otra libreria de Javascript, es realmente buenísima. Ya la he usado en algunas aplicaciones y simplemente llenan los ojos de cualquiera por los efectos y sus métodos AJAX.

The Dojo Toolkit.

Tablas temporales

Tablas que nos almacenen los datos de manera temporal (como dice el nombre, es cierto XD).

Tabla: TB_PRODUCTO
Campos: cod_pro, des_pro, precio


CREATE TABLE #TEMP (CODIGO INT,DESCRIPCION NVARCHAR(50))
INSERT INTO #TEMP(CODIGO,DESCRIPCION)
SELECT COD_PRO, DES_PRO
FROM TB_PRODUCTO
WHERE PRECIO > 1000


Bueno, es otro simple codigo que nos muestra como crear tablas temporales.

PD: Para eliminarla es simple: DROP TABLE #TEMP

Obtener el valor más alto - SQL Server 2005

Es una consulta muy común. Sin embargo, ya muchos compañeros de trabajos y amigos, que al igual que yo nos iniciamos en esto, me han pedido ayuda.

Precio mas alto.
Tabla: TB_PRODUCTO
Campos: codigo, descripcion, precio

Select TOP(1)precio
From TB_PRODUCTO
Order By precio Desc

Lo que hace el TOP es obtener solo un registro de toda la consulta. En este caso el primero. Si se pusiera TOP(5), mostraría los 5 primeros registros del "Select".

Store Procedures MySQL 5

Simple. La documentación la tienes aquí. Pero si quieres alguna repasada, acá paso algunas.

1. Store procedure que devuelve una consulta.

CREATE PROCEDURE SP_CONSULTA1()
SELECT CAMPO1, CAMPO2, CAMPO3
FROM TABLA1

Para llamar el procedimiento: CALL SP_CONSULTA1()

2. Store procedure que ingrese datos y reciba parámetros

CREATE PROCEDURE SP_INSERTAR1(IN C1 INT, IN C2 VARCHAR(20), IN C3 VARCHAR(20))

INSERT INTO TABLA1 VALUES (C1,C2,C3);

Para llamar el procedimiento: CALL SP_INSERTAR1(1,'HOLA','BYE')


Es solo un par de ejemplos, puesto que la documentación completa la encontrarán en el link mostrado al inicio.

Solo para aclarar, a diferencia del SQL Server, los parámetros no pueden tener el "@" delante de ellos pues genera error de sintaxis.

Procedures con parámetros nulos (Consultas) - SQL Server

Hace mucho tiempo se me presentó hacer Store Procedures de consultas que recibieran valores nulos. Logré hacerlo de una manera rústica, hasta ahora es la única forma que uso.

Caso Práctico.

Tenemos la tabla producto con 3 campos: cod_pro, des_pro, igv

Queremos hacer una consulta que nos liste un producto por el código y que esa misma consulta nos sirva para poder listar todos los productos, obviamente esta consulta dentro de un store procedure.

-----------------------------------------------------
CREATE PROCEDURE SP_CONSULTA
@COD_PRO INT = NULL
AS
SELECT COD_PRO, DES_PRO, IGV
FROM TB_PRODUCTO
WHERE ((@COD_PRO IS NULL) OR (@COD_PRO = COD_PRO))
-----------------------------------------------------

Y bueno, en lineas generales... en caso de recibir un parámetro lo comparará. En caso contrario irá a la condición de null y listará a todos los productos. Es una consulta simple, pero se aprecia claramente el "artificio".

AjaxAnywhere

Se trata de un proyecto muy bueno. En líneas general, nos permite recargar refrescar zonas de nuestro JSP usando la tecnología AJAX.

AjaxAnywhere

viernes, 11 de mayo de 2007

Prototype!

Esta famosísima libreria de Javascript con soporte AJAX tiene una documentación que quiza alguno no entendamos. Bueno aqui un tutorial del uso de esta librería, recomendada al 100%, es facil de encontrar en google, pero para aquel que no la ha visto aqui se las dejo

Tutorial Prototype!

viernes, 16 de marzo de 2007

mysql.sock no existe!! mi solución (Fedora Core 6)


Instalando el MySQL en el Fedora Core 6, tuve algunos problemas, como todavía soy novato en esto del Linux se sufre buscando por el Google, o el Yahoo, etc...
Bueno pues, lo que yo no sabia acerca del Fedora Core 6, es que tenia preinstalado el MySQL, pero bueno como todo novato, siempre equivocarnos nos da mucho que aprender.
En primera instancia use el yum para instalar el MySQL, los comandos clásicos:
yum install mysql
yum install mysql-server
y para buscar el query browser. lo siguiente
yum search mysql-query
en fin, lo principal son las 2 primeras lineas, el hecho es que cuando trataba de conectarme, con el simple hecho de poner en el terminal
mysql -u root
me daba un error:
ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Luego de indagar un buen rato en Internet, veo que mucha gente tenia ese problema, pero nadie me daba una solución que me funcionara, en fin.
Ya un poco desanimado un amigo me comento algo acerca del famoso SELinux, y la esperanza volvió al cuerpo jeje.
Bueno esta opción por defecto esta en Obediente, el hecho es dejarlo en Permisivo.
Esta opción esta dentro de Sistema/Administración/Nivel de Seguridad y contrafuegos.
De ahí dejé de usar el terminal y fue a agregar y quitar programas, busque en los paquetes el MySQL, y lo seleccione (ya un poco descepcionado de mi instalación a través del yum), y me instalo el MySQL y sus dependencias,
Por ultimo instalar el mysql-query browser
yum install mysql-query-browser
a travez del terminar puedes entrar a la consola del MySQL con el siguiente comando
mysql -u root
Bueno un poco feliz luego de tanto merodeo en Internet... se terminó mi calvario, solo me queda instalar el tomcat y Java jejeje

viernes, 9 de marzo de 2007

Depurador de JavaScript - FireBug!

Hace ya mas de un mes que encontré un depurador de Javascript, el cual para mi es una maravilla, como todos comencé programado para IE, cuando tenia un error en el JavaScript... venia el problema y ahora como lo depuro!!... en fin de ahí pase a firefox (ustedes saben, los problemas con los estándares de css, el FireFox lo puedo usar en Linux - multiplataforma ) que posee una consola para depurar javascript, me habia ayudado mucho, pero indagando un poco más... me encontré la maravilla el famoso FireBug... este es una extensión del Firefox y trabaja de manera excelente. Es muy intuitivo así que no hay mucho que explicar.
Les dejo el link de descarga.
http://www.getfirebug.com/

viernes, 9 de febrero de 2007

Que es un Java Server Page ó JSP?

Muchos de nosotros los programadores novatos no sabemos el porque de las extensiones jsp's de nuestras paginas, en fin a mucho solo nos dicen que usemos esa extensión por defecto. Bueno aquí una rápida explicación.
Los jsp's no son un producto sino una extensión de la tecnología Java Servlet, en si estas páginas no son interpretadas, sino compiladas, son convertidas a archivos .java y d ahí el código fuente es compilado y se crea un archivo .class, esto da la facilidad de poder usar jsp's sin servlets, que en la misma pagina podamos redireccionar o hacer otro tipo de acciones que también podríamos utilizarlas en un servlet.
Esto fue una pequeña explicación de lo que seria un Java Server Page, hay muchos libros dedicados a esto, así que si quieren ahondar lean un poco jeje.

martes, 6 de febrero de 2007

Internet Explorer bueno? otros navegadores malos? o a la inversa

Como ultimamente me he vuelto usuario cotidiano de Linux (Fedora Core 6), no uso IE (ya ni en mi casa lo usaba), pero en el lugar en donde estudio por políticas de acceso a Internet en los laboratorios solo esta el IE 6, y en mi casa mis proyectos los realizo probando el FireFox u Opera, igual aquí en el trabajo. Entonces aplicando CSS para que mi proyecto sea vistoso y todo, sin querer lo probé en IE... y que creen... Oh Sorpresa!!!! no funcionan mis estilos!! pero porque si se veían tan bien bajo los otros navegadores... mucha gente dirá... ah es porque en IE se ven bien, y que en FireFox u Opera se ven mal... mi primera impresión en esa milésima de segundo fue esa, pero al segundo siguiente recordé que Microsoft normalmente hace lo que quiere. Buscando un poco, escarbando en otros blogs y paginas me doy cuenta que el problema de IE no son solo los bugs, sino q no sigue el estándar de la w3c. Los navegadores que uso no lo usan al 100%, pero cubren las necesidades básicas. Al parecer Microsoft trató de imponer algo con IE6, pero es muy desordenado, hicieron lo que quisieron y existe algo llamado hasLayout (que esta mas detallado aquí) que es donde residen muchos de los problemas de IE con los CSS. Bueno ahora cada vez que aplique estilos a una web, tendré que pensar mas en IE, porque en el mundo existe un alto porcentaje usando ese explorador que repudio ultimamente.

Java y Ajax sobre Fedora 6


Hace poco entre a un nuevo trabajo aqui en Lima, y bueno mi experiencia programando sobre linux habia sido casi nula, a nivel de usuario quizas, pero en fin. He estado desarrollando estas ultimas 3 semanas con el IDE Eclipe 3.2, base de datos MySqlServer 5, Servidor de Aplicaciones Tomcat y usando AJAX. Como escribi antes solo habia llegado a entender los conceptos basico de Ajax, asi como también uno que otro truquito simpatico.
En lo que se refiere a Java, encontre con un sistema, todavia no terminado, desarrollado sobre el framework FrontController, y asi como todo tiene sus ventajas y desventajas (En los ultimos meses me he vuelto "hincha" de Struts) tuve a disposición la documentacion (algo muy generico) de la aplicaciones y sus clases. El patrón DAO Factory usado era muy vago... estaba algo desordenado, no se usaba de la mejor manera, en cuanto a los servlets igual, a veces nos llenamos de servlets por las puras, en vista que estos redireccionan, me parece algo descabellado usar un servlet para solo un ingresar o cosas por el estilo (creo yo, espero no equivocarme). En cuanto a lo de Ajax, habia implementado sus propios metodos y clases sin usar un framework de los tantos que hay, me parecio genial, porque me dio la oportunidad de entender mas a fondo como se maneja ajax y sus peticiones. De ahi vi que unir Ajax con Java (cosa que por tiempo no habia intentado) no es nada del otro mundo, aunque de manera muy "rustica" pero ahi estaba esta interactuando mi aplicación JAVA con Ajax.
Tengo una clase JavaScript en la cual tengo algo asi
function miAjax(url) {
this.url = url;
var req = init();
req.onreadystatechange = processRequest;

function init() {
if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function processRequest () {

if (req.readyState == 4) {
if (req.status == 200) {
postProcess(req.responseXML);
}
} }
this.send = function() {
req.open("GET", url, true);
req.send(null);
}
}
con eso establesco mis peticones ajax.
por ejemplo en mi jsp hago los siguiente.
<input id="txtAjax" onkeypress="metodoX()" type="text">
en mi libreria JavaScript tambien debo de ese metodo llamado metodoX() q me capture el valor de la caja de texto ejemplo

var cajita = document.getElementById("txtAjax");
var url = '/PruebaAjaxAction.do?nombre='+cajita.value; //usando los Action de Struts

en el action genero un xml con el StringBuffer asi(uso una clase llamada service q me obtiene el metodo que accesa a los datos de la BD):

MiTablaService mtsv = new MiTablaService();
List lstX = mtsv.listaFiltro(request.getParameter("nombre"));

StringBuffer sb = new StringBuffer();
recorro la lista, casteo sus elementos a un determinado bean

sb.append(""+bean.getX()+"");


asi hasta llenarlo. esto lo recupero en la libreria de JavaScript con el metodo declarado antes. postProcess, q obtiene un responseXML, y eso ya bueno investigan un poco jeje... le recuperan y pueden generar elementos, que si quieren lo añaden a una tabla para que se filtre mientras escribes en la caja de texto.
Les pongo la plantilla que uso de pruebas. En la parte inferior de esa pantalla uso una libreria de javascript llamada rico, que me produce el efecto acordeon.

lunes, 15 de enero de 2007

No poder iniciar sesión con SQL Server 2000 - Error 1069

Me sucedio hace poco que necesitaba instalar el SQL Server 2000, tenia algo de urgencia.
Bueno el hecho es que termine de instalar mi querido SQL Server, y me salió un error ... "error 1069", diciendome que no se puede iniciar el servicio debido a un error de sesion.
Un poco contrariado me puse a buscar la solucion en google... la encontre rápido.
Es bastante sensillo: vas a "Herramientas administrativas", buscas el servicio (para este caso MSSQLSERVER), click derecho => propiedades, vas a la pestaña de inicio de sesión, y le clickeas a la opción de Iniciar sesión como: Cuenta del Sistema Local. y eso es todo...