lunes, 10 de marzo de 2008

Saber los ficheros de una ruta en Visual Basic .Net

Conocer los ficheros que tenemos en una ruta es bastante sencillo. Basta con que importemos el espacio de nombres System.Io y utilicemos el método GetFiles de la clase Directory, que nos devolverá un enumerado con los ficheros que le pasemos en la ruta (atención, la ruta de debe terminar en una ruta). En el siguiente ejemplo cargamos los ficheros de la unidad c:\ en una combo:

Imports System.IO
Public Class Form1

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

For Each FileName As String In Directory.GetFiles("c:\")
ComboBox1.Items.Add(FileName)
Next

End Sub
End Class

Como ves es muy sencillo. Lo que se podría hacer es una función recursiva que nos devuelva todos los ficheros de todos los directorios del disco duro (para ello deberás utilizar Directory.GetDirectories que te devuelve los directorios de una ruta). Lo único que debes tener en cuenta en este caso, es que quizá sea un proceso lento (cuidado con los bucles).

Por el momento lo dejamos aquí, recomendándote que mires los métodos de la clase Directory, ya que es bastante interesante y tiene algunos realmente útiles (y muy sencillos).

domingo, 9 de marzo de 2008

Reflector, un decompilador de .Net

Una de las cosas que siempre me han intrigado a la hora de programar es el tema de la decompilación. Es decir, tu tienes un código fuente, lo compilas, pero luego ¿existe alguna forma sencilla de tener de nuevo el código fuente completo de tu aplicación en el mismo lenguaje?.

El otro día, haciendo alguna prueba con Visual Basic .Net me encontré con Reflector. Y lo siguiente que hice fue probarlo. Lo primero es hacer un pequeño código fuente ridículo que sirva para nuestros propósitos:



Lo siguiente es abrir Reflector y cargar el exe que acabamos de generar:



Ahora, basta con pinchar en "Dissasembler" y obtener el código fuente. Increible.



La explicación es sencilla. Todos los lenguajes de la plataforma .Net se compilan a un pseudolenguaje intermedio llamado MSIL (Microsoft Intermedate Lenguaje). Es decir, cuando en Visual Basic hemos pinchado en construir el proyecto, no se compila directamente a código máquina, sino que se deja en algo intermedio que será compilado posteriormente por el JIT (el just in time compiler) cuando se ejecute por primera vez el programa (o en la instalación). A todos los que programeis en Java os sonará bastante esto que estoy comentando (es parecido a los bytecodes). De hecho, es posible hasta escribir código directamente en lenguaje MSIL.

A si que, y debido a esta nueva forma de funcionar de los lenguajes .Net es muy recomendable ofuscar (con el Dotofuscator por ejemplo) todos los exe que hagamos ya que estarán en este MSIL y serán accesibles por todo el mundo.

Por supuesto, el decompilador no sólo sirve para obtener el código fuente y "piratear" algo que no es nuestro. También puede ser muy útil cuando queramos obtener cierta información sobre que hace cierta parte del programa, porque da errores o que librerias, clases o dependencias tenemos. Como en casi todos estos tipos de programa, todo depende del uso que le des ;-)

Enlaces:
- Reflector

Además, existen por la red otros decompiladores que también pueden ser útiles:

- Salamander .Net Decompiler
- Xenocode Fox 2007
- Dis# .Net Decompiler
- Decompiler para .Net (Jungle Creatures Inc.)

viernes, 7 de marzo de 2008

Instalar MacOsx86 10.4.5 sobre VmWare


Desde hace unos cuantos días estoy trasteando con VmWare y estoy encantado. Es una herramienta impresionante, con unas posibilidades que ufff... ponen los pelos de punta. Pero bueno, ya hablaremos de vmware en otros post.

En cuanto tuve listo vmware y tras instalar el Windows Xp para las pruebas, decidí que el siguiente paso sería instalar un virtual con Max Os. Sí, sí, habis leído bien, un Mac corriendo en un Windows Xp. Y todo a raiz de los comentarios de wifi sobre el skin de Mac que tiene en su Windows xp (que por cierto, estan geniales). Pero yo quería probar el sistema de Mac entero, y no utilizar un Windows tuneado.

¿Y como se hace esto? Pues para empezar, utilicé las instrucciones de este post. De hecho, hay una manera más sencilla que consiste en buscar las imágenes vmware de MacOs por sitios como el emule y el bittorrent.

Después de tener la imagen lista y funcionando, lo primero que hice fue investigar sobre las versiones de MacOs. De momento parece ser que sólo funciona en ciertos chips de Intel (creo que para Amd no vale) y además, la única versión de MacOs que se puede virtualizar con vmware es la 10.4.5 (con otras versiones no me ha funcionado). Pero claro no todo iba a ser tan sencillo, y es que aparecieron dos problemas: la red no funcionaba y además iba lento lento lento.

Para el problema de la lentitud hay un solución, que consiste en eliminar el archivo AppleTPMACPI.kext. Basta con abrir un explorar del disco e ir a /System/Library/Extensions/ y localizar AppleTPMACPI.kext. Lo seleccionamos y lo borramos con un click derecho del ratón. Si nos pide password escribimos la palabra "bovinity" (sin comillas). Después, vaciamos la papelera y reiniciamos la máquina virtual (basta con que apaguemos el MacOs y volvamos a ejecutarlo). Y verás como ahora va mucho más rápido.

Vale, la primera fase superada. Ahora necesitamos la red. Para eso, hay que seguir las sencillas instrucciones que se encuentran en VmWare Networks on Mac Os X x86. Con esto, lo único que nos queda es configurar los settings de la máquina virtual diciéndole si la red es de tipo bridge o nat.

Y ya está, un maravilloso Mac Os funcionando en tu Windows. Si tienes un ratillo te recomiendo que lo utilices y compruebes como funciona el sistema operativo de Apple.

jueves, 6 de marzo de 2008

Lanzar un bloc de notas de Vb .Net

En muchas ocaciones el programador de Visual Basic .Net se encuentra con la necesidad de tener que mostrar un log de errores o mensajes al usuario. La solución más sencilla pasa por escribir esa serie de mensajes en un fichero txt de texto y llamar al bloc de notas para que el usuario lo vea. Con Vb .Net resulta aún más sencillo.

Si llamamos a la instrucción Process.Start el framework nos lanzará el programa asociado al fichero que le pasemos como parámetro. Por ejemplo, en nuestro caso haremos:

Process.Start("c:\prueba.txt")

Entonces, el framework llamará al programa asociado a los txt que en nuestro caso es le bloc de notas, con lo que habremos conseguido nuestro propósito. Esto es válido para cualquier tipo de archivo que tengamos asociado, como avi, jpg, mp3 o similares (en cada caso te lanzará el programa que tengas asociado, como el Windows Media Player o el WinAmp). Lo mejor es que hagas algunas pruebecillas para ver el resultado.

Por último, decirte que Process.Start tiene una sobrecarga que permite indicar el nombre de usuario, la contraseña y el domino para el fichero que se le pasa como parámetro.

Expresiones regulares en Sql Server 2005

Hace unos días estaba buscando información sobre expresiones regulares. Me encontré con dos muy buenos enlaces:

- Por una parte un fantástico tutorial de la Wikipedia que comenta todo el tema (con muchos enlaces interesantes).
- Y por otro lado, con un estupendo artículo de msdn digital en el que explican con todo detalle como utilizar expresiones regulares con Sql Server 2005.

Para todos aquellos que programeis en Visual Basic .Net teneis disponible en la web de elguille un completo tutorial de expresiones regualres para Visual Basic .Net. Además, también en la ayuda msdn hay bastante ayuda.

martes, 4 de marzo de 2008

Xna Framework


Xna Framework es una plataforma .Net que te permitirá crear juegos para plataformas Windows y Xbox 360. La idea es simple, consiste un una nueva capa que se sitúa entre el framework y el compilador (C# en este caso) y te permite tener abstracciones para poder crear juegos (de esta manera se unifican hardware y apis).

Básicamente Xna incorpora funciones para imágenes (modelo, texturas, efectos, sombras, etc.), sonido, entrada de datos (controlador de la Xbox 360, mouse o teclado), operaciones matemáticas, etc... es decir, una interfaz que te proporciona todas las herramientas para que sólo te tengas que ocupar del propio juego. Además, Xna Framework nos permite crear juegos para Windows Vista.

Microsoft tiene publicado una presentación muy interesante cobre el funcionamiento de esta plataforma (la podéis encontrar aqui.

Los requerimientos en cuanto a Hardware y Software son los siguientes:


  • Una tarjeta gráfica que soporte Shader Model 1.1 y DirectX 9.0c.



  • Microsoft Visual C# 2005 Express Edition



  • Para poder conectar la Xbox 360 y desarrollar y probar juegos para ella sera necesario inscribirse a traves del Xbox Live Marketplace en el XNA Creators Club, con un coste de licencia anual de 99$.



  • Puedes descargarte la versión express para ir probando las posibilidades de esta nueva plataforma para crear juegos:

    Microsoft XNA Game Studio Express 1.0 Refresh

    Enlaces:
    - Xna

    lunes, 3 de marzo de 2008

    Saber la fecha y hora en sql server

    En Oracle existe una tabla especial llamada dual que te permite realizar ciertas consultas que en multitud de ocasiones resultan fundamentales para obtener un buen resultado en tu aplicación. Una de esas consultas es saber la fecha y hora del servidor sql, de manera que siempre te asegures que, aunque el pc cliente esté mal configurado en este aspecto, tus datos se introducirán con la fecha y hora correcta (que es la del servidor sql).

    En Sql Server no tenemos esta tabla dual pero si que podemos saber la fecha y hora del servidor. Utilizando unas sencillas consultas obtendremos lo que buscamos. Para saber la fecha del servidor basta con hacer:

    SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [CurrentDate]

    Con esto, obtendremos en el campo CurrentDate la fecha en formato DD/MM/YYYY. Si queremos saber la hora, podemos hacer:

    SELECT CONVERT(VARCHAR(8), GETDATE(), 108) AS [CurrentTime]

    Así nos dará la hora en formato HH:MM:SS. Como ves la forma de hacerlo es bastante sencilla y depende su resultado en función del número que le pongamos a la función de Sql Convert. Si necesitais otro formato de hora y fecha (como devolver la fecha y hora de forma conjunta por ejemplo), podeis pasaros por sql server helper y encontrareis multitud de consultas de este estilo con los formatos correspondientes.