miércoles, 30 de abril de 2008

Comandos de redes - Traceroute para Windows


Tracert es un comando que nos va diciendo la ruta por donde pasa nuestro tráfico hasta llegar al destino. Muy útil para analizar el tráfico de red. Estas son sus posibilidades:

Tracert -d: no resuelve los nombres del dominio.
Tracert -h (valor): establece un nº máximo de saltos.

Enlaces:
Visual Route
Traceroute con google maps

martes, 29 de abril de 2008

Programa backups de forma automática con Karen’s Replicator


Tener un programa que realice los backups de forma automática siempre viene muy bien. Pero en este caso Karen's Replicator es más interesante porque te permite descargar el código de fuente del programa. Es decir, si necesitas el código fuente de un programa para hacer copias de seguridad, puedes ir a la web de Karen's Replicator y bajártelo (está en Visual Basic 6).

Además, tienes el código fuente de otras aplicaciones muy interesantes:

- Enviar email
- Directory Printer
- Mostrar alertas con cuenta atrás
- Información del ordenador


Enlaces:
Blog informatico
Karen's Replicator
Resto de programas del site

lunes, 28 de abril de 2008

Codigo fuente de juegos en Visual Basic


Vb-mundo nos presenta una página muy interesante con códigos fuente en Visual Basic 6 de unos cuantos juegos clásicos:

- Arkanoid
- Tic Tac Toe (Tres en Raya)
- Laberinto 3D
- Laberinto 2D
- Loto
- BreakThru
- Ahorcado
- Zenku
- Puzzle

Todos ellos listos para su descarga con su código fuente para que puedas ver como funcionan. Ideales si tienes que hacer una práctica jejeje.

jueves, 24 de abril de 2008

Montando un disco duro en Linux


Esto puede ser lo más parecido a montar un disco duro en Linux. Eso sí, no creo que funcione (aunque como broma es bastante buena). Pero si lo quieres hacer de verdad, pásate por Linux para todos para entender algo como:

mount -t vfat /dev/hda1 /mnt/windows

miércoles, 23 de abril de 2008

Librería de ayuda para algunos lenguajes de programación


Muchas veces nos ocurre, sobre todo si nos toca programar en lenguajes que no concemos bien, que tenemos algún jefe que se piensa que sabemos de todo. Sobre todo, cuando aparece por ahí y te dice, toma esto y mira a ver porqué no funciona y claro, ya que estás lo arreglas. Argg!!!!

Aquí es cuando tienes que temblar porque te toca lidiar con un lenguaje que no tienes ni idea y que no sabes ni hacer un hola mundo. Pero claro, el jefe es el jefe y comienzas a sudar y sufrir intentado descifrar cual es el problema. Y lo siguiente que haces es tirar de Google (que haríamos sin el) para poder ir entendiendo cada una de las sentencias del programa.

Sin embargo, podemos hacer otra cosa: ir a gotAPI una estupenda web donde recopilan documentación de un montón de lenguajes como HTML, C, CSS, C++, jQuery, AJAX, Ruby, Php, Java, Oracle, MySql, Xml, Python... Y todo juntito y con navegación por pestañas. Un sitio imprescindible para tener en los favoritos cuando ocurren estas cosas.

martes, 22 de abril de 2008

Obtener Guids en .NET (C# y VB.Net)

El GUID es un número pseudoaleatorio que se utiliza como un identificador universal. De hecho, los objetos OLE utilizan estos números para registrarse (aunque aquí se denominan CLSID). ¿Y para que nos sirve esto?

Pues normalmente los suelo utiliza en dos escenarios:
- Cuando quiero generar una clave.
- Incluso, para utilizarlo como identificador en una tabla de una base de datos.

Ahora, en .Net es muy sencillo obtener un GUID. Basta con ejecutar algo así:

Dim nuestroGuid as Guid = Guid.NewGuid()

Así tendremos el Guid generado en la variable. Algo del estilo a 'fcd0f459-bc5b-489c-91fa-4b131fdc3641'.

En C# es muy sencillo también:

System.Guid miGUID = System.Guid.NewGuid();
String sGUID = miGUID.ToString();

lunes, 21 de abril de 2008

Se acaba el soporte para Visual Basic 6


Según comentan en dejameser se acaba el soporte para Visual Basic 6:

"Sin embargo, Visual Basic ya tiene buen tiempo en el mercado; su primera versión data de 1991 y VB6, la última versión, es del año 1998. Microsoft anunció la suspensión del soporte para VB6 en el 31 de Marzo del 2005, pero mantuvo un soporte extendido que se acabará este año, ya que en el gigante de Redmond no han cambiado de opinión.

Esto quiere decir que no habrán más actualizaciones de seguridad, parches, boletines, etc. para VB6."

Mi recomendación es que vayan pasando todos los desarrollos a .Net, aunque claro, es mucho más fácil decirlo que hacerlo, especialmente si los desarrollos son bastante grandes. Pero ¿y si aparece un problema con VB6 en un sistema operativo Windows que hace que el programa no funcione y los de Redmond ya no lo slucionan? Esta es una cuestión que hay que tener muy en cuenta y que puede hacer que muchos nos pensemos seriamente el ir pasando nuestros desarrollos por si acaso. Mas vale prevenir que curar.

También lo comentan aqui

domingo, 20 de abril de 2008

Problemas con la actualización Microsoft .NET Framework 2.0 Service Pack 1 (KB110806)

Los que utilizamos Windows sabemos que de vez en cuando aparece un iconillo amarillo en la parte derecha de la barra de tareas con el famoso mensaje de: "hay actualizaciones listas para descargar en su equipo". Y esta vez, además de alguna que otra actualización crítica de seguridad, aparecía en la lista una llamada Microsoft .Net Framework 2.0 Service Pack 1 (KB110806). Pues nada, como siempre, que se las descargue las instale y listo.

Pero claro, no todo iba a ser tan sencillo y bonito. Y es que al intentar instalar est actualización aparece un mensaje diciendo que no se puede instalar. Pues nada, que no la instale. Y al rato otra vez aparece el icono, y lo mismo, la intenta instalar y luego dice que no la puede instalar. Y así unas cuantas veces ¿se ha vuelto loco mi Windows?. Investigando sobre el tema me encontré con esta información:

Update fails to install Xp Pro in General Discussion
Failed Installation - Server Update Service
Microsoft .Net Framework 2.0 Service Pack 1 (KB110806)

Total, que como no se instalaba y estaba harto de que me diera el coñazo el Windows Update decidí no instalarlo. Pero al cabo de un par de días, y aprovechando que los sábados tengo algo más de tiempo, pongo el disco duro Usb, arranco el Symantec Backup Exec System Recovery y ¡tachan! que no arranca. Bueno, técnicamente si arranca porque aparece la pantalla (splash) con el nombre del programa pero luego nada de nada, no aparece el programa ni un mensaje de error ni nada de nada.

A si que, en plan Enjuto Mojamuto, desinstalo el programa, lo vuelvo a instalar, prueba con una versión más nueva, intento reparlo, reinicio mil y una veces.... y nada. Que no arranca. En ese momento, se me ilumina una lucecilla y pienso ¿y si la actualización del Framework se ha cargado el framework y el Symantec Backup Exec System Recover no funciona por eso? A si que, intento desinstalar el framework. Pero al hacerlo, me aparece un mensaje pidiendo un fichero llamado netfx2.msi. ¿Como es posible que pida un fichero para desinstalar?

Total, que cabreado con el Windows, el Framework y mil y una historia más encontré la salvación: dotnetfx cleanup tool. Una maravilla de programa que te permite deinstalar cualquier versión de .Net Framework sin preguntas extrañas. La impresionante herramienta puede eliminar:

.NET Framework - All Versions
.NET Framework - All Versions (Tablet PC and Media Center)
.NET Framework - All Versions (Windows Server 2003)
.NET Framework - All Versions (Windows Vista and Windows Server 2008)
.NET Framework 1.0
.NET Framework 1.1
.NET Framework 2.0
.NET Framework 3.0
.NET Framework 3.5


A si que desinstalé el .Net Framework 2.0 y listo. Al intentar ejecutar el Symantec Backup Exec System Recovery me pidió el .Net Framework 2.0, lo instalé y ya está. Todo funcionando sin problemas. Eso sí, no pienso instalar este update ni de coña. A si que si tenéis algún problema con algún programa que quizás utilice el framework y haya dejado de funcionar si os ha pasado lo mismo que a mí con la actualización KB110806, podéis probar a eliminar el framework con dotnetfx cleanup tool y volver a instalarlo. Quizá así se solucione.

Enlaces que te pueden interesar:

Foro en español donde comentan dotnetfx cleanup tool
Removal tool to fix .net framework install failures
Post de Aaron Stebner, el autor de dotnetfx cleanup tool
Otro post de Aaron Stebner

viernes, 18 de abril de 2008

Saber el usuario en Visual Basic .Net

Otra de las cuestiones que normalmente suelo incluir en los ficheros de log es el usuario que ha iniciado sesión en el sistema. Así es más sencillo saber que usuario ha hecho que tu programe falle (y así acordarte de algún familiar cercano jejeje).

Pues en Visual Basic .Net es muy sencillo saber esta información. Basta con utilizar System.Environment.UserName para que obtengamos el usuario que ha iniciado sesión en el ordenador.

jueves, 17 de abril de 2008

Leer los caracteres de una cadena en Visual Basic .Net

En Visual Basic .Net existe una manera muy sencilla de recorrerse los caracteres que tiene una cadena. Con un simple bucle y utilizando el método chars, podemos saber el carácter que ocupa cierta posición en una cadena. En el siguiente ejemplo podemos ver como sacar cada una de las letras de una cadena:

   Dim cadena As String
Dim n As Integer

cadena = "prueba"

For n = 0 To Len(cadena) - 1
MessageBox.Show(cadena.Chars(n))
Next n

miércoles, 16 de abril de 2008

Comandos de redes - Ping


Ping es otro de los comandos estrella que se suele utilizar muy a menudo. Sirve para saver si hay conectividad con un determinado equipo (bien mediante su ip o mediante su nombre), o dicho de otra forma, si queremos saber si un equipo nos responde, utilizaremos ping. Eso sí, para que funcione este comando deberemos tener el trafico ICMP sin bloquear por ningún firewall.

Este comando es el típico que se suele utilizar en una red local. Resulta que te sientas en tu ordenador y el servidor donde tienes tus datos no funciona ¿estára caido? Pues puedes escribir un ping y así sabrás si el servidor está caido. Se suele utilizar para saber si tienes conectividad en internet o simplemente, controlar las máquinas en una red local. Sus usos son múltiples. Aquí están algunas de sus posibilidades:

Ping -t: se hace ping hasta que que pulsemos Ctrl+C para detener los envíos.
Ping -a: devuelve el nombre del host.
Ping -l: establece el tamaño del buffer. Por defecto el valor es 32.
Ping -f: impide que se fragmenten los paquetes.
Ping -n (valor): realiza la prueba de ping durante un determinado numero deocasiones.
Ping -i TTL: permite cambiar el valor del TTL. TTL seria sustituido por elnuevo valor.
Ping -r (nº de saltos): indica los host por los que pasa nuestro ping.(máximo 9)
Ping -v TOS: se utiliza en redes avanzadas para conocer la calidad delservicio.

martes, 15 de abril de 2008

Saber el nombre del ordenador en Visual Basic .Net

El otro día estaba implementando un sencillito método para crear un log con los errores de un programa cuando una pregunta me vino a la cabeza ¿y como sé en que máquina se ha producido el error?.

Pues para ello podemos utilizar la clase SystemInformation que nos proporciona mucha información sobre el sistema. En concreto, para saber el nombre de la máquina utilizaremos SystemInformation.ComputerName. Os recomiendo que le mireis esta clase que tiene cosas muy interesante.

lunes, 14 de abril de 2008

Tickcount en Visual Basic .Net

Tickcount es una propiedad que nos devuelve el número de milisegundos que han transcurrido desde que el sistema se inició. ¿Y para que nos sirve esto? Pues yo lo suelo utilizar para medir su un proceso es muy costoso y sobre todo, para compararlo con otra posible estrategia.

Me explico. A veces se te ocurren varias formas de abordar el mismo problema, pero ¿cual es más rápida? Pues la manera en la que yo decido es utilizando tickcount. Lo que hago es bastante simple: cuento los milisegundos antes del proceso, ejecuto el proceso, vuelvo a contar los milisegundos y simplemente resto. Aquel proceso que me de menos tiempo es el más rápido (normalmente suelo hacer una media porque es más fiable e intento que las condiciones de ejcución sean muy similares).

Os pongo un pequeño ejemplo. En la primera parte del ejemplo vamos a contar el número de ticks cuando pulsamos tres veces un messagebox. En la segunda parte lo contaremos cuando pulsemos cinco veces. Si la segunda parte la hacemos más lenta, veremos que el número de ticks es mayor:

Public Class Form1

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

Dim inicio As Integer
Dim final As Integer

Dim n As Integer

'probamos con tres pulsaciones
inicio = Math.Abs(Environment.TickCount)

For n = 1 To 3
MessageBox.Show("PULSAME")
Next

final = Math.Abs(Environment.TickCount)

MessageBox.Show(Math.Abs(final - inicio))


'probamos con cinco pulsaciones
inicio = Math.Abs(Environment.TickCount)

For n = 1 To 5
MessageBox.Show("PULSAME")
Next

final = Math.Abs(Environment.TickCount)

MessageBox.Show(Math.Abs(final - inicio))

End Sub
End Class


Mas información en Msdn

sábado, 12 de abril de 2008

Comandos de redes - Ipconfig


Ipconfig es el comando que más suelo utilizar (casi a diario). Para los que no lo conozcais, ipconfig es el comando que te devuelve (en Windows claro), información sobre tus conexiones de red. Si necesitas saber tu ip, el servidor dhcp, la configuración del dns... en definitiva, toda la información de tus adaptadores de red, puedes utilizar ipconfig (podéis ver un ejemplo en la imagen).

Principalmente suelo utilizarlo cuando hay algún conflicto de red o simplemente necesito saber la ip de un equipo. Es mucho más cómodo que andar buscando Mis Sitios de Red, botón derecho, Propiedades... Pero si utilizamos un par de argumentos más, podemos sacar mucho más partido a este comando de red de Windows:

Ipconfig /all: ofrece información detallada sobre todas las t. de red yconexiones activas.
Ipconfig /renew: renueva petición a un servidor DHCP
Ipconfig /release: libera la Ip asignada por DHCP
Ipconfig /registerdns: registra todos los nombres DNS
Ipconfig /flushdns: borrar todas las entradas DNS.

viernes, 11 de abril de 2008

Contar los caracteres de una cadena en Visual Basic .Net

Una sencilla funcioncilla que sirve para contar el número de caracteres que tiene una cadena. Por ejemplo, imaginar que queremos saber el número de puntos que tiene un nombre de un fichero. Pues podéis utilizar esto:

Public Class Form1

Private Function ContarCaracteres(ByVal cadena As String, ByVal caracter As Char) As Integer

Dim n As Integer
Dim contador As Integer = 0

For n = 0 To Len(cadena) - 1
If cadena.Chars(n) = caracter Then
contador = contador + 1
End If
Next n

Return contador

End Function

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


MessageBox.Show(ContarCaracteres("cocodrilo", "o"))

End Sub
End Class

jueves, 10 de abril de 2008

System.AccessViolationException, o el error que me esta volviendo loco

Hoy me ha pasado una cosa de esas que de vez en cuando (y menos mal) suelen pasar. Una aplicación provoca un error en el JIT de los que quitan el hipo:

System.AccessViolationException: Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.

en System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
en System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
en System.Windows.Forms.Control.DefWndProc(Message& m)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ComboBox.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


El form donde se produce el error es muy simple. Una combobox de estilo simple con la propiedad del autocomplete, para que se vaya autocompletando según va escribiendo el usuario. Lo más divertido del problema es que sólo le pasa al cliente. He probado en varios ordenadores, con varios sistemas operativos y nada, sólo le falla a él.

Rebuscando por internet me he contrado con este post en el que se cita:

I'm having the same problem. I have a .NET 2.0 winforms application built in VS2005. I recently changed a combobox on the forms to use the "AutoComplete" functionality and this error started showing up, but only after the user has changed the selection on the combo box many times. First, a BIG slowdown in performance is noticed and then, on anotherchange of the combo selection, this error occurs

Y justo. Yo utilizo Visual Studio 2005 con .Net Framework 2.0, con una combobox y el famoso autocomplete. A si que, de momento, y a esperas de conseguir una solución (¿quizás algún update?) he tenido que modificar el funcionamiento de esa pantalla y cambiar la combobox que estaba dando el problema.

Lo que más me mosquea es no haber sido capaz de reproducir el error y el hecho de que hay otras combobox por el programa con el autocomplete que no están dando problemas. A si que claro ¿porque falla sólo esa?. Como podeis ver, es uno de esos fallos misteriosos que me parece que no voy a ser capaz de averiguar porque pasa. Si a vosotros os ha sucedido algo similar, y habéis sido capaces de solucionarlo, os agradecería que lo comentáseis en los comentarios para evitar estos errores tan divertidos.

miércoles, 9 de abril de 2008

Generador de datos de prueba para tus aplicaciones


Generatedata.com es uno de esos sitios web que todos deberíamos tener en nuestros favoritos. Se trata de un sitio web donde puedes generar datos de prueba para tus bases de datos y desarrollos.

Es muy común que cuando estás escribiendo un programa, realices pruebas con unos poquitos datos para ver si el funcionamiento de tu código es correcto (como vereis, he dicho "es muy normal", porque aunque parezca increible, hay gente que ni llega a probar su código). Sin embargo, cuando tu programa empieza a utilizarse, el número de datos que va a manejar normalmente suele ser mucho mayor. Y es cuando te preguntas ¿y si hubiera hecho las pruebas con más datos? Pero claro, no te vas a poner a teclearte miles y miles de datos para tus pruebas.

Pues para esto nos sirve Generatedata.com. Seleccionando los nombres y tipos de datos, nos generará una base de datos con datos de prueba, que además luego podemos exportar a html, excel, xml, csv o sql.

Las pruebas que he realizado son bastante buenas, y aunque los datos son ficticios, el resultado que obtienes es bastante bueno (he probado con un ejemplo fácil de la típica tabla de clientes con nombre, dirección, email y teléfono de contacto).

martes, 8 de abril de 2008

lunes, 7 de abril de 2008

Visual Basic Linq Videos

Visual Basic Linq Video Series Samples es un lugar de esos que no te puedes dejar de mirar. Tiene varios ejemplos y videos de Linq trementamente instructivos, además de un enlace al blog de Beth Massi con un montón de información sobre esta nueva tecnología. Y es que amigos, Linq va revolucionar mucho la forma en la que tenemos de acceder a los datos.

viernes, 4 de abril de 2008

Descubriendo un excelente blog de Vmware

Una vez que te metes en este mundillo de Vmware no puedes parar de utilizarlo, y claro, como suele ocurrir en muchos otros casos, acabas de abrir una puerta de un mundo lleno de posibilidades. Y para comenzar a aprender sobre Vmware suelo pasarme por El blog de Josep Pros, un consultor y formador de Vmware (entre otras cosas) que mantiene un blog estupendo, donde aprenderás muchísimo de Vmware. Incluso puedes enviarle alguna consulta por email que te contestará en el blog.

jueves, 3 de abril de 2008

Buscar los ficheros de un directorio en Visual Basic .Net

Gracias a las nuevas posibilidades que nos brinda la clase IO del framework de .Net, el manejo de ficheros se ha vuelto bastante sencillo. Y como ejemplo os voy a explicar rápidamente una operación que se suele necesitar muy a menudo: saber cuales son los ficheros que tenemos en una ruta determinada.

Para comenzar importaremos el espacio de nombres System.IO dentro de nuestro formulario. Luego realizaremos un sencillo bucle for each que nos devolverá todos los ficheros de la ruta que le indiquemos. Aquí está 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

For Each FileName As String In Directory.GetFiles("c:\")
MessageBox.Show(FileName)
Next

End Sub
End Class


Como curiosidad indicar que si el directorio tiene muchos ficheros, el Directory.GetFiles puede tardar bastante, por lo que es recomendable utilizar algún tipo de "truquillo" como una label que diga "Cargando" o "Leyendo archivos". Lo mejor es que lo pruebes y así evalues si es necesario hacerlo.

miércoles, 2 de abril de 2008

La red en Vmware

Cuando tienes una máquina virtual instalada en tu sistema, Vmware te da la posibilidad de juagr con la conexión de red que utilizará ese sistema operativo virtual. Si nos vamos a las opcione sy pulsamos sobre Ethernet, nos aparecerá un nuevo cuadro de diálogo con varias posibilidades. Hoy os comentare dos de ellas: Bridged y Nat.

La primera de ellas, Bridged se utiliza cuando queremos darle una dirección IP independiente a nuestra máquina virtual. Imaginemos que nuestro sistema anfitrión tiene la IP 192.168.0.1 e instalamos una máquina virtual con un servidor web montado, pero queremos que tenga otra IP diferente. En este caso, seleccionaremos en Ethernet que queremos Bridged y así podremos asignarle otra IP diferente (por ejemplo la 192.168.0.2). Esto es muy útil si queremos montar varias máquinas virtuales con varios servicios pero que sean independientes, por ejemplo una máquina virtual con el servidor web, otra máquina virtual con el servidor de desarrollo, etc... Lógicamente, debemos tener en cuenta que cada máquina virtual nos consume una IP por lo que deberemos configurar nuestros firewalls y routers en función de nuestras necesidades.

La otra posibilidad que veremos hoy es Nat. Nat se utiliza cuando queremos que nuestra máquina virtual tenga la misma Ip que el sistema anfitrión. ¿Y cuando se usa esto? Con un ejemplo lo veremos muy fácil: tenemos nuestro sistema anfitrión con un modem usb con ip dinámica, de manera que cada vez que nos conectemos a internet tendremos una ip. Como es un modem y no un router sólo tenemos una dirección Ip, por lo que si no queremos complicarnos mucho, y lo único que nos interesa es que nuestra máquina virtual acceda a internet, seleccionaremos Nat y nuestra máquina virtual tendrá la misma ip que nuestro host anfitrión, pudiendo conectarse a internet sin problemas.

¿Cual es la mejor opción? Pues como casi todo en esta vida depende. Yo utilizo ambos escenarios en función de mis necesidades, pero, lógicamente el más interesante y el que más flexibilidad y juego te da es el primero. El segundo sólo lo utilizo en casa, en la máquina virtual que tengo para probar programas y que, además, utilizo yo solo. Espero que te haya servido de ayuda.

martes, 1 de abril de 2008

Truco, saber los usuarios en Windows Xp


Esta mañana me ha tocado revisar los usuarios de un Windows Xp Home y... sorpresa, en la pantalla de administración no me aparece la opción de "usuarios locales". ¿Porque? Por el mardito home!!!

Pero tranquilos. En Google he encontrado una pequeña solución: si pinchas inicio -> ejecutar y escribes "control userpasswords2" (sin las comillas) te aparecerá una ventana de administración de usuarios muy muy útil, similar al MMC (Microsoft Management Console). Y desde aquí si que puedes adminsitrar permisos, usuarios u obligar a pulsar ctrl+alt+supr para iniciar sesión. Un truqúillo muy útil.