viernes, 15 de junio de 2012

BookWorm

Ya me queda poco para tener finalizado mi proyecto de la asignatura Integración. En breve espero tener suficiente tiempo libre para ir publicando las partes más significativas del código aquí (aunque también subiré el proyecto entero a Bitbucket).

Mientras tanto, puedes verlo en el siguiente enlace: http://bookworm.phpfogapp.com/

¡Espero que te guste!

sábado, 12 de mayo de 2012

Manuales gratis para diseñadores web

¡Buenas! ¡Cuánto tiempo! La verdad es que ando sin un minuto libre últimamente, entre las prácticas (FCT) y el proyecto de fin de curso, no tengo tiempo ni de respirar últimamente... Y mucho menos de tener el blog al día, lo que me fastidia bastante, pero bueno, poco a poco espero ir terminando con las entradas sobre Visual Basic .NET para empezar a mostraros algo sobre mi proyecto. Al final lo estoy haciendo con PHP, utilizando diferentes plugins jQuery y demás, ya cuando empiece con las entradas del proyecto iré contando con más detalle. Además, tendré también que publicar algo sobre programación web con Java, que quedó pendiente... ¡Sigue aumentando mi lista de tareas!

Hoy os dejo un enlace muy interesante:
http://www.instantshift.com/2012/04/10/40-useful-free-online-books-for-web-designers/
Puedes encontrar en él varios manuales gratuitos para diseñadores web, hay de todo (HTML 5, tipografía, CSS, JavaScript...) y tienen muy buena pinta, así que no dudes en investigar un poco, que seguro que encuentras alguno útil.

¡Feliz fin de semana! Yo estaré pensando en la playa y trabajando en el proyecto... ¡Qué injusta es la vida! ;)

sábado, 21 de abril de 2012

Rich Snippets. Introducción y ejemplo

Los "rich snippets" (fragmentos enriquecidos) son líneas de texto que aparecen debajo de cada resultado de búsqueda. La forma más clara de verlo, es con un ejemplo. Buscamos, por ejemplo, una receta (arroz con leche) y algunos de los resultados que aparecen son estos:


Uno de los resultados, el que está rodeado, vemos que tiene una línea en la que aparece la valoración de la receta, el número de opiniones y la duración de la misma. Esto es un fragmento enriquecido.

Para obtener un fragmento enriquecido debemos seguir estos pasos:
  1. Elegir un formato de marcado:
    • Microdatos
    • (recomendado por Google). A mí me ha parecido el más sencillo, ya que sólo tienes que añadir algunos atributos a las etiquetas html (normalmente, <span> o <div>).
    • Microformatos.
    • RDFa.
  2. Marcar el contenido. Google ofrece fragmentos enriquecidos para estos tipos. Pero en schema.org, puedes encontrar muchos más y también son comprendidos por Google, entre otros buscadores.
  3. Probar el marcado. Google ofrece una herramienta para probar tus fragmentos enriquecidos. De esta manera te puedes asegurar de que Google puede leer los datos marcados.
Si después de haber marcado tu sitio web y haber esperado algunas semanas, los fragmentos enriquecidos siguen sin aparecer en el buscador, puedes visitar este enlace.

PRUEBA - Persona (contacto)
Voy a hacer una prueba para el tipo de dato "persona" que ofrece Google, que puede tener las siguientes propiedades:
  • name (nombre).
    • LISA MARIE SIMPSON
  • nickname (apodo).
    • LISA
  • photo (foto).
  • title (cargo de la persona).
    • ESTUDIANTE
  • role (función de la persona).
  • url (enlace a una página web).
  • affiliation (nombre de una organización a la que está afiliada la persona).
    • ESCUELA PRIMARIA DE SPRINGFIELD
  • friend (identifica una relación social entre la persona descrita y otra).
    • MILHOUSE
  • contact (identifica una relación social entre la persona descrita y otra).
  • acquaintance (identifica una relación social entre la persona descrita y otra).
  • address (dirección de la persona).
    • street-address
      • EVERGREEN TERRACE, 742
    • locality
      • SPRINGFIELD
    • region
    • postal-code
    • country-name
      • USA
CÓDIGO
<div itemscope itemtype="http://data-vocabulary.org/Person">
  <img src="http://mickydenys.galeon.com/images/dibu4.gif" itemprop="photo" />
  Soy <span itemprop="name">Lisa Marie Simpson</span>, 
  pero todos me llaman <span itemprop="nickname">Lisa</span>.
  Esta es la web de mi familia: 
  <a href="http://www.thesimpsons.com/" itemprop="url">LOS SIMPSON</a>.
  Vivo en la calle 
  <span itemprop="address" itemscope itemtype="http://data-vocabulary.org/Address">
    <span itemprop="street-address">Evergreen Terrace, 742</span> en
    <span itemprop="locality">Springfield</span>, 
    <span itemprop="country-name">USA</span> 
  </span>
    y soy <span itemprop="title">estudiante</span>
  en la <span itemprop="affiliation">Escuela Primaria de Springfield</span>
  Mi amigo es:
   <a href="http://www.milhouse.com" rel="friend">Milhouse</a>
</div>

En la primera línea encontramos los atributos "itemscope" e "itemtype", incluidos en el <div>. "itemscope" indica que el contenido del <div> describe un elemento y con "itemtype" definimos de qué tipo de elemento se trata, en este caso, una persona. En ese <div> se describen las propiedades de la persona, para ello, a los elementos que contengan alguna de esas propiedades se les añade la etiqueta "itemprop", indicando la propiedad correspondiente, por ejemplo: <span itemprop="title">.

Si nos fijamos en la descripción de la dirección, propiedad "address", vemos que se trata de otro elemento. Es decir, un elemento puede, a su vez, estar formado por otros elementos.

RESULTADO DE LA PRUEBA DEL MARCADO


Podemos ver que en la tercera línea salen algunos de los datos que habíamos indicado y así es como se mostraría el resultado en un buscador. También cabe destacar que no se muestran todos los datos que hemos etiquetado, como por ejemplo la foto. Supongo que el buscador determina, en función del tipo que hayamos elegido y de las propiedades que le hayamos indicado, los datos que muestra.

viernes, 23 de marzo de 2012

Curiosidades - Canvas (HTML)

Hola,

hoy os dejo una entrada diferente. Un enlace a una página en la que puedes interactuar con un código y ver los efectos inmediatamente en una serie de imágenes que puedes elegir. Para ello se ha utilizado el elemento HTML Canvas, que permite la generación de gráficos dinámicamente.

1.- Accede a la web:

2.- Elige el patrón o imagen que prefieras:

3.- Aparece a la izquierda la imagen elegida y a la derecha el código, que puedes modificar a tu gusto:

4.- Una vez realizadas las modificaciones deseadas, puedes exportar la imagen resultante:

Web del autor: http://elucidatedbinary.com/

domingo, 11 de marzo de 2012

Ejercicios MCD y MCM

EJERCICIO 1 - Máximo Común Divisor
Realizar una aplicación que calcule el máximo común divisor de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, a As Integer
        Dim n1, n2 As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        n1 = numero1
        n2 = numero2

        If (numero1 < numero2) Then
            a = numero2
            numero2 = numero1
            numero1 = a
        End If

        ' Algoritmo de Euclides
        While (numero1 Mod numero2 <> 0)
            a = numero1
            numero1 = numero2
            numero2 = a Mod numero2
        End While

        Console.WriteLine("El MCD de " & n1 & " y " & n2 & " es: " & numero2)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2 - Mínimo Común Múltiplo
Realizar una aplicación que calcule el mínimo común múltiplo de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, mcm As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        mcm = (numero1 / MCD(numero1, numero2)) * numero2

        Console.WriteLine("El mcm de " & numero1 & " y " & numero2 & " es: " & mcm)

        Console.ReadKey()

    End Sub

    Function MCD(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
        Dim a As Integer
        If (num1 < num2) Then
            a = num2
            num2 = num1
            num1 = a
        End If

        ' Algoritmo de Euclides
        While (num1 Mod num2 <> 0)
            a = num1
            num1 = num2
            num2 = a Mod num2
        End While

        Return num2
    End Function

End Module

Ejercicios de búsqueda en tablas

EJERCICIO 1
Realizar una aplicación que contenga la función "Buscar", a la que se le pasará un array de números enteros y el elemento a buscar. Debe devolver un Boolean indicando si lo ha encontrado (true) o no (false).

Module Module1

    Sub Main()
        Dim numeros() As Integer = {32, 5, 3, 2, 66, 2, 7, 45, 90}
        Dim num As Integer = 91
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim encontrado As Boolean = False

        For Each n As Integer In numeros
            If (n = num) Then
                encontrado = True
            End If
            'Si lo encuentra, sale del "for"
            If encontrado Then Exit For
        Next

        Return encontrado
    End Function

End Module

EJERCICIO 2
Modificar la función anterior para que implemente el algoritmo de búsqueda dicotómica. En este caso se le pasará un array ordenado de menor a mayor.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 4
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return True
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return False

    End Function

End Module

EJERCICIO 3
Modificar de nuevo la función para que en lugar de un Boolean indicando si ha encontrado o no el elemento buscado, devuelva un entero indicando la posición donde se encuentra dicho elemento. Si el array no contiene ese elemento, devolverá -1.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 90
        Dim posicion As Integer = Buscar(numeros, num)

        If (posicion = -1) Then
            Console.WriteLine("No encontrado")
        Else
            Console.WriteLine("Encontrado en la posicion: " & posicion)
        End If

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Integer
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return centro
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return -1

    End Function

End Module

viernes, 9 de marzo de 2012

Ejercicio ordenar (método de la burbuja)

Realizar una aplicación que solicite la cantidad de números que el usuario quiere introducir, después los vaya pidiendo uno a uno y finalmente los ordene utilizando el algoritmo de ordenación de la burbuja y los muestre en consola.

NOTA: enlace a una página de algoritmos de ordenación http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html

Module Module1

    Sub Main()
        Dim temporal As Double
        Dim cuantos As Integer
        Console.WriteLine("¿Cuántos números quiere introducir?")
        cuantos = Console.ReadLine

        cuantos -= 1
        Dim numeros(cuantos) As Double
        For i As Integer = 0 To cuantos
            Console.Write("Número: ")
            numeros(i) = Console.ReadLine
        Next

        For i As Integer = 0 To (cuantos - 1)
            For j As Integer = (i + 1) To cuantos
                If (numeros(i) > numeros(j)) Then
                    temporal = numeros(i)
                    numeros(i) = numeros(j)
                    numeros(j) = temporal
                End If
            Next
        Next

        Console.WriteLine("Números ordenados de menor a mayor:")
        For Each num As Double In numeros
            Console.WriteLine(num)
        Next

        Console.ReadKey()

    End Sub

End Module

lunes, 5 de marzo de 2012

Varios ejercicios

EJERCICIO 1
Realizar una aplicación que recoja 10 números enteros desde teclado y al final muestre el mayor y el menor.

Module Module1

    Sub Main()
        Dim numero, mayor, menor As Integer

        Console.Write("Número: ")
        mayor = Console.ReadLine
        menor = mayor

        For i As Integer = 1 To 9
            Console.Write("Número: ")
            numero = Console.ReadLine
            If (numero > mayor) Then
                mayor = numero
            ElseIf (numero < menor) Then
                menor = numero
            End If
        Next

        Console.WriteLine("El número mayor es: " & mayor)
        Console.WriteLine("El número menor es: " & menor)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2
Realizar una aplicación que genere un array de números aleatorios y los muestre. Para ello se utilizará la clase Random. El array también tendrá tamaño aleatorio.

Module Module1

    Sub Main()
        Dim azar As Random = New Random
        ' El método Next(int1, int2) de la clase Random devuelve un número aleatorio dentro de ese intervalo
        Dim cuantos As Integer = azar.Next(1, 100)
        Dim numeros(cuantos) As Integer

        For i As Integer = 0 To cuantos
            numeros(i) = azar.Next(-200, 200)
        Next

        For Each num As Integer In numeros
            Console.WriteLine(num)
        Next

        Console.ReadKey()

    End Sub

End Module

Ejercicio "Cambio"

Realizar una aplicación que recoja por teclado la cantidad total a pagar y la cantidad que se ha entregado. La aplicación debe calcular el cambio correspondiente con el menor número de monedas y/o billetes posibles.

Module Module1

    Sub Main()
        Dim total, entregado, vuelta As Double
        Dim billetes() As Single = {500, 200, 100, 50, 20, 10, 5}
        Dim monedas() As Single = {200, 100, 50, 20, 10, 5, 2, 1}
        Dim resultado(14) As Integer

        Console.Write("Introduzca la cantidad total: ")
        total = Console.ReadLine
        Console.Write("Introduzca la cantidad entregada: ")
        entregado = Console.ReadLine

        Console.WriteLine()

        'Comprobamos las cantidades
        If (total > entregado) Then
            Console.WriteLine("Las cantidades no son correctas.")
            Console.WriteLine("La cantidad entregada debe ser mayor o igual al total.")
        ElseIf (total = entregado) Then
            Console.WriteLine("Ha entregado la cantidad exacta. No tiene cambio.")
        Else
            'Calculamos la vuelta
            vuelta = entregado - total

            Console.WriteLine("Su vuelta es: " & vuelta & " Euros.")

            ' 1º con los billetes
            Dim i As Integer = 0
            For Each cantidad As Single In billetes
                ' \ división entera
                resultado(i) = vuelta \ cantidad
                ' Lo que queda es el resto
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            ' Me daba error si cogía el valor de las monedas con decimales
            ' Así que multipliqué tanto el valor de estas como lo que queda de vuelta por 100
            vuelta = vuelta * 100

            ' 2º con las monedas
            For Each cantidad As Single In monedas
                resultado(i) = vuelta \ cantidad
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            Dim j As Integer = 0
            For i = 0 To 6
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " billetes de " & billetes(i) & " Euros.")
                End If
                j += 1
            Next

            For i = 0 To 7
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " monedas de " & (monedas(i) / 100) & " Euros.")
                End If
                j += 1
            Next

        End If

        Console.ReadKey()
    End Sub

End Module

sábado, 3 de marzo de 2012

"While... End" y "Do... Loop"

A continuación se muestra un sencillísimo ejemplo de todas las variantes de estos bucles:

Module Module1

    Sub Main()
        DoLoop()
        Console.ReadKey()
    End Sub

    Sub DoLoop()
        Dim a As Integer = 1

        ' While
        While (a < 10)
            a += 1
        End While

        ' Equivalente al while
        Do While (a < 10)
            a += 1
        Loop

        ' Evalúa la condición al final
        ' Por lo tanto el bloque se ejecutará al menos una vez
        Do
            a += 1
        Loop While (a <= 10)

        ' Se ejecuta "hasta que", no "mientras"
        Do Until (a > 10)
            a += 1
        Loop

        ' Lo mismo, pero el bloque se ejecuta al menos una vez
        Do
            a += 1
        Loop Until (a > 10)
    End Sub

End Module

Ejercicio "Ecuación de 2º grado"

Realizar una aplicación que calcule las raíces de una ecuación de segundo grado y las muestre, una vez que ha recogido los coeficientes por teclado.

Imports System.Math

Module Module1

    Sub Main()

        Dim a, b, c As Integer
        Dim discriminante As Integer

        Console.WriteLine("ax^2 + bx + c = 0")
        Console.WriteLine("Introduce los valores de los coeficientes.")
        Console.Write("a: ")
        a = Console.ReadLine
        Console.Write("b: ")
        b = Console.ReadLine
        Console.Write("c: ")
        c = Console.ReadLine

        If (a = 0) Then
            Console.WriteLine("La ecuación no es de segundo grado.")
        Else
            discriminante = b ^ 2 - (4 * a * c)

            If (discriminante = 0) Then
                Dim raiz As Double
                raiz = -b / (2 * a)
                Console.WriteLine("La ecuación tiene un único resultado.")
                Console.WriteLine("Raíz: " & raiz)
            ElseIf (discriminante > 0) Then
                Dim raiz1, raiz2 As Double
                raiz1 = (-b + (Sqrt(discriminante))) / (2 * a)
                raiz2 = (-b - (Sqrt(discriminante))) / (2 * a)
                Console.WriteLine("La ecuación tiene dos resultados.")
                Console.WriteLine("Raíz 1: " & raiz1)
                Console.WriteLine("Raíz 2: " & raiz2)
            Else
                Console.WriteLine("La ecuación no tiene resultado para esos valores.")
            End If
        End If

        Console.ReadKey()

    End Sub

End Module

Instrucción Select... Case

La instrucción Select... Case es similar al Switch de Java, pero bastante más potente, ya que permite indicar intervalos, expresiones y varios valores en el mismo "Case".

EJEMPLO DE SELECT... CASE

Module Module1

    Sub Main()
        Menu()
        Console.ReadKey()
    End Sub

    Sub Menu()
        Dim opcion As Integer = 1
        While (opcion <> 0)
            Console.Clear()
            Console.WriteLine("Menú")
            Console.WriteLine("====")
            Console.WriteLine("1. Si introduce uno se ejecuta esta opción")
            Console.WriteLine("2-5. Si introduce un número entre 2 y 5 se ejecuta esta")
            Console.WriteLine("6, 9, 10. Si introduce 6, 9 o 10 se ejecuta esta")
            Console.WriteLine("Mayor de 15. Si es mayor de 15 se ejecuta esta")
            Console.WriteLine("0. Salir")
            Console.WriteLine()
            Try
                opcion = CInt(Console.ReadLine())
            Catch ex As InvalidCastException
                ' Sólo se ve desde el Visual Studio
                Debug.WriteLine("Error: " & ex.Message)
                opcion = 7
            Catch e As OverflowException
                ' lo que queramos hacer
            End Try

            Select Case opcion
                Case 1
                    Console.WriteLine("Ha seleccionado la opción 1")
                Case 2 To 5 ' Intervalo
                    Console.WriteLine("Ha seleccionado una opción entre 2 y 5")
                Case 6, 9, 10 ' Varios valores
                    Console.WriteLine("Ha seleccionado 6, 9 o 10")
                Case Is > 15 ' Expresión
                    Console.WriteLine("Ha seleccionado una opción mayor que 15")
                Case 0
                    Console.WriteLine("Ha elegido salir, ¡adiós!")
                Case Else ' Si no entra por las anteriores...
                    Console.WriteLine("Ha elegido una opción incorrecta")
            End Select

            ' vbCrLf -> constante que representa retorno de carro más salto de línea
            Console.WriteLine(vbCrLf & "Pulse ENTER para continuar")
            Console.ReadKey()

        End While
    End Sub

End Module

EJERCICIO
Realizar una aplicación que tenga un menú que permita elegir entre calcular el área de un círculo o un rectángulo. Dependiendo de lo que se elija, se pedirán los datos correspondientes y se mostrará el resultado.

Module Module1

    Sub Main()
        Const PI As Double = 3.14159265
        Dim opcion As Integer
        Dim ancho, alto As Double
        Dim radio As Double

        Do
            Menu()
            Console.Write("Elija una opción: ")
            opcion = Console.ReadLine
            Console.WriteLine()

            Select Case opcion
                Case 1
                    Console.Write("Ancho: ")
                    ancho = Console.ReadLine
                    Console.Write("Alto: ")
                    alto = Console.ReadLine
                    Console.WriteLine("Área del rectángulo: " & (ancho * alto) & " uds cuadradas")
                Case 2
                    Console.Write("Radio: ")
                    radio = Console.ReadLine
                    Console.WriteLine("Área del círculo: " & (PI * (radio ^ 2)) & " uds cuadradas")
                Case 3
                    Console.WriteLine("Ha elegido salir del programa.")
                Case Else
                    Console.WriteLine("Opción incorrecta.")
            End Select

            Console.WriteLine(vbCrLf & "Pulse ENTER para continuar")
            Console.ReadKey()

        Loop While opcion <> 3

    End Sub

    'Procedimiento que muestar el menú
    Sub Menu()
        Console.Clear()
        Console.WriteLine("CALCULAR ÁREA")
        Console.WriteLine()
        Console.WriteLine("1. Rectángulo")
        Console.WriteLine("2. Círculo")
        Console.WriteLine("3. Salir")
    End Sub

End Module

miércoles, 29 de febrero de 2012

Varios ejercicios

EJERCICIO 1
Hacer una aplicación que pida un nombre por teclado y luego salude a esa persona.

Module Module1

    Sub Main()
        Dim nombre As String

        Console.WriteLine("¿Cómo te llamas?")
        nombre = Console.ReadLine
        Console.WriteLine()
        Console.WriteLine("Hola " & nombre)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2
Hacer una aplicación que recoja números desde teclado hasta que se introduzca vacío (cadena ""). Se deben sumar estos números y mostrar el resultado.

Module Module1

    Sub Main()
        Dim Numero As String
        Dim Resultado As Integer = 0

        Do
            Console.Write("Número: ")
            Numero = Console.ReadLine()
            Try
                Resultado = Resultado + CInt(Numero)
            Catch ex As InvalidCastException

            End Try
        Loop While Numero <> ""

        Console.WriteLine("Resultado final: " & Resultado)

        Console.ReadKey()

    End Sub

End Module

NOTA: por defecto, se realizan conversiones implícitas de datos, si quisiésemos desactivar esta opción (recomendable), tendremos que poner la siguiente línea al principio de nuestro código (antes de Module Nombre_del_Módulo)

Option Explicit On

En este caso, para realizar las conversiones, se utilizarán las funciones de conversión. Algunas de estas funciones son:

  • CDate(expresión): para convertir a tipo Date
  • CDbl(expresión): para convertir a tipo Double
  • CInt(expresión): para convertir a tipo Integer
  • CStr(expresión): para convertir a tipo String

EJERCICIO 3
Hacer una aplicación que pida por teclado el radio de una circunferencia y muestre su área y su perímetro.

Module Module1

    Sub Main()
        Dim Radio, Area, Perimetro As Double
        ' Definición de constantes en VB
        Const PI As Double = 3.14159265

        Console.Write("Radio de la circunferencia: ")
        Radio = Console.ReadLine

        Area = PI * (Radio ^ 2)
        Perimetro = 2 * PI * Radio

        Console.WriteLine("Área: " & Area & " uds cuadradas")
        Console.WriteLine("Perímetro: " & Perimetro & "uds")

        Console.ReadKey()

    End Sub

End Module

martes, 28 de febrero de 2012

Hola Mundo - Comenzando con VB.NET

Como no puede ser de otra manera, empezamos Visual Basic .NET con un "Hola Mundo":

Module MiModulo

    Sub Main()
        'Mostrar un mensaje en consola
        Console.WriteLine("Hola mundo")

        'Para que la consola se quede abierta,
        'A la espera de que pulsemos una tecla
        Console.ReadKey()
    End Sub

End Module

sábado, 18 de febrero de 2012

Desaparecida...

He estado "desaparecida" unas semanas. Se acerca la recta final, antes de la FCT (Formación en Centros de Trabajo) y no tengo mucho tiempo libre, por lo que no he podido dedicarme tanto al blog. Pero quería comentar que, finalmente, para el proyecto de Integración realizaré una aplicación web con JSP/Servlets, por lo que cuando vaya tomando forma, empezaré a colgar el código aquí y también la iré subiendo a Jelastic. Dejaré el enlace a mi sitio cuando haya subido la primera versión.

Mientras tanto, es probable (aunque no prometo nada), que dedique algunas entradas a Visual Basic .NET y a lo que vaya preparando para el proyecto, como por ejemplo, la hoja de estilos.

¡Felices carnavales!

sábado, 28 de enero de 2012

Tor Project

Si estás cansado de esto...


y de esto...


La solución es:


Tor es software libre que no sólo te permite saltarte determinados filtros, sino que además protege tu privacidad online. Estás son algunas de sus principales ventajas:
  • Evita que se pueda conocer tu localización o tus hábitos de navegación.
  • Sirve para navegadores web, clientes de mensajería instantánea, accesos remotos y mucho más.
  • Es software libre y de código abierto para Windows, Mac, Linux/Unix y Android.
Si te apetece investigar un poco más, visita la web del projecto y descárgate Tor: https://www.torproject.org/.

sábado, 14 de enero de 2012

J2EE. Aplicaciones Web con Java

Tras el parón navideño, regreso... Dentro de nada terminaré con Java, por lo menos durante un tiempo. Falta aplicaciones web (con las que empiezo ahora), servicios web y applets.

------

J2EE son las siglas de Java 2 Enterprise Edition. Se trata de una versión ampliada de J2SE, con más API, pensada para crear aplicaciones distribuidas multicapa basadas en componentes, que se ejecutan sobre uno o varios servidores de aplicaciones.

Servidores J2EE. Son el "middleware" que une todos los componentes para que funcionen juntos. Algunos de ellos son:
  • JBoss. Implementa toda la especificación J2EE (Contenedor Web + Contenedor EJB)
  • GlassFish
  • Apache Tomcat. Sólo implementa el Contenedor Web.

Los servidores J2EE estarán formados por dos contenedores y a cada componente le corresponderá uno de ellos:
  1. Contenedor Web
    1. Servlets. Permiten la comunicación con el servidor vía HTTP.
    2. Páginas JSP. Páginas HTML dinámicas que incluyen código Java.
  2. Contenedor EJB
    1. EntityBeans
    2. SessionBeans
    3. MessageDrivenBeans

Despliegue de aplicaciones J2EE. Desplegar una aplicación es instalarla en un servidor de aplicaciones J2EE.

Los desplegables o módulos J2EE son archivos .zip que contienen ficheros .class, diferentes recursos y el descriptor de despliegue (documento XML).
  • WAR. Web ARchive. Sólo contiene componentes del contenedor web, es decir, servlets y páginas JSP y su descriptor de despliegue es el fichero "web.xml".
  • EAR. Enterprise ARchive.
  • JAR. Java ARchive.

APLICACIONES WEB

Las aplicaciones web se implementan mediante los componentes de la capa web (servlets y páginas JSP). Se distribuyen en forma de WAR que se despliegan en servidores J2EE.

------

De momento, sólo veremos esta última parte de J2EE, por lo que es suficiente con el servidor Apache Tomcat para realizar nuestras pruebas.

En próximas entradas pondré algunos ejemplos de servlets, páginas JSP y filters.