Buscar este blog

domingo, 3 de agosto de 2014

Temporiza tus publicaciones

Temporización de las publicaciones en internet.
Sean MacEntee (algunos derechos reservados)
En kissMetrics nos ofrecen una infografía donde se muestran algunos indicadores influyentes a la hora de elegir el momento de tus publicaciones.

La infografía comienza con las siguientes premisas.

Publicar en las horas punta:

Como ventaja se tienen más visitas y más comentarios, pero por contra tu publicación aparece enterrada entre otras noticias y publicaciones, y el porcentaje de rebote es mayor.

Publicar fuera de las horas puntas:

El menor ruido hace que las publicaciones sean más importantes ante la competencia. Es más fácil que tu publicación aparezca recomendada durante estas horas. Por otro lado, tendremos menos visitas, menos comentarios y menor porcentaje de rebote.

Se analizan los siguientes hábitos.

Sobre el 70% de los lectores de noticias, lo hacen por la mañana, decreciendo dicho porcentaje a lo largo del día.

Los hombre leen más noticias que las mujeres.

El día que se leen más blogs son los lunes.

A la hora a la que los blogs tienen más tráfico es a las 11 am.

El sábado es el día en el que se reciben más comentarios.

A las 9 am es la hora a la que los blogs reciben más comentarios.

Los lunes y los jueves son los días que los blogs reciben más enlaces.

A las 7 am es cuando más se reciben estos enlaces.

Es complicado establecer conclusiones al respecto de estos datos y depende de la cantidad de información que publiquéis.

En mi caso publico cuando tengo tiempo para escribir. Aunque me he interesado por este tema para considerar temporizar mis publicaciones.

¿Qué es lo que os funciona a vosotros?

martes, 21 de septiembre de 2010

MAVEN - RESOLUCION DE PROBLEMAS

Problemas que me he ido encontrando y como solucionarlos.

PROXY
Aunque tengas configurado un proxy para todo el sistema, maven no entiende eso. Hay que configurarlo de forma específica en su fichero /etc/maven2/setting.xml

ENCODING
Cuando intentas compilar desde una máquina linux, el código desarrollado en un windows, suele ocurrir, que los encodings utilizados son diferentes.
Esto suele acarrear que el compilador no reconozca algunos caracteres de los ficheros fuentes y por tanto sea incapaz de compilarlos.

Para resolver esto, podemos informar explícitamente en qué juego de caracteres están nuestras fuentes.

A mi me gusta hacerlo mediante variable de entorno, ya que es un caso muy común y si intento que el equipo de trabajo desarrolle en UTF-8, seguro que a alguno se le escapa.

MAVEN_OPTS=-Dfile.encoding=ISO-8859-1

Aunque esto se puede establecer desde la lína de comandos cuando lanzas el maven o incluso en el propio pom.xml

ARTEFACTOS EN REPOSITORIOS EXTERNOS
Es muy cotidiano encontrase con que para construir nuestros proyectos, no encontremos algunas dependencias, ya sean de librerías o de plugins.

Para esto debemos tener registrado el repositorio en el que se encuentran para que se los traiga a nuestro repositorio local en el primer acceso.

En estas URL's podemos hacer una búsqueda rápida de artefactos para saber de donde podemos obtenerlos.

http://mvnrepository.com/
http://www.mvnbrowser.com/index.html

lunes, 20 de septiembre de 2010

MAVEN

En esta serie de entradas intentaremos tomar apuntes de los temas claves para comprender y usar MAVEN.

En esta entrada hablaremos de...
  1. Plugins y Goals
  2. LIFECYCLE
  3. COORDENADAS
  4. DEPENDENCIAS

Plugins y Goals
Una imagen vale más que mil palabras.
Efectivamente, podríamos decir que un plugin, es un conjunto de goals.

A nivel de línea de comandos, cuando podemos invocar un plugin y un goal de la siguiente forma:

mvn plugin:goal

Como por ejemplo cuando lanzamos:

mvn dependency:purgue-local-repository

En realidad lo que estamos haciendo es lanzar el goal purgue-local-repository del plugin dependency

Estos son algunos de los colorarios que podríamos arrojar sobre los GOALS
  • El goal, es la unidad básica de trabajo en MAVEN.
  • Un goal se puede ejecutar por si solo, o formar parte de un complejo proceso de construcción
  • MAVEN no sabe compilar tu proyecto. Se descarga el plugin y ejecuta el goal correspondiente. Como tampoco sabe empaquetar tu proyecto en un JAR.
LIFECYCLE
mvn install no es un goal específico de un plugin. Se trata de una fase en un LIFECYCLE.

Un lifecycle, es una secuencia ordenada de fases o pasos que conforman la construcción de un proyecto.

Una fase de un lifecycle, puede tener ninguno o varios goals asociados.

Cuando invocamos MAVEN con una fase, maven ejecuta todas las fases precedentes a dicha fase en determinado lifecycle (se entiende que si no se configura o especifica un lifecycle, se establece uno por omisión), hasta llegar a la fase indicada en la linea de comando.

Por lo tanto cuando ejecutamos mvn install, ejecuta compile, test y package previamente.

Un gráfico de como se ejecutan los goals asociados a un lifecycle:




Ejecutar mvn install tendría el mismo resultado que ejecutar:
mvn resources:resources \
compiler:compile \
resources:testResources \
compiler:testCompile \
surefire:test \
jar:jar \
install:install
En este ejemplo, especificaríamos el goal que deseamos usar.

COORDENADAS
Existen unos atributos a forma de coordenadas que permiten identificar un proyecto de forma unívoca.




Tal y como aparece en la imagen, podemos identificar las COORDENADAS de un proyecto en su pom.xml y la forma de hacer referencia única a dicho proyecto es la siguiente:

groupId:artifactId:packagin:version

Estos 4 parametros conforman lo que se llama ESPACIO MAVEN.

DEPENDENCIAS
Cuando creamos un proyecto maven, solo hay que indicar las dependencias directas de nuestro proyecto. Maven calcula las dependencias de estas dependencias.
Es decir, si necesitamos junit para testar nuestro proyecto, solo tenemos que indicar que depende de junit.
Las dependencias de junit, serán resueltas de forma automática.

Esto es lo que Maven denomina dependencias transitivas:

Las dependencias tiene un ámbito. Si indicamos que junit tiene el ámbito de test, no estará disponible para el goal compile.

En concreto el ámbito provided, indica que el contenedor de la aplicación (tomcat, weblogic...) proveerá dicha dependencia, no incluyendose dentro del empaquetado (war, ear...)

Esto puede ocasionar que un proyecto compile, y se empaquete, pero a la hora de desplegarse lance un error si dichas dependencias no están debidamente provistas (un típico ClassNotFoundException)

Fuente: manual de maven de SONATA

miércoles, 19 de mayo de 2010

Que no te la den con el código!!

Alguna vez habéis pensado en como guardaros la espalda cuando entregáis un código.

¿Romperán el proyecto y luego te dirán que lo arregles?

La ingeniería de el software ya es bastante complicada como para tener parámetros como este en cuenta.

Sería buena práctica resolver las incidencias sobre un código fuente que valide el checksum y por tanto NO MODIFICADO.

Para comprobar que el fuente no se ha modificado (y sobre el que se desarrollarán los parches) realizaremos los siguientes pasos.

1. - Entrega el código y calculo del checksum

find \( -name "*.java" -o -name "*.jsp" -o -name "*.jar" -o -name "pom.xml" \) -type f -exec md5sum {} \; > PROYECTO.md5

En el fichero PROYECTO.md5 se guardarán los checksum de los ficheros fuentes jsp, java, jar y el pom.xml

2. - Verificación del código para hacer uso de la garantía.

md5sum -c PROYECTO.md5

El resultado de este comando indica si se ha modificado algún fichero y cual o cuales se han modificado.

NOTA: Si en lugar del código, entregáis un binario, solo habría que hacer el md5sum del fichero binario.

Crear formularios PDF en LINUX

<modo_evil>
En realidad es multiplataforma... pero los usuarios de microshoft, que paguen del producto de adobe.
</modo_evil>

Pues eso, que desde linux también se pueden crear formularios rellenables (fillable) en PDF.

¿Ventajas de estos formularios? que los puedes rellenar en el ordenador, e imprimirlos.

Con los otros tendrías que imprimirlos y rellenarlos a mano.

Bueno, para hacer esto, solo necesitas el OpenOffice (yo estoy usando la versión del repositorio del Ubuntu Lucid).

1. - Mostrar la barra de herramientas de formularios
Ver -> Barras de herramientas -> Campos de control de formularios

2. - Componer tu formulario
Arrastrar campos a diestro y siniestro.

3.- Exportar como PDF y a disfrutar difundiendo tus formularios con acabados profesionales.

martes, 18 de mayo de 2010

Google Maps

Ya en su momento, trabajé el tema de la Geo-Referencia.
Eran otros tiempos y otros requisitos.

Por entonces exploré el tandem geoserver-openlayers.

Hoy nos toca pelearnos con la api de google-maps.

Importar las librerías.
Sacado de un ejemplo de la ayuda de google maps, tenemos lo siguiente.


<html>
<head>
...
<script
src="http://maps.google.com/maps?file=api&v=2&key=[KEY]"
type="text/javascript"></script>
...
</head>
<body>
...
</body>
</html>


KEY
Es necesario solicitar una KEY para utilizar la api de google aquí.

Crear Mapa Básico

Código básico para poner un mapa.


function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
}
}


Establecer un Centro

<script type="text/javascript">
function LoadMapSearchControl() {

var options = {
zoomControl : GSmapSearchControl.ZOOM_CONTROL_ENABLE_ALL,
title : "málaga",
url : "http://www.google.com/corporate/index.html",
idleMapZoom : GSmapSearchControl.ACTIVE_MAP_ZOOM,
activeMapZoom : GSmapSearchControl.ACTIVE_MAP_ZOOM
}

new GSmapSearchControl(
document.getElementById("mapsearch"),
"1600 Amphitheatre Parkway, Mountain View, CA",
options
);

}
// arrange for this function to be called during body.onload
// event processing
GSearch.setOnLoadCallback(LoadMapSearchControl);
</script>


Cargar una marca en el mapa

var point = new GLatLng(lat,lon);
map.addOverlay(new GMarker(point));


Capturar la geo-referencia

GEvent.addListener(map, "click", function(overlay,latlng) {
if (latlng) {
var myHtml = "The GPoint value is: " + map.fromLatLngToDivPixel(latlng) + " at zoom level " + map.getZoom();
map.openInfoWindow(latlng, myHtml);
}
});



Y creo que con esto, tenemos para empezar!!

Ingeniería de Datos

¿No os habéis encontrado nunca con una migración de datos, parseo de datos, o elaboración de informes con una cantidad ingente de datos?

¿Esos datos os vienen de las fuentes más diversas? ¿CSV, excel, Oracle, MySql...?

En esta ocasión, he tenido que realizar una serie de scripts SQL de inserción, desde unos registros en base de datos de Oracle.

Estoy seguro de que se os ocurren muchas formas de hacer esto, pero yo recuerdo a un ex-compañero (saludos rubio!) de trabajo que se divertía mucho con el Pentaho.

Pentaho, es una herramienta Open Source para la minería de datos. Aunque es Open Source, hay una empresa detrás que quiere sacar tajada.

Uno de los componentes de esta herramienta, es Kettle. Implementa la parte de integración de datos (data-integration).

Con esta herramienta podemos hacer precisamente esto.
  • Obtener datos desde diferentes fuentes de datos (BBDD, CSV, excel...)
  • Cruzar los datos para obtener unos registros más ricos.
  • Filtrar los datos.
  • Operar los datos, creando columnas resultantes.
  • Concatenar los datos, reemplazar cadenas.
  • Obtener salidas a diferentes fuentes de datos (ficheros sql, tabla de BBDD...)
La documentación de esta herramienta no es la más rica en contenidos precisamente, pero no hay que dedicarle demasiado tiempo antes de empezar a obtener resultados.

Por desgracia, el desconocimiento de la herramienta, como su falta de documentación, me han requerido apoyarme en scripts de Linux para finalizar el trabajo solicitado. Pero el resultado es satisfactorio.

La web oficial de Kettle http://kettle.pentaho.org/
Descarga... y gratis!!! http://sourceforge.net/projects/pentaho/files/

Una captura un poco obsoleta, para que veáis la pinta de la herramienta.