lunes, 31 de marzo de 2008

Optimizar la carga de un objeto con BeginUpdate

En este post voy a matar dos pájaros de un tiro. Por un lado veremos como cargar un xml de una forma rápida y probaremos una estupenda manera que tiene Visual Basic .Net para hacer que las cargas de los objetos vayan a toda velocidad.

Para ello vamos a utilizar como origen de nuestros datos el xml que generamos el otro día con datos aleatorios (unos 10000 registros de datos). PONER ENLACE

Lo primero que tenemos que hacer es leer el Xml. Aquí existen varias técnicas, pero personalmente me decanto por la siguiente que es bastante sencilla y rápida:

  Dim objXmlDocument As New Xml.XmlDocument
Dim nodos As Xml.XmlNodeList
Dim n As Integer

ComboBox1.Items.Clear()

objXmlDocument.Load("c:\datos.xml")
nodos = objXmlDocument.SelectNodes("/datos/registro")

For n = 0 To nodos.Count - 1
'Cargamos aqui los datos
Next

Como ves lo que se hace es muy simple. Al utilizar el XmlDocument parseamos la entrada de datos (el xml) seleccionando los nodos que cuelgan de /datos/registro. Luego los procesamos en un sencillo for. Internamente XmlDocument carga el xml en forma de árbol, por lo que podemos ir navegando por el (con nodos child, etc.). Algo muy parecido a como se hace en un treeview. Si te gustaría que profundizase en esto y ponga algún ejemplo en el blog lo puedes poner en los comentarios.

Pero seguimos. Ahora nuestro objetivo es cargar los elementos en la combo. Algo tan sencillo como utilizar combobox1.Items.Add. Pero si lo hacemos, veremos que tarda bastante en hacerlo. ¿Y como optimizamos esto? Utilizando BeginUpdate y EndUpdate. Lo que hace BeginUpdate es "congelar" el objeto cuando se llega a esa instrucción, no refrescándolo hasta que encuentra en el EndUpdate. O sea, que realizamos toda la carga si repintar ni refrescar el objeto hasta que terminemos, por lo que la velocidad es mucho mayor. Es algo parecido a utilizar transacciones en sql, pero claro.... a nivel de objeto. Vemos el ejemplo:


Imports System.IO
Public Class Form1

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

Dim objXmlDocument As New Xml.XmlDocument
Dim nodos As Xml.XmlNodeList
Dim n As Integer

ComboBox1.Items.Clear()

objXmlDocument.Load("c:\datos.xml")
nodos = objXmlDocument.SelectNodes("/datos/registro")

ComboBox1.BeginUpdate()

For n = 0 To nodos.Count - 1
'Cargamos aqui los datos
ComboBox1.Items.Add(nodos.Item(n).InnerText)
Next

ComboBox1.EndUpdate()

End Sub
End Class

Como podreis comprobar la velocidad es muy buena. Para hacer la prueba del algodón basta con que elimineis el BeginUpdate y el EndUpdate. Vereis como se nota la diferencia.

Esto es aplcicable a otros objetos que tiene Visual Basic .Net y yo ya lo utilizo en listviews además de las combobox. Y relamente se nota bastante agilidad y velocidad, sobre todo si tenemos que cargar muchos datos.

viernes, 28 de marzo de 2008

IronPython Studio


¿Te gusta el programa en Python y te gustaría hacerlo en el Ide de Visual Studio? Pues estás de enhorabuena. Y es que me he encontrado con el IronPython Studio un Ide gratuito basado en el runtime del Ide de Visual Studio 2008 pero para el lenguaje Python.

Tienes más información en el blog de Pablo Galiano

martes, 25 de marzo de 2008

Cual es el mejor método para hacer una copia de seguridad

Una pregunta como esta es algo así como la pregunta del millón. Muchos me suelen preguntar ¿como hago una buena copia de seguridad?. Pues si entrar en líneas y líneas filosóficas sobre el tema, os recomiendo algo muy básico que hasta ahora me ha funcionado muy bien: la sencillez. Es decir, cualquier método que sea sencillo a la hora de hacer la copia de seguridad y sobre todo, que sea sencillo a la hora de restaurar los datos es válido para hacer la copia de seguridad.

De nada me sirve tener el mejor sistema del mundo para hacer backups si a la hora de restaurar un simple archivo que he borrado por error resulta que tengo que llamar a mil y un sitios y montar un lio tremendo. Para mí, esto no es bueno.

Por tanto, si tienes un sistema chiquitito, y tus datos se resumen a documentos, pequeñas bases de datos, etc (que conste que no hablo de grandes empresas, ni datos concurrentes, ni cosas por el estilo) me suelo decantar por tener los datos en otro dispositivo (como otro disco duro por ejemplo) y hacer un simple xcopy de uno a otro. Así de sencillo (si quieres que ponga un pequeño script de como lo hago puedes ponerlo en los comentarios).

Sin embargo, si tus datos son "más complicados" deberás mirar otras alternativas. Pero como te decía, siempre ten en cuenta que sea sencillo tanto a la hora de hacer el backup como a la hora de recuperarlo. Y tu ¿cual es tu mejor método para hacer copias de seguridad?

jueves, 20 de marzo de 2008

Como montar un pequeño entorno de pruebas con Vmware

Desde hace poco tiempo, y gracias a que descubrí Vmware, montar un entorno de pruebas para poder evaluar los últimos productos (e incluso algún sistema operativo que otro) me ha resultado tremendamente sencillo. Os cuento como me lo monto por si os sirve de ayuda: tengo un sistema virtual con todo montadito; mi Visual Studio, mi Sql Server, las bases de datos para las pruebas, los editores, .... en fín, todas esas herramientas que día a día necesitas.

Y claro, ahora va Microsoft y lanza una beta nueva de un nuevo producto (como hizo hace unos meses con el nuevo Visual Studio por ejemplo, o con alguna que otra extensión) y como soy de los que me gustan probarlo todo, pues me gustaría hacerlo pero sin descojonar todo ese sistema que tanto tiempo me ha llevado dejarlo fino. ¿Y como lo hago? Pues muy fácil, clono esa máqina virtual ( o transformo esa máquina física en virtual con el Backup Exec system Recovery) y una vez que la tengo virtual con el Vmware le hago mil y una perrerías. Así de fácil. ¿Y si me cargo algo en esa máquina virtual? Bueno, pues aquí me suelen ocurrir dos cosas:

- o vuelvo a algún snapshot que tenga guardado.
- o vuelvo a repetir el proceso. Total, tampoco se pierde mucho.

Como veis, el "truquillo" que utilizo consiste en partir de un sistema operativo que está limpito y bien montadito.

Incluso más de una vez, esta historia de la máquina virtual me ha servido para recrear el sistema de algún cliente (o he llegado a clonar la máquina del cliente) y así poder tener el entorno más similar posible. De hecho, actualmente, por problemas con distintas versiones que tenemos de un programa, necesito tener 4 máquinas virtuales Vmware que tengo montaditas en un sólo pc. Ya se que es un pc normalito (sin Scsi ni cosas por el estilo), pero para lo que yo necesito (un sólo usuario) es más que suficiente, y me ahorra muchos problemas y sobre todo, mucho tiempo.

Me despido de este post, que me ha salido más largo de lo que esperaba. Sólo os diré a modo de resumen que el tema de la virtualización es tremendamente útil y muy recomendable para todos estos casos. Y os aviso: una vez que comenceis a usarla no podréis parar de hacerlo... estais avisados.

miércoles, 19 de marzo de 2008

Internet Explorer 8 Beta 1 for Developers Whitepapers

Internet Explorer 8 Beta 1 for Developers Whitepapers es un compendio de varios enlaces que te permitirán, como desarrollador web, mejorar tus sitios web y aprender las nuevas características de Internet Explorer 8.

No he tenido la posibilidad de revisar todos los Whitepapers, pero alguno de ellos me han parecido realmente interesantes, no sólo desde el punto de vista de desarrollador web, sino más bien desde el punto de vista de arquitectura de software (como del DOM Core Improvements). Tenemos todos estos Whitepapers disponibles:

- User-Agent String and Version Vector
- Manage Add-Ons
- Per-Site ActiveX
- Non-Admin ActiveX Controls
- Zoom v2
- W3C's ARIA support
- Loosely-coupled Internet Explorer
- Automatic Crash Recovery
- Activities
- WebSlices
- CSS 2.1 Compliance
- Versioning and IE Modes
- Printing Improvements
- DOM Core Improvements
- HTML Improvements and ACID2
- Improved Namespace Support
- Selectors API
- Data URI Support
- Versioning and Cross-document Interaction
- Improved Protected Mode API Support
- Circular Memory Leak Mitigation
- Platform Performance Improvements
- Developer Tools
- Better AJAX Development

martes, 18 de marzo de 2008

Probando Thunderbird


Llevo unos días probando el lector de correo Thunderbird y estoy encantado. ¿Porque he decido dejar de usar el outlook express? Pues por dos motivos:

- con outlook express no podía borrar los adjuntos de un correo, y necesitaba guardar cuando, a quien le envié el correo y que adjuntos tenía pero no quería guardar el adjunto (mi buzón de email me ocupaba cerca de 2 gigas en el correo).
- quería un filtro de spam integrado en el correo.

Total, como no conseguí encontrar ningún programa gratuito que me me permitiese borrar los adjuntos de un email (solo encontre uno que era medio decente y era de pago), decidí pasarme a Thunderbir. Y estoy encantado.

Funciona de maravilla y además de solucionarme estos dos puntos me he encontrado con una agradable sorpresa: tiene un agregador rss para subcribirte a tus blogs favoritos. La única pega que le he sacado por el momento es que no permite iconizarse (ponerse en pequeñito en el sistem tray del sistema). Pero como todo tiene solución, utilizando el Thunderbird Tray lo tienes solucionado.

A si que ya sabes, si quieres olvidarte del Outlook Express o tener un lector de correo sencillo sin grandes complicaciones puedes utilizar Thunderbird.

lunes, 17 de marzo de 2008

Hacer un combo que se autocomplete

En Visual Basic 6 solía utilizar una llamada al api de Windows (que funcionaba bastante bien, por cierto) que me permitía ir autocompletando una combo según iba el usuario escribiendo texto en ella (es decir, si escribo una b, pues la combo se situa en los elementos que comiencen en b, si luego pongo una a, pues la combo se va a los que comienzan por ba y así sucesivamente).

Al traducir el código de una aplicación de Visual Basic 6 a .Net encontré otro código que hacía algo similar, aunque no terminaba de gustarme, ya que en ciertas ocasiones hacía cosas raras. Investigando sobre el tema he encontrado la solución más facil que existe: usar las propiedades de la combo.

Si amigos. Hay veces que me pasa esto. Te tiras buscando por Internet códigos, llamadas a Apis y mil y un trucos para luego darte cuenta que los objetos tienen las funcionalidades que necesitas implementadas con un par de clicks de ratón. Pero vayamos al grano....

Lo que hay que hacer es utilizar las propiedades Autocompletemode y Autocompletesource. Con Autocompletemode le indicaremos a la combo como va a autocompletarse, o dicho de otro modo, en que manera se va a ir rellenando. En nuestro caso utilizaremos Append. La segunda propiedad, Autocompletesource le indica donde tendrá el origen de datos (de donde leera los posibles valores), por lo que le pondremos Listitems. Y con esto tendremos nuestro autocompletar listo para usuarse (por último, recomendar utilizar la propieda DropDownStyle a simple y el sorted a true).

domingo, 16 de marzo de 2008

Call Hierarchy, una nueva opcion del IDE de .Net


En este enlace tenemos información sobre una de las próximas novedades que nos traerá el Ide De Visual Studio, llamada Call Hierarchy. Como podemos ver en el artículo, se trata una nueva opción de "botón derecho" que muestra un árbol de jerarquía de llamadas entre funciones.

Dicho de otra forma, es una manera gráfica de poder visualizar que llamadas hace una función a otra, de manera que sigamos el código fuente con más facilidad. Además, han agregado la posibilidad de verlo direcamente al posicionarte encima de una función, de manera que te aparece una nueva opción llamada "Calls To" que te indica las distintas llamadas que se van produciendo el código.

Sin duda es una forma sensacional de seguir el código fuente y poder controlar que llamadas se van produciendo en tus funciones. Personalmente, pienso que el Ide de Visual Studio es un Ide realmente potente y con funciones como estas consiguen hacer mucho más sencilla la vida del programador que diariamente está escribiendo líneas de código.

Resumiendo, Call Hierarchy (algo así como jerarquía de llamadas) es una opción aparentemente trivial pero que te da unas posibilidades y un conocimiento del código realmente importante (por fín podré olvidarme de hacerme esos diagramas de llamadas de funciones en papel).

sábado, 15 de marzo de 2008

Que sucederia si Microsoft comprase Google

¿Que sucedería si Microsoft comprase Google? Pues alguien ya lo ha pensado y se le ha ocurrido esto:


Via abadiadigital

Crear un fichero xml con registros aleatorios

En muchas ocasiones, cuando necesito probar alguna cuestión de .Net utilizo unos ficheros con datos aleatorios bastante grandes, especialmente si son pruebas de carga. Para desarrollar y depurar un programa puede ser muy tedioso tener que lidiar con cientos o miles de datos, pero para ver si el programa es rápido y responde correctamente, necesito mucha información que en la mayoría de las veces no la tengo. ¿Y como lo soluciono? Pues hecho mano de programillas que tengo para crear ficheros con datos aleatorios.

Por ejemplo, el siguiente código que os muestro, contiene un simple xml con números aleatorios que me ha servido para probar el tiempo de carga de los objetos. Este es el código:

Imports System.IO
Public Class Form1

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

Dim objFichero As IO.StreamWriter
Dim n As Integer

'Arrancamos el generador de números aletorio
Randomize()

objFichero = New StreamWriter("c:\datos.xml", False, _
System.Text.Encoding.GetEncoding("ISO-8859-1"))

objFichero.WriteLine("<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes"" ?> ")
objFichero.WriteLine("")
objFichero.WriteLine("<datos>")

For n = 1 To 10000
objFichero.WriteLine(" <registro>" & CStr(Rnd()) & "</registro>")
Next n

objFichero.WriteLine("</datos>")

objFichero.Flush()
objFichero.Close()
objFichero = Nothing

MessageBox.Show("Fin de la generación")

End Sub
End Class

viernes, 14 de marzo de 2008

Tutorial de Vmware

Tenía pensado escribir un pequeño tutorial introductorio sobre como crear una máquina virtual utilizando Vmware. Pero buscando algo de información cuando me empecé a meter en este mundillo, encontré este slideshare que lo explica perfectamente. A si que ¿para que reinventar la rueda?.

Por tanto, en Vmware, máquinas virtuales tenéis el slideshare que os mostrará como crear la máquina virtual.

Seguro que la siguiente pregunta que te viene a la mente es ¿y yo para que necesito esto?. Pues bien, te conestaré con otra pregunta ¿no te gustaria tener una máquina dedicada a tus pruebas, otra con todo perfectamente instalado y otra donde puedas bajarte versiones beta o hacerle barbaridades? Y claro, sin que te tengas que andar gastándote unos cuantos euros cada vez que quieras probar algo nuevo... Pues eso es la virtualización: tener varios sistemas operativos funcionando pero en la misma máquina. Lo mejor es que lo pruebes y decidas.

jueves, 13 de marzo de 2008

Stickynotes para Visual Studio 2008


¿Has querido alguna vez tener notitas (postits) en tus proyectos de Visual Studio? Puesa ahora lo tienes fácil, ya que existe un AddOn para Visual Studio 2008 (ojo, no funciona con otras versiones) que te da la posibilidad de tener estas notitas integradas en tu proyecto. Lo puedes descargar en: StikyNotes for Visual Studio 2008

martes, 11 de marzo de 2008

Herramientas libres de modelado para Visual Studio .Net


Una de las cosas que se le puede hechar en falta al Visual Studio .Net es el no tener herramientas de modelado que puedes incorporar a tus proyectos. En tangiblearchitect te dan la oportunidad de añadir un componente gratuito que te permitirá integrar a tu código fuente diagramas de casos de uso, diagramas de componentes, diagramas de estados, diagramas uml o diagramas de actividad. Lo bueno de esta herramienta es que te lo integra dentro del propio Visual Studio, con lo que ya no tendrás que recurrir a otros programas y podrás tener toda la información de tu proyecto bajo el mismo lugar.

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.