viernes, 29 de febrero de 2008

Camisetas para geeks

Y como no todo va a ser programar y pensar, un poco de humor. Aqui os pongo unas imágenes de unas camisetas para geeks que seguro que os sacan alguna sonrisa:




miércoles, 20 de febrero de 2008

Podcast de Visual Basic .Net

Dev3cast es un podcast de la Comunidad TJ.Net sobre Visual Basic .Net realmente interesante. Si quieres estar al día en tecnologías como Silverlight, la CodeCamp y todo lo que rodea al mundo .Net no te lo debes perder. Además, tienes la posibilidad de escucharlo online, bajarlo en mp3 directamente a tu reproductor, suscribirte mediante rss o utilizar itunes.

Y por si esto fuera poco, una gran cantidad de enlaces de cada uno de los temas que se tratan. Ya no tienes excusa para estar al día de las últimas tecnologías del mundo Microsoft.

miércoles, 13 de febrero de 2008

Pasar una textbox a mayúsculas

Normalmente, para evitar problemas posteriores, suelo limitar la entrada de ciertos datos por parte del usuario a textos en mayúsculas. Por ejemplo, en el típico control de usuarios, el nombre del usuario siempre va en mayúsculas. Así evito problemas con el usuario pepe y PEPE (y todas sus variantes).

En Visual Basic 6 conseguir que según escriba un texto el usuario en una textbox se fuese escribiendo en mayúsculas era relativamente sencillo. Se ponía un pequeño código en el keypress (utilizando el ucase) que fuese transformando a mayúsculas lo que el usuario iba escribiendo.

Pero ¿como se hace esto en Visual Basic .Net? Pues muy sencillo. Ya no necesitamos escribir ni una sola línea de código, ya que la textbos tiene una propiedad llamada CharacterCasing que nos permite convertir automáticamente todo lo que escribe el usuario. Tenemos tres posibilidades:

- Normal: lo que escribe el usuario se queda tal y como está (respetando mayúsculas y minúsculas).
- Upper: todo se pasa a mayúsculas.
- Lower: todo se pasa a minúsculas.

martes, 12 de febrero de 2008

Descarga Visual Studio 2008 y .NET Framework 3.5


Desde la web de ASP .NET de Microsoft anunciaron el lanzamiento de la versión definitiva de Visual Studio 2008 y .NET Framework 3.5. Estamos hablando del entorno de desarrollo de aplicaciones y de la framework para desarrollar en plataformas Windows con diferentes lenguajes.Como principales novedades incluye el lenguaje LINQ ( Language Integrated Query) en .NET Framework 3.5. Es una forma más sencilla e intuitiva de integración de los queries a las bases de datos.

En cuanto a Visual Studio 2008 incluye nuevos editores , un nuevo interface de diseño web completamente WYSIWYG. Han añadido multi-targeting support que permite desarrollar un proyecto en la versión de .NET que quieras y todo el IDE se adaptará.También soporte ASP.NET AJAX en Visual Studio 20008, mejor soporte para CSS, Javascript y otras muchas cosas.

Enlace: Visual Studio 2008 Downloads

lunes, 11 de febrero de 2008

Utilizando un assembly como splash screen en Visual Basic .Net

Existe la posibilidad de utilizar un assembly en visual Basic .Net como splash screen, es decir, en lugar de terne el código de la splash screen dentro de tu programa, tener esa pantalla en una dll externa para que luego la puedas modificar facilmente.

Para hacerlo basta con que selecciones en el desplegable de las propiedades del proyecto que no tienes splash screen y hagas click en "ver eventos de aplicación".

Allí deberás escribir un código similar a este:

Partial Friend Class MyApplication
Protected Overrides Sub OnCreateSplashScreen()
Me.SplashScreen = New ClassLibrary1.SplashScreen1()
End Sub
End Class

Y definirte un assembly llamado ClassLibreary1 y el método SplashScreen1.

Fuente: Rob Windsor's Weblog

Linq, lo nuevo de Visual Basic 9


Visual Basic 9 será la próxima versión de Visual Studio 2008. Entre las características más interesantes aparece la de Linq (lenguaje Integrated Querys), un lenguaje similar al sql que permite hacer consultas estructuradas a estructuras de datos. Por ejemplo, tenemos un array con clientes y podemos consultar aquellos que cumplan una condición. El resultado lo podremos procesar con una cláusula for..each de forma sencilla, sin necesitar escribir líneas y líneas de código. Esto se amplía a otros elementos, como ficheros xml por ejemplo.

Microsoft ha presentado esta nueva característica de Visual Studio en un hands on lab sencillo y eficaz, lleno de ejemplos que son sencillos y muy potentes. En pocos minutos te puedes hacer una rápida idea del potencial de Linq y la funcionalidad que proporciona.

Por lo que he visto en el hands on lab las posibilidades que ofrece son muy interesantes, aunque la sintaxis no termina mucho de gustarme (si os fijais se construyen al reves que una select de sql). De todas formas, no he podido probarlo en un proyecto real, pero Linq promete.

domingo, 10 de febrero de 2008

La serie de Fibonacci en varios lenguajes de programación

La serie de Fibonacci es una sucesión matemática donde el primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores, teniendo algo del estilo a:

0,1,1,2,3,5,8,13,21,34,55...

Además, esta serie tiene unas propiedades muy curiosas:

-La razón o cociente entre un término y el inmediatamente anterior varía continuamente, pero se estabiliza en el número áureo.
- Cualquier número natural se puede escribir mediante la suma de un número limitado de términos de la sucesión de Fibonacci, cada uno de ellos distinto a los demás. Por ejemplo, 17 = 13 + 3 + 1, 65 = 55 + 8 + 2.
-Tan sólo un término de cada tres es par, uno de cada cuatro es múltiplo de 3, uno de cada cinco es múltiplo de 5, etc.
-Cada número de Fibonacci es el promedio del término que se encuentra dos posiciones antes y el término que se encuentra una posición después.
-La suma de diez números Fibonacci consecutivos es siempre 11 veces superior al séptimo número de la serie.
-El último dígito de cada número se repite periódicamente cada 60 números.

Incluso, esta serie es "famosa" por haber salido en la novela de Dan Brown "El código Da Vinci" o como los patrones de la batería de la canción Lateralus del grupo Tool. Pero, ¿cual sería el código fuente que necesitaríamos para generar esta serie?. Pues depende del lenguaje, pero sería algo así:

Pascal

uses
crt;
var
cantidad,cont:integer;
function Fibonacci(valor:integer):integer;
begin
if valor = 1 then
fibonacci:= 1;
if valor=0 then
fibonacci:=0;
if valor>=2 then
Fibonacci:=(Fibonacci(valor-1) + Fibonacci(valor-2));
end;

begin
ClrScr;
write('cantidad de valores: ');readln(cantidad);
for cont:=1 to cantidad do
write(fibonacci(cont),', ');
ReadKey;
end.

F#

let rec fib n = if n <>
Ruby

x1,x2 = 0,1; 0.upto(size){puts x1; x1 += x2; x1,x2 = x2,x1}

C#
static int Fibonacci (int x)
{
if (x <= 1) return 1; return Fibonacci (x-1) + Fibonacci (x-2); }
Scala

def fib( n: Int): Int = n match {
case 0 => 0
case 1 => 1
case _ => fib( n -1) + fib( n-2)
}

Erlang

fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .

Perl

#!/usr/bin/perl

my $iterations = 10;

sub f($) {
if ( $_[0] <>
for ( my $i = 0; $i < $iterations; ++$i ) { print f( $i ) . "\n"; }
Ada

with Text_IO, Ada.Integer_Text_IO;
use Text_IO, Ada.Integer_Text_IO;

procedure Fibonacci is
Iterations : constant Natural := 10;
function F( N : Natural ) return Natural is
begin
if N <>
Pl/Sql

variable n number;
exec :n := 15;

with data as (select level le from dual connect by level <= :n) select fibo from data model dimension by (le) measures ( 0 fibo) rules ( fibo[1] = 0 , fibo[2] = 1 , fibo[le>2]=fibo[cv(le)-2]+fibo[cv(le)-1]
)
;

Visual Basic .Net

Dim results As Long()
Function Fibo(ByVal n As Integer) As Long
If n = 0 Then Return 0
If n < 3 Then Return 1

' The array can be of size n - 2 because we don't need slots for the n < 3 case.
ReDim Preserve results(n - 2)
Dim f As Func(Of Integer, Long) = AddressOf Me.calculator

Return calculator(n)
End Function

Function calculator(ByVal x As Integer) As Long
If x = 0 Then
Return 0
ElseIf x < 3 Then
Return 1
Else
Dim index As Integer = x - 3
Dim result As Long = results(index)

If result = 0 Then
result = calculator(x - 1) + calculator(x - 2)
results(index) = result
End If
Return result
End If
End Function

Ensamblador del Z80

Assembly Z-80a

ORG 0100H

LD A,10
PUSH A
CALL FIBO
RET

FIBO:
POP A
OR A
JR NC,FIBO1
DEC A
PUSH A
PUSH A
CALL FIBO
POP A
DEC A
PUSH A
CALL FIBO
RET
FIBO1:
LD A,1
RET


Python

def fibonnaci(n):
#Print Fibonacci sequence up to n
a,b = 0, 1
while b < b =" b,">

Powershell

Function Get-Fib ($n) {
$current = $previous = 1;
while ($current -lt $n) {
$current;
$current,$previous = ($current + $previous),$current}
}
Get-Fib 100


Fuente: Scott Hanselman

Asp .Net Wiki


Asp .Net Wiki es un sitio web dedicado a la programación en Asp .Net. La novedad del sitio radica en su estructura en forma de Wiki, es decir, no es el típico sitio donde puedas encontrar informaciónj sobre Asp .Net sino que además podrás editar o añadir contenido a alguna de las entradas que contiene (o crear las tuyas propias). Además, tiene soporte RSS para que puedas estár al día en los hilos que más te interesen. Un buen recurso para los programadores de Asp .Net que sólo tiene una pequeña pega: está en inglés.

jueves, 7 de febrero de 2008

Cambiar los objetos de un formulario en otro en Visual Basic .Net

Una de las prácticas que se suelen hacer con frecuencia en programación consiste en porder modificar las propiedades de los objetos de un formulario desde otro. En Visual Basic 6 era bastante sencillo, pero ahora en .Net hay que hacer un pequeño truquillo.

Tenemos dos formularios: form1 y form2. En form2 hay dos botones, que para ser originales los llamaremos Button1 y Button2, y lo que queremos es que desde el primer formulario (form1) se modifiquen los text de los botones. ¿Y como lo hacemos? Pues aqui viene el truquillo:

Lo primero que necesitamos es un definirnos en un módulo una variable pública del siguiente modo:

Public myForm As Form2

Es muy importante que el tipo de la variable (el as Form2) sea el formulario en el que se van a modificar las cosas ¿porque? pues muy sencillo, porque en Form2_Load deberemos poner:

myForm = Me

De esta manera, conseguimos que el formulario, que está definido por Visual Basic .Net de forma privada lo podamos tener de forma pública gracias a la variable. Y ahora, desde el primer form, podemos modificar los valores de sus objetos con algo tan sencillo como:

myForm.Button1.Text = "Hola"
myForm.Button2.Text = "Adios"

Es decir, y resumiendo un poquillo, el truco está en utilizar una variable pública del tipo del formulario a modificar e inicializarla en dicho formulario, y luego, acceder a esa pantalla mediante dicha variable. Y, ¿para que es útil esto? Pues un ejemplo clásico suele ser el de tener un un form un listview con datos, y otro formulario encima modal que sea el que pida la información, de manera que insertemos los items al listview desde este segundo formulario.

miércoles, 6 de febrero de 2008

Escribir gadgets con Windows SideShow


¿Tienes tiempo libre? ¿Te gustaria escribir gadgets (complementos) para diferentes dispositivos con Windows? Pues ahora, utilizando Windows SideShow puedes hacerlo sin problemas. En este completo artículo te explican como. No es muy complicado y los resultados son bastante asombrosos. Resproduzco de la página el objetivo del tutorial

"Un gadget es una aplicación (o parte de una aplicación) que puede presentar a los usuarios la información que desean cuando y donde la desean. Actualmente, Microsoft ofrece tres tipos diferentes de gadgets: los gadgets para Windows Sidebar muestran la información del usuario en el escritorio del usuario o en la barra Windows Vista Sidebar, los gadgets para Windows Live muestran la información del usuario en cualquier equipo a través de un explorador web, y los gadgets para Windows SideShow muestran la información del usuario en un dispositivo de hardware auxiliar a través de un controlador de dispositivo compatible con SideShow."

Espero que te sea útil.

martes, 5 de febrero de 2008

Ordenar un listview pinchando en una cabecera

Por defecto, un listiview no se puede ordenar pinchando en la cabecera (como por ejemplo ocurre con el outlook, en el que según pinches en la columna de asunto o remitente, la lista de correos se ordena sola). Pero me he encontrado con el siguiente código en vb-helper que te permite hacer esta función: ordenar un listview por la columna en la que se ha hecho click.

Su funcionamiento es sencillo ya que sólo necesitas copiar el código de la clase que utiliza, definirte una variable a nivel de formulario y escribir un poco de código en el evento ColumnClick de tu listview. Aunque la explicación de como funciona está en inglés, el código es bastante sencillo, por lo que podrás utilizarlo en tus proyectos sin problemas, y agregar esta funcionalidad (que es bastante útil) a tu programa.

lunes, 4 de febrero de 2008

Microsoft liberará el código de .NET Framework en la versión 3.5


Según comentan aqui (en inglés) y en error500 Microsoft ha empezado a compartir el código fuente de las librerías de .NET bajo su licencia Shared Source. Shared Source permite acceder al código fuente, pero no modificarlo ni reutilizarlo, de hecho sólo permiten descargarlo si se aceptan estas condiciones.

No se muy bien como interpretar esto, ya que una licencia Shared Source realmente sirve para poco. Lo único útil es poder aprender algo de como está hecho el framework por dentro, pero esi si, sin poder corregirlo o mejorarlo. Me da la sensación que Microsoft lo único que quiere con este paso es conseguir tester por la cara, que les encuentres bugs y luego los notifiques para que ellos los arreglen. Aún así, este movimiento ha sido visto por muchos como un acercamiento al software libre. Personalmente, creo que no se acercan ni de lejos. Más bien es un movimiento de marketing en toda regla. A Microsoft le da igual el softaware libre y el código abierto. Y vosotros ¿que opinais de esto?

sábado, 2 de febrero de 2008

LINQ to SQL y Visual Basic 2008

En la web de Jorge Serrano teneis un fabuloso post con ejemplos sobre Linq to Sql en Visual Basic 2008. Además, Jorge ha publicado un pequeño ejemplo de un equipo de fútbol que ilustra perfectamente como funciona Linq.

viernes, 1 de febrero de 2008

La instrucción split en Visual Basic .Net

La instrucción split es una de las más poderosas de Visual Basic .Net. Es una de esas instrucciones que, cuando aprendes a utilizarla, la tendrás en casi todos los códigos que escribas. Y ¿para que sirve? Pues sirve para cortar una cadena por un delimitador que tengamos. Vemos un ejemplo:

Tenemos la cadena: HAC.123.OLE. Y quetemos cortarla por los puntos, es decir, tener el valor HAC, el valor 123, y el valor OLE. Una manera de conseguirlo es cortando la cadena con instrucciones left, right o mid. Pero claro, si cambian las posiciones (tenemos HACUI.12.OL) ya no nos sirve. Además, el código que tenemos que escribir es bastante farragoso. Pero son split lo tenemos muy sencillo:

Dim cadena As String
Dim tabla() As String
Dim n As Integer

cadena = "HAC.123.OLE"
tabla = Split(cadena, ".")

For n = 0 To UBound(tabla, 1)
MessageBox.Show(tabla(n))
Next
Lo que hacemos es utilizar una tabla dinámica (un array dinámico) llamado tabla; fijate que la variable se define como tabla(), es decir, le decimos que es una tabla de strings pero que no sabemos su longitud. Luego, le pasamos el split, cortando la cadena por el punto. Con esto, Visual Basic .Net va a escribir en cada celda que necesite de la variable tabla cada uno de los valores cortando por ese carácter, es decir, en la celda 0 tendremos HAC, en la celda 1 tendremos 123 y en la celda 2 tendremos OLE. Por último, utilizando ubound(tabla,1) sabemos que número de celdas tiene esta tabla.

¿Y que ocurre si nuestra cadena tiene más partes, por ejemplo HAC.123.OLE.234? Pues que split cortará esa cadena por los puntos y nuestro array dinámico tendrá 4 posiciones. Así de fácil.

Lo mejor es que pruebes con distintas cadenas y textos y veas como funciona, ya que explicar la función split es un poco complicado. De todas formas, es una forma de cortar cadenas sencilla, que requiere poco código (y queda muy limpio), siendo luego muy sencillo trabajar con cada una de las partes que tenemos. Además, si nos ocurre como os comentaba antes (que en lugar de HAC tenemos H.123, es decir, nos cambia el tamaño de la cadena), no pasa nada, ya que split no se basa en el tamaño, y siempre nos va a funcionar. Una pequeña instrucción muy poderosa.