16
May/10
1

URL amigables con wordpress en IIS

Por defecto wordpress genera unas url para nuestros post un poco cripticas, utilizando el identificador del post, pero como sabemos, esto no es de utilidad ni para el usuario, ni sobre todo para los buscadores. WordPress tiene un apartado (Opciones -> Enlaces permanentes) dónde se nos permite configurar este comportamiento, pero si estamos alojados en un servidor con IIS (Internet Information Services) y modificamos la opción por defecto, obtendremos errores 404 al navegar por nuestra web.

Yo hace unas semanas que lo cambié y he notado una mejora considerable en cuanto a visitas se refiere – sin haber mejorado en nada el contenido :p – Así que quiero explicar cómo solucionar esto porque considero que es recomendable hacerlo.

Los requisitos serán:

  • IIS 7 con FastCGI y PHP instalado
  • Un wordpress :)
  • El modulo URL rewrite Go live de IIS instalado.

Primero nos vamos a la administración del blog y cambiamos las opciones de enlaces permanentes como se muestra en la imagen.

* NOTA: yo he utilizado una combinación de categoría y nombre del post, en el siguiente enlace encontrareis más información sobre qué datos podéis configurar en vuestras URLs.

Ahora tenemos que ir al fichero web.config del servidor dónde tenemos nuestro wordpress y editarlo añadiendo dentro del elemento system.webServer la configuración:

<rewrite>
    <rules>
        <rule name="Main Rule" stopProcessing="true">
			<match url=".*" />
			<conditions logicalGrouping="MatchAll">
				<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
				<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
			</conditions>
			<action type="Rewrite" url="index.php" />
		</rule>
    </rules>
</rewrite>

Ya lo tenemos preparado, ahora podemos navegar con las url personalizadas y posiblemente nuestras visitas mejoren ;)

29
Abr/10
0

Calculando el tamaño de tu base de datos SQL Azure

Recojo dos sentencias que pueden ser muy útiles para conocer el tamaño total de nuestra base de datos SQL Azure (primera sentencia) y el tamaño de todas sus tablas (segunda sentencia):

 
select CONVERT(DECIMAL(5,2), ROUND(sum(reserved_page_count) * 8.0 / 1024, 2))
from sys.dm_db_partition_stats
 
GO
 
select sys.objects.name, CONVERT(DECIMAL(5,2),
ROUND(sum(reserved_page_count) * 8.0 / 1024, 2)) AS TAMAÑO
from sys.dm_db_partition_stats, sys.objects 
where sys.dm_db_partition_stats.object_id = sys.objects.object_id
group by sys.objects.name
ORDER BY TAMAÑO DESC

Los datos se presentan en MB.

vía blog de Ryan Dunn

Categoria: SQL Azure
28
Abr/10
0

Conocer las propiedades de una clase con reflection

A veces nos puede ser interesante conocer que propiedades tiene una clase, vamos a ver cómo realizar esto con ayuda de la reflexión.
Utilizaremos el namespace using System.Reflection;

Lo primero de todo es crear una nueva instancia de la clase que queremos analizar, y utilizando el método GetType() heredado de la clase object, accederemos al método GetProperties()
Esto nos devuelve un array de tipo PropertyInfo, que podemos recorrer con un foreach y conocer así las propiedades de la propiedad :)

public class Persona
{
    public int Edad { get; set; }
    public string Nombre { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        Persona p = new Persona();
        PropertyInfo[] propiedades = p.GetType().GetProperties();
        foreach (PropertyInfo propiedad in propiedades)
        {
            Console.WriteLine(propiedad.Name + " : " + propiedad.PropertyType);
        }
        Console.WriteLine("Done");
        Console.Read();
    }
}

También podemos recuperar y asignar valores utilizando:

    Persona p = new Persona();
    p.Edad = 18;
    PropertyInfo[] propiedades = p.GetType().GetProperties();
    foreach (PropertyInfo propiedad in propiedades)
    {
        if (propiedad.Name.Equals("Edad"))
        {
            Console.WriteLine("Edad: " + propiedad.GetValue(p, null));
        }
        else if (propiedad.Name.Equals("Nombre"))
        {
            propiedad.SetValue(p, "Pepe", null);
            Console.WriteLine("Nombre: " + propiedad.GetValue(p, null));
        }
    }
    Console.WriteLine("Done");
    Console.Read();
Categoria: C#
4
Abr/10
2

Problema con entity framework y Sql Azure

EDIT: Desde el 9 de Abril de 2010 SQL Azure tiene soporte para MARS, asi que deja de existir este problema. http://blogs.msdn.com/sqlazure/default.aspx

Probando Entity Framework 4.0 en un desarrollo con SQL Azure me he encontrado un problema con la conexión. Si creas el Entity Data Model generado desde una base de datos local con el Wizard de Visual Studio, por defecto asigna una cadena de conexión de este estilo:

connectionString="metadata=res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl;provider=System.Data.SqlClient;provider connection string="Data Source=DataBaseServer;Initial Catalog=DataBaseName;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"

Si una vez que hayamos hecho nuestras pruebas, queremos apuntar la cadena de conexión a nuestra BD en SQL Azure, tenemos que indicarle al atributo MultipleActiveResultSets=False, ya que no está soportado en SQL Azure y si no lo deshabilitamos, nos fallará cada intento de conexión.

La cadena de conexión debería quedar así:

connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxxxxxxxxx.database.windows.net;Initial Catalog=DataBaseName;Persist Security Info=True;User ID=UserID;Password=Password;MultipleActiveResultSets=False"" providerName="System.Data.EntityClient"

* Si desde el Wizard de creación del Entity Data Model ya seleccionamos una conexión de SQL Azure, por defecto deja este parámetro en False.

4
Abr/10
0

Silverlight: Error 1 Length cannot be less than zero.Parameter name: length

Desarrollando con silverlight me he encontrado con este error: Error 1 Length cannot be less than zero. Parameter name: length. Quiero compartir la solución por lo poco intuitivo que resulta el mensaje para localizar el error en nuestro código.

Entorno dónde reproducir el error: Visual Studio 2010 RC, proyecto de Silverlight 4 RC.

Este error aparece si al añadir un espacio de nombres a nuestro código XAML lo hacemos con un punto en su prefijo o alias.

Por ejemplo, el siguiente código nos devolvería el error:

xmlns:Blacklight.Controls="clr-namespace:Blacklight.Controls;assembly=Blacklight.Controls"

Y está sería una manera correcta:

xmlns:Blacklight_Controls="clr-namespace:Blacklight.Controls;assembly=Blacklight.Controls"
19
Mar/10
8

Ordenar elementos con jQuery

Vamos con otro tema que tenía en cartera hace ya tiempo – debería escribir las cosas cuando las aprendo, y no meses después, que me cuesta el doble – tuve que hacer algunas pruebas con jQuery que quiero compartir. Necesitaba conseguir un prototipo de interfaz de widgets, estilo iGoogle o netvibes.

ver
descargar

Para conseguir este efecto, utilizaremos la función sortable de jQuery UI. Bien, organizamos el html con tres contenedores que harán de columnas y que ha su vez contendran listas para organizar los widgets, mejor ver el código:

 
<div id="wrapper">
        <div id="uno" class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    Contenido del widget
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
        <div id='dos' class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <img src="http://a1.twimg.com/profile_images/186917016/img2.jpg" alt="yngir" />
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
        <div id='tres' class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
</div>

Configuramos los estilos:

<style type="text/css">
        div#wrapper
        {
            width: 1024px;
            margin: 0 auto;
        }
        div.colum
        {
            width: 33%;
            float: left;
        }
        ul
        {
            padding: 5px;
            padding-left: 10px;
            margin: 0 auto;
        }
        li
        {
            list-style-type: none;
            height: 150px;
            border: solid 1px Black;
            margin-top: 10px;
            text-align: center;
        }
        .sortHelper
        {
            border: 3px dashed #000;
        }
        div#uno li
        {
            background-color: ActiveBorder;
        }
        div#dos li
        {
            background-color: Highlight;
        }
        div#tres li
        {
            background-color: Yellow;
        }
        div.header
        {
            background-color: White;
            border-bottom: solid 1px Black;
            height: 25px;
            cursor: move;
        }
    </style>

Hasta aquí, deberíamos ver la página cómo la de demo pero sin el movimiento de drag&drop.
Ahora cargamos las librerías necesarias de javascript, que para este caso serán, la jquery.min.js, ui.core.js y ui.sortable.js:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
 
<script src="/scripts/ui.core.js" type="text/javascript"></script>
 
<script src="/scripts/ui.sortable.js" type="text/javascript"></script>

Y por último y más importante, incluimos la función jQuery al final de nuestro html, para que se ejecute una vez ha finalizado la carga de nuestra estructura dom de la página:

<script type="text/javascript">
        $(document).ready(function() {
 
            $("ul").sortable({
                connectWith: "ul",
                items: "li",
                hoverClass: "sortHelper",
                cursor: 'move',
                opacity: 0.8,
                revert: true,
                tolerance: 'pointer',
                placeholder: 'sortHelper',
                handle: $(".header")
            });
        });
    </script>

Los parámetros más importantes són el handle que indica desde que elementos se podrá iniciar la acción de ordenación, el items, que indica que elementos serán ordenados y el connectWith, que es el que indica que otros elementos podrán recibir a los items.

Better Tag Cloud