sábado, 31 de mayo de 2008

Diagrama de flujo de la vida de un geek

Generalmente no hago replay de cosas que veo y que no han sido fruto de mis experiencias o mis pensamientos, pero esta es una de esas cosas que merecen ser difundidas como si se tratase de la palabra de Dios, jajaja U_U yo caigo en muchos de esos caminos. Denle click sobre la imagen pa que la vean bien.

Réquiem a una cartera-Parte 1

Hoy se acaba mayo, vaya mes...

Durante tres años consecutivos un grupo de alcohólicos amigos y yo asistimos a la espectacular feria de México, justo cuando mayo comenzaba. Y una vez más estuvo igual de intenso, excesivo e idiota que los dos años previos, es sin duda la cantina más grande del país y es genial. Sin embargo este año tuve un percance que me hizo tener que lidiar con el maldito sistema burócrata que lacera a nuestro México, me robaron, soy un enemigo a muerte de los trámites y creo que soy justo en ello.

Todo comenzó en Torreón, este año no pensaba asistir a la feria puesto que recién me había incorporado a mi nuevo trabajo y no iba a tener el tiempo para viajar los 500 kms. hasta Aguascalientes en tan solo un fin de semana, sin embargo al final ocurrieron una serie de eventos inesperados y me aventé el viajecito con incluso más kilómetros recorridos y llegué a Aguascalientes ñ_ñ.

Algo que me causó mucha impresión en las ocasiones anteriores fue el orden de la ciudad; pese a que casi medio millón de personas se pasan las noches bebiendo muuucho alcohol, nunca había pleitos ni inseguridad, el ambiente era bastante relajado. Este año, sin embargo, muchos cholos andaban por ahí y uno de ellos me asaltó, hasta eso, nada violento. El primer asalto de mi vida(en interior de la república uno no vive expectante del crimen como en el DF) ahí empezó el calvario. Se llevo mi cartera, eran como las 3am no traía más de $500 pero ahí dentro estaban mis tarjetas de débito donde depositan mi raya, algunas tarjetas de tiendas departamentales, mi credencial de elector y mi licencia para conducir, no es mucho pero vaya infierno.

Las tarjetas de débito

Era lo que más preocupaba, ahí estaba depositado todo mi sueldo y algunos pesos que he ahorrado, así que me apresure a cancelarlas pero...¿a qué número?¿dónde consigues los números 01 800 de los bancos en medio de tanto alcohol?

Uno de mis amigos se dio a la búsqueda del número al igual que yo, al final los dos conseguimos el de Banamex, ese era el banco de una de las dos tarjetas que debía cancelar la otra era de HSBC. El ruido a 500 metros a la redonda era ensordecedor por lo que me metí al baño de un restaurant y de ahí hable con mi TELCEL (sí yo también soy telcel u_u)

Rulas llamando al 01 800 de banamex...

Maquina Banamex: "Elija una de las opciones...digite el número de su tarjeta"

Demonios, no me lo sé, era nuevo en el trabajo y no me lo sabía (pudiera haber tenido 10 años trabajando ahí y tampoco me lo sabría ñ_ñ)

Total que un sujetillo me atendió.

Sujetillo Banamex: "blablabla, le atiende sujetillo"

Rulas: "Gracias, sujetillo, acabo de ser asaltado y mi tarjeta de débito estaba ahí, quisiera cancelarla"

Me interrogo sobre mi domicilio, nombre, fecha de nacimiento y al final...

Sujetillo Banamex: "¿Su tarjeta esta personalizada señor?"

Rulas: "Eh?"

Sujetillo Banamex: "Que si tiene su nombre en el plástico".

Rulas: "Ah...no"

Sujetillo Banamex: "Entonces no podemos hacer nada, tiene que tener su contrato a la mano"

Rulas: "Como que nada?, entonces que voy a hacer? esperar a que me roben?"

Sujetillo Banamex:"No podemos hacer nada señor"

Rulas: "Por eso!, me estas diciendo que tengo que esperar hasta el lunes y que me roben todo"

Sujetillo Banamex: "No podemos hacer nada"

Rulas: "Ah pendejo!, no puedes responder otra cosa, pareces un jodida grabadora, gracias por nada"

Total ahí voy yo todo tristecillo al bar donde estaban mis amigos y el buen Alejandro que había conseguido el número también me dice:

Ale: "We, ya está sólo necesito que des una información, vente vamos a hablar"

Rulas: "No we, ya me dijeron que no, porque no está personalizada y no tienen manera de localizarla"

Ale: "Vamos we! y chingate otra cheve"

Con pocos ánimos fui, y el repitió el mismo procedimiento, yo estaba muy desanimado y el hablaba con una sujetilla. Le preguntaron todos mis datos como lo había hecho el sujetillo anterior pero mi amigo siguió hablando y después de 3 minutos ya teníamos el número del reporte de cancelación, así de fácil.

What?! ¿cómo puede ser?, yo traté de persuadir al otro sujetillo al menos 15 minutos para que buscara una alternativa y nada, al punto tal que termine insultándole y mi amigo en cambio logró el cometido de manera transparente.

Esto me hizo pensar en lo triste que es el sistema, según el humor o disposición del que te atiende depende tu seguridad y tranquilidad, si en realidad no hubiera habido una manera de cancelar mi tarjeta el error hubiera sido mío y una grieta en el procedimiento de cancelación del banco, pero si todo dependió del sujetillo que me atendió, definitivamente es grave, ojalá y de verdad graben las llamadas "con fines de calidad" y despidan a ese tipo y muera en la pobreza y luego salga en el noticiero de la tarde (que yo no veo porque trabajo) diciendo "soy una víctima del gobierno y la crisis alimenticia mundial".

Con la tarjeta de HSBC me fue peor, el 01 800 al que llamé sólo estaba disponible de 8:00am a 6:00pm, ¡increíble! deberían estar 24/7, total que pese a mi frustración y tristeza seguimos en la fiesta hasta que amaneció y justo a las 8am hablé

Maquina HSBC: "Teclee el número de su tarjeta"

Y no me lo sabía y no pude hacer más, ni una opción ni otro número, nada; no había un ser humano que pudiera atender a otro. Total que llegamos a la casa y ahí busque un directorio y encontré otro número en el que por fin pude que cancelar mi tarjeta. Las departamentales si fueron muy fáciles.

Al final los cholos no fueron tan atrevidos como para comprar con mis tarjetas y mi dinero estuvo a salvo ñ_ñ pero yo pasé una noche de corajes y preocupaciones.

Ya en la tarde del siguiente día tras haber vencido una espantosa resaca, revisé el saldo de mi celular y añeñe, me había bajado casi 150 pesos... yo no sabía que en celular los 01 800 no son gratis, así que TELCEL también me robó ese día.

Demasiados recuerdos tristes por ahora, en la próxima entrega el caos post-asalto...no se lo pierda amable lector viene lo peor, trámites con el gobierno U_U horroroso.

sábado, 10 de mayo de 2008

Ejercicios para aprender a programar-ejemplo 3: Fizz Buzz

Hace ya un buen tiempo que soy un asiduo lector de Jeff Atwood su blog es definitivamente una referencia obligada para todos los que gustan de la tecnología y particularmente del desarrollo de software, ya hace un buen de tiempo me encontré uno de sus post en donde señalaba la grave crisis que existe a la hora de buscar programadores, pues muchos de los programadores no saben programar, por ahí señala que un gran número de desarrolladores tienen problemas en resolver problemas simples, que exigen apenas la mínima lógica de programación uno de ellos es el Fizz Buzz y aunque Jeff insistía en que no había posteado eso para que lo resolviéramos, puso un link donde te ponen de prueba escribir el código más compacto y eficiente posible para resolverlo, en aquel momento me llamo mucho la atención y empecé a tratar de hacerlo lo más compacto y eficiente, tras algunos intentos logré ponerme en las primeras posiciones, opriman ctrl+F y luego "Nikes" que así es como me conocen en el underground ¬¬ y por ahí me encontraran.

Ese es otro buen ejemplo para empezar a programar, intentenlo.

Hasta la próxima!

Ejercicios para aprender a programar -ejemplo 2: Reynolds

Otro ejemplo muy recurrente en la universidad son los problemas físicos y matemáticos, estos ofrecen un aprendizaje rápido sobre la precedencia de operadores y en algunos casos la comprensión de la lógica boleana. Debo mencionar que soy un asco en física, pero cuando uno se gana el pan con el oficio de programador se debe tener la capacidad de resolver problemas abstrayendo lo que necesite de la totalidad del problema

Objetivo:

Calcula el numero de Reynolds usando la formula (D*v*rho)/mu donde D = Diámetro, V= Velocidad, rho = Densidad mu = Viscosidad.

Escribe un programa que acepte todos los valores en unidades apropiadas sin preocuparse por conversión de unidades (ahora, si quieres…).

Si el numero es menor a 2100, Muestra “Flujo Laminar”, si está entre 2100 y 4000 muestra “Flujo Transicional” y si es mayor a 4000, muestra “Flujo Turbulento”.

Solución propuesta:

Fácil, sólo hay que seguir la fórmula mediante código.

Lo primero es hacer una pequeña clase que haga las veces de objeto de negocio de nuestro problema, es aquí donde se modela un escenario dado usando un diseño basado en objetos.

using System;
namespace Reynolds
{
    class Reynolds
    {
        //Las propiedades necesarias para calcular el número de Reynolds
        public float Diametro { get; set; }
        public float Velocidad { get; set; }
        public float Densidad { get; set; }
        public float Viscocidad { get; set; }
        //El solitario método que hace el trabajo
        public string MostrarResultado()
        {
            //Tan fácil como seguir la fórmula, hay que notar que la multiplicación está entre parentesis,
            //esto le indica al compilador que primero debe realizar las operaciones que esten dentro y el resultado
            //se dividirá entre la viscocidad
            float resultado = (Diametro * Velocidad * Densidad) / Viscocidad;
            if (resultado < 2100)
                return "Flujo Laminal";
            else if (resultado >= 2100 && resultado < 4000)
                return "Flujo Transicional";
            else if (resultado >= 4000)
                return "Flujo turbulento";
            else
                return "Error al calcular";
        }
    }

Y este sería el método main que sería quien solicitara los datos e invocaría el método de la clase "Reynolds" que hace la chamba.

using System;
namespace Reynolds
{
    class Program
    {

        static void Main(string[] args)
        {
            //Obtener todos los datos requeridos
            Reynolds reynolds = new Reynolds();
            Console.Write("Introduzca el valor del diamentro: ");
            reynolds.Diametro=float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la velocidad: ");
            reynolds.Velocidad = float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la densidad: ");
            reynolds.Densidad = float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la viscocidad: ");
            reynolds.Viscocidad = float.Parse(Console.ReadLine());

            //Imprimir el resultado
            Console.WriteLine("Según los valores introducidos el tipo de flujo es " + reynolds.MostrarResultado());
        }
    }
}

Hasta la próxima!

Les dejo un pequeño reto.

Modifica el programa anterior para que pregunte si “desea calcular de nuevo? (s/n) con “si” para pedir nuevos parámetros y “no” para salir. Intenta prevenir errores como que el usuario entregase mu = 0 usando Manejo de Excepciones.

jueves, 8 de mayo de 2008

Ejercicios para aprender a programar - ejemplo 1: Fibonacci

Últimamente me han comentado algunos amigos estudiantes y otros ya egresados ¬¬ "wey pon algo ahí en tu blog para aprender a programar" aunque creo que para programar de verdad hay que invertirle mucho tiempo y no podría yo proporcionar la bala de plata para hacerlo, el otro día me encontré una lista de ejercicios que me parecieron adecuados para despertar la lógica de programación. Lo interesante de esto es que quien los trate de resolver lo debe hacer en su lenguaje favorito o en el que necesite aprender en ese momento, yo los iré publicando y resolviendo en C#, con las ventajas del framework 3.5 de .net, por lo que muy probablemente la resolución de muchos parezca muy sencilla. Si alguien lo resuelve con otro lenguaje no dude en compartirlo.

Instrucciones: Calcula la serie de Fibonacci de un número dado.

Este es todo un clásico del primer semestre de informática, el despertar una lógica recursiva puede llegar a ser una de las principales herramientas de un programador, a continuación el pequeño código que realiza la tarea y aquí el wikipediazo de Fibonacci.

using System;

class Fibonacci

{

     public static int Fibonacci(int x)

     {

        if (x <= 1)

            return 1;

        return Fibonacci(x - 1) + Fibonacci(x - 2);

    }

 

    public static void Main()

    {

        string numero;

        int intNum;

        Console.Write("Dame un número: ");

        numero = Console.ReadLine();

        intNum = int.Parse(numero);

        Console.Write("Serie de Fibonacci: " + Fibonacci(intNum));

        Console.Read();

    }

}

Esta es una versión simple de como calcular la serie de fibonacci, hay un método (Fibonacci¬¬) que calcula el valor del número proporcionado menos uno y lo suma al valor del número proporcionado menos 2, al final todos caen en el condicional verdadero del if y las suma de los valores van formando el valor final, es difícil entenderlo así de golpe, les sugiero ponerle unos Console.Write dentro del if y antes del ultimo return para comprender mejor lo que pasa.

Y ya por último para los que han de estar bostezando de tan sencillo, les dejo la manera  á la 3.5 que esta interesante, sencilla y sumamente elegante.

public static int ShowSerie(int x)

{

     Func<int, int> fib = null;

     fib = n => n > 1 ? fib(n - 1) + fib(n - 2) : n;

     return fib(x);

}

Eso es todo por ahora, luego les pondré más ejemplitos, pongan sus soluciones.