Categories
Varios

Y el ganador es…

El afortunado ganador de este pequeño sorteo es: Emilio Velardiez

Felicitaciones al ganador y muchas gracias a las demás personas por participar, esperamos que algún día podamos volver a hacer este tipo de cosas. 🙂

Nota: Para los interesados en saber como se ha realizado este proceso, pongo a disposición el código fuente que se usó y una pequeña animación -hecha con Macromedia Captivate- del momento cumbre 😛

Categories
.NET Quiz

Quiz: Números aleatorios en .NET

La siguiente porción de código será usado para determinar el ganador del sorteo del voucher para un exámen de certificación Microsoft

csharp:

using System;
using System.Collections.Generic;
using System.IO;

class Participante
{
    private string Nombre, Email;
    public Participante(string nombre, string email)
    {
        Nombre = nombre;
        Email = email;
    }
    public override string ToString()
    {
        return string.Format("Nombre: {0}\t\tEmail: {1}", Nombre, Email);
    }
}
class Program
{
    static void Main(string[] args)
    {
        StreamReader reader = null;
        try
        {
            reader = new StreamReader("sorteo.txt");
            List<Participante> participantes = new List<Participante>();
            string line;

            while ((line = reader.ReadLine()) != null)
            {
                participantes.Add(new Participante(line.Split(',')[0], line.Split(',')[1]));
                Console.WriteLine(participantes[participantes.Count - 1]);
            }
           
            int ganador = ObtenerGanador(participantes.Count);

            Console.WriteLine("\n\nEl ganador es: {0}", participantes[ganador]);
        }
        finally
        {
            if (reader != null)
                reader.Close();
        }
    }
    public static int ValorAleatorio()
    {
        int semilla = DateTime.Now.Millisecond;
        Random rnd = new Random(semilla);
       
        int maximo = rnd.Next(0, semilla) * semilla;
       
        return rnd.Next(0, maximo % int.MaxValue);
    }
    public static int ObtenerGanador(int numeroParticipantes)
    {
        int ganador = 0;
        for (int i = 0; i < numeroParticipantes; i++)
            ganador += ValorAleatorio();

        return ganador % numeroParticipantes;
    }
}

El archivo sorteo.txt, tiene la siguiente estructura:

code:

Nombre Apellidos,Email
Nombre Apellidos,Email
Nombre Apellidos,Email

Determinen si el código mostrado sirve o no para los propósitos antes mencionados, si observan algún comportamiento raro, comenten abajo indicando las correcciones del caso.

Pueden descargar el código en C# o VB, para compilarlo -como se habrán dado cuenta- necesitan el .NET Framework 2.0

Nota: El código se ejecutará en una máquina con procesador AMD Athlon 64 3200+ y 1GB RAM.

Categories
Artí­culos PHP

Sitios MultiIdioma – ezSQL Database Class

ezSQL Database Class como su nombre lo dice es una clase escrita en PHP que nos facilita el acceso a base de datos, podemos usarlo con MySQL, Oracle8, InterBase/FireBird, PostgreSQL, SQLite o MS-SQL pero para nuestro caso en particular lo usaremos para MySQL.

En esta oportunidad les mostraré algunos ejemplos de su uso y en adelante veremos su aplicación con el pequeño sistema que queremos desarrollar.

Creo que la mayoría de nosotros hemos empezado nuestros primeros scripts en PHP siguiendo el consejo de diferentes tutoriales, foros, consejos de amigos o el mismo manual de PHP y todos hemos escrito esto:

PHP:

// Conexion, seleccion de base de datos
$enlace = mysql_connect('servidor', 'usuario', 'password') or die('No pudo conectarse : ' . mysql_error());
echo 'Conexión exitosa'; mysql_select_db('mibase') or die('No pudo seleccionarse la BD.');
// Realizar una consulta SQL
$consulta = 'SELECT * FROM mi_tabla';
$resultado = mysql_query($consulta) or die('La consulta falló: ' . mysql_error());
// Impresion de resultados en HTML
echo " <table>\n";
while ($linea = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
    echo "\t <tbody> <tr>\n";
    foreach ($linea as $valor_col) {
        echo "\t\t <td>$valor_col</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</tbody></table>\n";
// Liberar conjunto de resultados
mysql_free_result($resultado);
// Cerrar la conexion
mysql_close($enlace);

Con ezSQL podemos simplificar muchas de estas tareas que las repetíamos cada vez que teníamos que seleccionar un registro o registros, insertar, actualizar o borrar como veremos a continuación.

Para el ejemplo usaré una tabla simple con la siguiente estructura que llamaremos "mi_tabla":

  • idpersona
  • nombre
  • email

Incluimos los archivos necesarios y creamos una instancia de la clase:

PHP:

include_once "../shared/ez_sql_core.php";
include_once "ez_sql_mysql.php";
$bcdb = new ezSQL_mysql('usuario','password','mibase','servidor');
 

Ahora lo interesante:

PHP:

// Para insertar un nuevo registro
$bcdb->query("INSERT INTO mi_tabla VALUES (NULL, 'braulio', 'mail@buayacorp.com')");

// Si queremos recuperar el id de este último pues
$ultimoid = $bcdb->insert_id;

// Para seleccionar todos los registros de la tabla
// El segundo parámetro indica si nuestros resultados serán arreglos asociativos (ARRAY_A) o arreglos numéricos (ARRAY_N)
$resultados = $bcdb->get_results("SELECT * FROM mi_tabla", ARRAY_A);

// y mostrarlos
foreach($resultados as $k => $v) {
  echo "Nombre: " . $v["nombre"];
  echo "Email: " . $v["email"];
}

// Para seleccionar una fila y mostrarla
$resultado = $bcdb->get_row("SELECT * FROM mi_tabla WHERE idpersona = '$ultimoid'", ARRAY_A);
echo "Nombre: " . $resultado["nombre"];
echo "Nombre: " . $resultado["email"];

// Para seleccionar sólo una variable y mostrarla
$nombre = $bcdb->get_var("SELECT nombre FROM mi_tabla WHERE idpersona = '$ultimoid'");
echo $nombre;

// Para actualizar y borrar
$bcdb->query("UPDATE mi_tabla SET nombre = 'Andres' WHERE id = $ultimoid");
$bcdb->query("DELETE FROM mi_tabla WHERE id = $ultimoid");
 

Resumiendo los métodos que nos ofrece la clase tenemos:

  • El método query: Sirve para hacer consultas del modo "ExecuteNonQuery" osea que no devuelven resultados, esto nos sirve para INSERT, UPDATE y DELETE.
  • El método get_results: Sirve para las consultas que devuelven todos los datos de un tabla, y nos devuelve una matriz de resultados
  • El método get_row: Nos devuelve sólo una fila de una consulta.
  • El método get_var: Nos devuelve sólamente una variable.

Esta librería tiene muchas mas cosas que nos ayudarán a manejar nuestra base de datos, pero no hablaremos de todo en esta entrada, si desean revisarlo más a fondo pueden leer la documentación.

Enlaces

Categories
.NET Varios

Sorteo de voucher para un examen de certificación Microsoft

Actualización: Ya existe un ganador del sorteo.

Actualización: El sorteo se realizará a las 15:30 horas (GMT-5) por motivos de trabajo, pido las disculpas del caso por no comunicar con anterioridad la hora.

Actualización: Verifica la validez del código que se utilizará para el sorteo!

Como premio a nuestros ¿asiduos? lectores :-), vamos a sortear un voucher válido sólo para un examen de la nueva generación de certificaciones de Microsoft.

El sorteo se realizará el 28 de Agosto del 2006, para participar sólo dejen un comentario (pongan los datos correctos en el formulario).

Nota 1: El voucher es válido hasta el 04 de Octubre, así que se sugiere tener un nivel adecuado para este tipo de exámenes.

Nota 2: Abstenerse las personas que no vivan cerca o no tengan las posibilidades de ir a un centro de exámenes autorizado (consultar en www.prometric.com o www.vue.com), de este modo evitamos desperdiciar el voucher.

Categories
Artí­culos Varios

ObjectDock en Flash – Lanzador de programas de MacOS en Flash

La aplicación para windows que simula el lanzador de programas de MacOS X de Apple pero en Flash, traté de buscarlo por internet pero al no encontrarlo decidí empezar a hacerlo en flash, aunque no perfecto ni menos terminado, si alguien se anima a mejorarlo click al contacto, e aquí el código y un demo (swf):

El Código:
object-dock-flash-swf-incluido.zip

Como luce:

La dirección de la aplicación windows es http://www.objectdock.com/ ahi hay algunas capturas de pantalla.