0 25
01
2012

Configurando Google Apps para tu dominio

Fecha de publicación: 25 enero 2012 a las 12:25 por admin

A estas alturas, hablar de los beneficios de los servicios de Google como Gmail, Calendar o Google Docs, sería un absurdo por nuestra parte.

Así que si tienes un propia empresa o dominio, ¿por qué no aprovechar estos servicios para tu gestión profesional?

Google Apps, según su propia definición:

Google te ofrece soluciones de TI empresariales para innovar constantemente en tu empresa y ahorrar el tiempo, el dinero y las dificultades asociados a su administración.

Medianas y grandes empresas, como muchoviaje.com o bbva ya se han pasado a la nube, y pueden con ello olvidarse (si quieres) de los eternos y cada vez más obsoletos, programas de escritorio como Outlook o MS Office.

Google Apps for Business es un servicio de pago, pero existe una versión gratuita (totalmente gratuita, que no de pruebas) pero con ciertas limitaciones.

Una de ellas, podríamos decir la más importante, es la limitación a un total de 10 usuarios. Puede parecer poco, y de hecho seguramente lo sea, pero si eres una pequeña empresa que está empezando, o simplemente quieres probar el servicio, puede venirte bien.

La creación de una cuenta en Google Apps para tu dominio, es, como nos tienen acostumbrados desde Google, extremadamente sencilla, por lo que simplemente debemos seguir los pasos que nos vaya indicando el asistente de configuración de Google Apps.

Quizás el único paso algo más complejo, sea la configuración del correo electrónico a gmail a través de tu hosting donde alojes el dominio de tu empresa.

Por ello, vamos a reproducir los pasos dados en nuestro caso para activar Google Apps, con el dominio alojado en 1and1.es.

1. En primer lugar, tras haber seleccionado nuestro hosting en la guía de instalación/configuración de google apps, se nos indican los pasos a realizar, tal y como muestra la imagen siguiente:

Configuración GMail Google Apps - 1and1

Configuración GMail Google Apps - 1and1

2. Accedemos a nuestro panel de administración de dominios en 1and1, y tras seleccionar el dominio que usaremos en Google Apps, nos dirigimos a “Modificar la configuración DNS”.

Acceso 1and1 configuración DNS

Acceso 1and1 configuración DNS

3. Por último, simplemente debemos trasladar los valores que Google Apps nos ofreció en el primer paso, a tu configuración dns en 1and1. Todo listo.

Configuración DNS en 1and1 para Google Apps

Configuración DNS en 1and1 para Google Apps

Para terminar, continúa con el asistente de configuración de Google Apps, indicándole que ya has realizados los cambios de DNS en tu hosting.

Una vez realizados estos cambios, se verán reflejados en un plazo máximo de 48 horas, aunque seguramente los tendrás disponibles más pronto que tarde.

1 23
01
2012

Cómo crear un Servicio de Windows

Fecha de publicación: 23 enero 2012 a las 23:22 por admin

Hoy vamos a realizar un pequeño y rápido repaso de cómo crear un Servicio de Windows, en nuestro caso, desde Visual Studio 2008.

Tomaremos como base el siguiente enlace oficial de microsoft: http://msdn.microsoft.com/es-es/library/9k985bc9(v=VS.90).aspx

Creando Windows Service

En primer lugar, seleccionaremos el tipo de plantilla Windows Service o Servicio de Windows para nuestro proyecto.

Plantilla Visual Studio de Windows Service

Plantilla Visual Studio de Windows Service

Una vez generado el proyecto, Visual Studio generará a partir de plantilla los siguientes archivos:

  • Service1.cs (renombrado por manías del guión como Service.cs)
  • Program.cs
Nuevo proyecto de Windows Service

Nuevo proyecto de Windows Service

En la clase Service.cs (recordemos que originalmente se llamaba Service1.cs), creamos los siguientes métodos:

  • onstart
  • onstop
  • oncontinue

#region "Service Methods"
protected override void OnStart(string[] args)
{
Console.WriteLine("Inicio servicio");
}

protected override void OnStop()
{
Console.WriteLine("Fin servicio");
}

protected override void OnContinue()
{
Console.WriteLine("Servicio en ejecución");
}

#endregion "Service Methods"

En el ejemplo simplemente escribimos por consola una traza del método que estamos ejecutando.

Métodos (OnStart, OnStop, OnContinue) Windows Service

Métodos (OnStart, OnStop, OnContinue) Windows Service

Llegados a este punto, el servicio ya podría arrancar, pero dependiendo de la lógica que deba implementar el servicio, tomaremos diferentes formas de mantener vivo el servicio:

Ejemplo 1: Queremos que nuestro servicio se mantenga a la escucha de recibir mensajes de fuentes externas, el pseudocódigo sería algo así:


while (true) {

listener.receive();

}

Ejemplo 2: Queremos que nuestro servicio ejecute tareas cada x tiempo, para lo cual necesitaríamos un Timer para gestionar la ejecución temporal de dichas tareas. En futuros posts crearemos un ejemplo de este tipo de servicios de windows con timer.

Instalando Windows Service

Vamos a preparar ahora nuestro servicio de windows para que podamos instalarlo, para ello:

1. Añadimos los servicios de instalación, clickando sobre el botón derecho sobre el diseñador de Service y clickamos en “Add Installer” o “Añadir Instalador“.

Agregar instalador en Windows Service

Agregar instalador en Windows Service

2. El paso anterior nos genera un nuevo archivo ProjectInstaller.cs como el de la imagen siguiente, agregando 2 nuevos componentes.

Instalador Servicio de Windows

Instalador Servicio de Windows

En las propiedades de ambos componentes del servicio podremos editar el nombre del servicio, el tipo de arranque (manual, automático o deshabilitado), la cuenta con la que se ejecutará el servicio, etc.

Propiedades instalador Windows Service

Propiedades instalador Windows Service

Por último, vamos a preparar la Instalación del servicio de Windows

Crearnos 2 archivos .bat uno para instalación y otro desinstalación, que ejecutarán el comando InstallUtil

Por ejemplo para instalar y desinstalar respecticamente

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil “C:\Inetpub\wwwroot\myservice\bin\Release\myservice.exe”pause

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil -u “C:\Inetpub\wwwroot\myservice\bin\Release\myservice.exe”pause

6 20
12
2011

El servicio SQL Server se detiene

Fecha de publicación: 20 diciembre 2011 a las 8:46 por admin
SQL Server 2008 Express R2

SQL Server 2008 Express R2

Recientemente, trabajando con el gestor de base de datos de Microsoft SQL Server 2008 R2 Express, tuvimos problemas con el inicio de su servicio.

El servicio estaba establecido con arranque automático, sin embargo, al iniciar windows el servicio de SQL Server aparecía parado; y a pesar de arrancarlo manualmente, a los pocos segundos se volvía a detener.

La extrañeza llegó a nuestros corazones, ya que en ningún momento se había realizado ningún cambio en la base de datos, ni en el sistema, más allá de las típicas actualizaciones de Windows.

Tras probar en varias ocasiones el arranque manual del servicio (esperando quizás que el duendecillo de turno lo arreglara sin decir nada), finalmente buscamos errores que por suerte se registraron en el visor de sucesos de Windows.

El mensaje concreto que aparecía en el visor de eventos era:

No se pudo realizar la actualización de nivel de script para la base de datos ‘master’ porque el paso de actualización ‘sqlagent100_msdb_upgrade.sql’ detectó el error 574, estado 0, severidad 16. Se trata de una condición de error grave que podría interferir con las operaciones normales y dejar la base de datos sin conexión. Si el error se produjo durante la actualización de la base de datos ‘maestra’, impedirá que se inicie toda la instancia de SQL Server. Examine las entradas anteriores del registro de errores, emprenda las acciones correctivas adecuadas y reinicie la base de datos de forma que se puedan completar los pasos de actualización del script.

Tras un buen rato googleando, confirmamos que el problema se generó tras las actualizaciones de Windows, y encontramos la siguiente solución que exponemos a continuación:

1. Habilitamos el indicador de traza 902, para ello:

  • Abrimos el Administrador de configuración de SQL Server (lo encontrarás bajo Herramientas de configuración)
  • En Servicios de SQL Server, abrimos el diálogo de propiedades del servicio SQL Server (SQLEXPRESS)
  • Accedemos a la ficha de Opciones Avanzadas
  • Buscamos la variable “Parámetros de inicio” e incluimos “;-T902” al final del valor.

2. Iniciamos el servicio de SQL Server (en este punto el servicio ya no se detiene)

3. Nos conectamos a través de Microsoft SQL Server Management Studio al servidor

4. En propiedades del servidor, desmarcamos la opción “Implicit transactions”

Propiedades de conexión - Microsoft SQL Server Management Studio

Propiedades de conexión - Microsoft SQL Server Management Studio

5. Volvemos a detener el servicio, y eliminar el indicador de traza 902 habilitado en el punto 1.

6. Volvemos a iniciar tanto el servicio de SQL Server como del Agente SQL Server

7. Volvemos a conectarnos a través de Microsoft SQL Server Management Studio y bajo la rama Administración del explorador de objetos, botón derecho del ratón en Recopilación de datos, y habilitamos la recopilación de datos si existiera la opción.

0 27
11
2011

No encontrado en Custom Post Type

Fecha de publicación: 27 noviembre 2011 a las 22:40 por admin

Toda una tarde de domingo perdida, creando tipos de post customizados en wordpress, y encontrándome un bonito error 404 no encontrado o not found cada vez que quería acceder a un post determinado, o a la página general de la categoría.

Este es uno de mis custom post types que había generado, y que al intentar acceder a los post generados bajo esta categoría, me encontraba con el mensaje No encontrado.


	register_post_type( 'story',
		array(
			'labels' => array(
				'name' => __( 'Stories' ),
				'singular_name' => __( 'Story' )
			),
                        'public' => true,
                        'publicly_queryable' => true,
                        'show_ui' => true,
                        'query_var' => true,
			'has_archive' => true,
			'rewrite' => array('slug' => 'stories'),
                        'menu_position' => 5,
                        'supports' => array (
                            'title', 'editor', 'thumbnail',
                        ),
                        'capability_type' => 'post',
                        'publicly_queryable' => true,
                        'taxonomies' => array('category', 'post_tag')
		)
	);

Pues bien, después de pensar durante horas que existía algún fallo en el código, después de probar con diferentes plugins de wordpress, me da por buscar el problema Not found utilizando los custom post types, y gracias a que siempre existe alguien capaz de compartir sus experiencias en esto de la programación, encontramos la solución:


flush_rewrite_rules( false );

Añade la opción

'has_archive' => true,

a tu código register_post_type.

1 30
10
2011

Actualizando WordPress: Fatal error: Out of memory

Fecha de publicación: 30 octubre 2011 a las 15:56 por admin
Wordpress logo

Wordpress logo

Mañana de domingo de otoño, carrera de Fórmula 1 y aburrimiento típico de los domingos.
Es un buen momento para hacer una revisión general de nuestros blogs wordpress, que hace meses que no revisamos, y ejecutar las actualizaciones necesarias.

Sin embargo, no resultó tan fácil como darle a un botón, ya que uno de mis blogs wordpress (alojado en 1and1) mostraba el siguiente mensaje de error en el momento de lanzar la actualización:


Actualizar WordPress

Descargando paquete de instalación desde http://es.wordpress.org/wordpress-3.2.1-es_ES.zip…

Fatal error: Out of memory

(allocated 28311552) (tried to allocate 4346065 bytes) in /homepages/28/d322425856/htdocs/…/wp-includes/class-http.php on line 1426

El problema se reduce a que la actualización necesita más memoria de la que por configuración tiene permitida nuestra aplicación php.

A continuación os dejo las diferentes opciones recopiladas que he ido encontrando por la red, hasta dar con la válida que ha funcionado en nuestro caso.

  • wp-settings.php: ampliamos el límite de memoria permitida añadiendo la siguiente línea de código php
define('WP_MEMORY_LIMIT', '128M');
  • .htaccess: ampliando el límite de memoria a través del archivo de configuración de apache .htaccess, añadiendo las siguientes líneas
# PHP 4, Apache 2.

php_value memory_limit 96M

# PHP 5, Apache 1 and 2.

php_value memory_limit 96M

  • php.ini: ampliando el límite de memoria de php a través del archivo de configuración php.ini, que incluiremos en el directorio raíz de nuestro blog y bajo el directorio wp-admin (esta es la opción que nos funcionó en nuestro alojamiento 1and1.es)
memory_limit=64M

Confiamos en que os sea de utilidad.

0 22
10
2011

Habilitar la pluralización de nombres

Fecha de publicación: 22 octubre 2011 a las 23:14 por admin

Recientemente me encontraba realizando un proyecto en el que estaba utilizando linq para trabajar con base de datos.

Para ello, generamos nuestro modelo de datos mapeando la base de datos a través de la funcionalidad que proporciona Visual Studio: LINQ to SQL classes.

A grandes rasgos, lo que consigues mapeando tu base de datos a través de un modelo de datos, en este caso a través de LINQ, es generar clases correspondientes a cada una de las tablas existentes.

En próximos posts nos adentraremos más a fondo en cómo funciona LINQ, porque hoy es únicamente momento de explicar cómo habilitar la pluralización de nombres.

Pues bien, como hemos dicho, por cada tabla, se crea una clase, y ahí está el fin de este artículo. El proyecto del que os hablo, lo estaba realizando en diferentes ordenadores sobre Visual Studio 2008, y daba la casualidad, de que al regenerar el modelo de datos (LINQ to classes), en ocasiones aparecían los nombres de las clases en plural y en otras ocasiones los nombres de las clases en singular.

La primera vez no le di mayor importancia, seguro por desconocimiento, y lo achaqué a algún despiste inicial en la generación del diseño de datos.

Pues bien, nada más lejos de la realidad. Estos nombres de clases en plural o singular en nuestro modelo de datos generado para linq, podemos elegir si los deseamos trabajar en plural o singular.

Para ello, simplemente debemos configurar Visual Studio de la siguiente forma:

Herramientas –> Opciones

Dentro del cuadro de diálogo de Opciones, expandimos la sección de Herramientas para base de datos, para seleccionar a continuación la opción O/R Designer.

Una vez llegados a este punto, simplemente debemos elegir True o False para habilitar o no la pluralización de nombres del diseño de bbdd.

Nombres en plural modelo de datos LINQ

Nombres en plural modelo de datos LINQ

Para más información podéis acceder al siguiente enlace de microsoft: activar y desactivar la pluralización

3 16
09
2011

Solucionando … Error Fetching http headers soap

Fecha de publicación: 16 septiembre 2011 a las 13:31 por admin

Si has llegado hasta aquí, seguramente ya hayas trabajado con Web Services en diferentes lenguajes de programación.
Y si has obtenido la excepcioń “Error Fetching http headers”, estarás trabajando en estos momentos con PHP.

En primer lugar comentarte que este mensaje de error tan descriptivo Error Fetching http headers se habrá producido con gran probabilidad porque ha transcurrido demasiado tiempo ejecutando la llamada al web services, o en otras palabras un poco más técnicas, porque ha expirado el tiempo máximo de espera de ejecución sobre el Web Services.

Lo que en otras plataformas como Java o .NET recibiríamos como una excepción del tipo TimeoutException, aquí lo recibimos como Error Fetching http headers soap.

¿Cómo podemos entonces indicarle a PHP que queremos incrementar el tiempo de espera?

Si tienes acceso a la configuración del servidor, basta con que busques en tu fichero php.ini la variable default_socket_timeout y definas el nuevo tiempo máximo de ejecución (en segundos) que quieras establecer.

default_socket_timeout = 6000

Si por el contrario no tienes acceso al fichero de configuración php.ini, o simplemente prefieres establecer el valor de timeout sobre el web service en tiempo de ejecución, siempre puedes definir este tipo de variables de configuración del sistema a través de la función ini_set(string $varname , string $newvalue).

ini_set('default_socket_timeout', 600);

Espero que la solución te sea de utilidad como me ha sido a mí.

9 25
07
2011

Java y los ficheros .properties

Fecha de publicación: 25 julio 2011 a las 14:37 por admin

Seguro que muchos ya conocéis qué son y cómo funcionan los ficheros .properties en Java, pero para aquellos que no estén muy familiarizados con este tipo de ficheros de configuración, haremos una pequeña introducción a continuación.

¿Qué son los ficheros .properties para Java?

Los ficheros .properties son archivos que nos permiten almacenar variables de configuración de nuestra aplicación.

En la práctica, no deja de ser un fichero de texto donde almacenar por cada línea, un par clave valor, indicando el nombre de la variable y su valor.

Por ejemplo, podemos almacenar en este tipo de ficheros nuestras variables de configuración para conectar contra base de datos, de esta forma, una vez que el desarrollo pase a un entorno de producción, éste será fácilmente reconfigurable.

Ejemplo:


# DataBase Server
dataBaseServer=localhost

# DataBase Catalog
dataBaseCatalog=mydatabase

# DataBase User
dataBaseUser=myuser

# DataBase Password
dataBasePassword=mypswd

NOTA: Las almohadillas funcionan como comentarios de la línea

¿Cómo trabajar y acceder a los ficheros .properties con Java?

Para trabajar con este tipo de ficheros, Java proporciona la clase java.util.Properties, que a efectos prácticos, no deja de ser una tabla Hash con alguna facilidad más.

Una vez que ya conocemos en qué consisten los ficheros properties, vamos a comprobar cómo trabajar con ellos.

Lo primero que debemos hacer es crear una instancia de java.util.Properties y cargar el fichero de configuración.

Para cargar dicho fichero de propiedades, usaremos el método java.util.Properties.load(input), el cual necesita un parámetro de tipo InputStream, indicando la ruta donde se encuentra el fichero de configuración.

. . .
// create and load default properties
Properties defaultProps = new Properties();
FileInputStream in = new FileInputStream("file.properties");
defaultProps.load(in);
in.close();
...

Vamos a proponer una pequeña variación algo más dinámica para la carga usando getClassLoader y getResourceAsStream.


        this.properties = new Properties();
        try {
            properties.load(Configuration.class.getClassLoader().getResourceAsStream("file.properties"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

En este caso, mi archivo de propiedades se encuentra al nivel del primer paquete/package, tal y como se puede ver en la imagen, dentro de la carpeta src, por lo que cuando genere el proyecto (una aplicación web), el archivo de propiedades quedará dentro del directorio classes.

Accediendo a .properties en Java

Accediendo a .properties en Java

Cómo acceder .properties en Java

Cómo acceder .properties en Java

Ya tenemos cargado desde Java nuestro archivo de configuración mediante un fichero .properties, así que únicamente necesitamos poder acceder a las propiedades de configuración.

Como ya hemos dicho, la clase java.util.Properties, no deja de ser una tabla Hash optimizada para este uso, así que acceder a las variables será muy intuitivo.

Podemos hacer uso del método getProperty de la siguiente manera sobre la instancia creada originalmente.


this.properties.getProperty(key)

 

Clase final para acceder a .properties en Java

Visto a grandes rasgos cómo acceder y trabajar con un fichero .properties desde Java, vamos a crear una clase Configuration.java implementando el patrón Singleton (que explicaremos en próximos artículos), que nos permitirá cargar y gestionar de forma transparente nuestro fichero de propiedades .properties desde una clase Java.

Para que la gestión sea más sencilla, añadiremos también dentro de la propia clase Configuration, unas cuantas constantes que nos permitan acceder de forma más sencilla a la propiedad que estamos buscando.


package com.v3.blog;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 *
 * @author v3rgu1
 */
public class Configuration {

    Properties properties = null;

    /** Configuration file name */
    public final static String CONFIG_FILE_NAME = "Configuration.properties";

    /** Data base server */
    public final static String DATABASE_SERVER = "dataBaseServer";

    /** Data base name */
    public final static String DATABASE_CATALOG = "dataBaseCatalog";

    /** Data base user */
    public final static String DATABASE_USER = "dataBaseUser";

    /** Data base password */
    public final static String DATABASE_PSWD = "dataBasePassword";

    private Configuration() {
        this.properties = new Properties();
        try {
            properties.load(Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE_NAME));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }//Configuration

    /**
     * Implementando Singleton
     *
     * @return
     */
    public static Configuration getInstance() {
        return ConfigurationHolder.INSTANCE;
    }

    private static class ConfigurationHolder {

        private static final Configuration INSTANCE = new Configuration();
    }

    /**
     * Retorna la propiedad de configuración solicitada
     *
     * @param key
     * @return
     */
    public String getProperty(String key) {
        return this.properties.getProperty(key);
    }//getProperty
}

¿Cómo será la llamada?

Configuration.getInstance().getProperty(Configuration.DATABASE_SERVER)
0 09
06
2011

El doodle-guitarra de Les Paul (by Google)

Fecha de publicación: 9 junio 2011 a las 22:49 por admin

Van tan sumamente sobrados que pueden permitirse el lujo de crear virguerías como la de hoy para rendir homenaje a Les Paul, percursor de la guitarra eléctrica.

doodle homenaje Les Paul Google

doodle homenaje Les Paul Google

Ya estamos acostumbrados a encontrarnos de vez en cuando doodles, originales diseños que sustituyen la imagen de Google en homenaje a algún hecho histórico o acontecimiento. Pero en esta ocasión se han superado a ellos mismos.

Hasta no hace mucho, estos doodles no dejaban de ser imágenes con un diseño original, hasta que apareció el ya famoso PacMan de Google. Tal fue el éxito que tuvieron que crear una página propia para este doodle: PacMan Google.

Como ya hemos dicho, hoy se cumplen 96 años del nacimiento de Les Paul, y para celebrarlo, esta mañana nos hemos despertado con un nuevo doodle en forma de guitarra eléctrica interactiva.

¿Cómo funciona el doodle-guitarra?

Si pasamos el ratón por encima de las “cuerdas” de la guitarra, veremos y escucharemos los primeros acordes. Esto está muy bien, pero mejor está la opción de activar el teclado.

Si pinchamos en la imagen inferior que tiene forma de teclado (veremos que está activada si toma un tono rojo, podremos utilizar el teclado para realizar nuestras composiciones.

Algunas melodías para la doodle-guitarra

Pasemos a la acción. Buscando por internet en el día de hoy, es fácil encontrar ya cientos de vídeos en youtube o “partituras” para tocar algunas composiciones famosas.

Algunas de mis melodías preferidas interpretadas por el doodle de Les Paul de Google son:

  • Star Wars: WWWQTEQTEUUUITEQTE
  • El Padrino: DHKJHKHJHFGD
  • Misión Imposible: EETYEEWQ EETYEEWQ
  • Popeye el Marino: 3555435 5646865 5646876531 3555678

Y por supuesto, mi preferida:

  • Indiana Jones: ERTI WER TYUP YUIOP

 

0 06
06
2011

Incrustando ficheros PDF

Fecha de publicación: 6 junio 2011 a las 21:39 por admin
Google Docs Viewer

Google Docs Viewer

Recientemente acabamos de publicar en sinnoticiasdelmundo.com un artículo relacionado con el Convenio de las Agencias de Viajes.

Sin embargo, no creamos esta entrada en v3rgu1.com para hablar sobre dicho convenio colectivo, sino para hablar sobre cómo hemos incrustado o embebido el documento PDF que contiene la información, en este caso, el Convenio de Agencias de Viajes, dentro de nuestro blog.

La mayoría ya conocemos la herramienta GDocs creada por Google como alternativa online al famosísimo Microsoft Office. Lo que no conocía a nivel personal hasta ahora, o más bien, no había caído en esa posibilidad, era la opción de aprovechar el visor de Google Docs para incrustar o embeber nuestros archivos, por ejemplo en formato PDF, dentro de nuestras páginas webs.

La idea es sencilla, pues simplemente debemos indicarle a Google Docs Viewer la url de nuestro archivo de la siguiente manera:


<iframe src="http://docs.google.com/viewer?url=URLDETUFICHERO&embedded=true" width="600" height="780" style="border: none;">
</iframe>

O si ya te encuentras en un nivel de vaguería superior, genera el código html desde Google Docs Viewer.

En nuestro caso, el blog se construye bajo WordPress, pero sobra decir que es válido lógicamente para cualquier página, framework, lenguaje, plataforma, etc.

El resultado final será similar al conseguido con https://viewer.zoho.com/ o con http://es.scribd.com/ pero Powered by Google 😛