jueves, 31 de enero de 2008

Excel y Visual Basic .Net

Muchas veces resulta útil acceder a datos de Excel desde una aplicación Visual Basic, ya sea para leer datos o para exportar información que ha sido procesada por el programa. Hacerlo es muy sencillo: basta con agregar la referencia de Excel y escribir un sencillo código.

Lo primero es agregar la referencia a Microsoft Excel. Para ello hay que ir a las propiedades del proyecto, pinchar en referencias, agregar, buscar las de tipo COM y seleccionar de la lista
Microsoft Excel 11.0 Object Library.

Ahora, con este sencillo código tendremos acceso a Excel:

Dim m_Excel As Microsoft.Office.Interop.Excel.Application
Dim strRutaExcel As String

strRutaExcel = "C:\libro.xls"

m_Excel = CreateObject("Excel.Application")
m_Excel.Workbooks.Open(strRutaExcel)
m_Excel.Visible = False 'Dejamos el libro oculto

'Mostramos el valor de la celda 1,1 del primer libre
MsgBox(m_Excel.Worksheets("Hoja1").Cells(1, 1).Value)

'Escribir en una celda
m_Excel.Worksheets("Hoja1").cells(3, 3).value = "prueba"

'Guardamos los cambios del libro activo
m_Excel.Application.ActiveWorkbook.Save()
'Nota: Hay una instruccion como esta:
m_Excel.Application.ActiveWorkbook.SaveAs

'Eliminamos la instancia de Excel de memoria
If Not m_Excel Is Nothing Then
m_Excel.Quit()
m_Excel = Nothing
End If

Espero que os sea útil. Hoy día Excel está muy extendido y bastante a menudo tengo que recurrir códigos como este para poder conectar Microsoft Excel con algún programa de Visual Basic.

miércoles, 30 de enero de 2008

Codigo fuente en Visual Basic de un cibercafe

Aqui han publicado el código fuente en Visual Basic 6 para controlar un Cibercafé. No tiene mala pinta, a si que, si eres un propietario de uno de estos locales y te gusta programar quizá te sirva de ayuda.

Error 20997 del Crystal Reports

Llevo varios días detras del error 20997 del Crystal Reports para Visual Basic 6. No es problema de ninguna dll, ocx (Crystl32.ocx) ni nada por el estilo. Al final, es tan simple como comprobar que existe la ruta del informe y que los permisos son correctos. El problema es que la descripción del error no tiene mensaje, y son un montón de interrogaciones seguidas (??????). A si que, si te da el error, comprueba la ruta del informe de Crystal Report por si ese fuese el error.

martes, 29 de enero de 2008

Como comprobar una direccion IP con TryParse

Una de las utilidades que nos proporciona el método TryParse consiste en poder comprobar si una cadena es una dirección IP válida. Ya no es necesario separar la cadena por los puntos, mirar si cada intervalo está dentro de un rango... ahora, con un sencillo código, y gracias a TryParse, podemos saber si una cadena es una direción IP válida. Veamos el código:

Dim ipString As String
Dim address As IPAddress
Dim returnValue As Boolean

ipString = "213.22.24.25"
returnValue = IPAddress.TryParse(ipString, address)

MessageBox.Show(returnValue)
De hecho, si cambias la dirección IP y pones algo como "289.21.22.22" verás como tryparse te dirá que no es correcta (devolverá un false). Una forma muy sencilla de comprobar si tenemos una dirección IP válida (sirve tanto para Visual Basic .Net como para C#). Ojo: este método es nuevo en .Net Framework 2.0.

Descarga Visual Studio 2008 Express


Ya es posible descargar las versiones Express de Visual Basic 2008. No son las versiones completas, pero sirven para tener una idea de las novedades y las mejoras que esta nueva versión aporta al lenguaje.

Hay dos enlaces disponibles:

- La web oficial de Microsoft.

- Todas las versiones Express desde un fichero iso.

Para todos aquellos interesados, deciros que estas descargas incluyen Visual Basic 2008 Express Edition, Visual Web Developer 2008 Express Edition, Visual C# 2008 Express Edition y Visual C++ 2008 Express Edition.

lunes, 28 de enero de 2008

El Handles de Visual Basic .Net

Una de las cosas que te llaman la atención cuandol te pasas de Vb6 a Visual Basic .Net es que en todos los eventos aparece la claúsula Handles. Por ejemlo, en el código de un botón tenemos:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

¿Y que es eso del Handles? Pues muy fácil, antiguamente, si cambiabas Button1_Click por cualquier otra cosa el compilador de Visual Basic se hací un lío y no sabía que ese trocito de código era el que tenía que ejecutar cuando se hace click en un botón. Ahora, en Visual Basic .Net puedes ponerle el nombre que quieras, porque el compilador sabe que es en click del botón (todo gracias al Handles). Es decir, el handles es el que le indica al compilador de que evento se trata, permiténdote cambiar el nombre (de todas formas, no te lo recomiendo).

Pero lo peor es cuando un día, misteriosamente, te desaparecen todos los Handles de todo el código y el compilador no sabe ni donde esconderse. Solución: escribir los Handles a mano.

domingo, 27 de enero de 2008

Ofuscar en Visual Basic .Net

Hace unos cuantos posts veíamos lo sencillo que resultaba decompilar un ejecutable realizado en Visual Basic .Net (para Visual C# resulta igual de sencillo).

Por tanto, para evitar que algún curioso tenga a su disposición el código fuente de nuestra aplicación deberemos ofuscar nuestro programa. ¿Y que es ofuscar? Pues básicamente ofuscar consiste en ocultar ese código MSIL intermedio haciéndo dificil su lectura con un decompilador como Reflector (fijaros que he dicho difícil y no imposible). Para ello utilizaremos Dotofuscator, el ofuscador que trae Visual Studio 2005. Veamos un ejemplo:

Tenemos un simple ejemplo de un botón con un Hola Mundo. Si decompilamos este pequeño ejemplo con un decompilador como Reflector tendremos acceso completo a todo su código fuente:



Para evitar esto y conseguir que alguien que utilice un decompilador no consiga ver nuestro código fuente utilizaremos Dotofuscator, un ofuscador de código que viene con Visual Studio 2005. Para ello, deberemos seguir los siguientes pasos:

1) Generar nuestro proyecto (Menú generar del Visual Studio).
2) A continuación, buscamos el icono del Dotofuscator Community dentro de nuestra carpeta de programas (dentro de la carpeta Visual Studio Tools). Es necesario que tengamos Visual Studio abierto para poder ejecutar Dotofuscator o no nos dejará cargarlo.



Una vez cargado el Dotofuscator seleccionamos la opción de crear un nuevo proyecto y a continuación vamos al icono de la carpeta para abrir nuestro proyecto.



Ahora seleccionamos nuestro ejecutable de la carpeta bin\Release. En nuestro ejemplo HolaMundo.exe



Una vez cargado nuestro ejecutable (vemos como nos aparece en la pestaña de Entrada) lo único que tenemos que hacer es hacer clic en el botón play para que Dotofuscator comience su trabajo.



Cuando comencemos a ofuscar el programa nos indica si deseamos guardar el proyecto. Le decimos que sí y escribimos una ruta donde almacenaremos el fichero xml con los datos del proyecto de ofuscación. Tras esperar unos momentos, Dotofuscator mostrará una pantalla resumen donde indica los resultados de la ofuscación, mostrando el porcentaje de cambio e información del proceso:



A continuación sólo nos queda ir a la ruta donde hemos almacenado el xml del proyecto de ofuscación y abrir la carpeta Dotfuscated. Esta carpeta tendrá dos archivos:

-El exe con el mismo nombre que nuestro proyecto (HolaMundo.exe) pero ofuscado.
-Un archivo llamado map.xml que tiene la correspondencia de variables, funciones, etc… de nuestro código fuente con las que Dotofuscator escribe. Es decir, si necesitamos ver por que valor ha modificado un nombre de una función sólo tendremos que mirar dentro de este archivo de correspondencia. Por supuesto, este fichero xml no deberá ser distribuido o la ofuscación no será efectiva.

Por último, copiaremos el fichero exe que tenemos en esta carpeta de Dotfuscated en nuestra carpeta Release del proyecto y tendremos nuestro proyecto ofuscado y listo para ser distribuido.

Si queremos comprobar el resultado de la ofuscación sólo nos queda cargar Reflector y comprobar los efectos (cargaremos en el decompilador el exe que acabamos de obtener tras la ofuscación):



Para terminar, os recomiendo que todos aquellos programas o proyectos que tengáis intención de distribuir los ofusqueis y así evitareis que algún curioso tenga a su disposición un código fuente que no debería tenerlo (siempre y cuando esa sea vuestra intención).

Como Hacer Instalables En .Net

Tras muchas horas de arduo trabajo, cualquier desarrollador llega al mismo punto ¿como distribuyo la aplicación que acabo de construir? Visual Studio 2005 nos proporciona una herramienta sencilla para esto. Eso sí, es muy recomendable que antes hayas ofuscado tu ejecutable para evitar miradas indiscretas. Si no sabes muy bien como hacerlo puedes pasarte por aqui para hacerlo.

Para poder hacer correctamente un instalable es necesario que hayamos generado el proyecto y que tengamos todo aquello que necesitamos en la carpeta bin\Release.

Lo que haremos a continuación es abrir el Visual Studio 2005 y seleccionar crear un nuevo proyecto con las opciones de otros tipos y asistente para proyectos de instalación. Deberemos escribir el nombre y la ruta donde almacenaremos el instalador de nuestro programa. Es muy importante que escribamos correctamente el nombre del proyecto puesto que luego ese nombre será el que se utilice en la ruta por defecto que el instalador propondrá cuando queramos instalar nuestro programa.



Tras pulsar Aceptar nos aparecerá un asistente con unas opciones básicas para configurar nuestro instalador. En la primera de ellas deberemos seleccionar el tipo de instalador que necesitamos. En nuestro caso será Crear un programa de instalación de una aplicación para Windows, puesto que nuestro programa se distribuirá siguiendo este esquema.



Lo siguiente que deberemos es incluir todos los archivos que tengamos en la carpeta bin\Release de nuestro proyecto, ya que ahí están contenidos todos los archivos necesarios para que nuestro programa funcione correctamente.



Ahora solo nos queda pulsar el botón de Siguiente y el de finalizar. Con esto, tendremos un proyecto de instalable en el que podremos generar nuestro instalable. Sólo nos queda ir al menú de Generar y seleccionar Generar HolaMundo.



Por último sólo nos queda ir a la carpeta de destino del proyecto, subcarpeta bin, subcarpeta Debug y tendremos nuestro instalable listo para que nuestro programa se pueda distribuir:



Algunas cosillas que permite este proyecto de instalación:

- Se puede cambiar la ruta de instalación en la propiedad productname
- Podemos añadir iconos de acceso directo al escritorio y crear carpetas de programa con nuestros accesos directos.
- El proyecto de instalación está configurado para que detecte si tenemos .Net Framework instalado. En el caso de que no está lanzará una descarga del framework desde la página de Microsoft, aunque podemos cambiar esta opción y preparar esta descarga desde otra ruta (como nuestro servidor por ejemplo) o una ruta local (como una carpeta de un cd).
- Por defecto, el proyecto de instalación no incluye el icono de nuestra aplicación. Deberemos agregar el icono como un archivo más de nuestra instalación y cambiar el icono de aquellos accesos directos que tengamos.
- Podemos incluir más pantallas en nuestro instalable. Para ello iremos al menú Ver -> Interfaz de usuario y seleccionar el tipo y orden de las mismas. Si nos interesa, podemos añadir un banner mediante un bmp con nuestro logo en las pantallas de instalación.
- Para cada archivo de la instalación podemos configurar unas cuantas opciones dependiendo del tipo que es.
- Por supuesto, el archivo de instalación crea una entrada en Agregar/Quitar programas del panel de control para que nuestro programa se pueda desinstalar correctamente del ordenador.

Net Framework 3.0


Ultimamente se está hablando mucho en distintas partes sobre el nuevo .Net Framework 3.0 (cuyo codename será Orcas). Muy por encima, .Net Framework 3.0 consiste en la evolución natural de la versión 2.0, esto es, se van a añadir a la versión actual una serie de componentes para mejorar el Framework. Estos componentes se dividen en cuatro grandes grupos:

- Windows Presentation Foundation (WPF): Nos permitirá consustrir aplicaciones realmente espectaculares, ya que nos proporcionará clases para combinar interfaz de usuario, documentos y medios.

- Windows Workflow Foundation (WF): Un modelo de programación, motor y herramientas para construir aplicaciones habilitadas para flujos de trabajo que modelan procesos de negocio.

- Windows Communication Foundation (WCF): Un modelo de pogramación unificado para construir aplicaciones orientados a servicios.

- Microsoft Windows Cardspace (antes InfoCard), tecnología para simplificar y mejorar la seguridad al acceder a recursos y compartir información personal de identidad en línea.


Aqui te dejo varios enlaces por si quieres seguir ampliando conocimientos sobre el nuevo .Net Framework 3.0:

Microsoft .Net Framework 3.0 Community
.Net 3.0 Download
Windows Presentation Foundation (WPF)
Windows Communication Foundation (WCF)
Windows Workflow Foundation (WF)

Y si quieres ejemplos o tutoriales siempre puedes visitar la fantástica página de ElGuille:

.Net 3.0 en ElGuille

Como saber si existe un directorio en Visual Basic .Net

Haciendo un pequeño desarrollo me surgió la necesidad de comprobar si un directorio (una ruta) que puede parametrizar el usuario exista en el sistema. Es decir, el usuario escribe una ruta donde se van a almacenar ficheros temporales y necesitaba saber si el directorio existe, no sea que el usuario escriba c:\petete y luego el programa no funcione porque petete no existe.

La primera solución que se me pasó por la cabeza fue intentar crear un fichero (escribiendo cualquier cosa en él y luego borrarlo) en esa ruta; si funciona pues es que el directorio existe, pero si falla (controlando el error claro), pues que no existe. Pero esta solución "de andar por casa" no me gustaba mucho y por su puesto, no es nada elegante. A si que me dije: seguro que el framework tiene alguna función que me permite comprobar si un directorio existe.

Y efectivamente, la solución es Directory.Exists. Con este sencillo método (la que únicamente tienes que pasarle la ruta) podrás comprobar si una ruta existe o no (y por supuesto, es mucho más elegante). Aquí tienes el código:

Imports System.IO
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim ruta As String

ruta = "c:\petete"

If Directory.Exists(ruta) Then
MessageBox.Show("El directorio existe")
Else
MessageBox.Show("El directorio no existe")
End If

End Sub

sábado, 26 de enero de 2008

Comparación entre Visual Basic 2008 Standard y Professional

En esta url de Microsoft teneis una comparación entre las partes comunes y las diferencias de la versión standard de Visual Studio 2008 y la professional. Una página interesante si está buscando cual de las dos versiones se adapta más a tus necesidades.

viernes, 25 de enero de 2008

Improving .NET Application Performance and Scalability


Improving .NET Application Performance and Scalability es un fantástico libro (que puedes descargar libremente de la web de Microsoft) que trata sobre como mejor y optimizar tus aplicaciones .Net.

Una guía muy completa que cubre casi todas las necesidades de mejora que puedas necesitar, desde el momento en el que se comienza a diseñar una aplicación, pasando por la fase de pruebas y, por supuesto, las optimizaciones que se pueden realizar internamente en el código según las tecnologías que utilices: código manejado, ASP.NET, Enterprise Services, Web services, ADO.NET, XML, and SQL Server.

Personalmente, las partes mas jugosas del libro son las que tienen que ver con la mejora interna del código (basado en .Net Framework), y para ello tenemos un capítulo realmente extenso dedicado al tema:

Chapter 5, "Improving Managed Code Performance"
Chapter 6, "Improving ASP.NET Performance"
Chapter 7, "Improving Interop Performance"
Chapter 8, "Improving Enterprise Services Performance"
Chapter 9, "Improving XML Performance"
Chapter 10, "Improving Web Services Performance"
Chapter 11, "Improving Remoting Performance"
Chapter 12, "Improving ADO.NET Performance"
Chapter 13, "Code Review: .NET Application Performance"

Además, cada uno de estos capítulos se complementa con una checklist, una lista de tareas que nos permiten comprobar si hemos ido cumpliendo todos los estándares que propone la guía. Por último, una serie de howtos realmente interesantes:

"How To: Improve Serialization Performance"
"How To: Monitor the ASP.NET Thread Pool Using Custom Counters"
"How To: Optimize SQL Indexes"
"How To: Optimize SQL Queries"
"How To: Page Records in .NET Applications"
"How To: Perform Capacity Planning for .NET Framework Applications"
"How To: Scale .NET Applications"
"How To: Submit and Poll for Long-Running Tasks"
"How To: Time Managed Code Using QueryPerformanceCounter and QueryPerformanceFrequency"
"How To: Use ACT to Test Performance and Scalability"
"How To: Use ACT to Test Web Services Performance"
"How To: Use Custom Performance Counters from ASP.NET"
"How To: Use CLR Profiler"
"How To: Use EIF"
"How To: Use SQL Profiler"

Sin duda un gran libro, tanto en contenido como en su extensión (son más de 1000 páginas) que se adentran en la parte del código explicando porqué es mejor hacer unas cosas en lugar de otras según las necesidades siempre desde el punto de vista de la optimización de los programas. Una gran guía que todo desarrollador debería tener en cuenta.

jueves, 24 de enero de 2008

Teamviewer - Control remoto gratuito


Muchas veces suele suceder que tras desarrollar un programa, lo instalas en el clientes y plaf!!! un error que a ti no te pasa. Lo peor es cuando el error es imposible reproducirlo en tu máquina, y por alguna extraña razón, sólo ocurre en el ordenador de cliente. En este momento siempre te preguntas ¿y si lo pudiese ver?

Pues ahora puedes, porque tienes una aplicación gratuita (siempre y cuando no la utilices con propósitos comerciales) llamada Teamviewer que te permite realizar una sesión de control remoto del ordenador, compartir su escritorio e incluso, transferencia de ficheros. Es decir, te puedes conectar al ordenador del cliente de forma sencilla y verlo desde el tuyo, manejando su ratón y así realizar control remoto. Además, sólo necesitas bajarte un exe y tras ejecutarlo (incluso no necesita instalación) basta con que escribas el código de sesión y la contraseña que te proporciona tu cliente y listo!!, tendrás en tu pantalla una sesión de control remoto del otro ordenador.

Una buena herramienta que te ahorra mucho trabajo (del estilo del Inquiero o Netretina) que es gratuita siempre y cuando no la utilices con propósitos comerciales, que te permitirá comprobar porque tu programa falla y así, poder corregir ese pequeño bug que no habías detectado.

miércoles, 23 de enero de 2008

Programar en Ruby y .Net Framework

IronRuby es un proyecto basado en Ruby 1.8.x que te permite utilizar aplicaciones Ruby e integrarlas con la infrestructura y las librerias de .Net Framework. Además, está licenciado bajo la Microsoft Permissive License, lo que significa que puedes ver el código de fuente para su estudio (es decir, el código fuente está disponible), aunque no podrás modificarlo (es una licencia más restrictiva que la GPL).

Según se comenta, el nivel de integración entre Ruby y .Net Framework permiten utilizar Silverlight así como crear poderosas aplicaciones en Ruby. En infoq tienes una entrevista muy completa con Scott Guthrie, el creador de RubyCLR (IronRuby). Una gran noticia para todos los aficionados a este lenguaje de programación que tantos adeptos está ganando en los últimos tiempos.

martes, 22 de enero de 2008

Conversiones entre formatos de variables (TryParse)

Los que solemos programar en Visual Basic .Net estamos acostumbrados a utilizar una serie de funciones y métodos que nos proporciona el propio lenguaje, pero que sin embargo no aparecen en otros lenguajes soportados por el framework (como C# por ejemplo).

Una de estas funciones es isnumeric(), una auténtica joya que te decie si una variable es numérica o no. Pero ¿existen alternativas? Pues si. En otros lenguajes (y en Visual Basic .Net también) tenemos tryparse, un método que se le aplica al tipo de la variable y que te dice si la variable es numérica o no. Veamos un ejemplo:

Dim s As String
Dim result As Double
Dim returnValue As Boolean

s = "cadena"

returnValue = Double.TryParse(s, result)

MessageBox.Show(returnValue)

En este caso tryparse nos devuelve false porque la variable s es una cadena y no se puede convertir a double. Dicho de otro modo, lo que hacemos con tryparse es intentar "parsear" la variable a otro tipo y ver lo que pasa. Algo así como ¿puedo cambiar la variable s a double?. Si se puede, tryparse nos devuelve un true, y si no se puede (como este caso), nos devuelve false. De hecho, en este ejemplo, si cabiamos el valor de s por un "2" veremos que tryparse nos devuelve un true.

Como veis, es otra manera de realizar un isnumeric que casi todos los programadores de Visual Basic solemos utilizar a diario.

Este método de tryparse se encuentra en muchos tipos de datos, y si buscais en la ayuda del msdn vereis que tenemos:

Int16.TryParse
Byte.TryParse
SByte.TryParse
DateTime.TryParse
Double.TryParse
Int32.TryParse
Decimal.TryParse

lunes, 21 de enero de 2008

Como buscar un item en un listview

Para este sencillo ejemplo necesitamos un listview y un simple botón. Es muy importante ir a las propiedades del listview y seleccionar la propiedad view a detalles, para que el listview nos aparezca en forma de lista.

La idea de este ejemplo es hacer un sencillo mecanismo de búsqueda en el listview que permita encontrar un item dentro del listview, o lo que es lo mismo, buscar un elemento en la lista de datos que tenemos. ¿Y como lo hacemos? Muy sencillo, utilizando el método FindItemWithText que nos proporciona Visual Basic .Net.

Además, este método nos permite buscar por los comienzos de la cadena, de manera que si no escribes la palabra completa, la búsqueda se situará en el primer elemento que la cumpla. Veamos el código:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim item As ListViewItem

'Inicializamos el listview
ListView1.Items.Clear()
ListView1.Columns.Clear()

ListView1.Columns.Add("Animal", "", 400)

'Cargamos algunos elementos
item = New ListViewItem
item.Text = "Perro"
ListView1.Items.Add(item)

item = New ListViewItem
item.Text = "Avestruz"
ListView1.Items.Add(item)

item = New ListViewItem
item.Text = "Loro"
ListView1.Items.Add(item)

item = New ListViewItem
item.Text = "Canario"
ListView1.Items.Add(item)

item = New ListViewItem
item.Text = "Gato"
ListView1.Items.Add(item)


End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim itmx As ListViewItem

itmx = ListView1.FindItemWithText("Canario")
If Not itmx Is Nothing Then
itmx.Selected = True
itmx.ForeColor = Color.Red
itmx.EnsureVisible()
End If

End Sub
End Class
Como ves, el ejemplo es muy simple, A FindItemWithText le tienes que pasar el texto que quieres buscar y el elemento que cumpla las condiciones se pondrá en rojo y el listview se moverá hasta el (de eso se encarga el EnsureVisible).

Por último, decirte que este método es tremendamente rápido, y consigue buscar información mucho más velozmente que si la búsqueda la haces con un bucle while. Para ello, puedes hacer la prueba cargando un un listview miles de items.

domingo, 20 de enero de 2008

Posters de tecnología de Microsoft (o como tener una chuleta de programación)

Impresionante colección de posters de programación de Visual Basic, Windows Server 2008, BizTalk, C#, Microsoft.NET Framework, Windows Server 2008 Active Directory, Windows Server 2003, Exchange Server, BizTalk Server, SharePoint Portal Server, Microsoft CRM y mucho más.

Una chuleta más que imprescindible para cualquier programador, con los shorcuts (accesos rápidos) de los diferentes lenguajes de programación de Visual Studio .Net que te ahorrarán mucho tiempo. Además, están en formato pdf, listos para descargar e imprimir.

Siempre resulta una buena ayuda tener al lado del teclado una ayuda rápida con las funciones y teclas más comumente utilizadas.

sábado, 19 de enero de 2008

Recursos de F#

F#, la implementación de Microsoft del lenguaje funcional, compatible con la plataforma .Net Framework, va ganando adeptos día a día. Y prueba de ellos es la impresionante colección de recursos que ha reunido Angel Lopez sobre el lenguaje.

Pero ¿que es F#? Pues bien, F# es un lenguaje de programación funcional nacido como una variante del ML y de OCaml originariamente creado por Dom Syme y actualmente integrado dentro de .Net Framework y auspiciado por Microsoft.

Ultimamente oigo mucho hablar de este tipo de lenguajes de programación, a si que quizá me dedique a aprender algo más de ellos. De momento, algunos ejemplos de este lenguaje:


(* This is a comment *)
(* Sample hello world program *)
printf
"Hello World!"





>#light

open Microsoft.FSharp.Collections.List
(* print a list of numbers recursively *)

let rec printlist lst
=
(* When using "#light", you must indent with 4 spaces *)
if lst = []
then ()
else printf "%d\n" (nth lst 0)
printlist (tl lst)



(* Same thing,
using matching against list elements *)

let rec printlist l
=
match l with
[] -> ()
h :: t -> printfn
"%A" h
printlist t

jueves, 17 de enero de 2008

Como comprobar ciertos caracteres al escribir en una textbox

Una de las formas más sencillas que existen para evitar que nuestro programa produzca errores por una entrada de datos errónea consiste en controlar que caracteres escribe el usuario, dejándole que sólo aparezcan aquellos que nos interesan.

Dicho de otro modo; imaginemos que tenemos una textbox donde pedimos un número de teléfono. Para evitar un error, lo más sencillo consiste en hacer que la textbox sólo permita escribir números. Además de evitar errores, obtenemos una aparecia mas profesional para nuestro programa y conseguimos que los datos estén mas depurados.

¿Y como hacemos esto en Visual Basic .Net? Pues muy sencillo. Nos vamos al evento keypress de la textbox y miramos el carácter ascii que ha pulsado el usuario, modificando la salida de datos si no es correcto. Es decir, si el usuario escribe un carácter que no es válido, lo que hacemos es capturar el evento y enviar un carácter vacío. Veamos el código (en el ejemplo sólo se dejamos escribir en la textbox letras de la a -> z, A -> Z y del 0 al 9).

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

Dim strLetra As String
Dim blFlag As Boolean = False

strLetra = UCase(e.KeyChar)

'Miramos si está en el rango permitido
Select Case Asc(strLetra)
Case 97 To 122 : blFlag = True 'Es letra de la a -> z
Case 65 To 90 : blFlag = True 'Es letra de la A -> Z
Case 48 To 57 : blFlag = True 'Es un número 0 -> 9
Case Else : blFlag = False
End Select

If blFlag = False Then
'Indicamos que la tecla la manejamos nosotros
e.Handled = True
'El caracter no es valido -> enviamos un carácter vacío
SendKeys.Send("")
End If

End Sub
Como veis, la idea es muy sencilla. Miramos que tecla ha pulsado el usuario, comprobamos si es correcta y en caso de que no lo sea, capturamos el evento de la tecla (el handled=true) y enviamos un carácter vacío. Si lo probais, vereis que el efecto es realmente bueno.

Hasta aquí estupendo.... pero.... ¿y si el usuario se equivoca y pulsa la tecla de retroceso? Claro, la tecla de retroceso no está contemplada dentro de las teclas válidas, a si que con una sencilla modificación le diremos a Visual Basic .Net que esta tecla también es correcta:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

Dim strLetra As String
Dim blFlag As Boolean = False

strLetra = UCase(e.KeyChar)

'Miramos si está en el rango permitido
Select Case Asc(strLetra)
Case 97 To 122 : blFlag = True 'Es letra de la a -> z
Case 65 To 90 : blFlag = True 'Es letra de la A -> Z
Case 48 To 57 : blFlag = True 'Es un número 0 -> 9
Case 8 : blFlag = True 'Tecla de retroceso
Case Else : blFlag = False
End Select

If blFlag = False Then
'Indicamos que la tecla la manejamos nosotros
e.Handled = True
'El caracter no es valido -> enviamos un carácter vacío
SendKeys.Send("")
End If

End Sub
Espero que os haya sido útil. Como os comentaba al comienzo del post, esta es una de las mejores maneras de comprobar que los datos introducidos son correctos. Normalmente lo suelo utilizar en números de teléfono, fax, dni, códigos de barra y así me evito tener que realizar multitud de if llenos de comprobaciones para ver si el formato es correcto. Happy coding amigos!!!

miércoles, 16 de enero de 2008

Novedades del nuevo Visual Studio 2008


Ya está disponible la nueva versión de Visual Studio; Visual Studio 2008, que podéis descargaros y probar aquí, aunque habrá que esperar al 1 de febrero del 2008 para tener disponible la versión en castellano. De momento, tenemos las novedades:

1 - Trabajar con datos de forma unificada e integrada: mayor productividad usando el nuevo LINQ, un único modelo de "queries" para acceder a datos XML, SQL y otros objetos de datos.
2 - Facilita la interacción entre desarrolladores y diseñadores: excelente integración entre Visual Studio 2008 y las familia de herramientas de diseño Microsoft Expression.
3 - Las más modernas tecnologías de interfaz de usuario en la Web: soporte integrado del nuevo framework Ajax de Microsoft, controles ASP .Net y soporte nativo de sindicación RSS y REST.
4 - La mejor herramienta de desarrollo para Windows Vista: permite al programador sacar el máximo provecho de las nuevas características de Windows Vista en general y en particular integración directa con las librerías WPF.
5 - Software de más calidad: nuevas funcionalidades de depuración de aplicaciones ahora directamente integradas en Visual Studio 2008.
6 - Excelente soporte para escribir aplicaciones Web: los editores HTML y CSS han sido muy mejorados. Soporte JavaScript revolucionario, incluyendo IntelliSense y depuración!
7 - Aplicaciones compatibles con distintos frameworks .Net: Visual Studio permite compilar aplicaciones que corran en .Net 2.0, 3.0 y 3.5.
8 - Desarrollo de aplicaciones Office: Visual Studio incluye herramientas para escribir muy fácilmente complementos a las aplicaciones de Microsoft Office (Outlook, Excel, Word...)
9 - Workflow y comunicaciones: Visual Studio incorpora herramientas que permiten modelar y desarrollar la lógica de negocio de la aplicación vía soporte integrado de WWF y WCF.

Bienvenidos a Escritor de código

El primer post siempre es un poco complicado, pero vamos con ello. ¿Que vas a encontrar en este blog? Pues cierta información sobre programación en Visual Studio .Net, Visual Basic .Net, Xml, Sql Serverl, Sql, charlas, opiniones, herramientas, trucos y en definitiva muchos asuntos relacionados con la programación que día a día se encuentra el programador.

Además, me apetecía ir recopilando y compartiendo todos esos truquillos, enlaces e información interesante que siempre guardo por ahi y que luego nunca encuentro.

¿Y porque ha surgido Escritor de Código si tengo esashistorias? Pues bien, la respuesta es simple. Esashistorias es un blog más general, dedicado a temas más "mundanos" y prefería tener un blog dedicado en exclusiva a la programación, a si que... aqui llegamos. De todas formas, ire pasando poco a poco la información de Visual Basic .Net que publiqué en el otro blog. Espero que os vaya gustando y cualquier sugerencia será bienvenida.