Google Web

29 sept. 2008

Pieza de arte (solo para conocedores)

A continuación dejare posteada una pieza de arte del código, para que los conocedores admiren y critiquen. Este código es original de un proyecto al que le estoy dando mantenimiento (y si ya borre esta clase del proyecto).

public class DbConn {

public string connString;
SqlConnection conn;
SqlTransaction trans;
SqlCommand command;
public bool modifyConn;
public int timeout;

public DbConn(bool _modifyConn) {
connString = ConfigurationManager.ConnectionStrings["Conn2"].ConnectionString;
conn = new SqlConnection(connString);
trans = null;
modifyConn = _modifyConn;
}

public DbConn() : this(false) { }

public SqlConnection fnObtenerConexion() {
return conn;
}

public DataTable fnObtenerDataTable(string consulta) {
fnObtenerComando(consulta);
DataTable dt = new DataTable();
SqlDataAdapter adap = new SqlDataAdapter(command);
adap.Fill(dt);
return dt;
}

public DataSet fnObtenerDataSet(string consulta) {
fnObtenerComando(consulta);
DataSet ds = new DataSet();
SqlDataAdapter adap = new SqlDataAdapter(command);
adap.Fill(ds);
return ds;

}

public string fnEjecutarConsulta(string consulta) {
return fnEjecutar(consulta, 2);
}

public string fnEjecutarEscalar(string consulta) {
return fnEjecutar(consulta, 1);
}

public string fnEjecutar(string consulta, int tipo) {
if (!modifyConn) conn.Open();
string resultado = "";
fnObtenerComando(consulta);

if (tipo == 1) {
resultado = command.ExecuteScalar().ToString();
} else if (tipo == 2) {
resultado = command.ExecuteNonQuery().ToString();
}

if (!modifyConn) conn.Close();
return resultado;
}
public void fnObtenerComando(string consulta) {
if (trans != null) {
command = new SqlCommand(consulta, conn, trans);
} else {
command = new SqlCommand(consulta, conn);
}
command.CommandTimeout = timeout;
}
}

23 sept. 2008

wizzdull peachepero

Continuando con las proezas de mejorar el mundo del dev. Hoy me enfrento contra la mayor tontería. Tener un SOAP Server en PHP, con un WSDL autogenerado. Ok lo hice, sin muchos problemas (después de modificar varias partes de la librería WSDLCreator). Pero el problema es con los tipo de datos, digo, no es algo normal tener algunos SOAP Actions con distintos complex types? Pues según yo esto es lo normal, la neta del planeta, lo unico bueno y chido. Pero para PHP, no creo...

En primera el WSDLCreator no tiene ni idea de como manejar una clase sin métodos, según ellos me dan una función para agregar la clase como un Namespace, pero nadaaaaaaaaa. El WSDL menciona en el Action que regresa esa clase, pero en la definición de tipos, nada de nada. Si le pongo una función dummy, aparece, pero momento me genera otro Port y Binding dandome en la madre. Esto porque? Porque al parecer el SoapServer, es muy chafa que solo puede tener una clase, y aunque la función dummy no se utilize, la busca y falla. Que optimo sistema.

En fin seguire peleando, si logro dar con el clavo les dire como logran tener webservices en PHP de forma linda.

19 sept. 2008

Ahoy!!!!!

Hoy es el día Internacional de hablar como pirata (http://en.wikipedia.org/wiki/International_Talk_Like_a_Pirate_Day), así que espero que todos ustedes mozalbetes, digan ARGGHH!!!!!

PD. Ya tengo MAC de nuevo xD

17 sept. 2008

Babu a 9km



LOL

16 sept. 2008

No more UNION

El día de hoy quiero compartir con ustedes un hallazgo de esas funciones místicas (si Pimienta, es místico esto) de MySQL. Se trata del keyword ROLLUP de GROUP BY. Qué es esto y como funciona? Supongamos el siguiente ejemplo:

SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente

Ahorrando los detalles de que era habia un JOIN en Clientes y Pagos. Tenemos un listado con la suma de los pagos por cliente, pues bien, si queriamos tener un gran total de esto la gente era tonta y en lenguaje de programación hacian una suma de las sumas de pagos (he visto mucho código así, lo juro). Otros menos torpes como yo, usamos el famoso UNION para agregar un NULL como NombreCliente y sumar todo. Ok nada novedoso para muchos, pero bueno MySQL trae un nivel bastante agradable para mejorar esto.

SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente
UNION
SELECT NULL as NombreCliente, SUM(MontoPago) FROM Clientes

Usando ROLL UP tenemos:

SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente WITH ROLLUP

Lo que nos da el mismo resultado, y es hermoso. Claro este SELECT no tiene complicaciones, pero cuando tienes un SELECT construido para generar un pivote dinámico, tienes complicaciones existenciales más importantes que reflejar los JOINS y clausulas del UNION.

Espero que le ayude a alguién este tip, que a mi la verdad me sirvió de mucho!

EDIT: A lo que preguntaron por messenger, si en SQL Server al parecer si existe la palabra clave ROLLUP, se maneja igual según MSDN, más no lo he checado.

15 sept. 2008

¡Viva México!

Si... que viva... lleno de tontos como siempre.

Nunca he entendido porque los días de "Independecia" son tan importantes para las naciones y sus habitantes llenos de "patriotismo". En serio, que tiene de bueno la Independencia. Los torpes gachupines, nos tenían en el yugo de la esclavitud (capitalismo?) y nos quitaron nuestras... riquezas? Si eso, nos robaron el precioso oro a cambio de una religión (que momento, aún profesamos), de una lengua (que seguiremos usando), de un pensamiento occidental (que todavía utilizamos) y de otras maravillas del viejo mundo. Entonces la Independencia de la España, fue solo... ¿qué fue? Tan solo ya no tenemos Virreyes para tener, mmmmm el PAN y el PRD? Si creo que me gusta más tener partidos de izquierda llenos de indios (mea culpa, quiero decir indígenas) que un monton de chicos maricas con mallas y titulos de nobleza.

Entonces hoy celebrare... Independencia de estar en castas sociales (si porque la idea de pobres y ricos la trajeron los españoles), aja. Independencia de tener una soberanía, bueno si que significa algo esa palabra. Independencia de tener nuestra hermosa bandera, un himno de guerra y un escudo de armas que con cada sexenio cambia. Si, que orgulloso estoy de la independencia... (es sarcasmo, por si no lo habías notado). En fin, esto no tiene mucho sentido para mí. Y conste que no es que sea antipatriota, me gusta mucho México, pero pues la Independecia es una farsa, creo que México es Nueva España, antes solo era... un montón de pueblos que andaban por ahí buscando peyote y haciendo lindas piramides. Pero una nación? Claro que no, hubieran tardado muchos siglos para lograr unificarse los imperios y al final terminar bajo el dominio social y cultural de EU. Entonces, para que molestarse?

Bueno, al menos tuvo más sentido que la Revolución, o no?

12 sept. 2008

Viejas tecnologías...

Día a día me enfrento contra la resistencia a las actualizaciones. No lo puedo soportar, es como un Javiersillo molesto que en todo sistema que toco aparece con sus downgrade. El día de hoy tuve caos por dos detalles que me molestan y quiero compartir.

El primero de estos es con mi aplicación horrible de VB6, al descubrir que con el cliente no funcionan los booleanos. Esto es nonsense al por mayor, pues resulta que el maldito RDO/DAO, no puede ajustar su vida para entender que 0 es FALSE y -1 es TRUE. Asi que en en ciertas maquinas tengo que -1 es TRUE y en las que no hacen las cosas bien dice que es FALSE!. No entiendo porque, pero bueno, así que tendre que dejar a SQL de Access ayudarme con algo como IIF.

Ahora la otra, un cliente de PHP, tenía una horrible librería de JSON para su sitio. Yo dije WTF!, porque hace mamadas como esas, no conoce acaso json_encode y json_decode? En fin programe, y fui feliz todo el update del sistema (reescribirlo en clases) funciono. Pero oh sorpresa! El cliente es old fashion, y tiene una versión antiquisima de PHP (eso explica porque usan la librería). Ya esta el proceso de intentar actualizar el server, espero que sea factible, porque de lo contrario... Bueno no necesito aclarar más.

9 sept. 2008

Mac is alive!!!

Después de no se cuantos meses, de sufrimiento, dolor y pena. Mi Mac ha vuelto a la vida gracias a un mistico taller de hardware llamado Technick (que recomiendo al 100%, barato, rápido y expertos en hardware). Este post lo comenze ayer, cuando el dolor no invadia de nuevo mi alma. Esta es mi historia...

Fui por mi MBP, muy feliz y contento. La traje al trabajo, y al ver como encendia mi mundo cambio de nuevo. Me sentía bien con el mundo, por fin el caos pasaría y me daría una segunda oportunidad. Pero el destino tiene caminos misteriosos y llenos de misería. Llegue a casa, y la pantalla no regreso de hibernación, todo parecía funcionar, pero no había pantalla. Entonces me di cuenta, que la fortuna estaba afuera de mi casa riendose, y mofandose de mi como suele hacer. Al parecer la luz de fondo (backlight, inverter, o como le quieran llamar) no esta funcionando. Porque en luz de día si se alcanza a ver la pantalla (claro super oscura).

Ya le comente al jovén ilustre electrónico. Me pidio que la llevara mañana, cosa que hare. Espero que solamente sea un imperfecto del conector cuando se desarmó o algo por el estilo. Sino tendre una muy compacta Mac de escritorio y tendre que comprar un monitor, jejeje.

8 sept. 2008

YUI y CSS no me respetan

Para los simios tontos, que no saben que es YUI (Yahoo! User Interface) es un framework en JScript con controlitos y tonterías como XHR, JSON y demás ñoñadas de hoy en día.

En otro de mis MP (multiproyectos) tengo la extraña necesidad de usar YUI para crear los forms y grids de la aplicación (yo quería usar ExtJS, pero la maldita licencia no me lo permite). La vida no es tan fácil con YUI que con ExtJS, pero aún así no dire que es mal framework. Lo que me tiene al borde del odio a YUI es su sistema de skinning o themes.

Sucede que mis objetos visuales, trabajan, y extrañamente no requerí muchas líneas de código. Esto después de comerme los tutoriales y batallar con la selección de archivos JS uno por uno del YUI (que fastidio porque no ponen un YUI-ALL.js). El problema que el CSS no aparece, todo esta en default format, no tengo los gradientes lindos del grid, o botones. Firebug me muestra que se cargo correctamente el CSS, los elementos tienen sus class correctamente. Las class apuntan a sus background URL correctamente, pero nada!.

He buscado en internet sin éxito. Lo que me extraña que los tutoriales si tienen el malvado CSS funcionando (obvio hablo localmente). Así que bendigo a cualquier simio coder que me pueda dar una idea de porque YUI es tán malvado conmigo y no presenta correctamente el skin.

Actualización:

<body class="yui-skin-sam">

Sin comentarios!

7 sept. 2008

Antes del DDL, teníamos...

En uno de los multiproyectos que estoy trabajando actualmente, tengo una hermosa aplicación VB6 de esas que se conectan a MS Access. Maldigo el día que me di cuenta que Access era tan "avanzado" que tenía relaciones de tablas y que estás son invisibles. He intentado muchas cosas para intentar descubrir como se llama una FK para poder borrarla en la aplicación, y mis intentos han sido fracasados una y otra vez.

El metadata de Access es algo misterioso (MISTICO), y más cuando tienes que usar cosas como DAO. La documentación esta más perdida que la de PHP, encontrar un indicio de DDL fue una proeza que me llevo a pelearme a entender que COUNTER es la keyword más extraña para definir un entero autoincremental (tiene sentido, pero saber que era COUNTER me costo un día).

En mi opinión, creo que si esto continua optare por sugerir cambiar el Access por un SQLite o algo más actual. Al cabo solo sería cambiar un tonto ODBC que no? Bueno, para darle un poco de valor a este post, les listare las trampas mortales que caí y espero que sirvan a alguién más en el manejo de Access:
  • La creación de una tabla por DDL si es CREATE TABLE, pero ojo, los datatypes son algo diferentes a los que se acostumbran, por ejemplo un int autoinc es un COUNTER, un varchar(x) es un TEXT (notese que no es un BLOB, el pseudoBLOB es MEMO). El resto de datatypes es LONG, INTEGER, CURRENCY, DATETIME. No recuerdo algo como un float o double, así que CURRENCY ayudo, je.
  • Para lograr sacar metadata rápido, recomiendo soltar el VB6 y utilizar VBA de Access. Esto porque, simplemente porque conectar por DAO es en ocasiones algo como un ritual. Asi que CurrentDB desde VBA será su amigo, creanlo (ahorraran mucho tiempo).
  • La manera más sencilla de ejecutar código en DAO, es crear un modulo en VBA poner nuestro código en una function y luego con la Inmediate correr la función. Se que suena chafa, pero ahorra tiempo valioso. Un código podría ser algo así por ejemplo:
Public Function runMe()
Dim db As Database
Dim mobjTable As TableDef

Set db = CurrentDb
Set mobjTable = db.TableDefs("TABLE001")

For Each objIndex In mobjTable.Indexes
Debug.Print objIndex.Name
Next objIndex
End Function

Horrible, pero cierto. Esta es mi manera fácil de encontrar los Indices y FK de Access. Recuerden, trabajar en Access en lugar de VB6 les ahorrara mucho tiempo! Y quizás me digan anticuado, pero seamos realistas hay muchos sistemas legados alla afuera en VB6/Access, así que no esten de pussers diciendo que nunca lo harán, un buen coder se echa cualquiér trompo a la uña.

5 sept. 2008

Welcome to /dev/null

Me estaba negando a bloggear de nuevo, realmente gozaba mucho esto hace tiempo. Pero ahora entre mi vida de hombre casi-casado, y trabajo como nigga, no me dejan mucho tiempo de expresarme con sabiduría y nonsense en la webosphera. Como sea aquí estoy, de que hablare? Puede decirse que las categorías entraran en los siguientes topicos:
  • null - Lease pensamientos libres y rand() que me encantan.
  • metacritica - También conocido como Trollear, osea, criticar las criticas de los tontos.
  • code - Muestras de mi intelecto superior en las artes del integer.

Creo que sería algo, ajero de una manera muy atenta a Adal, por ajerarme en escribir esto. Y si, use el nombre que el me sugirió. Espero pronto comentar sobre mis hallazgos en cuestión de code y criticar algunos blogs.