miércoles, diciembre 02, 2009

Manifiesto: En defensa de los derechos fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Si quieres sumarte a él, difúndelo por Internet.

martes, agosto 25, 2009

Embeber gráficas en una JSP. CEWOLF

Según la definición de la página oficial:
Cewolf consta de un servlet que se encarga del renderizado de las imágenes y de una librería de tags que traduce la definición incluida en una JSP en la etiqueta HTML <img> Ésta consulta al servlet de renderizado para la recuperación de la gráfica apropiada.


Los mejores puntos a favor:
  • Es software de licencia LGPL.
  • Puede ser ejecutado en cualquier servidor compatible con J2EE o contenedor servlets.
  • Defines el gráfico mediante XML.
  • Lo tuneas fácilmente extendiendo sus clases.
  • Gran cantidad de gráficas disponibles.


Cómo usamos CeWolf:
Por ejemplo, podríamos hacer una web que nos mostrara una gráfica de tarta de la distribución de errores.

1º Nos bajamos el paquete desde la página oficial. Contiene todos los jars necesarios.
2º Registramos el Servlet de CeWolf en web.xml


<servlet>
<servlet-name>CewolfServlet</servlet-name>
<servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CewolfServlet</servlet-name>
<url-pattern>/cewolf/*</url-pattern>
</servlet-mapping>


3º Ahora por una parte, creamos un bean que implemente la interfaz que ofrece CeWolf (DatasetProducer) y que sea Serializable.


public class GraficoTarta implements DatasetProducer, Serializable{

public String getProducerId() {
// TODO Auto-generated method stub
return "graficoTarta";
}

public boolean hasExpired(Map arg0, Date arg1) {
// Poniendolo a true, se renderizará la imagen cada
// vez que actualicemos la página
return true;
}

public Object produceDataset(Map params) {
// Recogemos nuestro Mapa de parámetros, que ha sido
// rellenado en cualquier otra action y contiene los
// datos que queremos mostrar
Map mapProp = (Map) params.get("mapa");

// Del mapa sacamos los errores, pares
// (, )
HashMap hashErrores = (HashMap)
mapProp.get("errores");

DefaultPieDataset ds = new DefaultPieDataset();
Set categories = hashErrores.keySet();

for (Iterator it = categories.iterator(); it.hasNext();){
String key = it.next();
Integer numErrores = (Integer) hashErrores.get(key);
ds.setValue(key, numErrores);
}
return ds;
}
}

4º Para el ejemplo hemos implementado un servlet que hace de controlador en donde referenciamos el bean tomándolo del contexto. Además, en nuestro caso, estamos usando Spring como contendor de Beans, así que registramos el bean anterior en el applicationContext.xml.

Servlet:
WebApplicationContext _ctx = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

reqHttpServletRequest.getSession().setAttribute("pvErroresStd",_ctx.getBean("erroresBean"));


applicationContext.xml:
<bean id="erroresBean" class="com.statistics.datasetproducers.GraficoTarta"/>


5º Por último, definimos en la JSP de salida la definición del gráfico

<jsp:useBean id="pvErroresStd" scope="session"
class=" com.statistics.datasetproducers.GraficoTarta"/>

<cewolf:chart id="pieChart" title="Tipos de Errores" type="pie">
<cewolf:gradientpaint>
<cewolf:point x="0" y="0" color="#FFFFFF" />
<cewolf:point x="300" y="0" color="#CCDDFF" />
</cewolf:gradientpaint>
<cewolf:data>
<cewolf:producer id="pvErroresStd">
<cewolf:param name="mapa" value="<%=mapa%>" />
</cewolf:producer>
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="pieChart" renderer="/cewolf" width="700" height="300"/>


¡Y ya esta! Ahora tenemos una aplicación J2EE que, dados unos datos genera su gráfico PieChart.

miércoles, febrero 11, 2009

Cómo realizar una transferencia via SFTP con Java

Este tema me surgió en el trabajo y, en principio parecía fácil… en principio. En mi caso, los requerimientos me decían que tenía que ser SFTP y, por requerimientos personales, debía ser una API libre. El problema es que no encontré información clara acerca de cómo realizar una transferencia de un fichero por un canal seguro y de forma sencilla. Las consultas a Google me llevaban siempre al proyecto VFS de Apache, pero el VFS y yo teníamos un problema de entendimiento, vamos que no entendía el procedimiento que hay que seguir para lograr hacer la transferencia. No podía ser todo tan complejo!

Al final claudique, venga, si ha de ser VFS, pues manos a la obra, vamos a ver los ejemplos del código fuente… y ahí lo vi. Parece ser que VFS usa las librerías JSch de JCraft distribuidas por el autor bajo licencia BSD. Esta API es muuuucho más sencilla y más adecuada a mis requerimientos. Pero vamos al tema:


JSch jsch = new JSch();

// Inciciamos el JSch con el usuario, host y puerto
Session session = jsch.getSession(ftpUserName, ftpHost, 22);

// Seteamos el password
session.setPassword(ftpPassword);

// El SFTP requiere un intercambio de claves
// con esta propiedad le decimos que acepte la clave
// sin pedir confirmación
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();

// Abrimos el canal de sftp y conectamos
ChannelSftp chan = (ChannelSftp) session.openChannel("sftp");
chan.connect();

// Convertimos el archivo a transferir en un InpusStream
InputStream is = new BufferedInputStream (new FileInputStream("c:\\TEMP\\annexe1.doc"));

// Iniciamos la transferencia
chan.put(is, "/annexe1.doc");

// Cerramos el canal y session
chan.disconnect();
session.disconnect();

Ale, transferencia realizada.