Cultura o entretenimiento

I-love-to-read-books-for-funHace unos días asistí al primer congreso del libro electrónico en Barbastro, donde se dieron encuentro muchos de los involucrados en esto de los libros digitales. Por una parte teníamos los de siempre (libreros, editoriales tradicionales, autores de toda la vida) y por otra a los nuevos actores (Amazon, Google, blogeros, nuevos oficios editoriales, etc.). Fue un encuentro muy interesante y primorosamente preparado por la organización.

Durante este encuentro se oyeron cosas de todo pelaje (podéis ver los videos de las sesiones), editores quejándose de los piratas, libreros quejándose de las multinacionales aunque se alíen con su competencia directa, profesionales de la edición quejándose de los precios que les pagaban los editores… Multinacionales haciendo un publireportaje de sus productos, gente explicando cómo hacer marketing de los libros aunque todavía no haya constancia de que tal cosa se haga, pero eso si, en un ambiente donde nadie tenía claro a dónde iba… Nadie salvo Amazon.

Una de las cosas que más molestó a los «tradicionales» fue cuando el vicepresidente de Kindle Europa (Ezequiel Szafir) dijo que la competencia de un libro digital no era ya un libro en papel, que si un usuario no encontraba el libro que quería leer en digital no se iba a ir a una librería a por él, ni siquiera iba a esperar a que se lo mandasen a casa, simplemente se iría a hacer otra cosa… Como jugar al candy crush! y es que, hoy por hoy, la lectura se ha convertido en una fuente más de entretenimiento y, como tal, debía competir por la atención de las personas con el resto de fuentes de entretenimiento.

Ante tal herejía, que por otra parte a mi me parece muy razonable, las respuestas que se escucharon en otras sesiones eran, poco menos, que meras pataletas. Los editores ilustrados y los libreros afrentados solo pudieron recurrir a los viejos tópicos ¿que pasa si nos quedamos sin luz? ¿quien leerá a los grandes de la literatura ahora? ¡La lectura es cultura, no entretenimiento! o, ya fuera del congreso, «Sería una tragedia que la cultura acabe en puro entretenimiento». Y en esa parte me quiero parar… ¿Alguien sabe, realmente, lo que es la cultura?

Reproduzco aquí un párrafo de la wikipedia (si, se lo que me vais a decir… ):

Cuando el concepto surgió en Europa, entre los siglo XVIII y XIX, se refería a un proceso de cultivación o mejora, como en la agricultura u horticultura. En el siglo XIX, pasó primero a referirse al mejoramiento o refinamiento de lo individual, especialmente a través de la educación, y luego al logro de las aspiraciones o ideales nacionales. A mediados del siglo XIX, algunos científicos utilizaron el término «cultura» para referirse a la capacidad humana universal. […] Algunos etólogos han hablado de «cultura» para referirse a costumbres, actividades o comportamientos transmitidas de una generación a otra en grupos de animales por imitación consciente de dichos comportamientos.

Según la RAE:

(Del lat. cult?ra).

1. f. cultivo.

2. f. Conjunto de conocimientos que permite a alguien desarrollar su juicio crítico.

3. f. Conjunto de modos de vida y costumbres, conocimientos y grado de desarrollo artístico, científico, industrial, en una época, grupo social, etc.

Así pues… La cultura no es «leer muchos libros», ni «haber leído a los clásicos, los pensadores o los filósofos», ni siquiera dedicar mucho tiempo a actividades del pensamiento… Cultura es todo lo que hacemos en nuestro día a día y que nos conforma como personas. Si queremos leer un libro digital autopublicado de aventuras, eso entra en nuestro acerbo cultural, lo mismo que si leemos a Wittgenstein o si deleitamos nuestros oídos con Mozart o los destrozamos con Eminem. Quien quiera acaparar la cultura, o peor aún, denominarse como industria cultural, no podrá. La cultura, simplemente, es propiedad de las personas que conviven en sociedad y que, hoy por hoy, eligen lo mismo leer un libro digital que jugar al Candy Crush.

Así pues las industrias culturales no son más que industrias del entretenimiento que, en mayor o menor medida, escogen sus repertorios según sus gustos… Habrá quien apueste por un cierto «compromiso intelectual», quien apueste por vender lo que sabe que gustará al público o quien busque su nicho de fieles aunque sepa que tiene un mercado limitado. El caso es que editar por editar, perder dinero por creer que los lectores han de ser más inteligentes de lo que son, o por simple esnobismo, no da derecho a protección especial… No, la cultura no es solo lo elitista y minoritario, sino más bien al contrario, todas las grandes creaciones culturales lo han sido porque han conseguido llegar al alma de miles de personas, que han transformado su vida por lo que han leído, visto o escuchado. Quejarse de que ahora la gente ya no lee es fútil, hay que atraer las personas a la lectura, haciendo, si es necesario, el esfuerzo de transformar su forma de acceso incluso la misma física del libro para que vuelva a ser un objeto que capture la atención de las personas… Y que esas personas terminen encontrando el libro que quieren leer antes que echar otra partida con su móvil.

Por cierto, a la gente le gusta leer… Y le gusta leer en digital según el estudio de biblioeteca.

ING Direct … Vuelva usted en seis meses

Una cosa que ya os he dicho que odio profundamente son las tareas de gestión que tengo que acometer como pequeño empresario (gajes del oficio). No tengo tiempo ni ganas de andar lidiando con temas que nada tienen que ver con la informática.

El caso es que una de esas cosas tiene que ver con los bancos en los que tenemos nuestros escasos dineros… La verdad es que no usamos muchos servicios financieros, pero una de las cosas que sí necesitamos es un TPV virtual para poder cobrar desde la web. La última vez que necesité uno me presenté en la caixa con las escrituras de la nueva empresa y a la semana ya tenía los datos del TPV virtual para poder empezar a cobrar.

El caso es que a principios del mes pasado recibí un folleto de ING direct anunciando que habían creado un nuevo tipo de cuenta para las empresas y que, entre otras cosas, ofrecían un TPV virtual en unas condiciones bastante mejores que las que tenía con la Caixa. Dado que soy cliente particular de ING desde hace un tiempo me decidí a abrir la cuenta para cambiar el TPV… Y ahí es donde el «fresh banking» se ve que no funciona para las empresas.

Tardaron como dos semanas en tenerme operativa la cuenta, desde que envié la documentación hasta que pude recibir una transferencia pasaron exactamente 15 días (y eso llamando para avisar de que no devolviesen la transferencia que acaban de hacerme). Una vez conseguida toda la documentación, tarjeta y claves adecuadas, me decido a solicitar el TPV y me tienen otra semana adicional diciendo que «Sus poderes no permiten hacer eso»… ¡ole sus holandeses huev**! Tras cuatro o cinco llamadas más (esperando un montón, ya que parece que hay pocos operadores para la nueva cuenta) consigo que me hagan caso y desbloqueen el tema de los «superpoderes»… ¿Ningún problema para solicitar el TPV?

Pues no, ahora al solicitarlo me dice:

Dale otra vez al teléfono y a twitter y tras muchas indagaciones me dicen que:

Requiere tener más de 6 meses de antiguedad como cliente (la empresa) para poder solicitar el TPV.

¡Vaya! pues va a ser complicado porque este tipo de cuenta lleva operativo desde finales de octubre (de hecho principios de noviembre en realidad).. La excusa que me ponen en ING es que podría haber tenido una cuenta ahorro negocios, que si que tiene ya más de 6 meses de antiguedad.

En primer lugar tengo que agradecer a ING su atento trato y su interés por mi problema. Sin embargo, me parece un poco arriesgado comercializar un producto anunciando prestaciones que no puedes acceder sino al cabo de seis meses… ¿Qué riesgo tenían con el TPV virtual? Si no hay aparato que prestar ni coste de instalación ni nada que pudiese afectar negativamente al banco.

En resumen, que o me espero 6 meses o no puedo acceder a lo único que me ha interesado de su cuenta… Esto no creo que sea «fresh banking», es más bien «caspa banking», en lugar de ahorrarte tiempo y darte servicios ágiles y eficientes te hacen llamar mil veces, esperar mucho más que con cualquier otro banco para las gestiones y esperar muchísimos meses más para un servicio virtual en lo que ellos debían tener ventaja dada su naturaleza.

No creo que pueda esperar los seis meses, ING tendrá un cliente menos… Y lo probable es que la cuenta personal siga el mismo camino dada la poca inteligencia de los que ofrecen y publicitan sus nuevos servicios. ¡Una pena!

El experimento del remarketing

Después de que en el anterior post me quejase amargamente de la persecución de un baner malencarado, por fin su autor (que ya se ha disculpado) ha publicado las conclusiones y motivaciones de su estudio.

Dejo aquí el enlace a su post: Este Banner me persigue, y le agradezco que se haya molestado en disculparse. Ciertamente me ha hecho ver que las cosas que se pueden hacer con las herramientas de marketing de google también pueden usarse para el mal ;-)

Eduard, estás perdonado, pero, por favor, la próxima vez que nos persigas con una campaña de este tipo, por favor, pon una imagen más agradable como esta:

(Foto sacada de aqui).

Lo que no se es, ¿cuanto te costó esta campaña de «mentalización»?

Páginas estáticas multilingues y con plantilla tiles en struts2

Si, es un título un poco largo, pero he tardado un poco en encontrar una solución a este problema y quiero compartirlo para todos aquellos que os encontréis en la misma tesitura.

Primero, un pequeño resumen de la situación:

  • Aplicación java con struts2+tiles+urlrewrite
  • internacionalización mediante i18n con archivos de properties
  • Necesidad de un número no trivial de páginas «estáticas» con textos largos poco susceptibles de entrar como property.

Los problemas:

  1. No queremos tener una entrada en el tiles.xml por cada página estática pero queremos utilizar las plantillas existentes.
  2. No queremos generar una acción nueva por cada página
  3. No queremos tener que hacer una nueva entrada urlrewrite por cada página
  4. Queremos poder generar páginas de error si no encontramos una página en un idioma determinado.
  5. Queremos poder generar el texto completo en cada idioma como una página html, no como properties.

Si todavía no os habéis hecho una idea, no os preocupeis, es algo normal. Esta situación no se da todos los días.

La solución

O mejor dicho, mi solución…

Voy a crear una única acción que se encargue de determinar el jsp a cargar dentro de la plantilla tiles y voy a modificar una plantilla existente para inyectarle esa nueva página. Además, como el título de la página estará en la plantilla, voy a encargarme de generar el texto en el idioma adecuado. Además, voy a crear un prefijo para el urlrewrite que permita que todo esto quede bonito para google…

Paso a paso:

Modificación del urlrewite.xml:

<rule>
    	<from>^/web/(.*)$</from>
    	<to>/Estaticas.action?pagina=$1.jsp</to>
    </rule>

Con esta regla le decimos que siempre que tengamos una url con la forma /web/mipagina llamaremos a la acción Estaticas y le pasaremos como parámetro mipagina.jsp

Modificacion en struts.xml:

<action name="Estaticas" 
           class="com.yoprogramo.web.action.EstaticasAction">
  <result>/estatica.jsp</result>
</action>

Con esa acción lo que hacemos es llamar a EstaticasAction.java (luego lo vemos) y redirigir a estatica.jsp que tiene este contenido (quitando las cabeceras):

<tiles:definition name="estatica.modif" extends="estatica">
  <tiles:putAttribute name="body" value="${pagina}" />
</tiles:definition>
<tiles:insertDefinition name="estatica.modif" />

Lo que estamos indicando es que se modifique la plantilla con nombre estatica, definida en el tiles.xml y que ponga como atributo body el valor que la acción nos ha devuelto en pagina, de esta manera estaremos utilizando la plantilla definida en el tiles.xml, pero pasándose un jsp distinto. Esta forma de utilizar tiles es lo que se denomina «mutable», para poder utilizarla hay que incluir en el archivo web.xml:

  <context-param>
        <param-name>org.apache.tiles.factory.TilesContainerFactory.MUTABLE</param-name>
        <param-value>true</param-value>
  </context-param>

Ahora que tenemos todo en su sitio, solo tenemos que crear una estructura donde guardar las páginas de cada idioma y poder localizarlas facilmente. Por ejemplo, yo he creado una con esta estructrura:

Arbol de páginas estáticas

Bajo «es» pondré las páginas en español, en «en» las páginas en inglés y en «multi» las páginas multilingues que utilizan el packages.properties para traducir sus claves.

Lo único que nos queda ahora es programar la acción EstaticasAction.java .. Os dejo el código del execute:

		// Eliminamos ruta de lenguaje
		int idx=pagina.lastIndexOf("/");
		String page_name = pagina;
		
		if (idx>0)
			page_name = pagina.substring(idx+1);
		
		idx = page_name.lastIndexOf(".");
		if (idx>0)
			page_name=page_name.substring(0,idx);
		
		//Parte multilingue.
		//Vamos a crear una página para cada idioma, excepto para las
		//que sean muy simples y esas estarán en el directorio /multi
		if (!pagina.contains("/multi")) {
			String lang = getText("locale.language");
			if (lang==null)
				lang="en";
			pagina = "/"+lang+"/"+pagina;
		}
		
		// Ahora comprobamos si existe la página y si no existe redirigimos
		// a una página de error del tipo multi
		String servletContext = 
                     ServletActionContext.getServletContext()
                                                 .getRealPath("/estaticas");
		String filePagina = servletContext+pagina;
		File f = new File (filePagina);
		if (f.exists())
			pagina="/estaticas"+pagina;
		else
			pagina="/estaticas/multi/noexiste.jsp";
		
		// Ahora ponemos el título, que deberá estar como un texto 
		// en package con la forma web.<nombre_pagina>.titulo
		String key = "web."+page_name+".titulo";
		titulo = getText(key);
		
		return SUCCESS;

Una vez todo puesto en su sitio la mecánica para crear páginas estáticas y usarlas en nuestra aplicación es bastante simple:

  1. Crear un jsp con el texto para cada idioma y colocarlos bajo el directorio correcto (p.je. es/mipagina.jsp y en/mipagina.jsp)
  2. Crear una entrada en el package_en.properties y package_es.properties con la clave web.mipagina.titulo indicando el título de la página en cada idioma. (Recordemos que el titulo está en el head de la página y eso suele estar en la plantilla, no en el jsp que estamos modificando).
  3. Ya podemos acceder a /web/mipagina y ver cómo queda dentro de nuestra plantilla.

Igual inicialmente parece mucho trabajo, pero una vez hecho esto podréis hacer tantas páginas estáticas como queráis sin ningún esfuerzo y ligadas a las plantillas del resto de vuestra aplicación.