Implementar procedimientos CLR

Descripción de dos errores comunes que se pueden dar al intentar implementar procedimientos CLR (procedimientos desarrollados en código con Visual Studio .Net).

Error de SID de propietario

Error: The database owner SID recorded in the master database differs from the database owner SID recorded in database ‘miBaseDeDatos‘. You should correct this situation by resetting the owner of database ‘miBaseDeDatos‘ using the ALTER AUTHORIZATION statement

Error: El SID del propietario de la base de datos registrado en la base de datos master no coincide con el SID del propietario de la base de datos registrado en la base de datos ‘miBaseDeDatos‘. Debería corregir la situación restableciendo el propietario de la base de datos ‘miBaseDeDatos’ con la instrucción ALTER AUTHORIZATION

Esto ocurre normalmente cuando la base de datos a sido separada y adjuntada alguna vez, y el usuario actual (el login con el que nos hemos autentificado) no es “propietaria” de la base de datos.

Esto se corrige restableciendo el propietario de la base de datos al usuario que utilizaremos, con la instrucción

ALTER AUTHORIZATION ON DATABASE::[miBaseDeDatos] TO {miLoginUsuario}

Nota: la cadena {miLoginUsuario} es el nombre del usuario con el que nos hemos autentificado (un caso común es que sea el usuario ‘sa’)

Error de autorización de ensamblado (assembly not authorized)

Error: CREATE ASSEMBLY for assembly ‘{miEnsamblado}’ failed because assembly ‘{miEnsamblado}’ is not authorized for PERMISSION_SET = UNSAFE. The assembly is authorized when either of the following is true: the database owner (propietarioBaseDeDatos) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission

Error de CREATE ASSEMBLY para el ensamblado ‘miEnsamblado‘ porque el ensamblado ‘miEnsamblado‘ no tiene autorización para PERMISSION_SET = UNSAFE. El ensamblado está autorizado cuando se produce una de las siguientes situaciones: el propietario de la base de datos (propietarioBaseDeDatos) tiene permiso de UNSAFE ASSEMBLY y la base de datos tiene definida la propiedad de base de datos TRUSTWORTHY, o el ensamblado está firmado con un certificado o una clave asimétrica que tiene un inicio de sesión correspondiente con permiso de UNSAFE ASSEMBLY. Si ha restaurado o adjuntado esta base de datos, asegúrese de que el propietario de la base de datos se asigne al inicio de sesión correcto en este servidor. Si no, use sp_changedbowner para solucionar el problema

Una solución rápida y poco segura es ejecutar:

ALTER DATABASE DATABASE::[miBaseDeDatos] SET TRUSTWORTHY ON

La opción menos rápida pero más segura es firmar el ensamblado CLR con un certificado:
1. Firmar la dll con un nombre fuerte yendo a la pestaña Firmar, en la ventana de propiedades del proyecto de Visual Studio. Se puede crear un nuevo archivo .pfx desde ahí.
2. Construir el ensamblado CLR con Permission Level: External o Unsafe. No implementar todavía.
3. Ir al  SLQ Management Studio y ejecutar la siguiente consulta:

USE master
GO
CREATE ASYMMETRIC KEY AsymmetricKeyName FROM EXECUTABLE FILE = '{ruta al archivo .dll}'
CREATE LOGIN
miLoginUsuario FROM ASYMMETRIC KEY AsymmetricKeyName
GRANT EXTERNAL ACCESS ASSEMBLY TO
miLoginUsuario
GO

Registro de cuenta en AdSense

Para registrarse en AdSense, el programa de publicidad de Google, hace falta ir a la dirección https://www.google.com/adsense/ y pinchar en el botón Registrese ahora.

A continuación te muestro el formulario de registro, y los valores más importantes que hay que rellenar.

Formulario de registro de AdSense

Formulario de registro de AdSense

ThemBasic: un child theme básico para Thematic

Thematic es un buen tema de partida, lo que ellos llaman un framework en cuestión de temas para Worpress. Es neutral, y muy completo. Y como todo buen programa que no depende de nosotros y que periódicamente hay que actualizar, no deberíamois de tener que tocar los archivos. Para eso se construyeron los child themes: para que uno se construya su tema preferido heredando todas las características de Thematic. Pero puede ser normal que uno mismo también quiera un tema básico pero que realmente no sea igual a Thematic (personalizaciones básicas que uno va a utilizar en sus desarrollos y que no vienen incluidas en Thematic), por lo que esto me produce la necesidad de tener un Basic child theme for Thematic del que mis futuros child themes heredarán. Sí, es un poco enrevesado, lo se, pero creo que puede funcionar ;-)

Por eso iré apuntando aquí las características de mi Basic child theme for Thematic.

Estilos de reset

Necesito anular de forma general muchos aspectos visuales que implementa Thematic y que quizás no son tan neutros como deberían. En este apartado iré poniendo dicho código CSS. Será una especie de archivo reset.css particular.

Los títulos

Para empezar, una importante necesidad son los títulos. Necesito encontrar cierta variedad de fuentes (seguras para web) que me permita dar vistosidad a los títulos. De momento me han parecido interesantes estos enlaces: aquí, aquí, aquí y aquí.

bbPress traducido al español

Me he tomado la libertad de modificar una traducción al español de la versión 0.8 que cogí de el repositorio Subversion y terminarla para la que tengo instalada (la 0.9.0.4).

Aquí teneis los archivos es_ES.mo y es_ES.po.

Seguro que falta algún detalle… pero está al 99% completa!

Aún así se agradece si alguien ve que falte algo. También…. si alguien sabe cómo subirlos al Subversion que me lo diga.

Error de E/S al subir archivos a WordPress

Llevo tiempo ya con el blog, pero recientemente intenté subir archivos de música (aunque no es relevante, extensión m4a) y no se por qué razón me daba el error:

Error de E/S. Ha habido un error en la subida. Inténtalo más tarde.

IO error. An error occurred in the upload. Please try again later.

Nota: lo pongo en inglés porque en este idioma está bastante extendida la discusión sobre el tema.
En muchos sitios se comentan cosas sobre que si hay que que si es cuestión de permisos en la carpeta /uploads (al margen de esta cuestión esta carpeta tiene que estar con permisos de escritura) o de establecer correctamente la ruta a la carpeta,  etc.

Tengo que decir que la cuestión se las trae. No se como narices lo solucioné pero el caso es que a raíz de aplicar la solución aquí comentada ya he podido subir los archivos. Lo curioso del asunto es que después borré el archivo php.ini creado en /wp-admin para verificar que esa era la solución y el caso es que ¡¡ sigue funcionando !!

Ya actualizaré si concreto cual fue (realmente me pica la curiosidad).

Modificar las extensiones aceptadas por WordPress

Fuente: Modifying Allowed Upload Types in WordPress – Chris Meller

No lo he probado todavía pero según el amigo Cris Meller, para cambiar las extensiones aceptadas por WordPress (y hacerlo sin tocar los archivos del núcleo) hay que añadir al functions.php de nuestro tema lo siguiente:

function custom_upload_mimes ( $existing_mimes=array() ) {
// add your ext => mime to the array
$existing_mimes['extension'] = 'mime/type';
// for removing
unset ( $existing_mimes['extension'] );
return $existing_mimes;
}
add_filter('upload_mimes', 'custom_upload_mimes')

extension y mime/type serían la extensión y el tipo mime correspondiente a añadir.

Crear un bloque de anuncios de AdSense

Ahí va este pequeño minitutorial para crear un bloque de anuncios con AdSense. Por ejemplo, haremos un bloque de contenido, formato predeterminado, tipo Banner, y de tamaño 468 x 60 píxels.

Crear nuevo

Primero tenemos que ir a la pestaña Configuración de AdSense, submenú Obtener anuncios. Allí elegiremos la opción AdSense para contenido.

adsense-para-contenido

Formato

Posteriormente debemos seleccionar el tamaño y formato visual del bloque. En cuanto al tamaño, elegiremos un anuncio tipo Banner de tamaño 468 x 60. En cuanto al formato visual (fuentes de letras, colores, etc. dejaremos todos los valores que viene por defecto.

adsense-formato-y-colores

Más opciones

En el apartado Mas opciones lo mejor es seleccionar Mostrar anuncios que no sean de Google a partir de otra URL. Y en la URL poner:

http://www.fragilistico.com/wp-content/google_adsense_script.html

mas-opciones

Criterios de seguimiento

Después, pasaríamos a la página de los criterios de seguimiento (esta es una función avanzada que sirve para medir el rendimiento de los anuncios). Nosotros no haremos nada, pero si quieres más información puedes consultar la ayuda de Adsense.

adsense-criterios-seguimiento

Guardar

Como penúltimo paso, llega el momento de guardar el bloque dándole un nombre que nos permita luego recordarlo y gestionarlo. En nuestro caso le pondremos el que nos indica AdSense.

adsense-guardar

Código fuente

Finalmente, al pulsar Enviar y obtener código llegamos a la pantalla que mostramos a continuación, dónde podemos copiar el código fuente del anuncio para poder insertarlo en el código fuente de nuestro sitio web.

adsense-fin-y-codigo

Notas

En realidad este código fuente es similar para todos los bloques de anuncios. Si nos fijamos un poco observaremos que lo que diferencia a un bloque de otro es el identificador del cliente (ad_client), el del bloque de anuncios (ad_slot) y el tamaño (anchura: ad_width y altura: ad_height).

Como apunte comentar que los bloques de anuncios no se pueden eliminar (esto impide que se eliminen equivocadamente los bloques de anuncios activos del sitio). Si no lo vamos a usar lo que sí podemos es desactivarlo y si no lo queremos ver en las vistas de gestión de los bloques de anuncios podemos ocultarlo.

Validación personalizada en wForms

En la fantástica librería de validación wForms, podemos añadir validaciones personalizadas. Supongamos que queremos hacer una validación por rango numérico (que el número introducido esté entre unos valores máximo y mínimo). Haríamos algo así (ay…. estas expresiones regulares van a matarnos a todos):

wFORMS.behaviors.validation.rules.isDayRange = { selector: “.validate-dayrange”, check: ‘validateDayRange’ };
wFORMS.behaviors.validation.messages.isDayRange = “Entre 1 y 24 h.”;
wFORMS.behaviors.validation.instance.prototype.validateDayRange = function(element, value) {
var regexp = /^([1-9]|[1-9]|[1-9][0-9])$/;
return this.isEmpty(value) || regexp.test(value);
}

Nueva apertura de blogs

Estimados lectores y colaboradores…

Estoy con la idea rondándome por la cabeza de ir poco a poco abriendo blogs temáticos conforme se va acumulando contenido en una categoría. Estaba pensando de momento abrir dos: uno relacionado con la cocina vegetariana y otro con cuentos y relatos. Os explico mi idea y si os parece me dais vuestras opiniones:

Blog de cocina

Creo que ya existen muchos sitios con recetas bien clasificadas y segmentadas de forma que se pueden consultar y hacer búsquedas muy útiles. Pero creo que hay huecos que no están bien cubiertos, como puede ser la cocina “sana” o incluso la cocina vegetariana (prefiero no restringirlo a la “estrictamente” vegetariana). También se hace poco hincapié en recetas que podamos hacer en casa, con ingredientes comunes, y en poco tiempo (sino no sirven para el día a día).

Blog de cuentos y relatos

Había pensado crear un blog que sirva como plataforma de publicación y como medio de darse a conocer a jóvenes escritores, de forma que pudieran aprovecharse de un medio tan “público” y democrático como Internet. Creo que sería importante dotarle de la funcionalidad de que se puedan votar los relatos, así como poder consultar los relatos de un autor.

Sugerencias para el nombre del dominio

Blog de cine

Por qué (de momento) no creo un blog de cine? bueno… porque creo que ya existen demasiado (y muy buenos) sitios de críticas de cine y películas dónde podemos encontrar la gran cantidad de películas y series bien ordenadas y documentadas. Quizás un blog más especializado en series? no se, decidme vosotros.

De todo lo que os he hablado, me interesa saber si habéis visto o conocéis algún sitio que haga algo similar! lo fundamental es superar lo que ya hay hecho o (por lo menos) hacerlo diferente.

Espero que me deis vuestras opiniones!!

Conforme vayamos madurando la idea iré actualizando el artículo.

Chuleta de trucos CSS

Esto son unos cuantos trucos CSS que seguro que nos librarán de sufrir unos cuantos dolores de cabeza.

1. Cambiar cellpadding y cellspacing en tablas mediante CSS

Aquí vemos cómo manipular mediante CSS las propiedades más utilizadas de las tablas, con el fin de evitar el desagradable borde que presenta la tabla HTML

Cambiando cellpadding y cellspacing en tablas

Cambiando cellpadding y cellspacing en tablas

Para eliminar el borde, y simular cellpadding=0 y cellspacing=0 y poner un borde solamente externo tendríamos que aplicar esto (tabla 2):

table { border-collapse:collapse; border:1px solid gray; }
td { padding:10px; }

También podemos poner borde a todas las celdas (tabla 3) añadiendo border:1px solid gray; a la etiqueta td (tabla 3)
Nota: border-spacing no es soportado por IE

2. Hacer que un DIV de anchura X se expanda debido al contenido

Imaginad que tenemos un contenedor DIV con una anchura X y que dentro existe contenido que tiene un ancho superior a X. Pues bien, con CSS no se puede hacer que la capa DIV contenedora se expanda en función de su contenido (por lo menos yo no conozco la forma). Si preveemos que el ancho del contenido pueda superar el de su contenedor habría que usar una tabla de 1 fila y 1 columna (sí, lo siento) ya que estas sí se expanden dinámicamente en función de su contenido.