miércoles, 7 de diciembre de 2011

Personalizando imagenes mostradas al compartir páginas en sitios sociales

Logotipo de la Graph API -Facebook-

Al compartir la página de la  documentación del botón like de la API de Facebook en  mi wall me llamó la atención que se mostraba  una imagen (thumbnail) que no aparecía por ninguna parte en el artículo :O . ¿Cómo es esto posible? En esta entrada brindo una explicación de este fenómeno paranormal (al menos para mí ;o). Si Usted está interesado en controlar la imagen de sus páginas cuando los usuarios lo anuncian en  Facebook y otros sitios sociales, le invito a que continúe leyendo este artículo hasta el final. Si está interesado en estar informado sobre temas relacionados con los secretos que esconden las redes, Usted puede también  suscribirse mediante RSS.

El caso del botón Share

Recientemente  anuncié el lanzamiento de un sitio llamado  Appeartowork. Mientras ultimaba los detalles salió a relucir el modo de especificar la imágen que seleccionará  Facebook cuando los usuarios compartan el link en lugares como su muro, mensajes, etc. Cualquiera podría pensar que el sitio simplemente se limita a identificar y extraer las imágenes que encuentra en una página, y mostrarlas para su posterior selección, en caso de haber varias opciones. Sin embargo no es del todo así. Como ya les comenté las páginas de la documentación de la Graph API de Facebook son fundamentalmente texto y al compartirlas (al menos todas las que yo he visto ;o) muestran  un logotipo que está muy relacionado con la compañía y su imágen de marca.

Comencé a investigar y descubrí que hay una variante del botón Share (XFBML). Hecho esto, al hacer click sobre el botón aparecería un diálogo como el mostrado en la siguiente figura.

Sinceramente ahora no recuerdo cómo logré hacerlo ... los años no perdonan :-/

Preparando páginas para publicación en sitios sociales

Incluso cuando se usa el método anterior (cuando lo recuerde escribiré una nota al respecto), puede que resulte efectivo para insertar estos botones en sus propios sitios, pero no funciona si el usuario inserta el enlace directamente en su muro de Facebook. Afortunadamente existen ciertos metadatos que se pueden insertar en las páginas con el fin de indicarle a  Facebook (y otros sitios sociales ;o) los datos que se desean mostrar al compartir el enlace. La tecnología subyacente es conocida como  Open Graph Protocol :

Open Graph tags are <meta> tags that you add to the <head> of your website to describe the entity your page represents, whether it is a band, restaurant, blog, or something else.

No pretendo profundizar mucho en este protocolo, pero sí explicar cómo utilizarlo para lograr lo que nos proponemos. El punto de partida será un documento XHTML con el contenido de la página.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hello world example</title>
</head>
<body>
        <h1>Hello world!</h1>
        <p>
            This simple web page has been used to illustrate how to use meta-data 
        defined by the <a href="http://developers.facebook.com/docs/opengraph">Open Graph Protocol</a> so as to 
        decide/suggest the look and feel of links shared on social sites. 
    </p>
        <p>
            Please consult the following pages for further information.
        </p>
        <ul>
            <li><a href="http://simelo-en.blogspot.com/">Facebook Open Graph tutorial (English)</a></li>
            <li><a href="http://simelo-es.blogspot.com/2011/12/personalizando-imagenes-mostradas-al.html">Facebook Open Graph tutorial (Spanish)</a></li>
            <li><a href="http://simelo-en.blogspot.com">English blog</a></li>
            <li><a href="http://simelo-es.blogspot.com">Spanish blog</a></li>
            <li><a href="http://www.olemix.com">Website</a></li>
        </ul>
</body>
</html>

Posteriormente es preciso añadir los metadatos del  Open Graph Protocol que son de interés. Para ello se incluye el espacio de nombres http://opengraphprotocol.org/schema/ y se usa el tag meta como se muestra a continuación para especificar por ese orden el título predeterminado del enlace que mostrará  Facebook, el tipo de enlace, la URL, la imágen que se mostrará como thumbnail, el nombre del sitio y la descripción asociada al enlace (o sea, la que se muestra bajo el título, no el mensaje que introduce el usuario ;o). Al hacer esto el ejemplo anterior se transformaría y quedaría similar al que se muestra a continuación :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/">
<head>
        <title>Hello world Open Graph sample by Simelo</title>
        <meta property="og:title" content="Hello world Open Graph sample by Simelo" />
        <meta property="og:type" content="website" />
        <meta property="og:url" content="http://samples.olemix.com/opengraph/hello.html" />
        <meta property="og:image" content="https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/187687_1339232608_3437336_n.jpg" />
        <meta property="og:image" content="http://img.wonderhowto.com/images/gfx/gallery/634554136690814583.jpg" />
        <meta property="og:site_name" content="Simelo's code snippets" />
        <meta property="og:description" content="Example illustrating the use of the Open Graph Protocol (by Olemis Lang)" />
</head>
<body>
        <h1>Hello world!</h1>
        <p>
            This simple web page has been used to illustrate how to use meta-data 
        defined by the <a href="http://developers.facebook.com/docs/opengraph">Open Graph Protocol</a> so as to 
        decide/suggest the look and feel of links shared on social sites. 
    </p>
        <p>
            Please consult the following pages for further information.
        </p>
        <ul>
            <li><a href="http://simelo-en.blogspot.com/">Facebook Open Graph tutorial (English)</a></li>
            <li><a href="http://simelo-es.blogspot.com/2011/12/personalizando-imagenes-mostradas-al.html">Facebook Open Graph tutorial (Spanish)</a></li>
            <li><a href="http://simelo-en.blogspot.com">English blog</a></li>
            <li><a href="http://simelo-es.blogspot.com">Spanish blog</a></li>
            <li><a href="http://www.olemix.com">Website</a></li>
        </ul>
</body>
</html>

Después de publicar esta página en  la URL especificada en og:url , se obtiene el siguiente resultado al tratar de compartirla en  mi wall de Facebook.

Imagen al compartir enlace en Facebook

Observaciones

En primer lugar no se puede dejar pasar inadvertido un detalle. En muchos sitios se menciona que en caso que se especifiquen varias imagenes con el tag og:image el sitio donde se comparte el enlace debe ofrecer cada figura para su selección y posterior inclusión en el post ; pero como ven en la imagen anterior solo aparece una imagen. Si solo se especifica una figura, generalmente no queda otra opción para los usuarios que comparten el enlace. En caso de que no se inserte ningun tag og:image entonces, en el caso de  Facebook, se recurre al método antiguo. El mismo consiste en utilizar la URL mencionada en un tag como el siguiente.

<link rel="image_src" href="https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/187687_1339232608_3437336_n.jpg"/>

Si no hubiera tampoco un tag <link> de este tipo, entonces se recurre a buscar todas las imágenes que aparecen en el documento y cumplen los requisitos de previsualización, que hasta donde sé son :

  • Las dimensiones deben ser al menos 50px X 50px .
  • Relación 3:1 como máximo .
  • Formato PNG, GIF, JPEG .

Es preciso mencionar que hay que ser cuidadoso a la hora de hacer todo esto porque  Facebook utiliza un mecanismo de cache para los thumbnails. Una vez que la URL ha sido compartida el crawler de Facebook, que se identifica con el encabezamiento User-Agent con el valor facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php), accede a la página y mantiene una copia local de la información. Razón por la cual si se comparte el enlace antes de tener todo esto listo, puede que la imagen especificada con el  Open Graph Protocol no aparezca, ya que se utiliza la primera opción que permanece en el cache. Todas las imágenes deben ser públicas y accessibles por el crawler de Facebook .

Las buenas noticias son que se puede actualizar el cache y corregir los tags utilizando la herramienta  Facebook Linter . Los detalles de  su puesta en funcionamiento en Junio de 2010 pueden serles de interés, en caso que quieran saber un poco más al respecto.

Espero que esta nota les haya resultado útil. No olvide  suscribirse mediante RSS si está interesado en temas similares. Cualquier duda u observación, espero  sus comentarios. Recuerde que todo es posible simelo pide ... ;o)

martes, 6 de diciembre de 2011

@Wandisco propone Bloodhound, un fork de Trac

Trac podría ser Apache Bloodhound link=http://wiki.apache.org/incubator/BloodhoundProposal

En  artículos anteriores les he hablado de  Trac , un sistema de administración de proyectos que me gusta mucho debido la calidad de su diseño. Soy el autor o contribuyo con  varios plugins. Me atrevería a decir que  Trac es el sistema de este tipo con más instalaciones funcionando en línea. Muchos projectos de software libre lo utilizan, e.g.  Pidgin,  PyAMF,  OForge ... muchos en realidad. También sucede que compañías como  Sourceforge también lo ofrecen en su paquete de  hosted apps .

Estado actual de la comunidad de Trac

Sin embargo en los últimos tiempos el desarrollo de la herramienta no ha sido lo suficientemente acelerado como algunos querrían. Hay algunas razones para haber llegado a este punto. En primer lugar ya  Edgewall (la compañía que gestó el proyecto) no es lo que solía ser unos años atrás. Además  el sitio de la comunidad necesita una actualización desde hace mucho tiempo ya. Todavía funciona con la versión 0.10, en un momento en que ya se está desarrollando la versión 0.13. Hay una buena distancia entre las dos, créanme. En mi opinión también sería muy conveniente que migraran el  repositorio actual basado en  Subversion para utilizar otro sistema distribuido, e.g.  Mercurial o  Git (me inclino por el primero pero todo parece indicar que ya hay una  propuesta de espejos para Git y  otra propuesta para Bitbucket).

Teniendo en cuenta mi experiencia personal también me inclino a pensar que los desarrolladores de los plugin puede que no tengan el apoyo necesario como para dedicarse a tiempo completo a realizar sus ideas. Por tal razón se dedican a hacer otras cosas mejor remuneradas.

Nuevos horizontes para Trac

Recientemente me ha llegado  una agradable noticia. Hay un fuerte interés en el desarrollo y mejora de  Trac. Todo comenzó meses atrás cuando un mensaje fue enviado a las listas  trac-users y  trac-dev. En estos momentos, gracias fundamentalmente a la compañía  Wandisco, esta petición a tomado vuelo y se concreta en una  propuesta llamada Bloodhound. La idea subyacente es integrar el desarrollo bajo la égida de la  ASF en el sistema  Apache Incubator. Esta fundación se destaca por dar vida a comunidades relacionadas con el código abierto. Entre las más destacadas se encuentran los proyectos  Subversion y el servidor  Apache httpd, ambos estrechamente relacionados con  Trac.

La idea que se maneja es clonar el código existente y comenzar una rama de desarrollo independiente , o sea que el proyecto anterior no muere. Por tales razones supongo que lograr una interoperabilidad entre ambos proyectos, al menos en un futuro cercano, es algo que beneficie a ambas partes. En el caso  plugins útiles y exitosos para ofrecer una solución llave en mano. del naciente Bloodhound la idea consiste también en empaquetar varios

Conclusiones

En pocas palabras , estoy muy contento al saber que todo esto está ocurriendo. Espero que la idea dé frutos y pueda salir a flote esta nueva herramienta. Habrá que seguir  la evolución de esta idea para ver qué resulta. Gracias a todos los que la han hecho posible.

domingo, 27 de noviembre de 2011

Datos de autor bajo resultados de búsqueda de Google

Nota bajo mi cuenta de Twitter al buscar en Google

Respondo en este artículo algunas inquietudes que me han llegado después de que varios lectores han constatado el efecto de anotar los autores en los resultados de búsquedas de  Google. Todo comenzó al revelar los secretos de  las anotaciones en resultados de búsqueda de Google mediante links de Blogger. En ese artículo indirectamente mencioné el proceso, pero muy brevemente. Ambos fenómenos tienen un orígen común, que es el que trataré de explicar en pocas líneas. Todos los pasos los ilustraré tomando a mi propio blog como ejemplo. Espero ver en lo sucesivo algunas caras conocidas en los resultados de Google ;). Si está interesado en estar informado sobre temas afines, Usted puede también  suscribirse mediante RSS.

Información sobre autores en resultados de búsqueda

Google está llevando a cabo una iniciativa de mostrar información de autores en los reslutados de búsquedas con el fin de que los usuarios puedan descubrir y acceder a contenidos de calidad, ya sea tanto en las búsquedas orgánicas o en los canales de noticias. Para lograrlo el autor debe insertar cierta información que le indique al buscador la intención de anotar el enlace a la página con dichos datos como foto del autor, nombre, y enlace al perfil en  Google+. Esto útlimo es un requisito obligatorio. Para ser más claro hay que tener un perfil en Google+ que tenga asociado una foto en la que se pueda reconocer al autor (aunque he visto casos en los que esto último no parece ser indispeensable). Les explico cómo es el procedimiento en caso que tengan el control del sitio.

Enlazar el contenido al perfil de Google

Hay dos formas de enlazar el contenido de una página al perfil de Google. La más rápida es insertar el ícono oficial que ofrece Google+. En este caso obtenga  el código HTML del ícono e insértelo en la página que Usted ha creado en su sitio. A modo de ejemplo el código necesario para enlazar con mi perfil luce más o menos así

<a rel="author" href="https://plus.google.com/118444449354330048631">
  <img src="http://www.google.com/images/icons/ui/gprofile_button-16.png" width="16" height="16">
</a>

Al insertarlo en esta página , luce más o menos así .

Enlazando mi blog con mi perfil de Google+

La segunda forma de lograrlo es insertando enlaces manualmente. Deben tener una estructura parecida a la siguiente <a href="[profile_url]?rel=author">Google+</a> . Remplace [profile_url] con la dirección de su perfil de Google. Mi perfil, por ejemplo, quedaría referenciado así <a href="https://profiles.google.com/118444449354330048631?rel=author">Google+</a>. Hay dos requisitos indispensables para que todo funcione, y son :

  • Después de la URL del perfil hay que añadir el argumento ?rel=author.
  • El texto dentro del enlace debe terminar con el caracter + .

Sin embargo, yo no he utiizado ninguna de estas dos variantes, sino más bien una variación de la segunda que también es permitida. En la esquina superior izquierda hay una sección titulada Anfitrión y en la parte inferior se encuentra un enlace con el texto Follow me at Google+. Usted puede echarle un vistazo al código de la página y constatará que el código HTML del enlace es como se muestra a continuación <a rel="author" href="https://profiles.google.com/118444449354330048631">Follow me at Google+</a> Comparando con la segunda alternativa presentada se hace evidente que es exactamente el mismo enlace, pero que se sustituye el uso del parámetro ?rel=author por el atributo rel="author".

Enlazar el contenido desde el perfil

Enlace inverso a mi blog desde mi perfil de Google+

Ya para concluir, la relación debe ser recíproca. Es por esto que se precisa añadir un enlace a su(s) sitio(s) desde su perfil. Para lograrlo siga los siguientes pasos :

  • Inicie sesión en su cuenta de Google y diríjase a  su perfil.
  • Haga clic en Editar perfil.
  • Haga clic en la sección que aparece a la derecha con el título Colaborador en.
  • Haga clic en Añadir enlace
  • Haga click en Guardar cambios ... ¡ Listo !

Hay una forma de verificar que todo está bien y además de conocer cuales datos de autor extrae Google de su página. Si así lo desea , utilice  esta herramienta (a.k.a.  rich snippets testing tool). Se permite en este caso el análisis de una sola página.

Conclusiones

A primera vista puede resultar vanal el hecho de insertar la información de autor en los resultados de búsqueda. Algunos pueden afirmar que la información visual puede atraer más usuarios hacia su sitio, y otros pueden tener objeciones. Sin embargo , como analicé en  otro artículo el proceso detallado acá es la base para que el buscador sugiera enlaces a su sitio cuando se muestre una fuente relevante. Parece un trabalenguas, así que me explico.

Mi artículo sobre Appeartowork en resultados de Google

Partamos del caso en que la persona X haya añadido a la persona Y a sus círculos en Google+. En el blog de Y aparece un enlace a la página P (al parecer, más allá de poder ser incluido por Y en el texto, puede aparecer en otros lugares e.g. en comentarios). Posteriormente X busca ciertas palabras claves en Google y obtiene a P como uno de los resultados. Sin embargo en la parte inferior aparece una nota que dice Y shared this on Blogger 1 January 1970 . Claro que esto no va a ocurrir siempre así de esta manera, pero puede suceder. Segun mi experiencia Google considera la relevancia de los artículos a la hora de insertar anotaciones. Otros factores (que por ahora creo que solo maneja Google ) pueden influenciar la selección de las sugerencias. Note además que si el artículo fue compartido por el mismo usuario que inició la búsqueda entonces parece que no se muestra el enlace al artículo que motivó la anotación.

Anotaciones en resultados de Google

¿Cual es el resultado? Supongamos que la página P está bien ranqueada. Entonces Google le está haciendo publicidad indirecta al sitio de Y y el efecto neto resulta ser que su página se ha adjudicado un PageRank (o como quiera que le llamen ahora ;) artificial más elevado que puede atraer visitas de las personas conectadas mediante Google+. La reacción más lógica sería que haya quien trate de aprovechar la posibilidad para incluir enlaces a resultados de búsqueda bien ranqueados en sus artículos. Ahora evaluemos los resultados fríamente. La página P ha obtenido un beneficio permanente y a largo plazo (un enlace entrante, que suma puntos para su PageRank) mientras que el artículo del usuario Y, en este caso, quizás es promocionado por Google y varias personas logran enterarse de este hecho y quizás lo lean. Entonces me hago dos preguntas:

  • ¿Es esta otra situación más en la que los ricos se hacen más ricos?
  • ¿Cuán ventajoso y efectivo resulta realmente este método para elevar el PageRank de sitios como el blog de Y ?
  • ¿Tendrá todo esto algún impacto en la actividad de los usuarios de Google+? ¿ Por ejemplo se destará una ola de suscripciones a círculos con el fin de difundir y publicitar enlaces ?

El diablo se esconde en los detalles. Quisiera conocer sus opiniones, así que, como ocurre siempre, sus comentarios serán bienvenidos. Les invito a  suscribirse mediante RSS si está interesado en temas de optimización y posicionamiento web.

jueves, 24 de noviembre de 2011

Adios Google Wave ... vivirás en nuestros servidores

Adios Google Wave

Pasado más de un año después de la  cancelación del desarrollo de Google Wave como proyecto, hoy  Google le ha dado el toque de gracia al servicio. A partir del 31 de enero del 2012 todos los datos serán de solo lectura. El servicio será abadonado y dejará de existir a partir del próximo 30 de abril del 2012. Hasta esa fecha estarán disponibles las siguientes alternativas para respaldar los datos existentes:

  • Utilizando la acción de exportar PDF.
  • Desplegando servicios similares en otros dominios. En este caso hay varios proyectos de código abierto a los que se pudieran recurrir:

Para más detalles consultar esta  información en el Centro de Ayuda de Google. Otro servicio genial de Google que queda en el camino por razones más allá de los aspectos tecnológicos. Un día de estos habría que detenerse y, ahora que ya no estará, aclarar cuanto nos dejo. Sospecho que muchos , como yo, estaremos orgullosos de haberlo usado alguna vez ... y tendrá un espacio en nuestros corazones aquel tarequito de Google que revolucionó varios aspectos de la web; sí, aquel que todos quisimos hacer una vez. Quizás nunca lograremos saber si murió de muerte natural, o lo mataron algunas decisiones. RIP

miércoles, 23 de noviembre de 2011

Google+ Ripples y Diagramas de Flujos, mirando la web desde Google

Google+ Ripple sobre artículo de Ripples

Recientemente  Google ha cerrado varios servicios  e.g. Google Buzz. Todo parece indicar que los esfuerzos se han dirigido a potenciar otros servicios más establecidos, en gran parte debido al hecho de que han publicado otras nuevas funcionalidades y mejorado las facilidades existentes. Notablemente me llamaron la atención los avances en el área de visualización de datos en gráficas. Hace tiempo ya que estaban disponible varios gráficos complejos como  Intensity Map y  Motion Chart. Sin embargo le sugiero que continue leyendo este artículo si desea estar al tanto de las nuevas ideas hechas realidad por Google. Al menos a mí me impresionaron mucho a medida que las fui descubriendo. Si Usted es de las personas que necesita visualizar datos de maneras suigeneris, le recomiendo  suscribirse mediante RSS para estar al tanto de nuevas noticias sobre este tema.

Patrones de interacciones sociales con Google+ Ripples

Google+ Ripple - Extensiones de Chrome

 Google+ es una red social de reciente creación. Muchas de sus características todavía están en desarrollo, y ya muestra potencialidades enormes. Tal parece que Google estaba muy al tanto de la respuesta a la pregunta ¿Qué es lo que no le gusta a los usuarios de Facebook?. Más allá de las comparaciones entre ambos sitios sociales, en este contexto se ha creado una de las gráficas más geniales que he visto en mucho tiempo, llamadas  Google+ Ripples. Estos no son más que un grafo que ilustra la historia de publicaciones sucesivas (shares) de un mismo mensaje, enlace, video, o cualquier otro contenido.

Como dicen los que saben una imagen vale más que 1000 palabras. Por eso los invito a observar  10 ejemplos de Ripples célebres. Entre ellos se encuentra la  figura de la Luna por Ron Garan,  la importancia de RSS por Felicia Day y el  post de Sergey Brin acerca de Steve Jobs. Me gustan mucho también  uno que trata acerca de la extensiones populares de Chrome y  este post compartido por Vic Gundotra.

Se pudiera pensar que son garabatos inofensivos, pero los posts más populares pueden llegar a representar tanto tráfico que las distintas ramas toman dimensiones impresionantes y un aspecto muy parecido al de un  fractal. Desde un punto de vista más práctico se pueden utilizar para ver los patrones de distribución y dispersión de las noticias .  Ryan Crowe escribió  un análisis acerca de esta tecnología que trata de presentar la idea de que los Google+ Ripples pueden ser un medio para expandir su alcance e influencia en  Google+.

Diagramas de flujos de visitantes

Ejemplo de flujo de visitantes

Las herramientas de análisis de caminos de navegación a través de un sitio han tenido tradicionalmente sus puntos bajos en cuanto a usabilidad se refiere. Por lo general se encuentran más y más tropiezos a medida que se aumenta el nivel de detalles de la segmentación.  Google estuvo al tanto y puso todo su espíritu innovador junto con su probada calidad y experiencia de desarrollo de visualizaciones para crear nuevos enfoques que ilustren el flujo de visitantes. Con el objetivo de lograr que los diagramas sean más intuitivos y útiles recientemente en el  Web 2.0 Summit se ha anunciado que los usuarios de  Google Analytics pueden utilizar los llamados  Flow Visualization.

Este tipo de gráfica es utilizado fundamentalmente de dos formas diferentes. En primer lugar se tiene los Flujos de Visitantes (Visitor Flow). Los mismos representan el flujo de visitantes a través del sitio considerando las fuentes de tráfico (otras dimensiones al parecer también son posibles). De una forma íntegra se puede tener idea de todo el viaje y el punto exacto donde abandonaron el sitio. Este tipo de visualizaciones permite tener idea de la efectividad de decisiones importantes como el uso de una promoción determinada. Hermosas telas de araña ... ¿verdad? ;)

Ejemplo de flujo por objetivos Ejemplo de flujo por objetivos

Por otra parte se ofrecen los Flujos de Objetivos (Goal Flow) que son muy parecidos a los anteriores pero consideran en su representación los objetivos de navegación definidos por el usuario del servicio. Inicialmente se pueden utilizar los objetivos definidos por URL , pero próximamente se espera añadir los eventos y otros tipos de objetivos. Su utilidad se puede ejemplificar con el entendimiento de los siguientes aspectos :

  • El volumen relativo de visitas hacia el sitio segun la dimensión seleccionada.
  • La frecuencia con la que los visitantes abandonan los diferentes caminos de navegación.
  • Dónde y cómo los visitantes transitan por cada paso hacia un objetivo definido.
  • La forma de las interacciones entre los usuarios y el sitio.

Conclusiones

Desde Google nos llega una nueva ola de buenas ideas. La presión de otros actores en ramas tradicionalmente dominadas por la compañía, e.g.  la combinación Yahoo! + Microsoft , y el cambio de CEO han contribuido al ajuste de su estrategia y la mejora de los servicios de puntería. Las visualizaciones mencionadas son abarcadoras, sintéticas y muy interactivas. Es posible enfocar varios caminos y ver información sobre nodos y conexiones específicas. En pocas palabras, impresionante lo que ha logrado  Google con sus creaciones más recientes.

Le invito a  suscribirse mediante RSS si desea conocer nuevas y útiles formas de visualizar datos . Si Usted conoce alguna otra o tiene alguna opinión que sea de interés, no dude en dejar su comentario; serán bienvenidos.

Google Analytics Blog: Introducing Flow Visualization: visualizing visitor flow

domingo, 20 de noviembre de 2011

Mostrando enlaces en posts de Blogger bajo resultados de Google

Búsqueda de Google muestra enlaces compartidos en Blogger

Brevemente les comentaré acerca de la relativamente reciente inclusión de enlaces a artículos de  Blogger debajo de los resultados de las búsquedas de  Google . Confieso que esta característica me tomó por sorpresa . Todo empezó cuando ...

UpdateEn  otro artículo explico detalladamente cómo indicar a Google la autoría de los contenidos en línea, proceso que sirve de base para que suceda todo lo explicado en este artículo.

Sorpresa, anotaciones sociales y blogs

... Trataba de instalar la excelente librería  setuptools implementada por  P.J. Eby. Resulta que la necesitaba porque tenía que crear paquetes .egg para varios plugins de  Trac con python2.7. Sin embargo, esta versión del interprete no se distribuye a través de los repositorios de Ubuntu 10.04 (el LTS que utilizo por el momento). Como consecuencia varias librerías para esta versión no quedaban bien instaladas a través del administrador de paquetes. En el caso específico de setuptools se suma el hecho de que el truco estándar de instalación manual no funciona (si están interesados en saber cuál es, deje un comentario o contacteme por cualquier otra vía y trato este tema en otro artículo ;).

Respiré profundo, y decidí violentar mi primer principio de uso de GNU/Linux (i.e. trata por todos los medios de instalarlo todo a través del sistema de paquetes). Como se puede ver en la figura, al hacer  una búsqueda para descargar el .egg para python2.7 , aparece un enlace al  blog de Reiner Marquez . ¡Wow! dije Marquez está trabajando para Google . En ese momento me cayó una manzana en la cabeza y entonces fue que pude reaccionar y busqué más información acerca del tema :P .

Inserten un enlace y lo sabrá todo el mundo …

Se puede ver el mensaje que se muestra en la figura debajo del nombre del autor. Todo parece indicar que la primera pieza del rompecabezas consiste en que añadí a Reiner Marquez en unos de mis círculos en  Google+ . Por cierto en este caso la relación es recíproca (¿será esto es un requisito para que todo funcione?).

En segundo lugar  el artículo en cuestión tiene un enlace que hace una referencia rel=author a  Reinier Marquez en Google+. Súmenle el hecho de que en esta última página se incluye un enlace en sentido contrario hacia la URL del blog.

Con estos pre-requisitos , todo parece indicar que los enlaces que aparecen en los artículos de Blogger son asociados con el post. Dicha asociación se expresa en las notas que aparecen debajo de los resultados de búsqueda. ¡ Así de simple !

Conclusiones

Todos los elementos mencionados en este artículo supongo que estén relacionados con el siguiente comentario publicado en este  post de Google acerca de búsquedas sociales:

... we’ve made Social Search more comprehensive by adding notes for links people have shared on Twitter and other sites.

Quizás muchos pensaron que other sites se refería a sitios como  Twitter,  Digg u otras plataformas sociales. Bueno, añadan a Blogger a la lista ;o) . De esta forma Google facilita otros mecanismos de promoción de contenidos a través de sus resultados de búsqueda.

¿ Pero esto queda aquí ? Pues parece que no. En próximos artículos les comentaré acerca de otras curiosidades similares. Le invito a  suscribirse mediante RSS si desea conocer cómo manejar los hilos que hacen funcionar la web. Quien sabe y quizás un día Usted encuentre una nota haciendo referencia a uno de mis artículos mientras busca contenidos en Google. En ese caso , no olvide dejar su comentario; serán bienvenidos.

miércoles, 16 de noviembre de 2011

Insertando calendarios de jQuery con Symfony

Calendario de jQuery con plugin sfFormExtraPlugin para Symfony

Recientemente comencé a desarrollar aplicaciones en  PHP con el  framework Simfony. En este corto articulo les narro cómo instalar el  plugin sfFormExtraPlugin y luego facilitarle al usuario la selección de fechas mediante el uso de un calendario (en este caso de  jQuery Datepicker). De más está decir que me ha dado unos cuantos dolores de cabeza , así que espero que este corto tutorial también pueda servirle a todos aquellos que tienen problemas similares al mío. Por el camino, como efecto secundario, también espero que queden claras las razones por las que me gusta  Python, especialmente  las plantillas de Genshi con Django. Espero también que Ustedes con sus comentarios puedan iluminarme el camino que lleva a mejorar la solución que les presento por acá. Les sugiero  suscribirse a este blog mediante RSS si desea estar al tanto de nuevos trucos de programación. Sin más rodeos, let the hacking begin ! .

Pre-requisitos

Formulario estándar de Symfony

Sinceramente hay  muchos tutoriales detallando los primeros pasos en Symfony. Es por esto que no pretendo abordar todos estos pasos. Asumo entonces que ya existe un sitio funcional y muy especialmente una página que utiliza los  formularios de Symfony para ofrecerle al usuario la posibilidad de seleccionar fechas. En otras palabras , ya se tiene una aplicación donde existe una clase TestForm.class.php que utiliza los modelos que brindan acceso a la base de datos; además existen módulos, componentes, y todo lo que sea preciso (... hay muchos caminos para llegar a Roma ;) para obtener una página similar a la que se muestra en la figura.

Instalando el plugin sfFormExtraPlugin

Segun la documentación hay  muchas formas de instalar un plugin de Symfony. De más está decir que Murphy (... mi gran amigo de mil batallas ... Jo jo jo ...) se encargó de que ninguna funcionara. Me explico. Cualquier variante de instalación en línea que incluyera conectarse al  PEAR channel de Symfony siempre terminaba en un adorable mensaje The channel symfony does not support the REST protocol . Por tal razon pasé a la próxima fase : la instalación offline . A continuación les muestro brevemente cómo se hace (basado en  este artículo del sitio My Rant).

Primeramente, edite el fichero config/ProjectConfiguration.class.php y habilite el plugin sfFormExtraPlugin. Le debe quedar algo más o menos así (aunque puede ser diferente si Usted utiliza otros plugins en su aplicación ;) .




class ProjectConfiguration extends sfProjectConfiguration  
{  
  public function setup()  
  {  
    $this->enablePlugins(array('sfDoctrinePlugin', 'sfFormExtraPlugin'));  
  }  
}  

También acostumbro a incluir el plugin en el fichero apps/<appname>/config/settings.yml (aunque sinceramente no he podido constatar la necesidad de hacerlo). Allí sería preciso modificar la directiva enabled_modules y añadir sfFormExtraPlugin , por ejemplo, de la siguiente manera :

enabled_modules:      [default, sfGuardAuth, sfFormExtraPlugin]

Luego proceda a instalar el plugin en cuestión.

$ cd plugins  
$ wget "http://plugins.symfony-project.org/get/sfFormExtraPlugin/sfFormExtraPlugin-1.1.3.tgz"  
$ tar zxvf sfFormExtraPlugin-1.1.3.tgz  
$ mv sfFormExtraPlugin-1.1.3 sfFormExtraPlugin  
$ cd ..  
$ ./symfony plugin:publish-assets  
$ cd web/js  
$ wget "http://code.jquery.com/jquery-1.4.3.min.js"  
$ wget "http://jqueryui.com/download/jquery-ui-1.8.5.custom.zip"  
$ mkdir jquery-ui  
$ cd jquery-ui  
$ unzip ../jquery-ui-1.8.5.custom.zip  
$ mv jquery-ui/css/smoothness ../css  

En este punto ya deberían estar instalados los ficheros del plugin, pero faltan unos detalles. En primer lugar, hay que inyectar las referencias a los ficheros estáticos de jQuery . Por tanto , edite el fichero apps/<app_name>/config/view.yml e incluya los valores mostrados a continuación :

stylesheets:    [main.css, smoothness/jquery-ui-1.8.5.custom.css]  
  
javascripts:    [jquery-1.4.3.min.js, jquery-ui/js/jquery-ui-1.8.5.custom.min.js]  

Ya por último hace falta indicarle a Symfony cuales son los campos para los cuales se ofrecerá la posibilidad de edición mediante un calendario. Edite el fichero del formulario (e.g. lib/form/doctrine/TestForm.class.php ) y edite el método configure añadiendo instrucciones como las que se muestran a continuación.




class TestForm extends BaseTestForm
{
  public function configure()
  {
                $this->widgetSchema['fechainicial'] = new sfWidgetFormJqueryDate();
                $this->widgetSchema['fechafinal'] = new sfWidgetFormJqueryDate();
                $this->widgetSchema['fecharev'] = new sfWidgetFormJqueryDate();
  }
}

Todas las referencias indican que en este punto ya se visualizaría un botón que desplegaría el calendario de jQuery ... pero ...

Cuando Olemis llora Murphy tiembla …

Ejemplo de calendario insertado en formulario

Está de más decir que por alguna razón (... que todavía no he logrado descubrir, así que si la conocen espero sus comentarios con detalles ... ;) no me funciona. Cuando se va a visualizar la página, en mi caso, se muestra el siguiente mensaje Fatal error: Class 'sfWidgetFormJqueryDate' not found in /path/to/project/lib/form/doctrine/TestForm.class.php on line 17 . Sospecho que la causa es que el fichero plugins/.filemap no está correctamente generado (¿ algo que supongo que deba hacer el comando plugin:publish-assets ?). Llego a esa conclusión al comparar los contenidos de mi fichero (mostrado a continuación) con los de otros proyectos que hacen uso del mismo plugin (e.g.  Kakrail)

a:0:{}

Por tales razones me vi obligado a incluir la siguiente línea al principio del fichero lib/form/doctrine/TestForm.class.php. Preste atención al hecho de que la ruta especificada puede cambiar en dependencia del lugar donde se ubique el fichero .php del formulario, pero siempre tiene que resultar en una referencia al fichero plugins/sfFormExtraPlugin/lib/widget/sfWidgetFormJQueryDate.class.php.




require dirname(__FILE__).'/../../../plugins/sfFormExtraPlugin/lib/widget/sfWidgetFormJQueryDate.class.php';

Después de este pequeño detallito, todo funciona. Sin embargo, como ya mencioné anteriormente, me gustaría no tener que incluir esta línea y lograr que se concrete la magia del fichero .filemap ... pero por ahora ¡qué remedio! . De más está decir que espero sus comentarios al respecto.

Agradecimientos

No sería posible concluir este artículo sin agradecer a Yamila , quien se encargó del proceso de creación del sitio de Symfony , los modelos de Doctrine , etc, etc ... y facilitó los enlaces a los  artículos de instalación de los plugins de Symfony, exactamente dos minutos antes de enviarle un ramo de flores a los desarrolladores del plugin y del framework (... y a Murphy ...) .

Conclusiones

Como han podido apreciar es posible enriquecer las interfaces de usuario de sitios implementados con Symfony . En particular se brinda la posibilidad de desplegar un calendario para seleccionar cómodamente fechas. El proceso es ... enriquecedor . La ruta ideal puede fallar en varios puntos del camino , pero al final se logra el objetivo . Recuerde que todo es posible simelo pides ... . Pronto publicaré más artículos sobre temas afines. Si Usted está interesad@ le invito a  suscribirse a este blog mediante RSS . Cualquier sugerencia para mejorar el artículo, correcciones a partes del proceso explicado , preguntas ... pues no dude en compartirlas y dejar su comentario. Podrían ser útiles para que otros resuelvan algún problema y usen eficientemente su tiempo. Hasta pronto

sábado, 15 de octubre de 2011

Tutorial - Eliminando cookies, cache y otros datos privados de navegadores web en Windows

Los 5 grandes navegadores web

En este tutorial utilizaré a  Opera,  Google Chrome,  Mozilla Firefox,  Safari e  Internet Explorer para mostrar con cada uno de ellos cómo eliminar el cache de páginas visitadas, las cookies (e.g. preferencias y sesiones iniciadas en el servidor), y el historial de navegación. Las técnicas aquí mencionadas son específicas para el sistema operativo  Microsoft Windows, pero espero pronto hacer una versión que incluya los detalles para hacer lo mismo en  GNU/Linux y  Mac OS X. Por lo tanto no se asombren si encuentran scripts .bat a lo largo de todo el artículo. Al final también trato el tema de eliminar las cookies específicas de  Adobe Flash Player que son independientes del navegador web.

Google Chrome

 Google Chrome, al igual que  Chromium, guarda la historia, los cookies el cache y los bookmarks en varias bases de datos en el directorio de configuración de aplicaciones del usuario. La ruta en cuestión es C:\Users\<username>\AppData\Local\Google\Chrome\User Data . La manera más fácil de eliminar esos datos es borrar todo lo que esté ahí. El navegador crea todos los ficheros necesarios para empezar desde cero en caso de no encontrar nada allí.


@echo off

set ChromeDir=C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data

del /q /s /f "%ChromeDir%"
rd /s /q "%ChromeDir%"

El script primeramente borra todos los ficheros en la carpeta antes mencionada y luego el propio directorio. La opción /q del comando del es para que no se imprima información en la pantalla, mientras que /s es para borrar ficheros y carpetas de forma recursiva y /f se utiliza para obligarlo a que borre ficheros de solo lectura. Las opciones /q y /s del comando rd son similares a las ya mencionadas, solo que en vez de ficheros se borran carpetas.

Mozilla Firefox

 Firefox guarda las cookies, el cache y el historial en dos lugares. Primeramente en el directorio de configuración de aplicaciones C:\Users\<username>\AppData\Local\Mozilla\Firefox\Profiles y, en segundo lugar, en el directorio C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles. Para eliminar los datos privados se puede proceder a borrar el primer directorio y todas las bases de datos sqlite que se encuentren en el segundo.


@echo off

set DataDir=C:\Users\%USERNAME%\AppData\Local\Mozilla\Firefox\Profiles

del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"

for /d %%x in (C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do del /q /s /f %%x\*sqlite

La primera parte del script es muy similar a la que se explicó anteriormente. El comando for que aparece al final se utiliza para procesar uno a uno los subdirectorios de la carpeta C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles e ir borrando las bases de datos sqlite que allí aparecen. No es aconsejable borrar completamente esta carpeta porque es allí donde  Firefox guarda las extensiones y sus respectivas configuraciones.

Opera

 Opera también guarda los datos privados en dos lugares diferentes de una forma parecida a Firefox : el directorio de datos de aplicaciones específico para el usuario C:\Users\<username>\AppData\Local\Opera\Opera y la carpeta C:\Users\<username>\AppData\Roaming\Opera\Opera. Si se eliminan los dos directorios se logra el objetivo sin muchos problemas colaterales.


@echo off

set DataDir=C:\Users\%USERNAME%\AppData\Local\Opera\Opera
set DataDir2=C:\Users\%USERNAME%\AppData\Roaming\Opera\Opera

del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"

del /q /s /f "%DataDir2%"
rd /s /q "%DataDir2%"

Apple Safari

El proceso con  Safari es muy parecido al caso de Opera, pero en este caso utilizando los directorios C:\Users\<username>\AppData\Local\Apple Computer\Safari y C:\Users\<username>\AppData\Roaming\Apple Computer\Safari. El script quedaría de la siguiente forma.


@echo off

set DataDir=C:\Users\%USERNAME%\AppData\Local\Applec~1\Safari
set DataDir2=C:\Users\%USERNAME%\AppData\Roaming\Applec~1\Safari

del /q /s /f "%DataDir%\History"
rd /s /q "%DataDir%\History"

del /q /s /f "%DataDir%\Cache.db"
del /q /s /f "%DataDir%\WebpageIcons.db"

del /q /s /f "%DataDir2%"
rd /s /q "%DataDir2%"

Microsoft Internet Explorer

Estoy seguro de que no se sorprenderán cuando les diga que el caso del  Internet Explorer es ... es más complicado :o). La historia de páginas visitadas, los cookies y el cache se encuentra disperso por todos lados, incluyendo el Registro de Windows. A continuación les presento un script que borra toda la información que se encuentra en el sistema de archivos y finalmente en el registro.


@echo off

set DataDir=C:\Users\%USERNAME%\AppData\Local\Microsoft\Intern~1

del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"

set History=C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\History

del /q /s /f "%History%"
rd /s /q "%History%"

set IETemp=C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Tempor~1

del /q /s /f "%IETemp%"
rd /s /q "%IETemp%"

set Cookies=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Cookies

del /q /s /f "%Cookies%"
rd /s /q "%Cookies%"

C:\bin\regdelete.exe HKEY_CURRENT_USER "Software\Microsoft\Internet Explorer\TypedURLs"

El ejecutable invocado al final es regdelete.exe. Esta es una aplicación Win32 escrita en C++ que borra cualquier llave del registro, en este caso la historia de navegación. A continuación les muestro el código:


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <string>
// compile as: mingw32-g++ regdelete.c -o regdelete.exe -mwindows

#define eq(s1,s2) (strcmp((s1),(s2))==0)

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int nCmdShow) 
{ 
    if (!cmdLine || !strlen(cmdLine)) {
        printf("Usage: regdel.exe <HKEY> <path to regkey> - be careful not to delete whole registry\n");
        return 1;
    }

    int argc;
    LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc);

    if (argc < 3) {
        printf("Usage: regdel.exe <HKEY> <path to regkey> - be careful not to delete whole registry\n");
        return 1;
    }

    char **argv8 = (char **)malloc(sizeof(char *) * argc);
    for (int i = 0; i<argc; i++) {
        int len = wcslen(argv[i]);
        argv8[i] = (char *)malloc(sizeof(char)*(len+1));
        wcstombs(argv8[i], argv[i], len+1);
    }

    HKEY hkey;
    if (eq(argv8[1], "HKEY_CLASSES_ROOT")) {
        hkey == HKEY_CLASSES_ROOT;
    }
    else if (eq(argv8[1], "HKEY_CURRENT_CONFIG")) {
        hkey = HKEY_CURRENT_CONFIG;
    }
    else if (eq(argv8[1], "HKEY_CURRENT_USER")) {
        hkey = HKEY_CURRENT_USER;
    }
    else if (eq(argv8[1], "HKEY_LOCAL_MACHINE")) {
        hkey = HKEY_LOCAL_MACHINE;
    }
    else if (eq(argv8[1], "HKEY_USERS")) {
        hkey = HKEY_USERS;
    }
    else {
        printf("Unknown hkey\n");
        return 1;
    }

    HKEY key;
    int status = RegOpenKeyEx(hkey, argv8[2], 0, KEY_ALL_ACCESS, &key);
    if (status != ERROR_SUCCESS) {
        printf("failed opening %s\n", argv8[2]);
        return 1;
    }

    std::vector<std::string> vals;

    for (unsigned int i = 0; ; i++) {
        DWORD size = 1024;
        char val[size+1];
        DWORD type;
        status = RegEnumValue(key, i, val, &size, NULL, &type, NULL, NULL);
        if (status == ERROR_NO_MORE_ITEMS) break;
        if (status == ERROR_SUCCESS) {
            vals.push_back(std::string(val));
            continue;
        }
        printf("failed enumerating %s\n", argv8[2]);
        return 1;
    }

    typedef std::vector<std::string>::iterator vsi;
    for (vsi i = vals.begin(); i != vals.end(); i++) {
        status = RegDeleteValue(key, i->c_str());
        if (status != ERROR_SUCCESS) {
            printf("failed deleting %s\n", i->c_str());
            return 1;
        }
    }

    return 0;
}

Realmente bello el código :o) ... bueno ... El fichero .exe se obtiene después de compilar este fichero con  MinGW o  Microsoft Visual Studio.

Flash Cookies

Ha sido largo el camino hasta acá ... así que mejor me apuro y les hablo de los cookies del plugin de Flash. Estos datos se encuentran en la carpeta C:\Users\<username>\AppData\Roaming\Macromedia\Flash Player\*. La forma más fácil de lograr el objetivo es eliminando, de forma similar a como ya lo habíamos hecho antes, todo lo que se encuentra allí.


@echo off

set FlashCookies=C:\Users\%USERNAME%\AppData\Roaming\Macromedia\Flashp~1

del /q /s /f "%FlashCookies%"
rd /s /q "%FlashCookies%"

Conclusiones

¡Eso es todo! Con estos scripts se pueden eliminar todos los datos personales de navegación. Si quiere estar al tanto de nuevos trucos y temas interesantes, le invito a  suscribirse a este blog. Los scripts mostrados pueden ser refinados. Cualquier señalamiento o sugerencia será bienvenida; espero sus comentarios. Recuerde que todo es posible ... simelo pide ....

jueves, 8 de septiembre de 2011

Tutorial - Restringiendo ejecución de aplicaciones en Windows mediante Group Policy Objects

Group Policy Object Editor MMC

Recientemente supe como resolver un problema interesante de administración en el sistema operativo  Microsoft Windows. Si Usted trata de lograr que un(os) usuario(s) solo pueda(n) ejecutar un número reducido de aplicaciones, en este artículo encontrará los detalles explicados paso a paso. Hacer esto puede resultar de utilidad para frenar la difusión de programas malignos, como virus y troyanos ... esos huéspedes indeseables amigos del Kaspersky :P. La solución presentada creo que es lo suficientemente precisa, confiable y elegante como para ser implementada en un entorno de producción. La documentación al respecto es escasa, así que aquí les dejo mis notas. Usted puede  suscribirse a este blog si desea estar al tanto de temas tan raramente abordados como el que les presento a continuación. Espero que a algunos les permita aprovechar su tiempo y realizar esta tarea rápidamente. Como verán me baso en una instalación de Windows en inglés. Si alguien tiene la amabilidad de mencionar los términos equivalentes en español, sin dudas actualizaré el artículo lo más pronto que sea posible. Espero sus comentarios ;o) .

La solución consiste en configurar lo que se conoce como  Software Restriction Policy (SRP) en las políticas (i.e.  Group Policy Object) del usuario en cuestión y no permitirle ejecutar ninguna aplicación excepto

  • Los ficheros ejecutables que intervienen en el inicio de sesión (sino no podrá utilizar el equipo :-$ , así que asegúrese de incluirlos en la sección Additional Rules del SRP y establecer el nivel de seguridad en el valor Unrestricted).
    • C:\Windows\explorer.exe
    • C:\Windows\System32\csrss.exe
    • C:\Windows\System32\dwm.exe
    • C:\Windows\System32\rdclip.exe
    • C:\Windows\System32\taskhost.exe
    • C:\Windows\System32\TSTheme.exe
    • C:\Windows\System32\userinit.exe
  • Las demás aplicaciones que se determine que pueda utilizar el usuario, pues si solo se habilitan los que fueron mencionados anteriormente entonces solo podrá ver su escritorio y no podrá hacer absolutamente nada. Ejemplos que se podrían añadir en la lista Unrestricted Access son:
    • Paint, añada la ruta C:\Windows\System32\paint.exe
    • Microsoft Internet Explorer, añada la ruta C:\Windows\System32\iexplore.exe
    • ...

A continuación menciono los pasos que hay que seguir para deshabilitar la ejecución de programas. Para ejecutarlos se hace imprescindible tener permisos de administración.

  1. Abrir la consola de administración i.e. Microsoft Management Console (Start -> Run -> mmc):
  2. Seleccione File -> Add/Remove Snap-in
  3. Seleccione Group Policy Object
  4. Haga click en Add
  5. Haga click en Browse, y seleccione el usuario al cual desea restringirle los permisos.
  6. Haga click en Finish, y OK. En este momento en el la vista jerárquica aparecerá un nodo <username> Policy.
  7. Navegue a User Configuration -> Windows Settings -> Security Settings -> Software Restriction Policies
  8. Hag click derecho sobre Software Restriction Policies y haga cick en New Software Restriction Policies
  9. Aparecerán dos nodos nuevos en la vista jerárquica. Haga click en Security Levels
  10. Haga doble click en el nivel de seguridad Disallowed y luego click en Set as Default
  11. Acceda al otro nodo, i.e. Additional Rules
  12. Elimine las runas élficas que Windows añade allí de forma predeterminada (i.e. %HKEY_LOCAL_MACHINE\... y otros cuentos de horror ... :o).
  13. Añada las reglas para las aplicaciones mencionadas al principio del artículo. Recuerde que son absolutamente necesarias para que el usuario pueda iniciar su sesión tanto desde el desktop como por acceso remoto.
  14. Añada los caminos a los otros programas que el usuario podrá ejecutar (e.g. C:\windows\system32\paint.exe , ... etc.). Asegúrese de que los usuarios no pueden sobrescribir estos programas, porque sino de todas formas podrán ser capaces de ejecutar cualquier cosa ;o).
  15. Haga click en Save.
  16. Listo!

Conclusiones

Espero que todos aquellos que han leído este artículo ya se hayan convencido de que  Microsoft Windows es el sistema operativo más seguro que existe ...

¡Oh, no! no se preocupe era una broma ... :o)

Me sentiría muy feliz si Usted hubiera encontrado en este artículo la solución a su problema . Si quiere estar al tanto de nuevos trucos y temas interesantes, le invito a  suscribirse a este blog. En caso de tener dudas o necesitar ayuda espero sus comentarios. Recuerde que todo es posible ... simelo pide ....

martes, 30 de agosto de 2011

TuxInfo - Programación funcional en Python

 TuxInfo 40 lista para la descarga!!! ¿Por qué Android es el número uno?

Recientemente fue publicado en la  revista TuxInfo un artículo introductorio a la programación funcional en Python que escribí junto a  Arnau Sánchez. Este es el más reciente de una serie que trata de presentar las características de dicho lenguaje de programación, y muy especialmente demostrar e ilustrar los multiples paradigmas que influencian su sintaxis y definición. A todos aquellos interesados en temas de programación, les invito a leerlo (se agradecen sus comentarios ;o). Puede utilizar  este enlace para descargarla. Si desea descargar numeros anteriores consulte  el archivo.

Antes de terminar es preciso extender un saludo a todos los que han contribuido (de una forma u otra) con la revista que logra mantenerse en la preferencia de los amantes del software libre después de 40 ediciones (ufff ... felicidades Ariel Corgatelli et al. )

o<|:)

jueves, 21 de julio de 2011

Presente y futuro del Festival Rotilla ... el robo

Los Aldeanos en Festival Rotilla 2010

Seguro que muchos esperábamos asistir al  Festival Rotilla 2011. ¡Qué ingenuos! Resulta que las instituciones pretenden secuestrar el evento. Aquí en este artículo Usted encontrará el texto íntegro de la declaración de los organizadores, explicando las razones por las que se suspende la edición que se realizaría el presente año 2011. A modo de introducción este espacio cultural es organizado desde 1998 de forma independiente y está destinado muy precisamente a presentar las manifestaciones culturales de vanguardia para disfrute de los jóvenes cubanos. Las presentaciones, la asistencia y otros detalles eran convocados gratuitamente y sin ánimo de lucro. La edición del 2010 tuvo mucho éxito y tuvo una asistencia superior a los 20,000 participantes, que pudieron disfrutar de agrupaciones como  Los Aldeanos y  otros. En fin, que ojalá que esta iniciativa no naufrague y que no se convierta en otro ejemplo más de cómo la voluntad individual es aplastada cada vez que los empeños independientes de los ciudadanos llegan más allá de una línea que se mueve con el tiempo pretendiendo ajustar nuestros gustos, creencias, pronunciamientos, nuestras convicciones, costumbres alimentarias, nuestra economía ... gracias a la estrategia de dejarnos sin la posibilidad de potenciar nuestras propias opciones por nuestro propio bien. Ahora me viene a la mente una canción de un grupo llamado Lucha Almada que antecedió cronológicamente al proyecto  Habana Abierta que dice apróximadamente así

(...) ¡ay de ti! ¡ay de mí!
!ay de las quimeras en que un día creí!
(...) todo el mundo teme a algo y por si acaso
no se quita la escafandra
(...) en la escuela cuando chicos nos hablaban del amor y la esperanza
(...) y a estas alturas corazón andas buscando solución
que te pasa que te veo así, vendiéndolo todo ... todo
y a estas alturas corazón no has aprendido la lección
porque hay cosas que se van y ya, ya no vuelven más

DECLARACION OFICIAL DEL CONSEJO DIRECTIVO DEL FESTIVAL ROTILLA

La Habana, Cuba. 20 de Julio de 2011

Motivo Denuncia del Secuestro del Festival Rotilla.

 Rotilla Festival, fundado en el año 1998, es el único evento de su tipo en Cuba. Se realiza cada año en el mes de agosto, y durante tres días consecutivos promueve y expone la gran mayoría de las manifestaciones de la vanguardia artística cubana. Es de carácter no lucrativo, totalmente gratuito y abierto a todos los públicos. Al principio comenzó siendo un movimiento promotor exclusivamente de la música electrónica, a partir del 2008 incorporó a su programa artístico bandas musicales de los más variados formatos, pero siempre bajo el principio de promover lo alternativo dentro de las artes. Igualmente el festival desde su nacimiento ha sido administrado de manera INDEPENDIENTE por sus fundadores, y sin prácticamente ninguna colaboración de las autoridades cubanas (estado-gobierno) . Esa ha sido nuestra política y nuestra posición, queríamos crecer desde nosotros mismos, desarrollarnos y generar un movimiento auténtico dirigido especialmente hacia los jóvenes teniendo muy en cuenta sus verdaderas expectativas y exigencias. En la ultima edición (2010), ya por las propuestas artísticas, por el eco de prensa tanto nacional como internacional, por la larga trayectoria y el renombre adquirido mundialmente, el festival obtuvo el récord en asistencia de 20 000 personas, colocándose así como el evento más largo en tiempo y de mayor asistencia juvenil dentro la isla. La gran cantidad de materiales fílmicos acopiados en todo este tiempo así lo legitiman.

Hoy, en el 2011, Rotilla Festival enfrenta su mayor oprobio. El Gobierno Cubano, en la persona del vicepresidente Estaban Lazo, junto al Ministerio de Cultura, en la persona del viceministro Fernando Rojas, pretenden secuestrar el evento de las manos de sus organizadores y fundadores, y realizarlo desde las instituciones estatales, arrebatando y plagiando para esto nuestro nombre, nuestros días señalados y nuestra convocatoria, violentando el concepto propio del evento, llevando al “festival“ bandas que modifican el formato que nosotros, sus legítimos dueños, habíamos establecido. Por otra parte, las instituciones en cuestión han ofrecido remuneraciones económicas a los artistas participantes en este “evento“ para de este modo deteriorar la relación social establecida históricamente (sin basamento lucrativo) entre los organizadores originales y los artistas, asegurando así la presentación de estos últimos.

Tradicionalmente había existido un dialogo con las autoridades, donde estas presionaban para que no se presentara determinado grupo y en cambio cooperaban para que se realizara el festival, se había establecido así un modus vivendi, de coexistencia. Nunca ha sido algo cómodo informar a un artista que no puede presentarse, pues el Ministerio de Cultura lo rechaza. Pero ese, es el folklore tradicional que en cuanto al arte se vive en Cuba. Eso es por todos conocido. Sin embargo, en esta ocasión… han ido demasiado lejos las llamadas instituciones. Nos han comunicado informalmente, a través de Noel Soca, funcionario que dirige la Comisión de Recreación y Cultura en la nueva provincia de Mayabeque, que no teníamos mas nada que ver con ello, que el festival sería realizado por el Ministerio de Cultura y el Instituto de la Música en los días señalados, pues los jóvenes iban a asistir de cualquier manera. La directiva del  Festival Rotilla acudió al Ministerio de Cultura sabiendo que se estaba realizando una reunión con motivo y nombre Rotilla, en las oficinas de Fernando Rojas, viceministro de cultura. De ella fuimos cortésmente expulsados, no habíamos sido convidados.

Una cosa es la censura (ya tradicional), otra muy diferente es el robo, el plagio y el secuestro de una obra que ha alcanzado muy altos niveles de atención a nivel incluso internacional, y que cuenta con las congratulaciones de miles de jóvenes cubanos que allí han asistido por años. El equipo organizador de Rotilla Festival, quiere dejar muy claro y de manera categórica, que este año 2011, se cancela el Festival Rotilla, por la violencia ética que han manifestado las máximas autoridades de la cultura cubana. Nosotros, realizadores y autores de Rotilla Festival, y en mi nombre propio, su director y fundador, DENUNCIAMOS el robo, el plagio y el secuestro que esta actitud significa para todos los jóvenes de esta tierra que hoy representamos. Denunciamos la excesiva y terca censura que se esta ejerciendo contra cualquier actividad cultural que NO provenga de las llamadas instituciones. Denunciamos el acoso a que estamos siendo sometidos de manera constante, a la vigilancia y las amenazas sutiles o directas de las que somos objeto cotidianamente. Un país no se dirige como se dirige un campamento! dijo en ocasión de la guerra chiquita José Martí al generalísimo Máximo Gómez. Y es que en un país debe primar un pensamiento plural, su sociedad debe ser dueña y soberana verdadera de la nación, y por encima de todo, dueña de la buena obra construida con el esfuerzo de los años y el sudor de la propia frente. El robo de una obra propia, que se concibe como proyecto de vida, es el acto más inmoral y deplorable en que se puede ver involucrado el estado-gobierno de una nación. Rompe con todos los principios de la ética revolucionaria, cuyo concepto esta escrito en cada esquina de cada barrio de todo el país. Queremos advertir a nuestros líderes, que este tipo de actos, atacan incluso la base del contrato social vigente en la sociedad cubana. Arremeten contra el principio de respeto que un pueblo debe tener por su gobierno. Consideramos que incluso, contradice los mismos lineamientos que se acaban de lanzar con razón del VI Congreso del Partido Comunista de Cuba, ignorando algunos de los principios que allí quedaron plasmados; dejándonos a los hijos de Cuba sin norte de guía y sin esperanzas. Para reconstruir la nación, es evidentemente necesario que participemos todos. Y esa participación solo se puede generar con la confianza y el respeto entre el estado–gobierno y la base de la sociedad, sus gentes. Este tipo de actos sembrarán entre nosotros, hoy los más jóvenes, la desconfianza a construir y crear en nuestro suelo, pues no existe garantía de hecho ni derecho de que serán respetadas nuestra creación o nuestra inversión en tiempo y recursos humanos y materiales.

Dejamos claro a nuestra contraparte institucional que iniciaremos los procesos legales correspondientes en su contra, pues este acto no es solo violatorio de todos los conceptos de ética y moral conocidos, sino también de un conjunto de leyes sobre derecho de autor y propiedad intelectual que esperamos, estén aún vigentes en la nación cubana. Es hora que cada uno de nosotros exijamos los derechos que nos corresponden como ciudadanos, y que estos marquen nuestra relación con las instituciones. Es tiempo de poner orden a la insensatez y la arbitrariedad. Queremos hacer nuestro ejercicio en nuestra tierra, invertir y ganar haciendo lo que hacemos, nuestro negocio personal, nuestra fiesta, nuestro festival, ese derecho, sí que lo exigimos, por que no lo tenemos. Es justo y necesario. El equipo de Rotilla Festival invita a todo aquel que se identifique o adhiera a esta causa que se haga eco de este discurso y que lo difunda por cualesquiera de los medios a su alcance. Así edificaremos hoy la solidaridad del mañana.

Esperamos que este comunicado sea recibido con el mismo respeto que hemos querido imprimirle, pues es nuestra intención dialogar para reformar, para crecer y salir adelante, para construir una nación para todos donde todos tengan a salvo su propio espacio y crezcan como individuos capaces y seguros de sí.

Que no quepa duda que vamos a continuar reclamando el derecho a realizar nuestro festival en los próximos años, es nuestro legítimo derecho.

 MATRAKA PRODUCCIONES Rotilla Festival