miércoles, 16 de enero de 2008

SUN Microsystems compra MYSQL AB

Se que esto no es un blog de noticias pero es referente a nuestro ambiente de desarrollo y puede influir en lo que ahora utilizamos. SUN acaba de comprar MYSQL AB por un billon de dolares, lo que son $1000000000.00 . Esto introduce a SUN en el mercado de los proveedores de bases de datos y promete darle mas atractivo comercial a MYSQL y muchas cosas, pero lo que es de ponerse a pensar es de que manera repercutirá esto en nosotros como desarrolladores? Me incluyo puesto que uso mucho MYSQL dado a que trabajo casi siempre con PHP. Pasará lo mismo que con ORACLE que tiene una gran influencia por parte de SUN? MYSQL seguirá siendo gratuito? Aqui tenemos un post de uno de los desarrolladores de MYSQL:

"Luego de toda la especulación de la industria sobre que MySQL sería un “IPO caliente de 2008″, ésto probablemente nos toma a todos por sorpresa - usuarios, comunidad, miembros, clientes, socios, y empleados. Y para todos los dueños de acciones, puede llevar un tiempo digerir qué significa ésto. Dependiendo de la relación de cada uno con MySQL, la reacción inmediata al oír estas noticias puede ser una mezcla de varios sentimientos, incluyendo emoción, orgullo, desconfianza y satisfacción, pero también ansiedad.
Siendo parte del grupo planeando éste anuncio por las últimas semanas, he tenido la fortuna de contemplar las consecuencias durante varias noches parcialmente sin dormir (generalmente duermo como un tronco). Y en los días y semanas que vienen, proveeré una serie de blogs con varios puntos de vista del asunto."

Bueno, tocará esperar a ver que rumbo toma esto.

miércoles, 9 de enero de 2008

Manipulando archivos con PHP (Parte I)

Cuando almacenamos datos, hay 2 formas de hacerlo: En archivos de texto plano o en una base de datos. Una base de datos es lo más comun, pero tambien hay veces que solo necesitamos guardar o consultar ciertas cosillas las cuales pueden manejarse en un simple archivo de texto, es por ello que voy a hacer una serie de artículos dedicados unicamente a la manipulación de archivos de texto plano (esto es, crear, escribir, modificar archivos y otras cosas mas) así que estén pendientes para verlos todos.

Abriendo archivos desde PHP.

Primeramente, para trabajar con un archivo debemos de abrirlo, para ello tenemos la función fopen() la cual tiene ciertos parámetros, de los cuales 2 son obligatorios y otros 2 son opcionales, la estructura es la siguiente:

$puntero = fopen("ruta del archivo", "permisos", ["incluir ruta"], ["protocolo"]);

Ruta del archivo: Aqui colocamos la ubicación del archivo :^) .
Permisos: Aqui establecemos que queremos que el script pueda o no hacer con el archivo, esto lo determinamos mediante caracteres los cuales tienen un significado y las posibles letras son las siguientes:
r/r+ Sirve para abrir el archivo para lectura y posicionando una especie de cursor del archivo en la parte inicial, con r+ tambien se habilita la edición.
w/w+ Sirve para abrir el archivo para escritura, pero si el archivo ya tiene datos entonces los borra para escribir de nuevo, con w+ tambien se habilita la lectura del archivo.
x/x+ Para abrir un archivo para escritura, con la diferencia de que si no encuentra el archivo en la ruta especificada, devuelve el valor false y manda tambien una advertencia, con x+ tambien se habilita la lectura del archivo.
a/a+ El mas usado quizas, sirve para editar un archivo comenzando de la parte final del archivo, con a+ tambien se habilita la lectura.
b Este se utiliza mas frecuentemente para sistemas Windows y es para mejorar la portabilidad, ya que optimiza la lectura y edicion del archivo si el SO diferencia los archivos de texto de los archivos binarios, es un modo de hacerle saber al script si esta habilitado para hacer diferencia de archivos en el servidor que trabaje.

Incluir ruta: Esto nos sirve si estamos utilizando la directiva de PHP llamada include_path para no estar ingresando la ruta del archivo, sino solo el nombre del archivo, para determinar que lo usaremos ponemos 1 o true como parámetro.
Protocolo: aqui se puede especificar un protocolo que anteceda a la ruta del archivo para trabajar con archivos remotamente.

Luego, el resultado de la función fopen() es un puntero el cual almacenamos en una variable, porque de ahi utilizaremos esa variable para editar el archivo.

Bueno, eso es todo, ya conocemos lo necesario para abrir archivos. Si digamos queremos abrir un archivo llamado texto.txt que esta ubicado en la misma ruta del script y se desea abrir para lectura y escritura con portabilidad para windows, sería de la siguiente manera:

$puntero = fopen("texto.txt", "r+b");

O si queremos adjuntar datos a un archivo que está ubicado en otro servidor al cual queremos accesar via http sería de la siguiente manera:

$puntero = fopen("aeblogs.com/docs/archivo.txt", "a+", 0, "http://");

Continuaremos pronto con la parte II, esten pendientes.

martes, 8 de enero de 2008

Curso de JAVA gratis

Bueno, no soy del tipo de personas que hagan post que solo sean enlaces a otro post o pagina que no sea del blog (ojo, no es malo, es buenisimo, solo que casi no hago eso) pero en esta vez y en otras haré una excepcion. Y es que resulta que me encontré con este magnífico curso de JAVA el cual es gratuito, y es bastante bueno ya que enseña con ejemplos bastante buenos e interesantes, he estado revisandolo y aparecen ejemplos de cosas como de elfos y duendes y cosas asi, bastante ameno, se los recomiendo, yo le daré continuidad para reforzar mis conocimientos, y bueno, este curso es cortesía de Francisco.

Este es el vínculo del curso, hasta la fecha hay 13.

http://www.milbits.com/java-uno

viernes, 28 de diciembre de 2007

Jugando con un DataGridView

Tengan un buen día, primeramente mil disculpas porque no he posteado hace ya 1 mes, pero bueno. He estado en un proyecto, y gracias a eso, he aprendido bastante (aprendí desde 0 a la fuerza) acerca de ADO.NET, ya que antes, al trabajar con acceso a datos, lo hacía de manera manual, es decir, creando la consulta, ejecutándola en la DB, guardando los resultados en un array y luego dándoles formato para mostrarlos como texto plano (en PHP aun lo hago asi XDD ) pero en .NET existe algo llamado ADO.NET que básicamente es un conjunto de librerias y clases del .NET Framework encargadas de la manipulación de datos (mas simple, el conjunto de clases que usamos para trabajar con datos de una fuente de datos, sea una DB, un XML, etc.), lo que nos permite trabajar de manera más facil con datos, ya sea realizando cambios en una DB, insertando datos, presentando datos al usuario, etc. Para ello contamos con muchos objetos que nos facilitan esto, y uno de ellos (de los mas importantes a mi parecer, y el cual ha sufrido varias transformaciones desde que salió) es el ahora conocido (desde .NET Framework 2.0) DataGridView, que básicamente es una rejilla o tabla donde podemos presentar datos de una o varias tablas o columnas de una fuente de datos, así como también posibilidad de modificar dichos datos en esa tabla y luego hacer efectivas dichas modificaciones en la fuente de dtos, eliminar o insertar registros o incluso, facilitar dicha edición o modificación de datos mediante la inserción de otros controles en el DataGridView como combobox, checkbox, etc.

En fin, esto es para los que ya tenemos una noción de lo que es ADO.NET. A lo que quiero llegar es que podemos hacer un sinfin de cosas con un datagridview, como:

Cambiar el texto del encabezado de la columna: Para esto utilizas la propiedad siguiente:

DataGridView.Columns[i].HeaderText = "";

Ocultar una columna (ojo, ocultar no eliminar):

DataGridView.Columns[i].Visible = True/false;

Les traigo mas en otro post.

viernes, 23 de noviembre de 2007

Regions en C#


Tengan un buen día. Me encuentro algo ocupado trabajando en un sistema de control de pólizas para una aseguradora, un sistema en C# 2005 con MySQL, y en equipo con un amigo mío. Este sistema es de gran complejidad, y muchas veces es tan tedioso ver una gran cantidad de líneas de código, que quisieras ocultarlas por un momento, pero en Visual Studio puedes ocultar los cuerpos de los métodos, pero que pasa si quieres ocultar un gran bloque de código? Para ello amig@s mios tenemos lo que es el uso de #region y #endregion, dos "palabras" que técnicamente son conocidas como directivas de preprocesamiento, el objetivo de estas directivas especificamente es el de rotular y poder expandir o colapsar X líneas de código fuente (esto último es posible si usamos Visual Studio o algún otro IDE que soporte esta característica) lo cual es bastante útil ya que nos permite contraer o colapsar código cuando no necesitamos leerlo, o para identificar un cierto bloque de código que haga una determinada función por ejemplo. Luego de tanta palabrería, veamos un ejemplo. Tenemos la siguiente clase:


using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using System.Collections;
using System.Data;

namespace demo2
{
class agregarAseg : conexiones.conexion
{
public string agregarReg(SortedList datosNewAseg)
{
this.datosNewAseg = datosNewAseg;
addRegistro();
return numAseguradora;
}

MySqlCommand comandito; MySqlDataReader lectorId;
string numAseguradora;
SortedList datosNewAseg = new SortedList();

private void addRegistro()
{
string strInsercion = "INSERT INTO aseguradora VALUES (null,'" + datosNewAseg["nombre"] + "','" + datosNewAseg["ubicacion"] + "','" +
datosNewAseg["numRegFiscal"] + "','" + datosNewAseg["telefono"] + "','" + datosNewAseg["fax"] +
"','" + datosNewAseg["fechaFundacion"] + "','" + datosNewAseg["numAgenda"] +
"','" + datosNewAseg["sitioWeb"] + "','" + datosNewAseg["telAsistencia"] +
"');";
comandito = new MySqlCommand(strInsercion, enlace);
conectarme();
comandito.ExecuteNonQuery();
strInsercion = "SELECT MAX(id) FROM aseguradora;";
comandito = new MySqlCommand(strInsercion, enlace);
lectorId = comandito.ExecuteReader(); lectorId.Read(); numAseguradora = lectorId.GetInt32("MAX(id)").ToString();
desconectarme();
}
}
}


Y por ejemplo, no queremos estar viendo ese sector de código donde declaramos unas variables, este sector para ser mas exactos:



MySqlCommand comandito; MySqlDataReader lectorId;
string numAseguradora;
SortedList datosNewAseg = new SortedList();


Entonces creamos una región, en la cual también vamos a poner una descripcion de ese bloque de código, lo que se hace colocando #region al principio del bloque, seguido por la descripción, y al final del bloque poner #endregion. Al final la clase queda de la siguiente manera:



using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using System.Collections;
using System.Data;

namespace demo2
{
class agregarAseg : conexiones.conexion
{
public string agregarReg(SortedList datosNewAseg)
{
this.datosNewAseg = datosNewAseg;
addRegistro();
return numAseguradora;
}
#region Aqui va el DataReader para leer los datos de la consulta, un string con la consulta y un SortedList
MySqlCommand comandito; MySqlDataReader lectorId;
string numAseguradora;
SortedList datosNewAseg = new SortedList();
#endregion

private void addRegistro()
{
string strInsercion = "INSERT INTO aseguradora VALUES (null,'" + datosNewAseg["nombre"] + "','" + datosNewAseg["ubicacion"] + "','" +
datosNewAseg["numRegFiscal"] + "','" + datosNewAseg["telefono"] + "','" + datosNewAseg["fax"] +
"','" + datosNewAseg["fechaFundacion"] + "','" + datosNewAseg["numAgenda"] +
"','" + datosNewAseg["sitioWeb"] + "','" + datosNewAseg["telAsistencia"] +
"');";
comandito = new MySqlCommand(strInsercion, enlace);
conectarme();
comandito.ExecuteNonQuery();
strInsercion = "SELECT MAX(id) FROM aseguradora;";
comandito = new MySqlCommand(strInsercion, enlace);
lectorId = comandito.ExecuteReader(); lectorId.Read(); numAseguradora = lectorId.GetInt32("MAX(id)").ToString();
desconectarme();
}
}
}





De esta manera, rotulamos el código donde declaramos las variables y al trabajar en un IDE que soporte la expansion y colapsamiento podremos ocultar ese código y ver unicamente la descripción de dicho bloque, y si queremos volver a expandirlo, veanlo en la imagen de abajo (Haga click para verla mas grande)



Espero que les sirva tanto como a mi.

viernes, 19 de octubre de 2007

Conectarme a MySQL desde aplicación .NET

Tengan un buen día. Debido a un proyecto de desarrollo de un sistema en el que me encuentro con un amigo, el cual consiste en un sistema desarrollado en C# 2005 y utilizando una DB MySQL me vi en la necesidad (y entretenimiento) de investigar como conectarme a MySQL desde una aplicación desarrollada en la plataforma .NET y luego de revisar unas cuantas, encontré una alternativa excelente llamada MySQL Connector/Net que es Open Source (ustedes pueden elegir entre descargar el instalador de la librería, la librería como tal o el proyecto para poder editar el código fuente) que además sigue el modelo de estructura que siguen las librerías de los proveedores que ya trae el .NET Framework como SQLClient (SQL Server), OLEDB (Access y otras DB), etc. En este post vamos a aprender a utilizar esta librería de forma básica haciendo un simple INSERT para dejarlos con esas ganas de seguir investigando y haciendo cosas más complejas.

Empezaré considerando que ya manejan lo que es el servidor de DB MySQL, que poseen conocimientos básicos de algún lenguaje .NET (el ejemplo está en C#) y que ya han trabajado de manera básica con DB.

Primeramente creemos una base de datos en MySQL llamada "test" con una tabla llamada "prueba" con un único campo llamado "estado" del tipo varChar(50) de la siguiente manera (yo estoy usando PHPMyAdmin pero si lo desean pueden usar el prompt window):

NOTA: Haz click en las imágenes para verlas a un tamaño adecuado.



Despues, para este ejemplo vamos a crear un usuario llamado "usuario" con el password "prueba" con privilegios sobre la DB "test" para poder ejecutar un INSERT al menos.

Luego de ello descargamos del siguiente sitio la librería nada más (la dll) de la siguiente dirección:

http://dev.mysql.com/downloads/connector/net/

Desgargamos el que dice "Binaries, no installer" y luego extraemos la dll que está en la carpeta bin y la colocamos en otro lugar, luego creamos un nuevo proyecto de Visual Studio (yo lo haré en C# pero pueden hacerlo en Visual Basic, tambien con C++) y lo que haremos será incluir la dll en nuestro proyecto, para ello nos vamos al explorador de la solución, luego click derecho en agregar referencia, luego nos saldrá un cuadro de diálogo, nos vamos a la pestaña Browse y ahi buscamos la dll en la ubicación en donde la tienen, y de ese modo se agregará al registro de Visual studio y estará ahi disponible para todos los proyectos.


Ahora estamos listos. Voy a comenzar con lo que es la lógica de la aplicación, para ello crearé una clase llamada conexion.cs que contendrá el siguiente código:


using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace mysqlconexion
{
class conexion
{

MySqlConnection enlace = new MySqlConnection("Address=localhost;Database=test;Username=usuario;PASSWORD=prueba");

public void insDatoPrueba(string commentary)
{
String strComando = "INSERT INTO prueba (estado) VALUES ('" + commentary + "');";
MySqlCommand comandito = new MySqlCommand(strComando, enlace);
enlace.Open();
comandito.ExecuteNonQuery();
enlace.Close();
}
}
}

Voy a explicar el siguiente código: Primeramente en la 4ta línea importo un namespace con la palabra "using" y el namespace es el de la librería de MySQL. Luego, en el cuerpo de la clase creo un objeto del tipo MySQLConnection el cual será el canal que se abrirá entre mi aplicación y el servidor MySQL permitiéndome realizar determinadas cosas dependiendo del usuario que la aplicación utilize (en nuestro caso, este usuario podrá ingresar únicamente a la DB test).
Para ello le pasamos ciertos parámetros utilizando el constructor (tambien podemos especificarlos en la propiedad connectionString del objeto) en forma de clave=valor, y podemos ver pares como Address=localhost; ya que estoy usando un servidor local, pero si utilizan un servidor remoto simplemente especifican ahí la URL, Database=test; que es la DB a la que nos conectaremos, Username=usuario;PASSWORD=prueba que son el usuario y contraseña que utilizará el objeto conexion para poder conectarse (valga la redundancia).
Hago un método público llamado insDatoPrueba con un parámetro llamado commentary que será el texto que vamos a insertar y que provendrá del textBox del formulario. Luego creamos lo que es la sentencia SQL que vamos a ejecutar en la DB test agregándole el texto obtenido del textBox. Despues creamos un objeto del tipo MySQLCommand el cual contiene la sentencia SQL que acabamos de crear y los métodos para poder ejecutarla, ya sea una sentencia de consulta o de alteración de datos.
Bueno, luego de llegar a esto, vemos que ya tenemos lo necesario, pero NO ESTAMOS CONECTADOS!!! XD para ello utilizamos el método open() el objeto conexión el cual toma los parámetros especificados en el constructor para intentar conectarse. Luego de esto, ejecutamos el método executeNonQuery() del objeto MySQLCommand el cual ejecuta la consulta que dicho objeto contiene, si esta consulta es INSERT, UPDATE o DELETE, ya que si es SELECT utilizamos una variable del tipo MySQLDataReader para ello, aunque eso se los dejo de tarea. Finalmente utilizamos el método close() del objeto conexion para cerrar el enlace, por cuestiones de seguridad debe ejecutarse siempre este método al finalizar.
Luego nos vamos a crear el formulario, para ello agregamos un botón y un textbox llamados btnInsertar y txtComentario respectivamente. Luego damos doble click al botón para agregar el código para que genere una instancia de la clase conexion y ejecute el método insDatoPrueba() pasándole como parámetro el texto escrito en el textBox, el cual es (este código va dentro del evento onClick de btnInsertar):

conexion obje = new conexion();
obje.insDatoPrueba(this.txtComentario.Text);

Finalmente, ejecuten la aplicación y verán el resultado. Aquí les dejo lo que hice, un archivo .rar el cual contiene el proyecto de Visual Studio, luego para que funcione deberán crear la DB tal como en este ejemplo, descargable >>AQUI<<. Cualquier pregunta no duden en hacerla mediante los comentarios al post.

sábado, 29 de septiembre de 2007

Visita del Sr. Erick Esquivel, Academic Developer Evangelist de Microsoft

Tengan todos un buen día. Las cosas parecen tener un buen panorama en el ámbito académico en El Salvador, y es debido a que tuvimos la visita de el nuevo Academic Developer Evangelist encargado de El Salvador, Guatemala y Honduras, el Sr. Erick Esquivel, con el propósito de continuar con las llamadas "Células Académicas Microsoft" en El Salvador, las cuales lamentablemente se han visto truncadas por acciones erróneas por parte de ciertos entes educativos.

Pero, afortunadamente la visita de este señor de origen guatemalteco nos motiva y nos permite continuar utilizando un nuevo enfoque de trabajo que va a permitir la integración de todas las universidades, por ahora, del área central del país, y, quien sabe, con el trabajo que se va a empezar a hacer podremos trabajar también con las personas de las universidades aledañas.

Esto, considero yo, que es muy importante tanto para mí como para los estudiantes de El Salvador, pues actualmente no tenemos movimientos académicos fuertes de este tipo y gracias al apoyo que nos estará brindando el Sr. Esquivel podremos comenzar con una nueva era de los grupos académicos de Microsoft, lo cual pienso que es algo de bastante trascendencia pues el hecho de trabajar en este tipo de cuestiones es lo que al final nos va a hacer sobresalir entre la gente común, no lo digo en forma de discriminación o por ser despectivo, sinó porque la mayoría de personas se conforman con lo normal, vivir una vida normal, hacer cosas normales, pero la verdad es que en este mundo, lo único que vamos a lograr siendo normales es ser cualquiera en un mundo que está liderado por personas que salen de los estandares de lo común, por lo que aprovecho para incentivar a todas las personas, no importa que sean unos adictos del desarrollo y de las tecnologías como yo o que tengan otras orientaciones tales como leyes, administración, economía, ciencias sociales, etc. Que tratemos de sobresalir, no nos conformemos a ser como cualquiera, participemos de actividades referentes a nuestros gustos, hagamos cosas que nadie hace con el propósito de ganar conocimiento, enfoquemonos en estudiar lo que nos interesa, y muchas otras cosas.

También, para toda la gente de mi tierra El Salvador que visita mi blog, y que deseen estar al tanto de esta nueva era de los grupos académicos, pueden estar al tanto visitando nuestro forouniversitario donde podrán ver información de futuros eventos a realizarse, concursos, etc. E incluso, para quienes compartan nuestra afición, podrian hasta formar parte de este grupo.





Algunos miembros del Core Group de las células Académicas Microsoft en El Salvador.




Al centro, el Sr. Erick Esquivel.