You can be sure that you'll receive what you've ordered. Free courier shipping (over $300.00 orders).





20 mg
 
Package
Price
Per Item
Savings
Order

30 pills
+2 Free Viagra pills
$42.36
$1.41
 
add to cart
60 pills
+2 Free Viagra pills
$69.86
$1.17
$14.85 
add to cart
90 pills
+4 Free Viagra pills
$83.92
$0.94
$43.45 
add to cart
120 pills
+4 Free Viagra pills
$99.97
$0.83
$70.40 
add to cart
180 pills
+4 Free Viagra pills
$140.03
$0.78
$114.95 
add to cart
270 pills
+4 Free Viagra pills
$194.40
$0.72
$187.55 
add to cart
10 mg
 
Package
Price
Per Item
Savings
Order

60 pills
+2 Free Viagra pills
$62.08
$1.03
 
add to cart
90 pills
+4 Free Viagra pills
$81.99
$0.91
$11.00 
add to cart
120 pills
+4 Free Viagra pills
$96.87
$0.81
$27.50 
add to cart
180 pills
+4 Free Viagra pills
$135.37
$0.75
$50.60 
add to cart
270 pills
+4 Free Viagra pills
$187.92
$0.70
$90.75 
add to cart












drugs.com

National Library of Medicine
 
© 2007 Canadian-OP  

It's an honor for us to offer you the drugs of exceptional quality manufactured by reputable Canadian pharmacies

Leyendo un archivo embebido en un DLL en .Net

14. abril 2009

En la lista de correos es común leer preguntas interesantes que nos hacen dejar de hacer lo que estamos haciendo y nos obligan a escribir un pequeño post al respecto. Hoy me topo con esta interesante pero casi desconocida joya:

Compañeros, alguien conoce la forma de hacer referencia a un xml embebido en un proyecto de visual studio.

Creo que nuestro amigo se refiere a un archivo XML embebido como un “Embedded Resource” dentro de un DLL en Visual Studio. Para hacer un símil de porqué esto podría interesarle a alguien sólo recordemos que los archivos XML de mapeo de NHibernate (los hbm.xml) en la mayoría de veces estaran guardados como archivos embebidos de recurso.

La respuesta es sumamente fácil, los archivos de recurso embebidos son lo que se llama “Manifests Resource” o un recurso que viene tal como lo indicamos. Basta con usar un poco de nuestro compañero “Reflection” para leer el archivo en cuestión.

Haremos el ejemplo simple con un archivo XML:

  • Tomemos en cuenta que el archivo XML esta dentro del assembly como “Embedded Resource”.
  • El Assembly que contiene el archivo es el mismo assembly donde estamos ejecutando la aplicación.
  • Notese que el nombre del archivo es el nombre embebido MAS el namespace raíz del assembly.
using System;
using System.IO;
using System.Reflection;

namespace ReadEmbeddedResource
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var xml_filename = "ReadEmbeddedResource.Embedded.xml";
            var xml_stream = Assembly
                .GetExecutingAssembly()
                .GetManifestResourceStream(xml_filename);

            using (var sr = new StreamReader(xml_stream)) {
                Console.WriteLine(sr.ReadToEnd());
            }

            Console.ReadLine();
        }
    }
}
Y si el archivo está en otro assembly? Bien, he ahí el detalle donde el usuario debe jugar con las funciones de Assembly, nada que un rato dentro del intellisense de Visual Studio no resuelva :)
Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework ,

.Net, Linux, Mono, Open Source

3. abril 2009

Justamente un par de días después del anuncio por Phil Haack y Scott Guthrie (y por lo tanto Microsoft) del lanzamiento de ASP.Net MVC 1.0 bajo la licencia MS-PL (una licencia aprobada por OSI, por lo tanto podemos decir que ASP.net MVC es “full” open source), llegan un par de anuncios super interesantísimos desde el frente:

Todo esto solo indica una buena noticia:

.NET PARA BUEN BUEN BUEN RATO!!!

No tienen idea de lo que mi corazoncito open source siente de felicidad luego de leer todo esto :D

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework , , ,

Modelos, Bound Context y mejor que sobre a que falte…

27. marzo 2009

Trabajando en el modelado de una aplicación basado en casos de uso y modelo entregado por el cliente, uno suele notar algunas cosas, que sin querer y sin ser “experto” en el modelo de negocio puede darse cuenta que simplemente no estan bien.

Me topo con un “simple” sistema de registro, a simple vista parecería ser simple, pero tiene una sutileza, según lo explica el cliente

  • Existe una data “común” y “básica” para todos (cosas como nombre, edad, sexo, etc..)
  • Si el usuario es tipo “A” entonces debemos preguntar cierta data extra
  • Si el usuario es tipo “B” debemos preguntar entonces esta otra data
  • Si el usuario es tipo “C” entonces preguntamos esta otra cosa…. y así sucesivamente.

Cuando se modela esto uno piensa correctamente en cosas como herencia y polimorfismo, y si el lector pensó también en esto, esta totalmente en lo correcto. Lo que me llama la atención erea que en toda la data “extra” habían ciertas preguntas como:

  • Deporte, Lugar, Hobbie favoritos
  • Le gusta X, Y ó Z?

Como esto se repite en “TODOS” los casos, lo más obvio sería agregarlo en la clase base verdad? ERROR!

Luego de analizar un poco más el problema me topo con dos inconvenientes:

  1. Los objetos “base” o “abstractos” pasan a ser mega objetos inmensos, demasiadas propiedades, demasiadas dependencias. Los objetos concretos son sencillos con solo pocas características dentro de cada uno de ellos.
  2. La data “extra” solicitada no es usada en NINGUN lugar de la lógica de negocio. El cliente necesita tomarla para “futuras estadísticas”.

Lo interesante es que la data extra aunque no es usada y esta contemplada para “futuras estadísticas” esta debe ser OBLIGATORIAS al contestar y registrarse en la aplicación. Esto claramente me recuerda un pensamiento popular entre nosotros:

Mejor que sobre a que falte

¿Qué nos quedaba hacer? Simplemente no podemos obviar al cliente y decidir que “conocemos mejor que él” el negocio. No sería (for the sake of the model) crear una clase abstracta llena de muchísimas propiedades, no sería nada producente. Es cuando el recuerdo del libro de Erick Evans llega a mi mente e ilumina ese momento: Bounded Context.

Bounded Context son “mini aplicaciones” o “módulos” que funcionan independientemente, en donde sus entidades de negocio existen por si solas, donde posee sus propios servicios, entities, root aggregates y demás, PERO que interactua con otros “Bounded Contexts” de forma “normal” através de un “Context Map”.

En este caso en específico creo que la solución es simple y sencilla. No contaminar las entidades abstractas base (que en nuestro caso es un root aggregate, lo que lo hace más delicado) y trabajar la data “extra” como otra entidad perteneciente a un Bounded Context aledaño.

¿Qué opinan ustedes?

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework , ,

Manejo de estado en ASP.net

26. marzo 2009

Escribiendo (o por lo menos tratando) de escribir mi serie acerca del ViewState y sus formas de hacerlo más pequeño y manejable, me topo con el problema siguiente: ¿y si el lector no conoce las formas de estado de las aplicaciones de ASP.net? ¿Qué puedo guardar en el “estado”? pues casi cualquier cosa, cualquier data, cualquier objeto (que sea serializable), cualquier información que quiera. Es como una bolsa de data temporal que podemos usar.

Es importante notar que todas estas propiedades se comportan como “property bags” o diccionarios a los cuales les cabe “todo”.

  • Application, la información guardada en este lugar es accedida por todos los usuarios dentro de la misma aplicación y es mantenida en memoria del application pool.
  • QueryString, es la infomación pasada entre páginas usando la cadena de request en el URL, obviamente no podemos contener mucha información y no es “muy segura” que digamos.
  • ViewState, si, nuestro amigo el ViewState también puede usarse para almacenar data arbitraria a nuestro antojo. “Por default” es guardada en un campo “hidden” bajo el nombre __VIEWSTATE en la página generada.
  • Session, es manejado por sesión de usuario conectada a la página, es sumamente “pasajera” y demora lo que demora la sesión de un usuario (por defecto 20min). No se necesita ser un usuario “registrado” o existente para tener un objeto sesión, los usuarios anónimos también tienen una sesión. Las sesiones existen por request. “Por default” las sesiones son guardadas en memoria del proceso o Application Pool, o sea, que usan la memoria del servidor.
  • Cookies, usan espacio en el browser que puede ser manipulado por el usuario o cliente, tiene un máximo de storage de 4K, se les puede asignar un tiempo de vida (o el usuario puede borrarlas a su antojo). Se envian e intercambian con cada request.

Bien, les dije que sería una introducción corta ;)

Los espero en el siguiente post!

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

asp.net, .Net Framework , , ,

Calculando la “edad” con un método de extensión

24. marzo 2009

Algo que es bien recurrente y hasta “básico” en muchas de nuestras aplicaciones es el cálculo de la edad para una fecha dada. Tomando esto en cuenta y aprovechando a nuestros amigos los métodos de extensión me cree un par de métodos sencillos que pueden más de algún día salvarnos un par de minutos.

using System;
using Xunit;
using Xunit.Extensions;

namespace Rioshu.Educa.Facts
{
    public class DateTimeExtensionFacts
    {
        [Fact]
        public void Can_calculate_age_with_simple_dates()
        {
            var past_date = DateTime.Now.AddYears(-10);
            Assert.Equal(10, past_date.Age());
        }

        [Fact, FreezeClock(2009, 01, 01)]
        public void Can_calculate_age_with_not_so_simple_dates()
        {
            var past_date = new DateTime(2002, 02, 13);

            Assert.Equal(7, past_date.Age());
        }

        [Fact]
        public void Can_calculate_age_with_a_base_date()
        {
            var from_date = new DateTime(2010, 01, 01);
            var past_date = new DateTime(2002, 02, 13);

            Assert.Equal(8, past_date.Age(from_date));
        }
    }
}

Y aquí la implementación del helper

    public static class DateTimeExtensions
    {
        public static int Age(this DateTime date)
        {
            return Age(date, DateTime.Now);
        }

        public static int Age(this DateTime date, DateTime from_date)
        {
            if (from_date.Month <= date.Month && from_date.Day < date.Day) {
                return from_date.Year - date.Year - 1;
            }

            return from_date.Year - date.Year;
        }
    }

Como siempre acepto sugerencias y comentarios :) Hasta la próxima!

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework , ,

Disminuyendo el tamaño del ViewState, NO ViewState (parte 3)

20. marzo 2009

Espero que leyeran los últimos links que pasé en mi post anterior acerca de la naturaleza del ViewState. Si pusieron suficiente atención esto nos lleva a la primera técnica tibetana de adelgazamiento del ViewState en ASP.Net: Eliminar el ViewState.

NOTA: Una forma de medir el ViewState usando Firefox es mediante el ViewSate Size Extension, otros utilizan la WebDeveloper Toolbar o Fiddler2 en Internet Explorer. Para efectos de esta serie de post utilizaré la extensión de Firefox.

Continuar leyendo el post......

.Net Framework, asp.net , , ,

ASP.NET MVC GOES RTM!!!

18. marzo 2009

ASP.net MVC 1.0 ya es release oficial!!! si, como lo oyeron, después de meses de desarrollo (5 CTP’s, 1 beta y 2 RC) ASP.net MVC ya es Release oficial (RTM, Gold, o como quieran llamarlo).

Ahora a esperar el post de Scott Guthrie (debe estar ocupado por el MIX09).

Bájenlo mientras esta caliente aún!

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

asp.net, .Net Framework , , , ,

Nuevas release Alpha de NHibernate

17. marzo 2009

Yep, como lo escucharon, NHibernate 2.1 Alpha y NHibernate Validator 1.2 Alpha estan listas para experimentar.

Entre los cambios significativos de NHibernate 2.1 se encuentra la remoción de dependencias a Castle (ahora hay que especificar un Proxy Factory en la configuración de forma obligatoria), Nuevos mappers para entidades, nuevo “dialecto” para SQL Server 2008 (que soporta los nuevos tipos y extensiones de SQL Server 2008), nuevos generadores de identidad, nuevos tipos (especialmente aquellos para mapear enum), es probable que un nuevo provider para NHibernate Linq salga a luz antes del release oficial. (Download)

Para NHibernate Validator 1.2 tenemos la magnífica adición de Fluent NHibernate Validator y la adición de SharedEngines. (Download).

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework , ,

Chequeando si un link existe con la .Net Framework

13. marzo 2009

Un amigo necesitaba algo para recorrer una lista de links y ver si estos existian o no, como necesitaba la .Net framework decidí ayudarle y crearle un simple Extension Method que podría hacerle la vida más fácil que revisar link por link manualmente si la página existía, aquí los dejo con el código:

using System;
using Xunit;

namespace ClassLibrary2
{
    public class BrokenLinkFacts
    {
        [Fact]
        public void IsBrokenMustReturnFalse()
        {
            var url = new Uri(@"http://www.google.com");
            Assert.False(url.IsBroken());
        }

        [Fact]
        public void IsBrokenMustReturnTrue()
        {
            var url = new Uri("http://www.rioshu.com/does_not_exist");
            Assert.True(url.IsBroken());
        }

        [Fact]
        public void IsBrokenStringMustReturnFalse()
        {
            const string url = @"http://www.google.com";
            Assert.False(url.IsBroken());
        }

        [Fact]
        public void IsBrokenStringMustReturnTrue()
        {
            const string url = @"http://www.rioshu.com/does_not_exist";
            Assert.True(url.IsBroken());
        }
    }
}
using System;
using System.Net;

namespace ClassLibrary2
{
    public static class UrlExtension
    {
        public static bool IsBroken(this Uri uri)
        {
            var web_client = WebRequest.Create(uri);
            web_client.Timeout = 2000;

            try {
                web_client.GetResponse();
            } catch (WebException exception) {
                return true;
            }

            return false;
        }

        public static bool IsBroken(this string uri_string)
        {
            var uri = new Uri(uri_string);
            return IsBroken(uri);
        }
    }
}
Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

.Net Framework , ,

Book review: Learning JQuery

13. marzo 2009

book_learning_jquery No es secreto que Microsoft comienza a abrazar el “Open Source”, nadie pensaba hace unos cuantos meses atrás que JQuery, la framework de código abierto para desarrollo y manipulación del DOM en Javascript, sería “adoptada” por Microsoft hasta que hizo el anuncio que no solamente sería “shipped” con Visual Studio para el desarrollo web junto con el ASP.net AJAX Framework, sino que también sería soportada por Microsoft.

Es de esperar que desde el anuncio muchos programadores de ASP.net comenzaran a experimentar con JQuery y claro, a aprender a usar JQuery. Tutoriales de JQuery hay muchos en la red, la mayoría de ellos orientados a diseñadores web o al usuario esporádico de javascript. Creo personalmente que este libro es un excelente inicio al mundo de JQuery.

Lo bueno de este libro:

  • Sin rodeos, Va directo al grano.
  • Simple, es sumamente práctico para explicar el porqué de algo.
  • Casí un hands on, después de un par de capítulos el lector se siente con la suficiente confianza de usar JQuery y aplicar lo que acaba de aprender.
  • Es sumamente corto y de fácil lectura

Lo malo de este libro:

  • El código ejemplo aunque es muy sencillo, ya esta terminado. Poco hace porque el lector experimente con el código de ejemplo.
  • ¿Qué? los capítulos mas interesantes (los últimos 3) no tienen código ejemplo!
  • En los últimos capítulos se perdió fluidés del relato como lo hacian en los primeros capítulos.

Claro, aconsejo antes de leer este y cualquier otro libro de JQuery, que el lector se empape bastante sobre los conceptos de HTML, hojas de estilo, DOM y Javascript, creo que solo así le podemos sacar lo máximo a JQuery.

En general, le doy al libro una calificación 3/5

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Personal, Reviews ,

;