[ASP.NET] Validar un Dropdownlist dentro de un UpdatePanel

10 08 2009

Este caso se da mucho cuando tenemos algo como el siguiente formulario:

image

En donde el primer ddl (dropdownlist) se llena con un origen de datos (sqldatasource, objectdatasource, etc) y según el país que seleccione se llena el estado, esto dentro de un UpdatePanel para que solo se refresque estos controles de nuestra página.

Aquí tenemos que validar que el usuario seleccione una opción que no sea la predeterminada, para esto existen varias maneras de hacerlo, aquí un post de como hacer esto:

http://geeks.ms/blogs/rduarte/archive/2008/10/19/validar-dropdownlist-con-requiredfieldvalidator-y-customvalidator.aspx

Solo que con alguna de estas opciones dentro del UpdatePanel no funciona, ¿por qué?, la verdad no lo sé con exactitud, por eso les ofrezco esta otra solución, yo valido los ddl con un CompareValidator de la siguiente manera:

 

<asp:DropDownList ID="ddlPais" runat="server" Width ="250px"
                  AutoPostBack="True" DataTextField="Nombre"
                  DataValueField="Id" AppendDataBoundItems="True" >
</asp:DropDownList>
<asp:CompareValidator ID="cvPais" runat="server"
            ControlToValidate="ddlPais" Display="Dynamic"
            Text="<strong>*</strong>" SetFocusOnError="true"
            Type="Integer" Operator="GreaterThan"
            ValueToCompare="0" ValidationGroup="valPaso1"></asp:CompareValidator>
                   

Y lleno los siguientes ddl en su respectivo evento DataBound para el valor por Default, y en el evento change lleno los datos correspondientes a la selección del ddl anterior:

 

Protected Sub ddlPais_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlPais.DataBound
    Me.ddlPais.Items.Insert(0, New ListItem("--Seleccione un País--", 0))
End Sub

Protected Sub ddlPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlPais.SelectedIndexChanged
    'Aquí llenamos el ddl estado con el valor seleccionado del ddlPais
End Sub

Espero que esto les sea de utilidad.

Saludos.





[ASP.NET] Ejecutando código JavaScripts desde HTML ó desde Code-Behind

17 07 2009

Creo que la mayoría sabemos que en el desarrollo Web siempre hacemos uso de los scripts y creo que todos hemos tirado mínimo una función de Javascript así que este post trata de como trabajar con estos script en ASP.NET.

1.- Escribiendo Javascript desde el HTML y llamándolo desde el Code-Behind.

Código HTML

<script type="text/javascript" >
    function validarTextbox(){
        if (document.forms[0].txtNombre.value == "") {
            alert('El Cuadro de texto no puede estar vacio');
            return false;
        }
        return false;
    }
</script>

Llamándolo desde el Code-Behind

protected void Page_Load(object sender, EventArgs e)
{
    btnAceptar.Attributes.Add("onclick", "javascript:return validarTextbox();");
}

2. Escribir y llamar una función Javascript desde el Code-Behind

protected void Page_Load(object sender, EventArgs e)
{
    //cadena que contiene el script a ejecutar
    string stringJavascript;
    stringJavascript = "<script language=\"javascript\"> function poponload(){\n";
    stringJavascript += "testwindow = window.open(\"demo.htm\",\"Window\");\n";
    stringJavascript += "testwindow.moveTo(0,0);\n";
    stringJavascript += "return false;}";
    stringJavascript += "</script>";
    //registramos el script
    ClientScript.RegisterStartupScript(this.GetType(), "strJavascript", stringJavascript);
    //lo asignamos al evento del boton
    btnAceptar.Attributes.Add("onclick", "return poponload()");
}

3.- Escribir Javascript desde el Code-behind y llamarlo desde HTML

Código en el lado del Servidor

protected void Page_Load(object sender, EventArgs e)
{
    string jscript = string.Empty;
    jscript = "<script language=\"javascript\">function Mensaje(){alert" +
        "(\"Client Function in javascript is call\")}</script>";
    ClientScript.RegisterStartupScript(this.GetType(), "sJscript", jscript);
}

Llamándolo desde HTML

<a onclick="Mensaje();">
    <asp:Label id="Label1" runat="server" Width="281px" ForeColor="#8080FF">
        Clic para llamar a la función del Code-Behind
    </asp:Label>
</a>

4. RegisterClientScriptBlock

Esto lo podemos usar si es que no necesitamos que se ejecute una función que creamos, sino solo una parte de un script, aquí el como hacerlo:

Si queremos mostrar una alerta podemos hacer lo siguiente, en el HTML escribimos:

<script language="javascript">
    function mensaje() {
        alert("funcion llamada desde el Code-Behind");
    }
</script>

y si lo queremos ejecutar desde el Code-Behind según lo que escribí arriba sería así:

 

protected void Button1_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript
            (this.GetType(), "jsKey", "javascript:mensaje();", true);
    }

Pero si se dan cuenta aquí solo es un código Javascript relativamente corto, entonces aquí es donde podemos usar RegisterClientScriptBlock y para ello lo hacemos así:

protected void Button2_Click(object sender, EventArgs e)
{
    ClientScript.RegisterClientScriptBlock
        (GetType(), "javascript", "<script>alert(" +
        "\"Este es un Bloque de código javascript \")</script>");
}

Actualización: 2 horas más tarde :P

5. Registrar el script en el evento Load en el Header de nuestra página:

por lo regular cuando agregamos un script solo lo arrastramos desde el explorador de soluciones al Header de nuestra página y nos genera código HTML más o menos así:

<script src="js/mensaje.js" type="text/javascript"></script>

Pero si se han dado cuenta la etiqueta Head en asp.net tiene un atributo runan=”server”, lo que significa que podemos manipularlo desde el Code-Behind lo que nos permite registrar un script desde el lado del servidor, aquí el como hacerlo, primero creamos una función que se llama RegistrarScript:

private void RegistrarScript()
{
    HtmlGenericControl script = new HtmlGenericControl("script");
    script.Attributes.Add("type", "text/javascript");
    script.Attributes.Add("src", "js/mensaje.js");
    Header.Controls.Add(script);
}

Aquí nos indica que en nuestro proyecto tenemos un Javascript llamada “mensaje.js” dentro de una carpeta llamada js. Este método lo ponemos dentro del evento load de nuestra página:

protected void Page_Load(object sender, EventArgs e)
{
    RegistrarScript();
    Button1.Attributes.Add("onclick", "javascript:return mensaje()");
}

Y de esta manera podemos registrar también nuestros script, e incluso las hojas de estilo.

Saludos.

Etiquetas de Technorati: ,,





[IE8] IE8 disponible en 20 idiomas más

2 06 2009

El día de hoy el equipo de IE8 anuncio la disponibilidad de Internet Explorer 8 en 20 idiomas más, lo que quiere decir que actualmente IE8 esta diponible en un total de 63 idiomas :D .

Si aun no tienes Internet Explorer 8 visita esta página para poder descargarlo en tu idioma:

http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx

Aquí la lista de los nuevos idiomas:

Language

Code

Windows
Vista x86

Windows
XP x86

Albanian

SQI

Yes

Yes

Assamese

ASM

Yes

-

Basque

EUQ

Yes

Yes

Bengali (Bangladesh)

BGD

Yes

-

Bengali (India)

BNG

Yes

Coming soon

Gujarati

GUJ

Yes

Yes

Indonesian

IND

Yes

Yes

Kannada

KDI

Yes

Coming soon

Kazakh

KKZ

Yes

Yes

Konkani

KNK

Yes

Yes

Kyrgyz

KYR

Yes

-

Malay (Brunei Darussalam)

MSB

Yes

-

Malay (Malaysia)

MSL

Yes

Yes

Malayalam

MYM

Yes

Coming soon

Marathi

MAR

Yes

Yes

Oriya

ORI

Yes

-

Punjabi

PAN

Yes

Coming soon

Tamil

TAM

Yes

Yes

Telugu

TEL

Yes

Coming soon

Uzbek (Latin)

UZB

Yes

-

Saludos!!!

Etiquetas de Technorati: ,




[Windows Form] Identificando los clic’s en un Control Button

2 06 2009

Por lo regular todo mundo cuando trabaja con Windows Form y hacemos uso de un control Button por lo regular solo usamos el Evento Click, pero en realidad podemos identificar si hacemos clic con el botón derecho del mouse, con el izquierdo o simplemente clic que es el que todos conocemos, pues bien aquí como identificar los clic’s en un control Button.

Para esto lo vamos a realizar en el evento MouseDown del Botón el cual tiene lugar cuando el puntero del mouse se encuentra sobre el componente y pulsa un botón del mouse y escribimos el siguiente Código:

private void button1_MouseDown(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.Left:
            MessageBox.Show("Se presionó el botón isquierdo del mouse");
            break;
        case MouseButtons.Right:
            MessageBox.Show("Se presionó el botón derecho del mouse");
            break;
        case MouseButtons.Middle:
            MessageBox.Show("Se presionó el botón central del mouse");
            break;
    }
}

De esta manera podemos identificar que botón del mouse se presiono sobre nuestro control Button. Espero que les sea de ayuda.

Saludos!

Etiquetas de Technorati: ,,,,




[C#] Haciendo la tarea xD, string, palíndromo, invertir una cadena, etc.

1 06 2009

Este post en respuesta aun comentario en el post de palindrome en C# – explicación. Tengo que mencionar que cualquier otro día (es decir; un fin de semana o un día que no sea lunes xD) no hubiera contestado este comentario con un post, solo hubiera dicho, amigo piénsale un poco y seguro encuentras la respuestas, pero esta vez he llegado al trabajo y como no tengo mucho que hacer aquí rápido la solución a su tarea, solo espero que su profesor no vea este post xD.

El comentario lo pueden revisar aquí:

http://mspnor.wordpress.com/2008/08/10/palindrome-en-c-explicacin/#comment-330

Y aquí la mi pequeño programa que espero que funcione y les sirva (lo pongo por partes para que se entienda):

Main:

static void Main(string[] args)
{
    //variables
    StringBuilder frase = new StringBuilder();

    //Menú
Menu:
    Menu();
    int opcion = int.Parse(Console.ReadLine());
    switch (opcion)
    {
        case 1:
            Console.Clear();
            goto Leer;
        case 2:
            Console.Clear();
            MostrarFrase(frase);
            Console.ReadLine();
            goto Menu;

        case 3:
            Console.Clear();
            MostrarTotalLetras(frase);
            Console.ReadLine();
            goto Menu;

        case 4:
            Console.Clear();
            FraseInvertida(frase);
            Console.ReadLine();
            goto Menu;

        case 5:
            Console.Clear();
            EsPalindrome(frase);
            Console.ReadLine();
            goto Menu;

        default:
            break;
    }

Leer:
    try
    {
        Console.WriteLine("Cantidad de Palabras que tendrá la frase?");
        int totalPalabras = int.Parse(Console.ReadLine());

    Repetir:
        Console.Clear();
        Console.WriteLine("Introduce Frase: ");

        string[] frase1 = Console.ReadLine().Split(' ');

        for (int i = 0; i < frase1.Length; i++)
        {
            if (totalPalabras == frase1.Length)
            {
                if (i == (frase1.Length - 1))
                    frase.Append(frase1[i]);
                else
                    frase.Append(frase1[i] + " ");
            }
            else if (totalPalabras < frase1.Length)
            {
                Console.Clear();
                Console.WriteLine("Te excediste en el total de palabras!");
                Console.WriteLine("Solo se aceptan {0} palabras para esta frase y escribiste {1}", totalPalabras, frase1.Length);
                Console.WriteLine("Inténtalo de nuevo..");
                Console.ReadLine();
                goto Repetir;
            }
            else
            {
                break;
            }
        }
        Console.ReadLine();
        goto Menu;
    }
    catch (Exception ex)
    {
        Console.Clear();
        Console.WriteLine("Debes seleccionar una opción, escribe un número");
        Console.ReadLine();
        goto Leer;
    }

}

Menú:

private static void Menu()
{
    Console.Clear();
    Console.WriteLine("");
    Console.WriteLine("1 – Ingresar una nueva frase.");
    Console.WriteLine("2 – Mostrar la frase actual.");
    Console.WriteLine("3 – Contar la cantidad de letras de la frase actual.");
    Console.WriteLine("4 – Invertir frase actual.");
    Console.WriteLine("5 – ¿Es la frase actual un palíndromo?");
    Console.WriteLine("6 – Terminar el programa.");
    Console.WriteLine("");
    Console.Write("Elige una Opción: ");
}

Mostrar Totales Letras:

private static void MostrarTotalLetras(StringBuilder frase)
        {
            Console.WriteLine("El total de letras en la frase es: {0}",frase.ToString().Length);
        }

Frase Invertida:

private static void FraseInvertida(StringBuilder frase)
{
    Console.WriteLine("Frase Invertida: {0} ",invertir(frase.ToString()));
}

Función Invertir:

private static string invertir(string frase)
{
    string invertido = "";
    for (int i = frase.Length - 1; i >= 0; i--)
        invertido = invertido + frase.Substring(i, 1);
    return invertido;
}

Determinar si es Palíndromo la frase:

 

private static void EsPalindrome(StringBuilder frase)
{

    string[] palabras = frase.ToString().Split(' ');
    if(verificar(0,palabras, palabras.Length) == 1)
        Console.WriteLine("la frase es palindrome...");
    else if(verificar(0,palabras, palabras.Length) == 3)
        Console.WriteLine("Inténtalo de nuevo...");
    else
        Console.WriteLine("La frase no es palindrome...");

}

Función Verificar:

public static int verificar(int pos, string[] palabra, int largo)
{
    try
    {
        //primera condición, si la palabra en su posición 0 es igual a la ultima,
        //por ejemplo "ojo", verifica si la pos 0 ('o') es igual a la ultima (3-0-1= 2) que también es una 'o'
        if (palabra[pos] == palabra[largo - pos - 1])
        {
            //aquí solo nos indica que si las pos es menor que largo - pos entra e incrementa pos
            //cuando llega al centro de la palabra, nos indica que es un palindrome
            if (pos < largo - pos)
                return (verificar(++pos, palabra, largo));
            else
                return (1);
        }
        //si no entra al if en donde se comaparan los caracteres
        return (0);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Aun no existe una frase para verificar. Primero debes ingresar una frase");
        return 3;
    }

}

Creo que la explicación esta de más, ademas se pueden dar una idea de que hace cada función o método si revisan el comentario del otro post.

Aquí pueden descargar el código fuente:

image

Saludos!

Nota: no hago tareas de los lectores del blog, esta ves es porque no tengo otra cosa que hacer y el asunto es relativamente sencillo.





[Windows Form] Full Screen en un aplicación Windows Form

26 05 2009

Si alguna vez tienen la necesidad de aplicar la posición y tamaño de un Formulario en pantalla completa, solo tenemos que hacer un par de cosas.

1. Colocar la propiedad StartPosition en Manual

2. Colocar el siguiente código en el evento Load de nuestro formulario:

this.Size = SystemInformation.PrimaryMonitorSize;

otra forma de hacerlo desde Visual Basic, que a mi en lo particular no me agrada es la siguiente:

Me.MaximumSize = New Point(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Me.MinimumSize = New Point(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)

Aquí el como hacerlo por si les sirve, se que es muy sencillo, pero me imagino que ha alguien le debe servir.

Saludos!

Etiquetas de Technorati: ,,




[off] Televisa la misma de siempre @beatandbyte

20 05 2009

Televisa sigue creyendo que el publico mexicano es idiota y no se da cuenta de que siempre se roba contenidos y los comercializa como propios.

Esta vez Facundo realiza un sketch pirateado que saco de You Tube chequen los videos.

teidiotiza_logo-500x437

Este es el fusil de Facundo

El Original de You Tube

Por mucha gente ha dejado de ver televisión y sobre todo a Televisa por la calidad de retrete de sus programas

Esta es un copia con alevosía del blog http://www.beatandbyte.com de mi amigo Crenz, así que ustedes juzguen y díganme que opinan





[Humor] Y los sueños, sueños son @palomitas y maíz

14 05 2009

De lujo este post que encontré en palomitas y maíz, aquí lo dejo para que se rían un rato.

3388634704_2b640ff2e4_b

Vía: palomitas y maíz





[MSDN] Mi suscripción ha caducado

11 03 2009

El día de hoy, me preguntaron si mi cuenta predeterminada al MSDN aun estaba activa (esta cuenta nos fue proporcionada gracias al programa Microsoft Student Partners). Bien lo primero que hice fue ir a la página principal de MSDN México y loguearme; pero cual fue mi sorpresa …..

image

Cosa muy extraña, porque hace aproximadamente unos 3 o 4 meses que recibí un mail de reactivación, es decir; que algo extraño a ocurrido, ya que sin previo aviso la cuenta caduco. Aun sigo pensando en las posibles causas, ya que tenga algo les platico, por el momento me quedo sin acceso al Software a ver  que pasa.

@nor





[SQL] Restando Fechas

7 02 2009

Este post es en respuesta a una pregunta de un lector de blog, que necesita restar una fecha. Esto es más sencillo de lo que parece, vamos a trabajar con un SQL, si necesitas ponerlo en un Gridview solo haces la consulta o el SP y listo.

Lo primero es saber que tipo de formato vamos a usar ya que desde SQL Server 2005 cuando trabajamos con fechas tenemos muchas opciones, por ejemplo si ejecutamos la siguiente instrucción T-SQL

SELECT GETDATE() as Fecha_1,
CONVERT(VARCHAR(12),GETDATE(),100) as Fecha_2,
CONVERT(VARCHAR(12),GETDATE(),113) as Fecha_3,
CONVERT(VARCHAR(12),GETDATE(),102) as Fecha_4,
CONVERT(VARCHAR(12),GETDATE(),103) as Fecha_5,
CONVERT(VARCHAR(12),GETDATE(),106) as Fecha_6

Tenemos como resultado lo siguiente:

image

Como pueden observar los formatos son diferentes y aquí es donde podemos elegir el cumpla mejor nuestras expectativas. Ahora vamos a ver como restamos unas fechas

Para esto solo vamos a usar la funcion DATEDIFF  que devuelve un entero de los límites datepart que se han cruzado entre los valores startdate y enddate especificados.

Una forma de hacer esto es:

select
datediff(dd, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Dias

Que nos muestra la diferencia en días que en este caso es 202, para obtener mes, día y año solo agregamos un par de datediff más y listo. Algo como esto:

select
datediff(dd, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Dias,
datediff(mm, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Mes,
datediff(yy, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Año

Que nos arroja como resultado lo siguiente:

image

Entonces de esta manera obtenemos la diferencia entre las fecha inicial y la fecha final, y dependiendo de esto podemos convertir el resultado en un DateTime de nuevo o en un Varchar o el tipo de dato que mejor les parezca para su aplicación.

Espero que esto les ayude y les sirva, si necesitan obtener la diferencia en Horas, Minutos, etc, aquí les dejo una tabla con las abreviaturas correspondientes.

  • Parte de la fecha
  • Abreviaturas
  • año
  • yy, yyyy
  • trimestre
  • tt, t
  • mes
  • mm, m 
  • dia del año
  • da, a 
  • dia
  • dd, d 
  • semana
  • sm, ss 
  • hora
  • Hs
  • minuto
  • mi, n
  • segundo
  • ss, s 
  • milisegundo
  • Ms

@nor

Etiquetas de Technorati: ,,,




[Word] Como cerrar los documentos de Word a partir de una instancia

4 02 2009

En el post anterior vimos como cerrar los objetos de Word en base a la lista del proceso del Sistema. En este ejemplo vamos a ver como cerrarlos a partir de una instancia, esto lo podemos usar cuando trabajamos con objetos de Word para verificar que el usuario haga algo o que se yo, pero aquí el ejemplo.

Imports Word = Microsoft.Office.Interop.Word

Module Module1

    Sub Main()

        'Variables
        Dim AppWord As New Word.Application
        Dim doc As Word.Document

        'Agregamos cuatro documentos en blanco y escribimos un texto
        For i As Integer = 0 To 4
            AppWord.Documents.Add()
            AppWord.Application.WindowState = Word.WdWindowState.wdWindowStateNormal
            AppWord.Visible = True
            AppWord.ActiveDocument.Sections(1).Range.Text = "Mi Documento numero:  " & i
        Next

        'Aquí cerramos todos los documentos sin guardar cambios
        For Each doc In AppWord.Documents
            doc.Close(SaveChanges:=False)
        Next
        AppWord.Quit(SaveChanges:=False)

    End Sub

End Module

Explicando el código.

Primero creamos una instancia de Word y un documento para poder hacer el recorrido por el arreglo de Documentos abiertos.

En el For creamos 5 documentos maximizamos la ventana y la mostramos, al mismo  tiempo que agregamos un texto al mismo.

Después por medio del For each recorremos todos los documentos que creamos (incluso sirve si los abrimos), los cerramos sin guardar cambios.

Por ultimo cerramos nuestra instancia de Word.

Espero que les sea de utilidad.

Saludos.

@nor.

Etiquetas de Technorati: ,,,




[Word] Cerrar todas las instancias de Word en el Sistema

4 02 2009

Muchas veces tenemos la necesidad de cerrar o tronar los procesos de un objeto de Office, en este caso de Word. El siguiente ejemplo muestra como hacer.

Imports System.Diagnostics

Module Module1

    Sub Main()
        Dim procs() = Process.GetProcesses
        Dim pr As Process
        For Each pr In procs
            If (pr.ProcessName = "WINWORD") Then
                pr.Kill()
            End If
        Next

    End Sub

End Module

Utilizamos el nombre de espacios Diagnostics, que nos permite obtener los procesos que se están ejecutando en el Sistema. lo que hacemos es obtener un arreglo de dichos procesos para después recorrerlos e identificar cuales son los que queremos tronar. Por ultimo ejecutamos el método Kill el cual detiene inmediatamente el proceso asociado.

Espero que les sea de utilidad, y como se observa en el ejemplo podemos aplicar esto a cualquier proceso, e incluso ejecutar algún otro que no este corriendo.

Saludos.

 

Etiquetas de Technorati: ,,,,




Feliz Navidad al estilo MSDN

23 12 2008

El día de hoy, encuentro en mi bandeja de entrada un mail de MSDN con que que muestran un video y un código muy peculiar (muy geek diria yo) para mandar un mensaje a todos aquellos que de una u otra manera estamos en contacto con la información de este excelente grupo (mínimo leyendo los mails :P ). Así que aquí les dejo el código.

El equipo de MSDN quiere felicitaros la Navidad de una forma diferente.
Hemos creado una felicitación navideña en vídeo especialmente subtitulada para desarrolladores!

{

Hello world!
msdn.IndexOf(nosotros) >= 0

while(DateTime.Today <= new DateTime(DateTime.Today.Year + 1, 1, 1))
if (e.KeyCode == Keys.F1) e.Handled = true;
tu.GetType() == desarrollador || tu == typeof(architect) || tu is object
using navidad;
Console.WriteLine("
var vosotros  = from persona in comunidades select persona;
foreach ( v in vosotros) {  v.gracias(); }
WITH Software
UPDATE Mundo SET Mejor=1
main()
Compile complete — 0 errors, 0 warnings
tu.Children() + tu.Parent() + tu.Siblings()
friend
internal friend
foreach(IAmigable p in mundo)
SELECT * TOP 1
currentYear.Dispose(); new Year(++yearIndex);

}

 

 

Nota: para enteder al código tienen que ver el video, la verdad es que me ha gustado mucho. De mi parte les deseo una Feliz Navidad por igual!

Saludos!

Etiquetas de Technorati: ,




Microsoft México en el Teletón 2008

8 12 2008

En nuestro país, los días 5 y 6 de Diciembre se realizo en Teletón en el cual estuvo presente la aportación de Microsoft México. En esta aportación estuvo presente nuestro buen amigo Rubén Mugartegui representando a Microsoft México y anunciando la participación de los estudiantes mexicanos en el programa ImgineCup 2009, así que aquí les dejo el video de esta aportación y espero que participen en la versión del próximo año de ImagineCup





Amigos y conocidos, lo que no es un Informático

6 12 2008

Me he encontrado un video que va mucho con la realidad, me identifico bastante y al verlo pasan por mi mente las caras de muchos amigos y conocidos, que piensan que podemos resolver todo tipo de problemas que se vienen con las computadoras, que subestiman nuestro conocimiento preguntando cosas como: ¿Por qué no se conecta el Ares?, ¿Por qué el internet esta muy lento?, ¿Por qué se reinicia mi computadora? o cosa que me pasa mucho sobre todo por el Messenger ¿Cómo le hago para poner un video de youtube en una presentación de PowerPoint :S? y lo que es peor las personas que estudian Ingeniería en computación, en sistemas o informática, me preguntan cosas como: ¿Qué antivirus instalo? o ¿Por qué no puedo instalar un .exe en MAC?. Para no hacer esto tan largo aquí un video.

Aunque un poco manchado con el IE Explorer, y algunos programas de MS, pero estoy muy de acuerdo con lo que dice, así que aquí lo dejo y espero sus comentarios





Las 10 cosas que más fastidian a los programadores

21 10 2008

buenas noches!!, el día de hoy en geeks.ms me encontré un muy buen post, que la verdad me ha hecho reír un poco, porque estoy muy de acuerdo con lo que ahí se menciona, a continuación les dejo el post original. Aquellos que se muevan por el mundo del desarrollo me imagino que estarán de acuerdo con mas de uno de los puntos aquí comentados.

Aaarg!Me ha parecido muy interesante y divertido el post de Kevin Pang, “Top 10 Things That Annoy Programmers“, en el que obtiene los factores más irritantes para los desarrolladores combinando su propia experiencia con los resultados de una pregunta realizada en StackOverflow, la famosa comunidad de desarrolladores promovida por los populares Joel Spolsky y Jeff Atwood.
Además de estar casi totalmente de acuerdo con los puntos expuestos en su post, que enumero y comento a continuación, añadiré algunos más de propia cosecha de agentes irritantes.

  • 10. Comentarios que explican el “cómo” y no el “qué”. Tan importante es incluir comentarios en el código como hacerlo bien. Es terrible encontrar comentarios que son una simple traducción literal al español del código fuente, pues no aportan información extra, en lugar de una explicación de lo que se pretende hacer. Muy bueno el ejemplo de Kevin en el post original… ¿eres capaz de decir qué hace este código, por muy comentado que esté?
    r = n / 2; // Set r to n divided by 2
    
    // Loop while r - (n/r) is greater than twhile ( abs( r - (n/r) ) > t ) {    r = 0.5 * ( r + (n/r) ); // Set r to half of r + (n/r)} 
  • 9. Las interrupciones. Sin duda, el trabajo de desarrollador requiere concentración y continuidad, y las interrupciones son las grandes enemigas de estos dos aspectos. Una jornada de trabajo llena de llamadas, mensajes o consultas de clientes, proveedores, jefes o compañeros puede resultar realmente frustrante, a la vez que la distracción que introduce suele ser una fuente importante de errores en las aplicaciones.
  • 8. Ampliación del ámbito. Una auténtica pesadilla, sobre todo cuando se produce durante el desarrollo, consistente en el aumento desproporcionado del alcance de determinadas funcionalidades o características del software a crear. Es especialmente desmotivador si, además, no viene acompañado por el aumento del tiempo o recursos necesarios para su realización.Kevin incluye en su artículo un ejemplo, algo exagerado pero ilustrativo, de sucesivas ampliaciones de ámbito que convierten un requisito factible en un infierno para el desarrollador; seguro que os recuerda algún caso que habéis sufrido en vuestras propias carnes:
    • Versión 1: Mostrar un mapa de localización

      – Bah, fácil, sólo tengo que crear una imagen; incluso puedo basarme en algún mapa existente que encuentre por ahí

    • Versión 2: Mostrar un mapa 3D de localización– Uff, esto ya no es lo que hablamos; tendré que currarme bastante más el diseño, y ya no será tan fácil partir de alguno existente…
    • Versión 3: Mostrar un mapa 3D de localización, por el que el usuario pueda desplazarse volando– ¡!
  • 7. Gestores que no entienden de programación. Otro motivo común de irritación entre los desarrolladores es la incapacidad de gestores para comprender las particularidades de la industria del software en la que trabajan. Este desconocimiento genera problemas de todo tipo en una empresa y suponen un estrés terrible para el desarrollador.
  • 6. Documentar nuestras aplicaciones. Lamentablemente, en nuestro trabajo no todo es desarrollar utilizando lenguajes y tecnologías que nos divierten mucho. Una vez terminado un producto es necesario crear guías, manuales y, en general, documentación destinada al usuario final que, admitámoslo, nos fastidia bastante escribir.
  • 5. Aplicaciones sin documentación. A pesar de que entendamos y compartamos el punto anterior, también nos fastidia enormemente tener que trabajar con componentes o librerías partiendo de una documentación escasa o nula. Si lo habéis sufrido, entenderéis lo desesperante que resulta ir aprendiendo el significado de las funciones de un API usando el método de prueba y error.
  • 4. Hardware. Especialmente los errores de hardware que el usuario percibe como un fallo de la aplicación son normalmente muy difíciles de detectar: fallos de red, discos, problemas en la memoria… por desgracia, hay un amplio abanico de opciones. Y lo peor es que por ser desarrolladores de software se nos presupone el dominio y control absoluto en asuntos hardware, lo que no siempre es así.
  • 3. Imprecisiones. Aunque Kevin lo orienta al soporte al usuario, el concepto es igualmente molesto en fases de diseño y desarrollo del software. Las descripciones vagas y confusas son una causa segura de problemas, sea en el momento que sea.Son irritantes las especificaciones imprecisas, del tipo “esta calculadora permitirá al usuario realizar sumas, restas, multiplicaciones y otras operaciones”… ¿qué operaciones? ¿divisiones? ¿resolver ecuaciones diferenciales?

    Tampoco es fácil encajar un mensaje de un usuario tal que “me falla el ERP, arréglalo pronto“… A ver. El ERP tiene cientos de módulos, ¿fallan todos? ¿podríamos ser más concretos?

  • 2. Otros programadores. Como comenta Kevin, el malestar que provoca a veces la relación entre programadores bien merecería un post independiente, pero ha adelantado aspectos que, en su opinión, hace que a veces el trato con los compañeros sea insoportable:
    • Personalidad gruñona, hostilidad
    • Problemas para comprender que hay que dejar de debatir la arquitectura del sistema y pasar a realizar las tareas
    • Falta de habilidad para mantener una comunicación efectiva
    • Falta de empuje
    • Apatía hacia el código y el proyecto
  • 1. Tu propio código, 6 meses después. Sí, es frustrante estar delante de un código aberrante y darte cuenta de que tú eres el autor de semejante desastre. Y tras ello llega la fase de flagelación: ¿en qué estaba pensando cuando hice esto? ¿cómo fui tan estúpido? uff…Este hecho, sin embargo, forma parte de la evolución tecnológica, personal y profesional; todos estos factores están en continuo cambio, lo que hace que nuestra forma de atacar los problemas sea distinta casi cada día.

Siempre acaba pagándola el más tonto...Y hasta aquí la lista de Kevin en su post, ni que decir tiene que comparto sus reflexiones en la mayoría de los puntos. Por mi parte, añadiría los siguientes agentes irritantes que conozco por experiencia propia o de conocidos:

  • Extra 1. Requisitos evolutivos, como una ampliación del ámbito del punto 8 ;-) , que son aquellos que van cambiando conforme el desarrollo avanza y que obligan a realizar refactorizaciones, descartar código escrito, e introducir peligrosas modificaciones, afectando a veces por debajo de la línea de flotación del software. Más rabia produce, además, cuando se atribuyen una mala interpretación por parte del desarrollador de una especificación imprecisa.
  • Extra 2. Problemas en el entorno. Nada más frustrante que cortes en el suministro eléctrico, cuelgues, problemas en el hardware, lentitud en los equipos de trabajo o de acceso a información… a veces parece que tenemos que construir software luchando contra los elementos.
  • Extra 3. El “experto” en desarrollo de software. Clientes, gestores y otros individuos que utilizan frecuentemente, y sin conocimiento alguno de causa, expresiones como “Esto es fácil”, “Una cosa muy sencilla”, “¿Eso vas a tardar en hacer esta tontería?”…. A veces no es fácil hacer entender que la percepción externa de la complejidad es absolutamente irreal, y suele ser una causa frecuente de desesperación para los desarrolladores.
  • Extra 4. Usuarios corrosivos, que lejos de colaborar durante el desarrollo o la implantación de un sistema, aprovechan la ocasión para arremeter contra la aplicación, organización, jefes, compañeros, el gobierno, o lo que se ponga por delante. Es de justicia decir que muchas veces este comportamiento es debido a una mala gestión interna del proyecto, pero desde el punto de vista del profesional del sofware que sólo quiere realizar lo mejor posible su trabajo son una auténtica pesadilla.

En fin, que ya a estas alturas es fácil ver que hay bastantes cosas que fastidian a los desarrolladores, y seguro que podríamos añadir muchas más; algunas son evitables, otras son inherentes a la profesión y hay que aprender a convivir con ellas, pero en cualquier caso son un interesante motivo de reflexión.

¿Y a tí, qué es lo que más te fastidia?

Espero sus opiniones y que sumen a esta lista de lo que a ustedes como programadores les molesta o fastidia.

Post Original: http://geeks.ms/blogs/jmaguilar/archive/2008/10/19/las-10-cosas-que-m-225-s-fastidian-a-los-programadores.aspx

Fuente: http://geeks.ms





Descargas de código de Silverlight disponibles en VB y C#

6 10 2008

Una buena noticia, el equipo de Silverlight pone a nuestra disposición todas las descargas de código en C# y Visual Basic, así que los invito a que revisen este material y vean como va este producto :D

Url: http://silverlight.net/learn/videocat.aspx?cat=2





Ver Futobol en vivo!!

4 10 2008

Haciendo un paréntesis en el blog, escribo para dar información de donde podemos ver futbol en vivo, esto porque navegando para poder ver el partido de Barcelona (que por cierto va ganando 5-1 al Atlético de Madrid), me encontré con esta página en donde lo estoy viendo, así que alguna vez quieren ver un partido que se transmite en tv abierta o por el cable, visiten esta página para ver sus partidos favoritos.

URL: http://www.rojadirecta.org/

Etiquetas de Technorati: ,




Nuevo sitio de desarrollo Web de Microsoft

2 10 2008

Plataforma Web de Microsoft para: el hogar, diseño, foros, blogs, etc. Todo sobre como poner en practica las tecnologías de Microsoft para tener una web innovadora. :-)

Se ve bastante bien el sito, en donde encontramos infinidad de recursos, aquí una miradita:

webms

 

Como se observa en la figura, podemos acceder a información sobre eventos, blogs, productos, etc. así que les recomiendo que le echen un vistazo y me cuenten como les va, seria una buena idea hacer algo así para estudiantes, no creen?

URL: http://www.microsoft.com/web/default.aspx





Semana de Visual Studio 2010 en Channel 9

2 10 2008

La noticas, es que ya se esta cocinando la nueva versión de Visual Studio, por el momento conocido como Visual Studio 2010 (seguramente con el tiempo cambiara de nombre). Definitivamente los chicos de MS no paran, aun no tiene mucho que salió VS 2008, unos meses después el SP1 de este, y ahora con la noticia de la nueva versión.

La intensión de este post es la de invitarlos a que chequen los videos que van a publicar en channel 9 por parte del propio equipo  del producto de VSTS, así que aquí les dejo la agenda de esta semana que parece interesante:

La agenda es la siguiente:

Etiquetas de Technorati: ,,,