sábado, abril 07, 2007
Innovatech 2006, actualizado
Por cierto el sitio ya fue actualizado, y esta en proceso de contener la información que aquí les comento, ademas de que el registro ya esta abierto.
Probando Linux con Cosmopod
Por medio del cliente se realiza una conexión remota a el servidor de Cosmopod donde se inicia una sesión de nuestro propio escritorio Linux – solo soporta KDE -, el cual cuenta con todas la herramientas de escrito como OpenOffice, cliente de mensajería, correo electrónico, organizadores, juegos y acceso a Internet.
Ademas de permitir probar Linux sin crear dobles boots, usar live cds o instalar maquinas virtuales, el servicio ofrece espacio limitado de 1GB para guardar documentos o archivos, lo cual permite personalizar nuestra sesión y que los cambios queden almacenados cada vez que regresamos.
Yo me conecto con un DSL a 256 kbps y al respuesta del escritorio remoto es buena – no como en mi pc local, pero muy aceptable -.
IIS falla al iniciar - Skype
En mi primer intento por solucionar el problema cambie el puerto de servicio Web del 80 al 8080 y funciono, el servicio pudo iniciar, lo cual se me hizo extraño, algo estaba ocupando el puerto 80, corrí el TaskManager para ver que procesos estaba ejecutando y ver si encontraba algo raro pero nada, así que abrí una consola de MS-DOS y ejecute el comando: netstat -oan para que me mostrara el numero de proceso que estaba conectado al puerto 80, después ejecute el comando: tasklist, donde ya con el PID del proceso conectado al puerto pude encontrar al culpable: Skype!
Al parecer resulta que si se esta detrás de un Firewall con el puerto de Skype bloqueado, este por omisión se conecta del puerto 80 y/o 443, situación que “chocaba” con el IIS y aunque el Skype lo tengo desde hace tiempo, creo que nunca lo había tenido activo mientras trabajaba con el IIS.
La solución fue sencilla, configurar mi Firewall para que le permitiera a Skype conectarse por algún otro puerto, deshabilitar la opción en Skype para usar el puerto 80; finalmente después de esto, pude levantar el servicio del IIS.
OracleXE
OracleXE es una buena opción para esos proyecto pequeños que requieran de una base de datos segura y confiable y que ademas se pueda ejecutar en ambiente Windows o Linux, y aunque tiene algunas limitantes como el máximo de memoria que puede utilizar o el tamaño de los datafiles que se pueden crear, es muy simple el migrarse a una versión de paga de Oracle.

La instalación y configuración del OracleXE, es simplemente sencilla, ademas para la configuración y administración, Oracle provee de una aplicación web con la que se puede administrar cualquier área de la base de datos e inclusive es posible realizar consultas desde este administrador web desde código o utilizar la funcionalidad de "drag and drop" para crear consultas de forma visual.
Ademas de la liberarnos gratuita de OracleXE, Oracle libero el Oracle SQL Developer, el cual es una herramienta IDE gratuita para trabajar las bases de datos Oracle, una características interesantes que ofrece el SQL Developer es el soporte a autocompletar los scripts con la información de los objetos de la base de datos, ademas de la posibilidad de depurar el código de los procedimientos o paquetes paso por paso, teniendo visibilidad de las variables locales.

Definitivamente OracleXE y SQL Developer son una buena opcion para quien tengan el interés de probar la base de datos de Oracle, contrario a la idea general que se tiene de Oracle, la instalación y configuración de ambos productos es muy sencilla - solo el asistente de instalación -.

Por ultimo solo deseo hacer notar que OracleXE se instala con la configuración de utilizar alrededor de 190 megas de memoria RAM, pero con el asisten es sencillo disminuir los valores del SGA y PGA para que utilice una menor cantidad de memoria, ademas los servicios de la base de datos y el listener de la misma se activan para iniciar encender la pc, pero con solo ir al área de servicios en el control panel es posible cambiar esta configuración para que no se inicie automáticamente.
Mono Windows Forms y Monodevelop
Windows Forms bajo Mono va tomando forma y si se tiene cuidado en observar que la aplicación no este completamente ligada a Windows – uso de servicios solo disponibles en Windows o librerías que solo se ejecutan bajo Windows -, va a ser muy sencillo el poder crear clientes .NET que se puedan ejecutar en diferentes plataformas.
Otra de las cosas que Miguel menciona en el post es el soporte de Monodevelop para el diseño gráfico integrado para la creación de formas GTK#, asi como el insipiente soporte para el desarrollo gráfico de aplicaciones ASP.NET.

Innovatech 2006
La pagina correspondiente para el nuevo evento aun no esta lista, como tampoco el temario de las conferencias que se llevaran a cabo, pero con el trabajo que se esta realizando por parte de los organizadores y con el apoyo del Cluster IT Baja California, en los próximos días esperemos que este listo y definido.
El evento esta enfocado principalmente a los estudiantes de carreras relacionadas con Tecnologías de Información, y aunque se lleva a cabo por segunda ocasión en el ITT y esta organizado por alumnos del mismo, es un evento abierto – y gratuito - para estudiantes de otras universidades y profesionistas.
Asi que hay que estar pendiente de los siguientes días cuando se abra el registro y este listo el temario de las conferencia, ya que promete muy agradables sorpresas para esta nueva edición.
GNOME 2.14
Oficialmente el día de mañana 15 de marzo se libera oficialmente la versión 2.14 del escritorio gráfico para Linux Gnome, esta versión cuenta principalmente con mejoras en cuanto al uso de memoria, área en la que se le dedico una buena parte del trabajo, como se puede apreciar en el gran numero de "blogs" relacionados a este tema en Planet Gnome, o bien en el weblog de Federico Mena Quintero - quien es junto con Miguel de Icaza uno de los fundadores del proyecto Gnome -. Adicionalmente las aplicaciones base recibieron una serie de mejoras para hacerlas en su mayoría mas funcionales; para conocer a detalle el listado de las mejoras mas destacables vale la pena revisar el documento "A look at GNOME 2.14".
Actualmente estoy utilizando la distribución Ubuntu Dapper Flight 5, la cual es una beta de la versión de Ubuntu a liberarse el 20 de abril, y que a partir de esta mañana - al menos fue cuando me di cuenta - ya cuenta con los paquetes de la versión 2.14 de Gnome, de igual forma en el sitio de Ubuntu hay una lista con las mejoras incluidas en esta versión Flight 5 de Ubuntu.
Ready to Rock
Creo que he sido infectado...
Mexicali vuelve a la edad de piedra, por 6 horas !
SQL Injection

Nota: Parece que ya repararon el sitio de la SSP, pero la vulnerabilidad aun esta presente.
Es realmente critico que empresas y dependencias de gobierno usen desarrolladores inexpertos para crear sitios web - quizás porque cobran mas barato? - con errores tan increíbles como la construcción de sentencias de SQL con strings, dejando COMPLETAMENTE vulnerable el sitio y la información alojada en el. Ambos sitios - el del ITT y el de la SSP - usan MS SQL Server y ASP (clásico y ASP.NET), pero en este caso definitivamente el problema no es una vulnerabilidad ni del sistema operativo, ni del servidor de la base de datos, ni de ASP, el error es un grave error de diseño y definitivamente la falta de experiencia.
Pero que es una inyección de SQL?, bueno es un forma de explotar el acceso no autorizado a servicios o a datos de un sitio Web, en donde se envían instrucciones de SQL en algunos de los campos de captura, por ejemplo de un formulario, para tratar de que estos se ejecuten en la base de datos del sitio Web y con ellos ganar el acceso buscado.
Por ejemplo, uno de los errores mas comunes que expone este tipo de vulnerabilidad es el crear sentencias de SQL como simple strings dentro del programa, en donde si hay que pasar valores de variables al SQL, estos se pasan concatenado el SQL con la variables que contienen dichos valores, ej:
string usuario = "minombre";
string clave = "miclave";
string sql = "SELECT nombre FROM usuarios WHERE usuario = '" + usuario + "' AND clave = '" + clave + "'";Aquí el sql es construido dinámicamente para validar que el usuario existe con la clave correspondiente, si suponemos que las variables usuario y clave están ligadas a los textboxes donde el usuario captura esa información, alguien podría "inyectar" otras instrucciones de SQL para lograr acceso, ej:
string usuario = "minombre";
string clave = "miclave' OR 'X' = 'X";
string sql = "SELECT nombre FROM usuarios WHERE usuario = '" + usuario + "' AND clave = '" + clave + "'";Con "' OR 'X' = 'X" que le agregue a la clave, me aseguro que si el nombre de usuario o la clave están incorrectas, el query si va regresar algún registro y muy posiblemente la lógica del programa me va a permitir tener el acceso que busco.
El problema mayor proviene que si se captura alguna secuencia de caracteres para generar un error en el SQL, los programadores descuidados van a mostrar el mensaje de error completo, el cual muchas veces provee el nombre del servidor, información sobre el motor de bases de datos usado, información sobre la tabla de usuarios, etc, dejando la puerta abierta para que alguien con un poco de malicia pueda causar grandes daños que pueden implicar la caída del servidor, el robo de datos o el borrado de información.
La forma de protegerse de este tipo de ataques realmente es muy sencilla, lo primero es evitar a toda costa usar instrucciones de SQL dinámicas concatenando valores, por ejemplo con ADO.NET se puede hacer algo como:
SqlCommand cmd = new SqlCommand();
cmd.Text = "SELECT nombre FROM usuarios WHERE usuario = @usuario AND clave = @clave";
SqlParameter param1 = cmd.Parameters.Add("@usuario");
param1.Value = "minombre";
SqlParameter param2 = cmd.Parameters.Add("@clave");
param2.Value = "miclave";De esta forma sencilla ya se esta evitando la posible inyección de SQL en nuestro servidor, adicionalmente es recomendable que el usuario con el que la aplicación Web se conecta a la base de datos, tenga los mínimos privilegios sobre la base de datos (no usar el usuario sa), si es posible, es todavía mejor usar Stored Procedures ya que estas ofrecen un mayor nivel de seguridad al realizar la función exclusiva para la que están programadas y el usuario que se use para conectarse a la base de datos, no necesita de privilegios para insertar, actualizar o eliminar en las tablas utilizadas por la aplicación; finalmente si es un servidor de producción, poner un manejador de errores global en la aplicación para que muestre una pagina amigable informando al usuario de que existió un error en la aplicación, y que no muestre información critica del error, el cual puede ser enviado mediante una alerta al administrador o bien guardado en una bitácora.
Nuevo semestre en el ITT
El día de hoy comenzó un nuevo semestre en el ITT, este comienzo viene con la novedad de que al parecer finalmente se va a adoptar el lenguaje C# en lugar de C++ para todos los cursos relacionados con programación ( por lo menos en Ing en Sistemas e Informática ) y que están sujetos al ultimo cambio de retícula de hace 2 años, esto quiere decir que todos los que tenemos de antigüedad de 2 años o menos vamos a comenzar a trabajar con C#, al parecer ahora si es oficial.
Debido a esto, ya surgió la demanda de quemar el CD creado para distribuir C# y SQL Express en las reuniones de la comunidad TJ.NET, por lo menos entre la gente de 3er semestre del ITT.
SQL Management Studio genera scripts incompatibles con SQL2000
Al generar el script me asegure de utilizar la opción "Generar script compatibles con SQL Server 2000" estaba activada; al finalizar copie el script al servidor SQL 2000 y procedí a ejecutarlo, pero fallo rotundamente con una gran numero de errores, después de revisarlo una y otra vez me dí cuenta que el script era valido para SQL 2005 pero no SQL 2000, aun y cuando al generarlo active la opción para que fuera compatible.
Después de buscar como solucionar el problema, me encontré con este post donde al parecer Microsoft ya tiene conocimiento de este problema, pero aun no hay solución.
Así que si alguien mas esta desarrollando en SQL 2005 y desea después llevar ese desarrollo a SQL 2000, cuidado, porque los scripts para recrear la base de datos no van funcionar, hay que hacerle algunos cambios de forma manual para que función, los cambios están descritos en el post que mencione anteriormente.
Hay otra forma de copiar bases de datos, la cual consiste en hacer un "deattach" de la base de datos, copiar los datafiles al nuevo servidor y después realizar un "attach", pero esto funciona haciéndolo entre servidores de la misma versión o desde servidores de versiones anteriores a versiones nuevas - por ejemplo funciona de SQL 2000 a SQL 2005 -, no he probado el procedimiento de SQL 2005 a SQL 2000, peor tengo dudas de que sea posible.
Generics, ¿no Generics?
Generics es posiblemente la característica mas importante que se agrego al .NET 2.0 – desde mi punto de vista -, es por esta razón que el uso de Generics en un desarrollo en el que actualmente estoy trabajando, tiene un papel importante en el mismo, ya que me permite realizar algunas cosas de una forma muy simple, y sobre todo me permite una gran reducción en las lineas de código dentro del desarrollo, ayudándome a tener consistencia y sobre todo a reducir errores.
Debido a lo mencionado arriba, revisando cierta parte de mi código encontré que se repetía bajo cierto patrones, lo revise mas a fondo y me decidí a realizar una refactorización con la finalidad poder reutilizar de una forma mas efectiva esas partes de mi código.
Cuando finalice y quise realizar pruebas, me encontré con una limitante del VS.NET 2005, ya que parte del código que refactorice incluida UserControls (Controles de Usuario) y algunas Forms (formas que me sirven de base), la limitante consiste que el editor de interfase gráfica para Windows Forms no soporta Generics, y de acuerdo a este reporte de Microsoft parece que no va a haber solución a corto plazo, debido a que actualmente no existe la infraestructura para necesaria en el diseñador de formas para dar soporte a Generics, y posiblemente va a ser necesario esperar hasta la siguiente versión del VS.NET.
También ya me había dado cuenta que no es posible crear un DataSource a partir de una colección de objetos, si la colección implementa Generics.
Desafortunadamente en mi proyecto es importante el poder utilizar el diseñador de forma, así que tuve que darle la vuelta a esta limitación, reimplemente el código de forma que pudiese ser reusable y extensible, y que además evitara el tener controles de usuario y formas que requieran Generics.
Aun y con esta limitante del VS.NET, Generics simplemente Rocks !
Clone, serialización y eventos
La semana pasada, trabajando en un proyecto, tuve la necesidad de poder obtener una copia de un objeto, al decir copia no me refiero a asignar mi objeto a otra variable, ya que esto no saca una copia, simplemente crea otra referencia a mi objeto, en cambio la copia crea otra nueva instancia del objeto en memoria, con los datos del objeto original, pero que cualquier cambio realizado a cualquiera de ellos no afecta al otro; esto en .NET se logra implementando la interfase ICloneable.
La forma de implementa el metodo Clone de la interfase ICloneable es mediante el uso de la serializacion:
public object Clone()
{
MemoryStream buffer = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(buffer, this);
buffer.Position = 0;
object temp = formatter.Deserialize(buffer);
return temp;
}
Donde el objeto regresado es una copia en memoria e independiente del original, aquí es donde comenzaron mis problemas con el método Clone, la serializacion y los eventos. Resulta que mi objeto que implementa la interfase ICloneable expone un evento, y cuando intente sacar una copiar mi objeto la parte donde se realiza la deserializacion fallaba horriblemente con una excepción:
The serialize method works at it should be, but when I try to deserialize the buffer, it fails with the following exception:
System.Runtime.Serialization.SerializationException was unhandled
Message="Cannot get the member 'Child_PropertyChanged'."
Source="mscorlib"
El motivo del error en la deserializacion se debe a que el BinaryFormatter serializa y deserializa todas las variables declaradas a nivel de la clase (fields) que no estén marcadas con el atributo NonSerialized; el problema se genera si el objeto a serializar contiene la declaración de un delegado (EventHandler) o la declaración de un evento, y estos no están marcados como NonSerialized.
El motivo por el cual se tienen que marcar la declaración del evento y delegado (EventHandler) como NonSerializable para que el proceso de deserilizacion no falle se debe a que, cuando un objeto se subscribe para recibir la notificación de un evento de otro objeto, el objeto que genera el evento mantiene una lista de a quien debe de notificar, por lo tanto si el objeto que genera el evento es serializado, al momento de ser deserializado es posible que que los objetos que estaban subscritos ya no existan, ya que hay que recordar que la serializacion se puede utilizar para guardar un objeto a disco, a una base de datos; o bien transmitirlo remotamente con un WebService o Remoting; o como en mi caso serializarlo a memoria para después recrearlo.
Para la declaracion de un delegado (EventHandler), simplemente con colocar el atributo NonSerialized es suficiente para que BinaryFormatter no trate de serializarlo, en el caso de la declaración de un evento el atributo NonSerializable no puede colocarse directamente en la declaración del evento:
[NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
Ya que el atributo esta restringido para ser usado solo sobre campos (fields), la forma en como se tiene que colocar, es especificando que atributo es para el campo que declara el evento, no para el evento en si mismo:
[field:NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
Después de colocar el atributo, todo funciono a la perfección, pude utilizar el método Clone para crear una copia de mi objeto original.
Kuali
Desde hace ya unos meses me entere de una aplicación llamada Kuali, la cual ayuda a administrar proyectos de desarrollo de software basados en el modelo de calidad Moprosoft, modelo diseñado exclusivamente para llevar a cabo las mejores practicas en el desarrollo de software y que es apoyado por la industria mexicana de software y la secretaria de economía.
El modelo Moprosoft dicta una serie de procesos y requerimientos que se tienen que llevar a cabo con la finalidad de asegurar que el producto final, en este caso software, sea exitoso, pasando por procesos como el diseño, la administración, desarrollo, mantenimiento y otros mas.
Kuali, de acuerdo a lo ya mencionado anteriormente, ayuda a la administración de los procesos requeridos por el modelo Moprosoft, por ende ofrece las siguientes características:
- Administración de documentos
- Base de datos de conocimiento
- Catálogos de proyectos, clientes, contactos
- Administración de requerimientos, defectos, tareas y riesgos
- Así como a una versión reducida del modelo Moprosoft
Lo interesante de la aplicación es que esta desarrollada en .NET 2.0 y usa el SQL 2005 como base de datos, además el proyecto esta auspiciado por la secretaria de economía, y según el sitio de Kuali el código fuente de la aplicación va a ser liberado cuando se llegue a la versión 1.0 de Kuali, actualmente esta en RC2, y bueno como punto adicional es una herramienta gratuita.
Kuali aun esta en desarrollo, pero parece que es usable, aunque puede darnos algunos problemas, por ejemplo en mi caso me encontré imposibilitado para instalarla debido aun error en el asistente de instalación, pero después de investigar un poco pude solucionar mi problema.
Por cierto Kuali se instala mediante la tecnología ClickOnce de Microsoft, asi que cada vez que hay una nueva versión se actualiza sola.
Aquí dejo algunas ligas a información de Kuali y Moprosoft
Por fin, se termino el semestre.
El viernes pasado, finalmente se termino el semestre en la escuela, el ultimo mes estuvo algo pesado, debido a la gran cantidad de exámenes y trabajos para terminar, pero finalmente llego a su fin, y sin ninguna complicación con las calificaciones, ahora a disfrutar de casi un mes de vacaciones para en la ultima semana de enero comenzar el nuevo semestre, el cual parece que va a ser un poco complicado, ya que llevo Matemáticas 3, Matemáticas 4 y Física 2, todo en el mismo curso.
Por cierto, mientras mas conozco C++, mas me gusta C#, y no es que este mal C++, pero hace las cosas un poco mas difíciles de lo normal, aunque a la mejor el comentario no es justo, ya que C# es muy nuevo y el enfoque que tiene en comparación con C++ es diferente.
Tengo varios pendientes sobre los cuales escribir, pero por la falta de tiempo los he ido dejando de lado, espero en los próximos días tener el tiempo para escribirlos y publicarlos.
Lanzamiento de Visual Studio 2005 y SQL Server 2005
Pues finalmente se llego la fecha y el día de hoy 7 de Noviembre oficialmente se liberaron el Visual Studio 2005 y el SQL 2005 con diversos eventos en varias ciudades de Estados unidos.
Una cosa interesante sobre las versiones express de Visual Studio, es que originalmente se había indicado que iban a tener un precio de alrededor de los 50 USD, pero hoy se anuncia que se podrán descargar de forma gratuita durante un año, es decir hasta Noviembre 6 del 2006, así que si tienen una conexión de Internet lenta, no pierdan tiempo y empiecen a descargarlas ya. La versión del SQL 2005 express no tiene esta limitante, ya que va a continuar siendo gratuita, aun después de transcurrido el año.
Aquí en la ciudad de Tijuana, el evento de lanzamiento esta programado para los días 22 y 23 de Noviembre, como parte de un esfuerzo de Microsoft, la comunidad TJ.NET y el Instituto Tecnológico de Tijuana.
Durante el día 22 se van a llevar a cabo una serie de conferencia enfocadas a los estudiantes y desarrolladores profesionales; el día 23 se destinara a la realización de talleres prácticos sobre las nuevas características de esta tecnología Todo el evento sera gratuito.
El evento se llevara a cabo en el teatro Calafornix del Instituto Tecnológico de Tijuana, unidad Tomas Aquino, para mas información sobre el mismo, consultar la información del evento en la comunidad TJ.NET.
MSSQL 2005 y Oracle Express
He estado usando el MSSQL 2005 beta2 – próxima a liberarse - de forma regular desde hace ya algunos meses y la verdad me han gustado bastante las mejoras que Microsoft ha agregado a la nueva versión, de entre las mejoras, por lo menos de las que a mi me llaman la atención, puedo listar las siguientes:
- Unificación del entreprise manager y sql query analyzer - inclusive tiene una mejor apariencia, el único punto malo es que no cuenta con Intellisense el editor de sql -
- La introducción del CLR en la base de datos, me parece muy buena idea el poder escribir ciertos procedimientos, por ejemplo en C#, aunque esta funcionalidad puede también llevar a muchos problemas si no se usa apropiadamente, es decir primero tratar de solucionar el problema con T-SQL, si finalmente no es posible, entonces implementarlo con algún lenguaje de .NET
- El nuevo manejo de errores en T-SQL con bloques TRY-CATCH
- Las nuevas funciones de T-SQL para realizar "ranking" - posiblemente esto es de lo que mas extrañaba de Oracle -
- Una característica que me gusta mucho es Common Table Expressions, muy útiles para simplificar y entender queries muy grandes
- Otra nueva característica es la introducción del PIVOT y UNPIVOT para rotar datos, es decir convertir lineas a columnas y viceversa - Igual que en Excel -
- Y finalmente creo que la mas importante de todas es el manejo de versiones de las lineas y el uso de candados a nivel del linea - en vez de nivel de tabla -, es decir al poner un candado ahora, solo se hace sobre las lineas que estamos afectando, lo cual no bloquea que otro proceso pueda leer las mismas lineas, y mas aun, el proceso de lectura toma una "versión" de la linea, para que en caso de que esta se modifique durante el proceso de lectura, el proceso de lectura nos de datos consistentes dándonos las lineas tal y como estaban al iniciar la lectura.
Quizás valga la pena realizar un post mas detallado con algunos ejemplos de esta pequeña compilación de los cambios en SQL2005 - que a mi vista y opinión personal, son los mas importantes para mi -.
Por otro lado, pero en el mismo tema de las bases de datos, tengo que admitir que mi base de datos preferida es Oracle, mi preferencia la puedo resumir por unas pocas razones:
- Su escalabilidad y estabilidad increíble, tanto en Windows, Linux y Unix, ambientes donde la he manejado
- Su falsa complejidad, es decir si es un tanto compleja, pero la complejidad se elimina con el entendimiento de como funciona la base de datos - el motor, algoritmos, estructuras de memoria, etc -, entendimiento que muchas veces es omitido por quienes manejan solo MSSQL, ya que este oculta muchas de las cuestiones de configuración de la base de datos, algunas personas pueden decir que que por ese motivo Oracle es muy compleja, pero yo creo que el entendimiento es un conocimiento útil si se maneja MSSQl, Oracle o cualquier otra base de datos
- Por ultimo mi primer base de datos relacional fue MSSQL 6.5 y con MSSQL las bases de datos que he manejado han sido de apenas un par de Gigabytes con un par de decenas de usuarios concurrentes, con Oracle en cambio he manejado bases de datos de mas de 350 Gb con varios cientos de usuarios, y la respuesta y control de Oracle ha sido excelente
Pues bien ya sin mas preámbulo, Oracle la semana pasada lanzo la versión beta de su Oracle Express Database (OracleXE), basada en la versión Oracle 10gR2, esta es una base de datos gratuita y enfocada a pequeños grupos de usuarios, el instalador es muy simple practico - solo 2 preguntas donde instalar la base de datos y el password de administración -, además incluye un ambiente de desarrollo llamado HTMLDB para aplicaciones web sin necesidad de escribir código
Las licencias de Oracle siempre han sido amigables con los desarrolladores, debido a que se podía descargar de Oracle la base de datos sin ninguna restricción de tiempo y funcionalidad, y se podía usar sin cargo alguno para propósitos de desarrollo y pruebas, solo exigían el pago de licencia si la base de datos se usa en producción
Lo que ofrece OracleXE aparte de ser gratuita es que el instalador mide apenas 130MB a diferencia de los 3 CDs que se tienen que descargar de las versiones no libres de Oracle, como mencione el instalar esta "super" simplificado, y viene configurada para utilizar poca memoria, situación que mas escuchaba como queja de quienes querían probar Oracle, ya que instalación por omisión de la versión no libre, si mal no recuerdo viene preconfigurada para utilizar 250 Mb de RAM - aunque quien conoce de Oracle sabe que es muy sencillo disminuir o aumentar este valor -.
Dentro de las limitantes que OracleXE ofrece es que los datafiles no pueden ser mayores de 4GB y solo permite una instancia por máquina, pero pues siendo una base de datos comercial ofrecida de forma gratuita no esta mal. Un problema que si observe es que una vez instalada, los datafiles de System, Temp y SysAux ocupan prácticamente 1GB de espacio en disco, entiendo que son los mismos datafiles de la base de datos comercial que contienen la funcionalidad de la base de datos - paquetes, librerías, espacio temporal, rollbacks, etc - y que son necesarios, y por lo que vi de momento en Oracle no existe ninguna intención de tratar de reducir el tamaño de ellos, lo que a la mejor puede ser un punto en contra para OracleXE.
Si se desea conocer más sobre OracleXE, en ésta página hay información y tutoriales.
Ubuntu Breezy Liberado
Ok, quizás este post llegue un poco tarde, pero el día de hoy fue liberada la versión Ubuntu Breezy 5.10, después de 6 meses de trabajo, dentro de las mejoras que la nueva versión de Ubuntu provee puedo citar:
- Incluye la versión 2.12.1 del escritorio Gnome
- OpenOffice Beta 2
- Una nueva herramienta para instalar aplicaciones de un forma sencilla
- Pantalla gráfica de inicio, con barra de progreso
- Kernel 2.6.12.6 con drivers actualizados
- El sistema de ventanas XOrg 6.8.2
- Mejoras para el soporte de notebooks - teclas especiales, etc -
- Compilador GCC 4.0
He estado utilizando Breezy desde la primera versión de prueba liberada, así que la actualización del día de hoy solo me requirió un par de paquetes - la mayoría de ellos los actualice la semana pasada -.
Una cosa interesante es que Ubuntu soporta de buena forma a Mono, por lo tanto instalarlo e instalar las aplicaciones que requieren Mono es muy sencillo.
La descarga básica de Ubuntu solo requiere de un CD de instalación, esta opción es buena para quien desee instalar Ubuntu en un boot dual - por ejemplo junto con Windows -, el instalador trae consigo una herramienta para reorganizar el tamaño de las particiones, por ejemplo hacer mas pequeña la partición NTFS para poder liberar espacio y crear una partición para Ubuntu.
Otra forma de probar Ubuntu es por medio del LiveCD, de forma que solo realizando el boot de la computadora con este disco es posible ejecutar Ubuntu para probarlo sin instalar nada en nuestra PC.
Como ultima opción esta la posibilidad de instalar Ubuntu en un VirtualPC, la instalación no tiene ningún problema, solo es necesario realizar un pequeño ajuste, ya que Ubuntu por omisión instala el soporte gráfico para 24bits y VirtualPC solo soporta 16Bits, los pasos de como cambiar la configuración después de la instalación están aquí.
Programador DCE 2005 y asesorias de C++
El día de hoy vi el post de Gabriel Flores sobre el programa DCE 2005, y ... no lo pude evitar me dí una vuelta por sitio y tome las pruebas, asi que ahora soy parte de las estadísticas... ;)

Los exámenes son relativamente sencillos, pero hubo un par de cosas que me incomodaron:
- En el examen cero (0), porque mezclar preguntas especificas de C# y VB.NET?
- Las preguntas, si es que fueron traducciones, a mi punto de vista son muy malas; a la mejor aquí el que esta mal soy yo, ya que estoy acostumbrado a que toda la información referente a desarrollo la recibo en ingles – no compro libros en español -; y la verdad le batallo cuando veo información este tipo en español
- En el examen de Desarrollo para Web, de Web solo tiene tiene el titulo, ya que una buena cantidad de preguntas son de tipo general – Web o no Web -, quizás aquí esperaba preguntas que fueran mas acordes al material de referencia que hay para este examen.
Por otro desde la semana pasada estoy dando asesorías – formales y reconocidas por el ITT – sobre C++ y la programación orientada a objetos, se me hace muy buena onda que la academia de Ingeniería en Sistemas del ITT se haya acercado a mi para pedirme el apoyo. Aunque la asesoría es solo una hora a la semana, espero que sea de beneficio para la gente que acude.
Microsoft LINQ
El día de hoy comenzó el evento Microsoft PDC 2005 en la ciudad de Los Angeles, US; dentro de las cosas que se anunciaron el día de hoy, hay una que me llamo mucho la atención y al parecer Anders Hejlsberg – el creador de Delphi y C# - esta trabajando en este proyecto, el cual se llama LINQ, acrónimo para Language Integrated Query.
LINQ es una extensión para C# y VB.NET que ofrece soporte para sintaxis SQL, manejo de sets de datos y transformación La ventaja principal es que la sintaxis LINQ es validada al momento de compilar el programa, no como sucede actualmente que si agregamos código de SQL en nuestros programas, esta se valida al momento de ejecución, lo que puede llevar a que un programa “truene” al estarlo ejecutando; otra de la ventajas es que la sintaxis tiene soporte para Intellisense.
LINQ no solo sirve para acceder bases de datos, por el demo y código ejemplo que esta disponible, se puede ver que se puede usar la sintaxis para acceder a arreglos, colecciones de objetos, File System, Active Directory, etc.
Para el acceso a bases de datos LINQ proporciona unos atributos que son usados para “mapear” los datos a nuestros objetos, muy a la ObjectSpaces (q.e.p.d.).
Se ve interesante LINQ ya que proporciona una misma interfase para acceso a datos relacionales y no; para el caso de transformación de datos, y si estos provienen de una base de datos, prefiero hacer la transformación en la base de datos, que es donde reside mi información, en lugar de pasar grandes bloques de datos por la red, para que sean procesados por un cliente.
Esperemos que LINQ sobreviva este PDC y que no quede como otras tecnologías anunciadas en los PDCs (alguien recuerda a ObjectSpaces q.e.p.d?)
Aquí dejo algunos recursos sobre LINQ:
Software Libre
Por el lado de lo bueno hay que resaltar el esfuerzo realizado por las 2 comunidades para llevar a cabo este evento, el cual creo que supero por mucho las expectativas de asistencia de los mismos organizadores. El CECUT les facilito la sala de lectura que se encuentra junto al museo, la cual simplemente no fue suficiente para la gran asistencia de gente interesada por el Software Libre. Y como dicen que una imagen vale mas que mil palabras aquí hay algunas fotos del evento donde se puede apreciar la gran asistencia, y sobre todo interesada y con preguntas interesantes.
Lo malo, en este caso pues se cumplió la famosa ley de Murphy que dice “Si algo puede ir mal, ira...”, en algunas de la platicas en las que estuve, existieron algunos problemas con el software a demostrar, con el acceso a Internet y con las memory sticks que no tenían la presentación necesaria para la platica, en fin, esto es algo por lo que mas de uno hemos pasado.
Lo feo, ok esto es mas bien una queja, y no es contra los organizadores del evento, si no con algunos de los asistentes. Primero había una persona que se creía un “sabelotodo”, que se la pasaba interrumpiendo a los expositores, de cualquier tema que se hablaba, el tenia siempre algo que “aportar”, la verdad es que llego a ser molesto para algunos de los asistentes y me imagino también para los expositores.
Por otro lado un charlatán que estaba sentado detrás de mi que le estaba contando puras incoherencias y mentiras sobre Linux a una persona que había asistido para aprender algo de Linux, en fin.
Inicio de semestre
Este lunes 22 de agosto inicia un nuevo semestre en el Tec, y al parecer va a estar menos excitante que el anterior – y eso que el anterior no fue nada excitante -.
En el semestre anterior lleve 2 materias que me interesaban – aparte de las de cajón -, de las cuales solo Matemáticas para PC lleno las expectativas, en buena parte por lo interesante de los temas, y la excelente forma de dar la clase del Dr. Lomelí; la otra materia Fundamentos de programación, definitivamente se quedo corta y aunque el temario se veía interesante, realmente la materia en si no fue nada interesante.
Esta ultima materia se decía que iba a darse en C#, pero por problemas de actualización de los maestros finalmente se termino dando en C++, así que aquí les muestro lo que aprendí en el semestre:
#include <iostream.h>
#include <conio.h>
main()
{
cout<<"Hola mundo ;)";
getch();
}
Pues bueno en este semestre solo veo una materia interesante Programación Orientada a Objetos (POO), de la cual sinceramente no espero mucho, estoy casi seguro que va a ser igual que Fundamentos de Programación, pero bueno haber como se desarrollan las cosas.
Mientras escribía el texto anterior me vino a la mente como es que aprendí a programar y que lenguajes fueron los primeros, así que aquí les va la pequeña historia:
Todo comenzó cuando tenia 16 años en un proyecto para la prepa, mi perfil era completamente de electrónica, pero necesitábamos hacer un programa que controlara unos motores y unos sensores ópticos mediante un puerto de la pc, ahí aprendí lo básico de gwbasic, luego durante el verano un amigo me presto su pc y aprendí Pascal ( que por cierto con un programa de Pascal y un circuito electrónico en 1992 gane el premio nacional de ciencia y tecnología “Dr. Marcos Moshinsky”, en la categoría de electricidad y magnetismo ), después durante un semestre de la prepa aprendí ensamblador, ya que lo requeríamos para programar controladores; durante mi vida profesional he aprendido además:
- C, C++
- TAS
- Clarion DOS
- Quickbasic
- Visual Basic
- ASP y ASP.NET
- Java
- Cobol y JCL para mainframe
- Oracle Forms
- C#
- Diversos dialectos de SQL
Y pues infinidad de tecnologías relacionadas con todos ellos.
QueryCommander
Dentro de las cosas interesantes del QueryCommander estan:
- El soporte de "Tabs" - cejas - donde podemos tener varios fragmentos de codigo abiertos al mismo tiempo.
- Palabras claves son mostradas con diferente color - syntax color -.
- Soporte de Intellisense para el esquema de la base de datos con la que estemos trabajando.
- Si ejecutamos un stored procedure o varios queries en batch, el resultado es mostrado en un grid separado, es decir un tab para cada resultado.
- Es posible modificar el resultado directamente en el grid y que el cambio se refleje en la base de datos.
- Puede guardar el resultado a un archivo de textp, Xml o Excel.
- Puede importar datos a una tabla desde un archivo Xml.
- Nos permite explorar el esquema de la base de datos, generar automaticamente scripts para modificar y/o ejecutar alguna accion en los objetos de la base de datos.
- Puede autogenerar codigo insertar/actualizar una tabla a partir de los datos de otra, es decir si tenemos una table con ciertos registros base, y queremos poner esos mismo registros en otra tabla, el QueryCommander nos puede generar un script que inserte cada unos de los registros.
- Nos permite ver el plan de ejecucion de un query, muy util para detectar problemas de performace.

El QueryCommander es gratuito para cualquier uso (Comercial o no), y el codigo fuente se encuentra bajo GNU General Public License (GPL).
Windows Forms o ASP.NET?
En la próxima versión 2.0 de .NET Framework esta situación no ha cambiado mucho, ASP.NET es quien se sigue llevando la mayor atención debido a nuevas características como Master Pages, Web Parts, Autorization, Profiles, Membership, databinding mejorado, etc.
Las aplicaciones Web son sumamente populares debido a la popularidad del Internet, y que usualmente es sinónimo que si no se esta en Internet, no se esta en lo ultimo en la tecnología.
Este tipo de aplicaciones presentan una serie de beneficios sobre las aplicaciones tradicionales (Windows Forms):
1.- Solo es necesario instalarlas una sola vez en el servidor.
2.- Cambios a la aplicación solo tienen que instalarse una sola vez y se hacen efectivo para todos los usuarios, evitando tener usuarios que corren versión no actualizadas.
3.- Es posible acceder la aplicación desde cualquier lugar sin necesidad de instalar nada.
4.- Son ideales cuando no se tiene control sobre las redes o los recursos de las PC clientes de los usuarios.
Así como tienen beneficios, existen también algunas desventajas:
1.- Las aplicaciones no son tan interactivas con el usuario, aunque mediante el uso de la tecnología de moda Ajax, google mail y google maps, han demostrado que se pueden hacer aplicaciones mas ricas y reactivas.
2.- No es posible utilizar los recursos de la PC del usuario, por ejemplo para realizar algún calculo que consuma tiempo de CPU, o guardar de forma local información de estado de la aplicación - mas allá de las limitaciones de una cookie -
3.- No es posible hacer uso de este tipo de aplicaciones de forma desconectada.
4.- El manejo de reportes es muy malo, si estos se muestran como una pagina html, generalmente su impresión causa algún de tipo de problema - no sale correctamente en la pagina, sale cortado, sin pie de pagina, encabezados, etc -; o bien si se muestra por ejemplo con un archivo PDF, si pierde la sensación de integración, ya que se tiene que abrir otro programa para poder ver y/o imprimir el reporte.
Pero que ofrece una aplicación de Windows Forms?
Dentro de las características importantes que ofrece una aplicación de Windows Forms encuentro las siguientes:
1.- Existe una integración con el Sistema Operativo, tanto en el uso de recursos como en la parte visual.
2.- Como se menciono en el punto 1, es posible hacer uso de los recursos de CPU y almacenamiento de la PC donde se ejecuta la aplicación, por ejemplo tareas de CPU intensivas, guardar en cache datos comúnmente utilizados por la aplicación.
3.- Ofrece un mejor manejo y recuperación de errores que una aplicación de ASP.NET.
4.- Es posible ejecutar ciertas tareas en otro hilo de ejecución (multi-thread), ofreciéndole al usuario la posibilidad de realizar varias actividades a la vez.
5.- La interfase grafica es mas rica y funcional para el usuario quien cuenta con una serie de elementos que le ayudan a trabajar mejor.
6.- Es posible hacer la aplicación trabaje de forma desconectada y que realice una sincronización de datos al momento de conectarse nuevamente a la red.
7.- Mediante Web services es factible que la aplicación instalada, por ejemplo en una notebook pueda funcionar, sin importar desde que red se conecte.
Aunque también existen algunas desventajas:
1.- Se requiere generalmente que la PC que va a ejecutar la aplicación cuente con ciertos requisitos de hardware mínimos.
2.- Hay que instalar un mínimo de componentes en cada PC para que pueda funcionar la aplicación - como mínimo se requiere el .NET Framework -, aunque con características como ClickOnce es posible publicar la aplicación en nuestro servidor de intranet y con un par de clicks el usuario mismo pueda auto instalar la aplicación.
3.- Cambios a la aplicación generalmente requiere de actualizar todos los clientes, pero es posible hacer que la aplicación misma busque por actualizaciones, notifique al usuario y se auto-actualice.
Ademas de lo mencionado anteriormente, desde mi punto de vista, es mas sencillo hacer una aplicación Windows Forms y controlar el flujo de manera correcta, que en una aplicación ASP.NET, donde ademas se requiere de verificar si se ve bien al aplicación en diferentes navegadores.
Para finalizar quiero dejar en claro que ambas tecnologías ofrecen una serie de ventajas y desventajas, pero que al final cuando a uno le toca evaluar que utilizar para un proyecto, se tiene que elegir la herramienta correcta para el mismo. Mi recomendación es que si no se tiene control sobre el ambiente donde se va a ejecutar la aplicación o se requiere que usuarios fuera de la organización la puedan utilizar, se opte por una aplicación ASP.NET, en caso contrario contemplar realizar la aplicación con Windows Forms.
O ustedes que opinan?
Cajeros automáticos y lo frustrante que pueden llegar a ser.
A mi punto de vista este ultimo es el tipo de cajeros que pueden llegar a ser realmente frustrantes, por dos simples razones:
La primera es porque cuentan con un lector de códigos de barras - de esos que generan un rejilla láser - para que podamos pasar nuestro recibo e identifique sobre que cuenta queremos realizar la transacción, el problema es que hay que asegurarse que el código de barras quede exactamente frente al lector, que no este doblado, que se encuentre a la distancia correcta para poder ser leído; lo cual se convierte en un verdadero problema ya que termina uno moviendo sin sentido el recibo para todos lados para ver si corremos la suerte que lo lea.
En el caso de la C.F.E., mejor opto por tener una persona para que le ayude a los usuarios con esta operación, y en el caso de los cajeros de Telnor, pues mejor llegar sin recibo y capturar el numero telefónico directamente en la pantalla.
La solución a este problema, realmente no me parece muy compleja, creo que con colocar un cristal o acrílico sobre la superficie de la caja, mover el lector hacia adentro, a una distancia que permita solo recargar el recibo sobre el cristal para que pueda ser leído, se puede corregir en un alto porcentaje este problema.
El segundo problema y el mas frustrante, es el lector de billetes; el cual parece estar programado para hacerle las cosas difíciles al usuario, molestarlo y hasta ponerlo nervioso.
Una buena cantidad de los problemas provienen de que el usuario coloca el billete en la posición incorrecta, y en ocasiones intenta mas de una vez hasta que se da cuenta de su error.
Cuando un billete es rechazado, el lector toma cierto tiempo - segundos - para volver a aceptar un billete, el usuario simplemente lo toma y lo trata de forzar para insertarlo, cuando esto sucede el lector no toma el billete hasta que es retirado completamente y se vuelve a colocar.
El ultimo de los problema es cuando por fin el billete es tomado por el lector, pero este lo rechaza una y otra vez hasta que finalmente lo acepta, obviamente esto produce frustración y un tanto de nerviosismo cuando vemos por nuestro hombro y nos percatamos que ya no hay 2 personas esperando si no que la fila se hizo larga, y todos nos ven con cara de "haber a que hora terminas !".
Para el caso del billete en la posición correcta, pues no hay de otra, hay que revisar las instrucciones.
En el caso del billete rechazado, una solución puede ser agregar un indicador luminoso (LED) de color verde y rojo para indicar cuando el lector puede tomar un billete y cuando hay que esperar.
Para el ultimo caso, pues no hay solución simple, los lectores identifican la denominación del billete gracias a la tinta electromagnética que produce frecuencias diferentes para cada denominación, y en algunos casos se utilizan técnicas fluorescentes también para la identificación. Realmente aquí no queda de otra que tener paciencia e insistir con el billete y si se disponen en el momento de otro billete probar con ese.
Mientras tanto cuando haga uso de cajeros este tipo, no lleve el dinero exacto llévese algún billete extra, no vaya pensando que va a tardar solo un par de minutos, y tómelo con calma.
martes, julio 05, 2005
Cambio de blog
El día de hoy me he cambiado a otro blog, la nueva dirección esta aquí. El motivo del cambio obedece simplemente a que tengo un mayor control sobre el sitio que contiene mi blog, y que además me permite personalizar 100% gracias al Portal Kit Framework que utilizo para el sitio.
He migrado todos mis posts al nuevo sitio, pero aun no le he hecho con los comentarios, espero en los siguientes días tenerlos en el nuevo sitios también.
jueves, junio 16, 2005
Centro Open Source de IBM en Baja California
La noticia esta Linux Insider.
martes, junio 14, 2005
Opensolaris y Realbasic
Sun con sus sistema operativo Solaris – posiblemente una de las versiones de Unix mas populares -, desde hace ya varios años ha apoyado al open source, aunque en veces parece que se retracta y dice que el open source no es viable, el apoyo que brindan al movimiento esta latente.
Hace algunos meses Sun había anunciado la liberación en open source del sistema Solaris, pero con el acuerdo que logro con Microsoft – después de una batalla legal de monopolio en relación Java y Windows- se especulo sobre la no realización del proyecto OpenSolaris, otro punto de especulación fue la amenaza de la compañía SCO – propietaria de los derechos de Unix – acerca de que Sun no podía liberar Solaris en open source, debido a que la licencia de Sun para explotar Unix no le permitía realizar tal acción.
Pues finalmente la fecha se cumplió, el día de hoy Sun hizo publico el proyecto OpenSolaris.
En otro orden de ideas como ustedes recordaran el 31 de Marzo Microsoft finalizo el soporte de VB Clásico (VB6 y hacia atrás), durante esas fechas se realizo una petición por parte de los MVPS para que Microsoft extendiera el soporte, a lo cual Microsoft dio sus motivos del porque no extender este periodo.
La verdad es que actualmente existen millones de lineas de código escritas en VB Clásico, que van a seguir funcionando mientras esos programa sigan cumpliendo con su cometido, ante este mercado que de alguna forma queda “desprotegido” una compañía llamada Real Software lanzo una herramienta llamada Realbasic, la cual ofrece un cierto nivel de compatibilidad con VB Clásico, pero además como un “plus”, la compañía ofrece hacer que ese código sea posible ejecutarlo en Windows, Macintosh y Linux. Como ayuda en la sitio de Real Software existe un documento que explica el proceso de migración de VB6 a Realbasic con la ayuda de una herramienta de migración que incluye Realbasic.
domingo, junio 12, 2005
64 bits e inyección de SQL
Con la liberación de Windows XP 64 y la liberación de los drivers para mi tarjeta inalámbrica en Linux, finalmente mi pc corre a 64 bits !!!
En el caso de Linux si existía el soporte ya desde hace bastante tiempo, pero mi tarjeta inalámbrica de red Broadcom no funcionaba en Linux, y aunque aun no existen drivers nativos para Linux, con el soporte para 64 bits del paquete Ndiswrapper y los drivers de Windows, finalmente me puedo conectar con Linux a mi red.
Por el lado de Windows, el soporte es muy reciente – hace apenas unas semanas que se libero el Windows XP64, hay una versión de evaluación en sitio de Microsoft por 180 días - el único problema que encontré es que los drivers de la tarjeta de vídeo ATI Radeon – aun en beta – no se podían instalar, fallaban con un error muy raro, y obviamente no encontré soporte por parte de ATI, así que buscando en Internet me encontré con los drivers “modificados” que alguien hizo, probé con ellos y ya puedo disfrutar de mi monitor wide-screen en Windows XP64.
En lo referente a las aplicaciones disponibles Linux le lleva una buena ventaja a Windows, ya que una gran cantidad de estas han sido modificadas/compiladas para funcionar en 64 bits, mientras que en Windows las aplicaciones son prácticamente inexistentes.
Realmente el comentar si veo alguna diferencia de rendimiento entre un SO de 32 y 64 en mi pc, seria un tanto subjetivo, ya que no ejecuto ninguna aplicación que me permita probarlo de momento; pero en base a experiencias previas – migración de aplicaciones de Unix 32 a Unix 64 -, puedo comentar que en aplicaciones que usan el CPU de forma intensiva el rendimiento puede incrementarse hasta en un 400%.
Cambiando de tema hoy tuve que conectarme a una aplicación web del Tecnologico de Tijuana para realizar una actividad, pero se me olvido que no tengo aun mi clave de acceso para mi usuario, estaba a punto de cerrar el navegador cuando se me ocurrió hacer un muy simple intento de inyectarle SQL, y funciono !!!!, pude entrar a mi cuenta, probé con la cuenta de otros usuarios y de la misma forma pude entrar !!!.
El “ataque” que realice es de lo mas sencillo, me parece un tanto increíble que el Tec haya hecho disponible esta aplicación en Internet con una vulnerabilidad tan grande; mañana lo voy a reportar para ver si lo arreglan. Lo mas triste del caso es que seguramente la realizo un alumno de Ing. en Sistemas Computacionales ya de los últimos semestres, por cierto note que la hicieron en VB.NET; pero el tremendo error hubiese existido en Java, PHP o algún otro lenguaje/tecnología, ya que el problema que presenta de inyección de SQL es un problema de mala programación y no del lenguaje.
lunes, mayo 30, 2005
El código Da Vinci
El sitio ya tiene un “teaser” de la película, la cual esta proyectada para salir el 19 de Mayo del 2006; el libro estuvo muy bueno en cuanto a la trama y como se fue todo conectando, entrelazando ficción y realidad.
El reparto de la película me parece que es muy bueno, y hasta cierto punto coincidente con los personajes del libro y los reales en relación con la nacionalidad, ya que principalmente intervienen:
Robert Langdon quien es de US, y es interpretado por Tom Hanks
Sophie Neveu, francesa y es interpretada por Audrey Tautou – la chica de la película Amelie -
Bezu Fache, francés y es interpretado por Jean Reno
Sir Leight Teabing ingles y es interpretado por Ian McKeller
Arzobispo Aringarosa, hispano radicado en US y es interpretado por Alfred Molina
Solo resta ver si la iglesia – principalmente la católica - va a lanzar su ofensiva contra esta película tal y como lo hizo con el libro; y bueno esperar que la peicula sea realmente buena.
Virtualización
Otra forma de virtualización, es mediante el uso de software, la cual en un principio se utilizaba para emular una plataforma especifica en otra (por ejemplo emular un PPC en una máquina x86). últimamente con los costos tan bajos de hardware la virtualizacion mediante software se ha puesto muy de moda, ya no para emular otras arquitecturas, sino para “dividir” los recursos de nuestra pc física en varias pcs virtuales que ejecuten diferentes sistemas operativos y/o aplicaciones.
Las ventajas de la virtualización por medio de software, es que es relativamente barato el tener varias pcs virtuales compartiendo el mismo hardware, mediante esta virtualizacion es posible para las empresas de desarrollo de software probar diferentes configuraciones y reproducir problemas de nuestros clientes. Para las áreas de sistemas la ventaja es que pueden crear máquinas virtuales para probar migraciones, o bien reducir los costos de administración manteniendo un servidor físico muy potente corriendo varias pc virtuales para cada diferente aplicación, sin que una afecte a otra; reduciendo así el numero de cajas físicas que hay que administrar y soportar.
Dentro de la lista de aplicaciones que permiten virtualizar nuestra PC se encuentran:
QEMU - El cual es open source y funciona en Linux y Windows.
PEARPC - Es open source y permite emular un CPU PowerPC en una pc X86, y funciona en Linux y Windows
Virtual PC – Es un programa de Microsoft y funciona en Windows y MacOS
VMWare Workstation - Es de la compañía VMWARE y funciona en Linux y Windows
Para la tarea de tener servidores virtuales encontramos el siguiente software:
Virtual Server - Es un programa de Microsoft y funciona en Windows
VMWare Server - Es de la compañía VMWARE y funciona en Linux y Windows
XEN – Es open source y funciona en Linux.
En lo particular encontré la virtualizacion por medio de software muy interesante, ya que puedo crear una máquina virtual, respaldarla, realizar todas las pruebas que necesito sin preocuparme de nada y finalmente reemplazarla con mi respaldo previo, y listo ya tengo otra vez una máquina virtual “limpia” para cuando la necesite.
martes, mayo 24, 2005
Más de integración de aplicaciones
Hablando de integración de aplicaciones, me encuentro que Microsoft va a participar en la conferencia JavaOne de Sun, precisamente en como Java y NET pueden inter-operar mediante el uso de los servicios Web.
Integración de aplicaciones y otras cosas.
Integración de aplicaciones
Hace un par de semanas se llevo a cabo el InnovaTec en el Instituto Tecnológico de Tijuana, en este evento participe con la platica de “Aplicaciones Distribuidas”, la cual mas bien estuvo enfocada a la “Integración de Aplicaciones”, donde comente algunos aspectos, así como ventajas y desventajas entre el uso de protocolos de comunicación como DCOM y Corba, el uso de FTP y archivos de texto, el uso de EDI y sus estándares, y finalmente el uso de los Servicios Web y los estándares de la WS-I; pues bien hace unos días en el sitio Channel9, se publico un vídeo acerca de la integración de aplicaciones, como demo se muestra como conectar una aplicación ASP.NET a un Mainframe para consultar datos, además de como integrar una aplicación que corre en Linux con el application server de BEA. No cabe duda que la integración de aplicaciones y procesos tanto internos como externos (clientes y/o proveedores), es una pieza fundamental, ya no solo en la grandes empresas, si no también en las medianas y quizás hasta para las pequeñas empresas; buscando como objetivo ser competitivos y ofrecer de un mejor servicio.
Por cierto a este respecto, resulta ser que la organización detrás del estándar X12 de EDI, ya esta trabajando en la versión X12 XML del mismo.
ASP.NET, ¿Corriendo en Java?
Mainsoft el día de hoy lanzo su producto Grasshopper, el cual permite ejecutar aplicaciones de ASP.NET dentro de un application server de Java. Grasshopper, básicamente toma el MSIL generado para la aplicación .NET y lo convierte a Java Bytecode, pudiendo ejecutar la aplicación ASP.NET en cualquier plataforma que soporte la combinación de Apache/Tomcat. Grasshopper incluye un addin que permite utilizar el Visual Studio para desarrollar la aplicación y de ahí mismo generar el código Java de la misma. Grasshopper es gratuito y además existe una versión enterprise con mayor funcionalidad, pero que tiene costo.
¿Oracle y MS SQL genéricos?
EnterpriseDB recientemente anuncio la versión beta la base de datos Postgresql, pero con compatibilidad para Oracle, es decir que se puede tomar un esquema de Oracle (Tablas, procedimientos, etc.), y sin realizarle cambios pasarlos a la base de datos Postgresql y correr la aplicación que use la base datos de Oracle apuntando a Postgresql, sin ningún problema, pero además anuncia que dentro de pronto se agregara la compatibilidad con MS SQL, obteniendo el mismo resultado que con la base de datos Oracle. EnterpriseDB le llama a estas compatibilidades “Redwood” y “Redmond” - mmm curioso, ¿alguna idea de porqué estos nombres ;) -; de esta forma se obtiene una base de datos genérica.
Curiosidades Matemáticas de Futurama.
Recientemente me encontré con este sitio dedicado a la serie Futurama de FOX – no el presidente, la cadena de televisión -; donde explica que algunos elementos de la serie que pudiesen aparentar ser puestos al azar, tienen una explicación y razonamiento matemático; esta interesante.
PD. Yo también ya vi episodio III de Starwars ;)
miércoles, mayo 11, 2005
¿Es México una amenaza para la India?
El articulo de alguna forma me recuerda lo que escribí y que se publico en el periódico El Mexicano ya hace algunos meses.
Con la reciente formación del cluster TI@Baja, existe la posibilidad de poder aprovechar las ventajas competitivas que mencione en mi articulo y las que se reconocen en el articulo del India Times, ojala se pueda llegar a cristalizar en un futuro próximo alguna oportunidad de negocios importante para la región.
viernes, mayo 06, 2005
Publicidad de Visual Studio
Realmente me encanta la publicidad que Microsoft hace al Visual Studio en la revistas, un póster de 2 paginas que muestra a un grupo de desarrolladores realizando un inmenso diagrama de un proyecto que puede abarcar varias paredes de oficinas o grandes espacios públicos.

Cualquier parecido con la vida real es "mera" coincidencia ;)
Artículo sobre Mono
El día de hoy se publico en Mentores.Net un articulo sobre Mono que escribí, coincidentemente el día de ayer se libero una nueva versión de Mono (1.1.7), de forma adicional aquí hay un documento que escribí de como compilar Mono desde el código fuente en Linux.
miércoles, mayo 04, 2005
Prodigy y la actualización de ancho de banda
En días pasados había visto en varios sitios/foros de México acerca de la posibilidad de Telmex/Telnor duplicara el ancho de banda en los servicios Prodigy; y pues aparentemente ya sucedió - por lo menos en mi caso -, hoy al descargar un archivo de 3 MB, note que lo realizo bastente rápido, en comparación a días anteriores, así que procedí a revisar la velocidad de mi conexión con la pagina bandwithtest.com y definitivamente la velocidad de mi conexión se incremento de 256kbps a 425kbps, según lo que reporto la prueba, lo que me sugiere que ahora mi conexión es de 512 kbps.
Espero que este incremento solo se vea reflejado en el ancho de banda y no en el recibo también ;).
Actualización... Aquí esta el comunicado de prensa de Telmex a este respecto.
miércoles, abril 27, 2005
Mas de software libre
Definitivamente Microsoft esta ya enfrentando una batalla comercial - espero que dentro de los terrenos éticos en ambas partes - con el software libre, ya que son varios los gobiernos alrededor del mundo que coquetean con el software libre.
Por cierto buscando en nuestro México, que relación hay con el software libre, pues fue muy sencillo saber que los sitios del gobierno federal utilizan software libre para trabajar, solo basta con mirar el sitio de la Presidencia, y buscando un poco mas nos encontramos con el sitio del Sistema de Internet de la Presidencia, donde hay una lista de los sitios desarrollados por ellos; inclusive encontré un sitio especifico de software libre patrocinado por el Gobierno de México.
lunes, abril 18, 2005
Visual Studio Beta 2
Ya desde el fin de semana había visto algunos posts de que ya estaba disponible a los subscriptores del MSDN, pero hoy parece que se hizo oficial.
Lo mas importante de el beta 2 es que incluye la licencia "Go-Live", lo que significa que se pueden empezar a realizar aplicaciones y hacerlas publicas; de hecho el hosting del ASP.NET que tengo, me envió un email informándome que me dan una cuenta gratuita, igual a la que pago actualmente, con el beta 2 hasta que Microsoft libere la versión final.
El Visual Studio 2005 Beta2, como mencione esta disponible para los subscriptores del MSDN, aunque también se pueden descargar la versiones express, o solicitar un DVD libre de costo - esto solo es disponible para Estados Unidos y Canadá -.
Junto con la versión beta Microsoft libero los ya famosos "Starter Kits", con 3 ejemplos ASP.NET y uno WinForms - ojala publicaran mas Starters kits orientados a WinForms -, ejemplos de código y los "Quickstarts"; además de una serie de vídeos de como utilizar las versiones express.
Así que no hay pretexto para no brincar al tren del Beta 2, en lo personal tengo proyectos para .Net Framework 1 y no creo que vaya a ser necesarios migrarlos, pero estoy evaluando la posibilidad de iniciar algún proyecto nuevo con .Net Framework 2.
Cambiando un poco el giro, en la escuela, inicialmente se iban a dar las materias de programación - a partir de este semestre - en C#, pero debido a que no todos los maestros lo conocen/dominan, y que el tiempo se les fue encima, decidieron continuar dando las clases con C++. Ya había programado en C y C# pero no en C++; debo de admitir que fue relativamente sencillo el interpretar/codificar C++, teniendo como base los lenguajes que mencione, aunque si encuentro todavía medio extraño el tener que escribir cout<<"Mensaje"; para desplegar algo en la consola, en lugar de un elegante Console.WriteLine("Mensaje");
lunes, marzo 07, 2005
Montar una partición a una carpeta en Windows
C:\ -> particion 1 (20GB)
C:\Mi Carpeta -> particion 2 (30GB)
Como se hace esto?
Hay que abrir la Consola de "Disk management", que se encuentra en "Control Panel" > "Performace and maintenance" > "Administrative tools" > "Computer Management". Ahí es necesario crear una nueva partición, si es que no la tenemos lista, después es necesario hacer "click" con el botón derecho del mouse y seleccionar "Properties" > "Change Drive Letters and paths" ; en la siguiente ventana hacemos "click" en "Add", seleccionamos "Mount in the following empty NTFS folder" y seleccionamos la carpeta deseada; finalmente hacemos click en todos los botones de "Ok" y listo!
Esta funcionalidad es muy util cuando se nos acaba el espacio en el disco principal y agregamos uno adicional, pero necesitamos poner en el nuevo drive una carpeta que no podemos mover simplemente con un copy, ya que hay muchas referencias a ella el registry (como por ejemplo "Program Files"), por ende moverla a un nuevo drive - o partición - nos puede causar mas problemas que beneficios. Aqui es donde entra esta funcionalidad de montar una nueva partición por ejemplo como "Program Files" y solo copiamos nuestros archivos originales a la carpeta-drive, y listo ya le agregamos mas espacio en disco a nuestra pc de forma transparente.
Hasta aquí todo se ve bien, hasta que el día hoy quize borrar una carpeta de una partición montada como carpeta, y me salió el error de: "Cannot delete Foldername: Access is denied. The source file may be in use", el cual me parecio muy extraño, ya que no tenia ningún programa abierto que estuviese usando la carpeta que deseaba eliminar, reinicie mi equipo y me aparecia exactamente el mismo mensaje, me puse a buscar por el sitio de soporte de Microsoft y me encontré con la siguiente nota:"Access Denied" When You Delete Folders from a Mounted Drive"; la cual explicaba exáctamente mi problema.
La nota explica que el Recycle Bin no sabe como manejar particiones montadas a carpetas, y por tal motivo despliega el error. El problema no tiene solución y solo proporcionan el "work-around" mediante el "shift+delete", lo cual no es aceptable ya que las carpetas eliminadas no se van al recycle bin, perdiendo toda posibilidad de rescatarlas en caso de ser necesario.
La nota tiene fecha del 21 de Noviembre del 2003, seria bueno que Microsoft liberara algún parche que haga más inteligente al recycle bin, mientras tanto, voy a tener que pensar mas de una vez cada siempre que quiera eliminar una carpeta de una partición montada.
domingo, marzo 06, 2005
Humano2, proyecto opensource

Bueno no se ve muy agradable que digamos, pero era el comienzo, después de documentarme más sobre GDI+, poco a poco empezó a verse más agradable y funcional. Actualente soporta a un Dataset como datasource, además de ser completamente flexible para cambiar cualquier elemento visual.

Se ve mejor no?
El código fuente ya se encuentra en el repositorio SVN de Humano2, en caso de que alguien quiera acceder al código.
lunes, febrero 28, 2005
Taller de Introducción a C#; El artículo UML y Mentores.NET
Para este taller la Universidad Iberoamericana, tuvo la gentileza de prestarnos un laboratorio con equipo de cómputo, e instalar el software requerido en cada pc, para que pudiesemos trabajar sin ningun contratiempo.
La verdad que la pase muy bien, y espero que haya sido de igual forma para los asistentes, además de mi deseo de que se llevaran algún beneficio de los temas que ahí vimos. Para ser sinceros la cantidad de gente que acudio (35), superó mi expectativa, la cual era de no más de 20.
Con eventos como éste, el curso de ASP.NET y el DevDays, se demuestra la convocatoria que tiene la comunidad, ojalá que también se pudiese demostrar con un poco de más actividad en los foros.
Con respecto al artículo de UML y POO, recibí un comentario de Mentores.NET, específicamente de Anthony Alvarado donde me explica el motivo de porque el artículo fué rechazado; ya lo ajuste a los requerimientos y finalmente fue publicado aquí.
Por otro lado en la escuela, salí bien librado del primer embate de exámenes, especialmente de las materiaa relacionadas con la carrrera - Ing. en Sistemas -, Que extraña coincidencia? ;)
domingo, febrero 20, 2005
Artículo UML
Comente en mi post anterior acerca de un articulo sobre Programación orientada a objetos y UML, el cual envié a Mentores.NET, pues al parecer, algo del artículo no les gustó - no se que en el email solo decia que habia sido rechazado -; así que aquí esta el artículo completo, espero que a alguien le sea útil.
Decisiones Inteligentes
Este fin de semana le dí una arreglada a mi sitio, aún no esta funcional, pero espero en los siguientes dias configurar el Community Starter Kit para terminar la parte funcional del mismo, y después poder enfocarme al contenido.
Desarrollador 5 estrellas
Al día siguiente de mi comentario del programa desarrollador 5 estrellas recibi el correo indicandome que por fin se inicia el curso este 21 de Febrero para la 3er estrella. Ahora mi pregunta es: Concidencia o casualidad? ;)
Instalación de MSDE
El día de hoy me pasó algo curioso; recientemente compré una nootebook, a la cual le instalé el SP2, el día de hoy quise instalar el MSDE en esa máquina, pero se quedaba conlgado el instalador; revise los logs de instalación y me dí cuenta que no respondia al llegar al punto de instalar el sqlredis.exe, el cual instala los componentes del MDAC. Busqué en varios lugares en Internet por una solución pero nada, habia más personas con el mismo problema; supuse que el problema podria venir de algún conflicto con el XP SP2, así que lo desinstalé, pero el instalador seguia "colgandose" en el mismo punto, después de un rato sin saber que hacer, me decidí a bajar el MDAC más reciente del sitio de Microsoft, e instalarlo manualmente, pensé que si el instalador del MSDE encontraba una versión más reciente no iba a intentar instalarlo, pero nada, seguia "colgandose" en el mismo paso, así que reemplaze el archivo sqlredis.exe con uno que no hacia nada, y la instalación finalizó correctamente. Ya funciona el MSDE en mi máquina!
Si alguen sabe de alguna solución menos radical, le agraderé que le me la haga saber.
Por cierto no se si ya se dieron cuenta o no, pero algunos archivos de descarga desde el sitio de Microsoft, ya piden que se realize una verficación para saber si el Windows de la pc es genuino o no. La forma como funciona es que se instala un programa en la pc, la cual genera un número - no se en base a que - y despues ese numero se tiene que teclear en la página para que se autorize la descarga. Este sistema aún esta en prueba y parece que por ahí de Septiembre se hará oficial.
Mono
La semana pasada Miguel de Icaza y su pandilla, liberó otra versión más de Mono, lo interesante es que la versión en desarrollo (1.1.4), incluye soporte para System.Windows.Forms y ASP.NET 2.0, además de incluir mejoras en el performance y en el consumo de memoria; como dato curioso se invita a los usuarios a dejar la versión estable (1.0.6), por la de desarrollo, dada la cantidad de mejoras que esta incluye.
martes, febrero 15, 2005
Desarrollador 5 estrellas y otras cosas
Curso: Introducción a C#
Fecha De Registro: Thursday, December 30, 2004
Curso Asignado el dia:
Examen habilitado: No Disponible
Por otro lado en la escuela nos encargaron un trabajo que explique que es UML y como se usa para modelar programas orientados a objetos. Envie el trabajo a Mentores.NET, si aceptan publicarlo, les pongo la liga, si no, lo publicare aqui en varias partes.
Por cierto hay un CD que hizo disponible Microsoft, acerca de ASP.NET 2.0 y Visual C# 2005, el disco mide 289MB y esta aqui.
Y en otro orden de ideas, desde hace tiempo he tenido la necesidad de utilizar algunos programas open source para distintas necesidades, aunque todos estos programas se originaron en Linux - a excepcion de firefox -, ahora estan disponibles en Windows, y definitivamente representan una buena alternativa contra programas que pueden ser costosos, y que se originaron en windows o mac. Asi que a continuacion les paso una lista de esos programas, espero que alguno sea util para ustedes.
- Navegador: Firefox
- Editor de images: Gimp
- Editor HTML: Nvu
- Editor de dibujos vectoriales: Inkscape
- Programa de oficina: Openoffice, y aqui esta version 2 en beta, pero que se ve muy bien
martes, febrero 08, 2005
Generador de passwords
El codigo aqui esta con algunas modificaciones que sugieren en los comentarios:
public static string CreateRandomPassword(int PasswordLength)
{
string _allowedChars = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!@$?";
Byte[] randomBytes = new Byte[PasswordLength];
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;
for(int i = 0;i<PasswordLength;i++)
{
Random randomObj = new Random();
randomObj.NextBytes(randomBytes);
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
}
return new string(chars);
}
Basicamente el codigo entra en un ciclo determinado por la longitud que deseemos que el password tenga, tomando un digito aleatorio de la cadena definida como _allowedChars.
Asi que si pasamos como parametro un valor de 10, otendremos algo similar a: EMPyhDHA7f.
Creo que es importante el que nos procupemos por tener passwords seguros, de esa forma nos hace menos vulnerables a ataques de diccionario y/o furza bruta, ya que desafortunadamente la mayoria de nosotros elegimos como passwords nombres de personas que conocemos (padres, hermanos, novias, hijos, etc), fecha de algun aniversario importante, nombre de mascotas, grupos de musica, canciones, etc.; situacion que pone en grave peligro nuestra informacion.
Por medio de esta simple rutina, es posible generar passwords de la longitud deseada, asegurandonos de que sea algo sin sentido, dificil de violar. Se que algunos diran, pero, me es mas dificil recordar una cadena sin sentido que algo que tenga significado para mi; tienen razon, pero si se trata de proteger informacion confidencial, creo que vale la pena esforzarse un poco.
Es posts posteriores voy a comentar como guardar los passwords de forma segura en una base de datos, guardando unicamente el hash del password, con lo cual nos haceguramos de que se vuelve indesifrable.
Por cierto en la escuela hay una clase llamada fundamentos de programacion, la cual realmente es programacion orientada a objetos, en la cual se usa el lenguaje C# como oficial para la clase.






