Propietario Vs. Libre 1
Después de años y años sin tener que preocuparme por serial numbers, keygenerators, restricciones, freewares y sharewares, versiones de prueba, etc. … me he dado cuenta ahora que odio el software propietario.
Después de años y años sin tener que preocuparme por serial numbers, keygenerators, restricciones, freewares y sharewares, versiones de prueba, etc. … me he dado cuenta ahora que odio el software propietario.
En el trabajo teniamos que comprar varios libracos de O’Reilly y se presento una duda: ¿Qué será mejor, comprarlos de Amazon o directamente de la tienda on-line de O’Reilly?
Hoy, un mes después, se han disipado las dudas.
La compra de Amazon ha tardado un mes en llegar.
La compra de O’Reilly tardó tres dias.
Ambos envios sin suplementos de envio urgente ni nada. Si teneis que comprar material de O’Reilly y os corre prisa ya sabeis.
PD. Hoy oficialmente comienza mi periplo para sacarme el certificado Java programmer de Sun Microsystems, seguiremos informando.
Ya he dado carpetazo a Microsoft Access, estoy probando con SQLite (como debería haber hecho desde un principio) y de momento funciona perfecto con ADO.Net. Como ya tenía encapsulado el acceso a datos solamente he tenido que cambiar un par de lineas del programa para que funcionara con la nueva base de datos, más toda la morralla de sintaxis SQL de Access, obviamente …
Peeeero no todo son florecillas y mariposas, algún gnuero no identificado me dijo que SQLite implementaba integridad referencial mediante claves ajenas y toda la pesca. Pues no, tal y como dice la documentación acepta la sintaxis pero hace caso omiso de las referencias.
El caso es que me hacían mucha falta porque paso olímpicamente de comprobar a mano todas las tablas cada vez que actualizo, borro o inserto registros, ya he sufrido suficiente con MySQL este tema como para volver otra vez.
Vale, no tendrá integridad referencial pero con la dosis justa de cafeína y un rato peleando con los triggers he conseguido un comportamiento idéntico. MMWAHAHAHA!!
Veamos, pondré un ejemplo con dos tablas: empleados y departamentos; creo que la relación es obvia así que no comento nada más al respecto y paso a escribir la sentencia para crear las tablas en SQLite.
En la declaración aparece una relación entra la tabla empleados y la tabla departamentos a través de su clave primaria, pero SQLite lo ignora por completo. Para poder asegurar la integridad de dicha relación obligatoriamente debemos utilizar una serie de triggers. Los triggers son una característica añadida a partir de la versión 2.5 de SQLite, actualmente andan por la versión 3.3.x asi que no debería haber problema si lo empleáis en sistemas modernos.
Cada restricción de clave debe tener tres triggers (tres tristes triggers … oh wait!): uno para las sentencias INSERT, otro para UPDATE y otro para DELETE.
Trigger para INSERT (ojo, permite valores nulos):
En caso de que no queramos valores nulos en el campo, cambiamos ligeramente el código añadiendo una nueva condición:
Exactamente lo mismo para las sentencias UPDATE:
Para las sentencias DELETE, cambiamos el orden y aplicamos el trigger a la tabla departamentos:
Este trigger previene el borrado de un departamento que contenga algún empleado, este suele ser el comportamiento habitual.
En ocasiones nos conviene eliminar todos los empleados en cascada cuando se elimina un departamento. El trigger que consigue este efecto quedaría de la siguiente manera:
A que mola? ![]()

Ya andan jodiendo otra vez las multinacionales con el tema de las patentes de software. Resulta lamenteable la actuación de estos señores que intentan imponer esta normativa contra viento y marea pese a las reiteradas negativas que les han dado durante todos estos años.
Lamentablemente nos vamos a tener que acostumbrar a esta rutina porque no van a dar su brazo a torcer y seguirán intentando aprobar esta absurda ley con sus triquiñuelas legales. Si no es esta vez (que esperemos no lo sea) volverán a la carga mas adelante.
Recuerda, las patentes de software no benefician más que a las multinacionales, y sólo para quitarse la competencia de encima y ser cada vez más grandes. Que no hipotequen tu futuro, sal y manifiestate.
Mucha más información y detalles en Subsonica.
Yo ya sabía que de Microsoft Access no me podía esperar gran cosa, pero pasaba olímpicamente de montar un servidor de bases de datos como $DEITY manda para una aplicación de escritorio y Access pintaba bien para un programita que demandaba poco rendimiento y sin accesos concurrentes a datos … o eso creía yo.
Los ingredientes de este plato: Microsoft Visual Studio 2005, C#, Microsoft Windows XP y el motor Jet de — destrucción sistemática de datos — Microsoft Access. Todos del mismo padre y la misma madre por lo que se presupone que se van a llevar bien y van a funcionar en perfecta armonía. Pues no.
Empezó jodiendo con la peculiar interpretación del lenguaje SQL, concretamente en las funciones agregadas que se han sacado de la manga para el manejo de fechas. Bueeeeeno, nada grave, pasamos por el aro y punto.
A mitad del desarrollo me doy cuenta que el muy cabrito cambia los meses de las fechas por dias y los dias por meses; así, indiscriminadamente y sin que le tiemble la mano, todo porque algún iluminado de Microsoft pensó que tamaña estupidez corregiría los errores de la gente. Mas que corregir lo que hace es asegurar la equivocación. Ni una acertó.
Pero lo mejor viene ahora, después de un par de meses en producción, cuando aparecen los registros fantasma (registros borrados que misteriosamente siguen estando en la base de datos), los registros que no se pueden borrar, las consultas que no devuelven nada pese a estar los datos en las tablas …
Mira que le pedía poco, mira que apenas tiene que hacer 100 consultas al día y sin concurrencia, apenas 1000 registros de nada en tres tablas roñosas …
Vaya puta mierda de Access
He utilizado Oracle, MySQL, Firebird, PostgreSQL, SQLite; con cientos de millones de registros, con miles de transacciones al día, con backups en caliente, en servicio durante años y nunca se ha perdido ni un solo bit. ¿Qué clase de base de datos es esta que te das la vuelta y te monta el belén?
Encima cachondeo en los grupos de noticias de Microsoft: —utiliza compactar y reparar periódicamente para que no te ocurra eso— Ole! viva la seguridad que me ofrece una base de datos que hay que reparar después de cada consulta.
Señores yo caí en el error, Microsoft Access nunca más.
PD. No he probado Microsoft SQL Server, pero como sea igual vamos listos …
Si tenemos tres Pepsis y nos tomamos dos… ¿hasta qué punto quedamos refrescados?
¡Pepsi!
Este comentario de Los Simpsons va a resultar ser más real de lo que pensabamos: por lo visto en los libros de texto de este año aparece publicidad de centros comerciales.
Que caradura tienen algunos …
En el trabajo llevamos desde el principio probando diversos editores y herramientas para establecer una cadena de desarrollo lo más homogénea y potente que nuestro presupuesto pudiera permitir.
Como el presupuesto viene cayendo en el intervalo ]-∞,0] optamos en gran medida por soluciones open source, y tengo que decir que el resultado es altamente positivo y realmente muy competitivo frente a las soluciones ofrecidas por las empresas típicas del ramo (Borland, Microsoft, IBM, etc.).
La cadena de desarrollo consta de Subversion para el control de versiones, Trac para la gestión de bugs e incidencias y Eclipse como entorno de desarrollo.
Sobre Subversion poco tengo que añadir a lo que ya dije en su momento, simplemente es una pasada. No sólo permite llevar la gestión de miles de lineas de código producidas por varias personas, con ajustar el comportamiento del servidor a la hora de acceptar envios con un gancho se evitan un montón de “errores de bulto”.
Trac es una pequeña joya que hace lucir más si cabe a Subversion: es una aplicación web que se integra con nuestros repositorios y permite llevar un control del proyecto mediante pequeños tickets en lugar de apuntar las ideas o bugs en un post-it o en la pizarra que siempre acaban en el olvido.
Un ticket puede ser un bug, una petición de mejora, una nueva característica o lo que en un momento determinado se necesite. Cada grupo de tickets conforman un milestone o hito a alcanzar en el proyecto, y finalmente un proyecto está conformado por varios milestones.
De esta sencilla forma obtienes un control bastante bueno sobre lo que falta por hacer en cada momento. Además trac integra un pequeño wiki que es especialmente útil para empezar a redactar la documentación y los casos de uso.
Finalmente Eclipse es la magia que integra todo en un sólo lugar, accesible a golpe de ratón y completamente independiente del entorno (Windows, Linux y Mac).
Después de probar mucho tengo que decir que no hay nada que le haga sombra a Eclipse, es como el Firefox de los entornos de desarrollo: a parte de ofrecer una excelente base se puede enriquecer mediante plug-ins para prácticamente cualquier cosa. Los esenciales son:
Y así cientos, nunca he visto nada tan completo ni tan versátil, nada por este precio; ni por ningúm otro, la verdad, porque Eclpse sirve tanto para un roto como para un descosido, desde Java hasta C++ pasando por PHP y Python; tanto para desarrollo web como para escritorio; sistemas empotrados o aplicaciones empresariales monstruosas. Eclipse no defrauda y va camino de ser el entorno de desarrollo.
Lo malo esta en que Eclipse es una bestia parda comiendo recursos, sobretodo RAM; como Firefox
pero todas las ventajas merecen mucho el esfuerzo de ampliar un poco la memoria del sistema.
Todo muy completito excepto para el mundo .Net que brilla por su ausencia en Eclipse mientras que Visual Studio campa a sus anchas sin nadie que le pueda mirar a la cara … pero eso es otra historia.
¿Qué clase de mundo es este en el que ya no podemos fiarnos de las supermodelos, de los editores de revistas porno, de los taxistas mejicanos y de las prostitutas? ¿En qué nos hemos equivocado?
Con C es sencillo dispararte en tu propio pie; con C++ es algo más difícil, pero cuando ocurre te vuelas la pierna entera.
— Bjarne Stroustrup, el padre de C++.
Bad Behavior has blocked 374 access attempts in the last 7 days.