26 agosto 2008

VB.NET no tiene StrPtr o equivalente

Pues eso, que el VB.NET hasta la versión 2008 no tiene un equivalente al StrPtr del Visual Basic 6, así que en el caso del InputBox no hay forma de saber cuando un usuario ha presionado el botón y cuando ha ingresado un texto vacío.

VB6

Dim dato As String

dato = InputBox("Ingrese el dato","Título")
If StrPtr(dato) = vbEmpty Then
'El usuario ha presionado Cancelar
Else
'Lo que sea...
End If

VB.NET

Dim dato As String = InputBox("Ingrese el dato","Título")

If dato Is Nothing Then
'El usuario ha presionado el botón Cancelar
'...o ingresó un texto vacío

Else
'Lo que sea...
End If

25 agosto 2008

Este es mi escritorio de trabajo...

Creo que el título lo dice todo.

05 junio 2008

Acceder a un servidor de correo POP3 usando Telnet

Con Telnet, es posible iniciar una sesión en un servidor de correo POP3 y efectuar varias tareas como: listar los mensajes de correo, eliminarlos y verlos (en texto plano).

Esto puede servirnos para consultar nuestros mensajes desde cualquier equipo sin tener que configurar la cuenta en un cliente de correo... aunque también nos resulta util como herramienta de diagnóstico cuando desde determinado equipo no nos es posible recuperar los mensajes.


1) Para ello abrimos la consola del sistema ("Símbolo del sistema" en Win2) y ejecutamos Telnet pasándole como parámetros el servidor y el puerto correspondiente al protocolo POP3 (110). Cabe mencionar que en Win2 Vista el cliente Telnet no viene instalado de manera predeterminada en el sistema.

C:\telnet servidor.com 110

2) Una vez establecida la conexión con el servidor, éste nos dará una respuesta indicandonos que la conexión está abierta. Aquí es donde procedemos a identificarnos con la instrucción USER .

+OK servidor.com POP3 Server (Version 1.020h) ready.
user mreynoso


3) El servidor nos solicitará que le proporcionemos la contraseña para dicho usuario, lo cual haremos la instrucción PASS .

+OK please send PASS command
pass 123


4) Si el usuario no es validado correctamente el servidor nos mostrará un mensaje de error. En este caso tendremos que reintentar identificarnos enviando nuevamente la instrucción USER y la instrucción PASS.

-ERR invalid usercode or password, please try again

5) Si el usuario se validó correctamente, el servidor nos lo indicará con un mensaje similar al siguiente (en el cual nos informa que tenemos un mensaje disponible):

+OK 1 messages ready for mreynoso in /home/servidor/servidor-mail/mreynoso

6) Habiendo llegado a este punto, disponemos de las siguientes intrucciones para manipular nuestros mensajes: DELE, LAST, LIST, NOOP, RETR, RSET, STAT, TOP, UIDL y QUIT

De estas instrucciones las más utilizadas son:

  • STAT: devuelve el estado de buzón, indicandonos la cantidad de mensajes disponibles.

  • LIST: lista todos los mensajes, mostrandonos el identificador (secuencia) y el tamaño. También es posible pasarle como parámetro el identificador.

  • TOP : permite ver el encabezado del mensaje más la cantidad de líneas especificadas.

  • RETR : recupera y muestra el contenido de un mensaje, donde es el número del mensaje.

  • DELE : marca el mensaje indicado para su eliminación.

  • QUIT: cierra la sesión. Es en este momento que se eliminan los mensajes previamente marcados para ello.

23 mayo 2008

Número de fila en MySQL

Luego de buscar información en la red y de haber navegado a través de varios foros me encontré con la que me pareció la solución más bonita para obtener el número de fila en el conjunto de datos recuperado con la instrucción SELECT.

Habiendo visto varias soluciones de tipo "crear tabla temporal con un campo autonumérico" o "utilizar LEFT OUTER JOIN" me encontré con una variante de lo que a continuación expongo:

SET @i = 0;
SELECT
(@i := @i + 1) linea, nombre FROM personas ORDER BY nombre;

Estas dos instrucciones nos devolverán para todos los registros de la tabla [personas], la línea y el nombre. Si no inicializamos la variable @i (primera instrucción) el valor quedará disponible por lo que al volver a ejecutar una consulta que utilice dicha variable notaremos el resultado.

Si lo que deseamos es enumerar los registros dentro de un grupo, por ejemplo, si agruparamos a las personas por la columna [id_tipo], quedaría de la siguiente forma .

SET @tipo = 0;
SELECT id_tipo, IF(@tipo = id_tipo,@tipo := @tipo + 1,@tipo := 1) linea , nombre
FROM personas
ORDER BY id_tipo, nombre;

Una alternativa para no tener que fijar el valor de la variable en una instrucción por separado sería, agregar la subconsulta

(SELECT @tipo := 0) dummy

como aparece a continuación:

SELECT id_tipo, IF(@tipo = id_tipo,@tipo := @tipo + 1,@tipo := 1) linea , nombre
FROM personas, (SELECT @tipo := 0) dummy
ORDER BY id_tipo, nombre;


05 octubre 2007

IBM Lotus Symphony


Para aquellas personas a quienes interesa una alternativa al costoso Microsoft Office, acá tienen otra opción (gratuita): IBM Lotus Symphony

Hace algún tiempo probé el OpenOffice y es bastante funcional pero preferí quedarme con mi viejo MS Office XP. Sin embargo, luego de leer acerca de este nuevo proyecto de IBM me decidí a probarlo, y por el momento no tengo queja alguna.

Cabe mencionar que el Lotus Symphony está basado en el motor de OpenOffice y que es un proyecto conjunto con Sun Microsystems.

Continuando... he abierto documentos de Microsoft Word (.doc) y de Microsoft Excel (.xls) sin presentarme problemas. Con los nuevos formatos de de MS Office 2007 es otra historia, pero eso ya es típico en Microsoft con relación a la compatibilidad hacia atrás.

Este paquete nos ofrece muchas ventajas, tales como, exportar a formato PDF, su compatibilidad con los formatos OpenDocuments y documentos de MS Office 97/XP/2000.

De la interfaz, se puede decir que es bastante simple y a la vez atractiva... pero no todo es bonito ya que parte de los requerimientos para Windows (sí, también corre sobre Linux y pronto sobre MAC) son tener XP o Vista, además de 1GB de memoria... aunque yo lo tengo corriendo sobre 512.

Para aquellos que desconfían del código abierto por su falta de respaldo en la mayoría de los casos ...ahora ya disponen de un competidor serio para el Microsoft Office. Aclaro que a excepción del precio no tengo nada contra él (M$).