tag:blogger.com,1999:blog-34511527035444070932024-03-05T16:04:11.848+01:00PotoblofFotoblog y Desarrollo WebPotoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-3451152703544407093.post-15126068420948361952013-02-16T18:45:00.000+01:002013-02-16T18:48:02.432+01:00Versiones de Java EE<span id="goog_668588818"></span><a href="http://www.blogger.com/"></a><span id="goog_668588819"></span>¡Hey! ¡si tengo un blog!<br />
<br />
pues voy a aprovechar para enlazar a esta tabla que he hecho con las versiones de los componentes de Java EE desde la versión 1.2 con los datos que he sacado de <a href="https://en.wikipedia.org/wiki/Java_EE_version_history" target="_blank">aquí</a>.<br />
<br />
<a href="https://docs.google.com/spreadsheet/pub?key=0AqaTM5C7yfLvdDBNNFgzTUFwcEhyQWJxQnE4MHJrYWc&single=true&gid=0&output=html" target="_blank">Versiones de Java EE</a>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-7852384465870280112011-03-21T16:10:00.003+01:002011-03-21T16:25:04.714+01:00Chad Fowler: The Big RewriteNaVagando, me he encontrado con una serie de artículos de Chad Fowler de 2006/2007 con un par de artículos mal enlazados,, así que aquí están los links correctos:<br />
<br />
<ul><li><a href="http://chadfowler.com/2006/12/27/the-big-rewrite">The Big Rewrite</a> </li>
<ul><li><a href="http://chadfowler.com/2006/12/28/software-as-spec">Software as Spec</a></li>
<li><a href="http://chadfowler.com/2006/12/29/invention-or-implementation">Invention or Implementation?</a></li>
<li><a href="http://chadfowler.com/2006/12/30/the-wish-list">The Wish List</a></li>
<li><a href="http://chadfowler.com/2007/01/02/the-big-bang">The Big Bang</a></li>
<li><a href="http://chadfowler.com/2007/01/03/justifications-and-lies">Justification and Lies</a></li>
<li><a href="http://chadfowler.com/2007/01/04/who%27s-tending-the-store">Who’s Tending the Store?</a></li>
</ul></ul>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-8315921135036082962010-11-24T17:30:00.001+01:002011-07-18T18:33:55.418+02:00Copiar entradas del registro para recuperar la configuración de PuTTYAcabo de cambiar de disco duro, lo que significa reinstalar tanto el XP, como todas las aplicaciones. Uno de los problemas es el de transferir la configuración de estos programas. Un ejemplo en el que la cosa funciona como la seda es la de copiar el perfil de Firefox (<a href="http://support.mozilla.com/es/kb/Backing+up+your+information">Mozilla Knowledge Base</a> ).<br />
<br />
A la hora de copiar la configuración de Putty, la cosa no es tan fácil. En <a href="http://downloadsquad.switched.com/2007/02/01/howto-transfer-your-putty-settings-between-computers/">downloadsquad.switched.com</a> se explica como extraer del registro la clave <tt>HKEY_CURRENT_USER\Software\SimonTatham</tt> con <code>regedit</code> para a continuación importarla en otro ordenador. El problema es que en mi caso no había otro ordenador, sino simplemente el disco antiguo conectado por USB.<br />
<br />
En este caso viene el programa freeware <a href="http://www.gaijin.at/en/dlregview.php">RegistryViewer</a> al rescate, ya que permite editar los archivos del registro de Windows directamente. Estos archivos están la mayoría en <code>c:\windows\system32\config\</code>, salvo <code>ntuser.dat</code> que es un fichero oculto que está en el directorio <code>%userprofile%</code>. Este último fichero es el más importante, porque es el que tiene las entradas del registro de <tt>HKEY_CURRENT_USER.</tt><br />
<br />
<tt> </tt>En resumen, los pasos para copiar la configuración de PuTTY desde un disco duro donde estaba instalado son los siguientes:<br />
<ol><li>Localizar el fichero ntuser.dat en %userprofile% y abrirlo con RegistryViewer</li>
<li>Exportar la clave <tt>HKEY_CURRENT_USER\Software\SimonTatham</tt> a un fichero, por ejemplo SimonTatham.reg.</li>
<li>Instalar las claves en el registro haciendo doble click en el archivo exportado.</li>
</ol><b>Edit 18/Jul/2011: </b>Y para WinSCP, funciona igual pero con la clave <tt>HKEY_CURRENT_USER\Software\Martin Prikryl</tt><br />
<ol></ol>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-469011376019121432010-10-24T23:19:00.000+02:002011-03-21T16:00:59.059+01:00Fischerviertel en UlmJunto a la orilla del Danubio en Ulm se encuentra este bonito barrio conocido como Fischerviertel (Barrio de los pescadores). Aquí van un par de fotos del lugar.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlyQwEpolSbE9F51qSa0mRVWIpHyGdslV3fY_r9W3eeHytOFTqTxcY9t8fQxoS-5qBXCvwcEJEZ7CaRJNoOMKdV2E4Gch58pz8Qi37fFlY6JD_uYCQF-49mcjFopfr0ehW4LG-wGpU2bLL/s1600/Imagen114.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlyQwEpolSbE9F51qSa0mRVWIpHyGdslV3fY_r9W3eeHytOFTqTxcY9t8fQxoS-5qBXCvwcEJEZ7CaRJNoOMKdV2E4Gch58pz8Qi37fFlY6JD_uYCQF-49mcjFopfr0ehW4LG-wGpU2bLL/s640/Imagen114.jpg" width="480" /> </a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2s045ZqvlvRm2pYC056-4ShV1do8IxLaiLMxm2rMQbNN28VzedVSbINJeWjRDZ6PrpbsvsM2xUBl3ko-HKXMP_NW4zPXw79Mg8ncKK7gKU3AFfzNtEMtALim6wR3GrE-9z44hJnHVR_gb/s1600/Imagen112.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2s045ZqvlvRm2pYC056-4ShV1do8IxLaiLMxm2rMQbNN28VzedVSbINJeWjRDZ6PrpbsvsM2xUBl3ko-HKXMP_NW4zPXw79Mg8ncKK7gKU3AFfzNtEMtALim6wR3GrE-9z44hJnHVR_gb/s640/Imagen112.jpg" width="640" /></a></div>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-24706421728052526282010-10-19T00:36:00.000+02:002010-10-19T00:36:24.848+02:00Una selección de herramientas para crear aplicaciones web en javaUno de los temas que más me interesó del <a href="http://potoblof.blogspot.com/2010/10/liferay-symposium-europe-en-offenbach.html">simposium de Liferay</a> al que asistí recientemente fue la presentación de <a href="http://vaadin.com/">Vaadin</a>. Ésto me ha llevado a pensar qué "stack" de herramientas usaría para hacer aplicaciones java.<br />
<br />
<a href="http://www.grails.org/">Grails</a> es una plataforma con la que crear aplicaciones <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> en un momentín, y además tiene <a href="http://www.grails.org/plugin/vaadin">plugin para Vaadin</a>.<br />
<br />
<br />
Buscando sobre este tema, me he encontrado con un blog que habla de la combinación de <a href="http://www.streamhead.com/maven-spring-vaadin-appengine">Google App Engine, Spring, Vaadin y Maven</a>. <br />
<br />
Y al hilo de <a href="http://maven.apache.org/">Maven</a>, quizá sería interesante usar <a href="http://www.gradle.org/">Gradle</a> en su lugar.<br />
<br />
Cualquier día de estos contaré mi experiencia poniendo a prueba estas ideas.Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-47546983341939763032010-10-17T18:25:00.000+02:002011-03-21T16:01:06.114+01:00Lanzado Maven 3<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw0IupGY14kJOwp2g9Ruee2J3dDVz5cjXzYAr4lE6vK0o_14CZytwV0d4KM_ADRqp7V8xPdx31h3ubust-9Bx5ILhKS7bN0grc4dUFVeJVXk1KQl37Ibw-f38sbfmU8-lkrODT_iHVu2_N/s1600/buildsuccess.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw0IupGY14kJOwp2g9Ruee2J3dDVz5cjXzYAr4lE6vK0o_14CZytwV0d4KM_ADRqp7V8xPdx31h3ubust-9Bx5ILhKS7bN0grc4dUFVeJVXk1KQl37Ibw-f38sbfmU8-lkrODT_iHVu2_N/s640/buildsuccess.PNG" width="640" /></a></div>La versión 3 de Maven ya ha salido de la fase beta y fue lanzada el 8 de octubre. Se puede bajar del sitio de Apache <a href="http://maven.apache.org/">http://maven.apache.org/</a> . Los proyectos para la versión 2 son en general compatibles con esta versión 3, aunque una excepción a eso es la configuración para la generación del site. En la documentación se pueden ver las <a href="https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html">notas de compatibilidad</a> entre estas dos versiones.<br />
<br />
Llevo varios meses usando esta versión mientras mis compañeros usan Maven 2, sin tener problema. Me gusta que queda más claro qué versión de qué plugin se está ejecutando en cada momentoPotoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-84457487509403976612010-10-14T08:26:00.000+02:002011-03-21T16:01:06.114+01:00Liferay Symposium Europe en Offenbach am MainLos días 12 y 13 de octubre de 2010 se celebró en Liferay Symposium Europe, donde la gente de <a href="http://liferay.com/">Liferay</a> y otros colaboradores mostraron los avances de la nueva versión 6 y usos de este portal Java.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizXEY3j5IjKYgkKOLcebTBTYt_EawkU2VOfrigNMR0_NCAWyFaCN5-h4jIZwshNa1tfaY1gJaHacZ8HZ6WKhgisHGL7xPqODDXfq1b2pjW-ugC5uFo9Uiflj2RD5cyWWyxmQ9-lYv3L9QW/s1600/Imagen12_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizXEY3j5IjKYgkKOLcebTBTYt_EawkU2VOfrigNMR0_NCAWyFaCN5-h4jIZwshNa1tfaY1gJaHacZ8HZ6WKhgisHGL7xPqODDXfq1b2pjW-ugC5uFo9Uiflj2RD5cyWWyxmQ9-lYv3L9QW/s640/Imagen12_2.jpg" width="640" /></a></div>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-34703222625109558332010-07-25T02:28:00.001+02:002010-07-25T13:03:19.888+02:00Links del día: Mocks, Building tools<a href="http://kaczanowscy.pl/tomek/2008-04/untestable-code-jmockit">"Untestable" code - JMockit</a>: bastante más fácil que con Surrogate. Hace falta Java 5 porque hace uso de la instrumentalización.<br />
<br />
<a href="http://community.jboss.org/wiki/Gradlewhy">Gradle: Why?</a> : Parece que Hibernate se pasa a Gradle como herramienta de construcción del proyecto. ¿Hora de cambiar?Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-56535701034766431892010-07-09T16:52:00.001+02:002010-07-09T16:56:42.795+02:00Sobreescribir métodos estáticos para testeo en Maven 2 usando Surrogate.Creo que en inglés me habría quedado un título más correcto. Algo así como: 'Mocking static methods for testing in Maven 2 using Surrogate'.<br />
<br />
<b>El problema</b><br />
El caso es que me encuentro con que la clase que quiero testear llama al método estático OpenCms.getRoleManager(). Además, el proyecto se construye con Maven 2 (ó 3), por lo que habrá que modificar el POM consiguientemente.<br />
<br />
Esta es la clase:<br />
<br />
<pre>package arm.opencms.accesscontrol;
import org.opencms.file.CmsObject;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsRole;
public class XmlContentAccessControl {
private CmsRole ACCEPTED_ROLE=CmsRole.VFS_MANAGER;
public boolean hasPermission(CmsObject cmsObject) {
return OpenCms.getRoleManager.hasRole(cmsObject,ROLE);
}
}
</pre><br />
<b>La solución más cabal: refactorizar</b><br />
<br />
En lugar de adaptar nuestro código de prueba, podemos adaptar nuestro código principal para que sea más testeable. En este caso podemos declarar un atributo de la clase para almacenar un CmsRoleManager:<br />
<br />
<pre>package arm.opencms.accesscontrol;
import org.opencms.file.CmsObject;
import org.opencms.security.CmsRoleManager;
import org.opencms.security.CmsRole;
public class XmlContentAccessControl2 {
private CmsRoleManager roleManager;
public XmlContentAccessControl(CmsRoleManager roleManager){
this.roleManager=roleManager;
}
private CmsRole ACCEPTED_ROLE=CmsRole.VFS_MANAGER;
public boolean hasPermission(CmsObject cmsObject) {
return this.roleManager.hasRole(cmsObject,ROLE);
}
}
</pre><br />
<br />
<b>Si refactorizar no es posible o deseable, una posible solución: Surrogate</b><br />
<br />
Si la única salida es llamar al método estático, podemos usar el framework <a href="http://surrogate.sourceforge.net/">Surrogate</a>, que, apoyándose en <a href="http://www.eclipse.org/aspectj/">AspectJ</a>, permite definir sustituciones de los métodos o de las clases principales en nuestro código de prueba. Una de sus funcionalidades es la de sobreescribir métodos estáticos.<br />
<br />
Para nuestro ejemplo, usaremos el siguiente árbol de directorios con sus correspondientes contenidos:<br />
<br />
<pre>/
|-src
| |-main
| | |-java
| | | |-arm/opencms/accesscontrol
| | | |-XmlContentAccessControl.java
| | |-aspect
| | |-OpenCmsStaticCalls.aj
| |-test
| |-java
| -arm/opencms/accesscontrol
| |-TestAccessControl.java
|-test
| |-lib
| |-surrogate-core-1.0rc1.jar
|-pom.xml
</pre><br />
Y el contenido de los ficheros:<br />
<br />
<pre><b>pom.xml</b>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"</pre><pre>xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>arm.opencms</groupid>
<artifactid>arm.opencms.accesscontrol</artifactid>
<name>AccessControl</name>
<dependencies>
<dependency>
<groupid>org.opencms</groupid>
<artifactid>opencms</artifactid>
<version>7.5.2</version>
</dependency>
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.jmock</groupid>
<artifactid>jmock-junit4</artifactid>
<version>2.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>net.sourceforge.surrogate</groupid>
<artifactid>surrogate-core</artifactid>
<version>1.0rc1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjtools</artifactid>
<version>1.6.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjrt</artifactid>
<version>1.6.7</version>
</dependency>
<dependency>
<groupid>mockobjects</groupid>
<artifactid>mockobjects-core</artifactid>
<version>0.09</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactid>maven-install-plugin</artifactid>
<executions>
<execution>
<id>install-javabridge-javabridge</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>test/lib/surrogate-core-1.0rc1.jar</file>
<groupid>net.sourceforge.surrogate</groupid>
<artifactid>surrogate-core</artifactid>
<packaging>jar</packaging>
<version>1.0rc1</version>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupid>org.codehaus.mojo</groupid>
<artifactid>aspectj-maven-plugin</artifactid>
<version>1.3</version>
<configuration>
<compliancelevel>1.5</compliancelevel>
<aspectdirectory>src/test/aspect</aspectdirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
</pre><br />
La biblioteca Surrogate no está disponible en ningún repositorio público, por lo que la instalamos durante la inicialización como vimos en <a href="http://potoblof.blogspot.com/2010/05/un-par-de-funcionalidades-de-maven-2.html">un post anterior</a>. También se usa el <a href="http://mojo.codehaus.org/aspectj-maven-plugin/">plugin de AspectJ</a>, para compilar el aspecto OpenCmsStaticCalls.aj .<br />
<br />
<br />
<pre><b>TestAccessControl.java</b>
@RunWith(JMock.class)
public class XmlContentAccessControlTest {
private Mockery context = new JUnit4Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
CmsObject mockCmsObject=context.mock(CmsObject.class);
CmsRoleManager mockRoleManager=context.mock(CmsRoleManager.class);
@Test
public void testHasPermissionOnTab()throws NoSuchMethodException, CmsRoleViolationException {
SurrogateManager mm = SurrogateManager.getInstance();
mm.reset();
//OpenCms.getRoleManager() -> mockRoleManager
MockMethod mockGetRoleManager = mm.addMockMethod(new MockMethod(OpenCms.class, "getRoleManager"));
mockGetRoleManager.addReturnValue(mockRoleManager);
context.checking(new Expectations() {{
allowing(mockRoleManager).hasRole(with(is(mockCmsObject)),
(CmsRole)with(allOf(an(CmsRole.class),hasProperty("roleName", is("VFS_MANAGER")))));
will(returnValue(true));
}});
XmlContentAccessControl accessControl=new XmlContentAccessControl();
assertTrue(accessControl.hasPermission(mockCmsObject));
}
</pre><br />
<pre><b>OpenCmsStaticCalls.aj</b>
aspect OpenCmsStaticCalls extends net.sf.surrogate.core.SurrogateCalls {
/**
* Implementation of the mock pointcut
*/
protected pointcut mockPointcut() :
(
call(* org.opencms.main.OpenCms.*(..))
);
}
</pre>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-52329884575038204342010-07-05T14:49:00.001+02:002010-07-09T16:53:00.694+02:00Torneo de Kayak-Polo Internacional de Horb 2010El 3 de julio se celebró el Torneo de Kayak-Polo Internacional de Horb, en la ciudad de Horb am Neckar. Participaron 6 equipos masculinos y una cifra similar de equipos infantiles y cadete. El ganador fue el KSC Mannheim.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ZEcn5TJl7mIszIZO1zLKWi2BXadw5Wer27g97EF1oRzzBSqmNa_aHJfMWcBVMqdraxmjUTBxjygzwUNgCuk97nUcQ1AM-N5GNCTcXRBN5ECOTJnx2I1mT0pmK-FiD_TCafsLk3-8rymT/s1600/horb2010_l060.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ZEcn5TJl7mIszIZO1zLKWi2BXadw5Wer27g97EF1oRzzBSqmNa_aHJfMWcBVMqdraxmjUTBxjygzwUNgCuk97nUcQ1AM-N5GNCTcXRBN5ECOTJnx2I1mT0pmK-FiD_TCafsLk3-8rymT/s640/horb2010_l060.jpg" width="640" /></a></div>Como se puede observar en la marca de agua, he robado la foto vilmente de <a href="http://www.kanupolo-villingen.de/">www.kanupolo-villingen.de</a>.Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-77390457314588653872010-06-22T00:12:00.000+02:002010-07-25T13:03:31.199+02:00Hoguera<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifnFOQljWLPMtIGrG_50FEie_BNF5M7oittXfbqMLJTSAg25I0dK9JVl7cZstRLPpo3k5cJLEKSmnXeiSkS3QRS6oTHVCdqv0oQ00XJ7y0s1B9xQDc0uFWWQ8ytVKedC7xEjdEhHVhoU-l/s1600/Imagen002b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifnFOQljWLPMtIGrG_50FEie_BNF5M7oittXfbqMLJTSAg25I0dK9JVl7cZstRLPpo3k5cJLEKSmnXeiSkS3QRS6oTHVCdqv0oQ00XJ7y0s1B9xQDc0uFWWQ8ytVKedC7xEjdEhHVhoU-l/s640/Imagen002b.jpg" width="640" /></a></div><br />
Tomada junto al lago <a href="http://es.wikipedia.org/wiki/Edersee">Edersee</a>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-29428488354769231992010-06-13T00:44:00.001+02:002010-07-25T13:03:31.200+02:00Aquí falta algo... ... y seguro que soy el único por aquí que se ha dado cuenta del detalle. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8rC5xhUfQoOlN2wzIktCuQXiI8H5wGNJWvrTU9l0JnSdS_u7bc1-XdpxE5-XG3l5oFXVm7U8XfejqHsto8XOzdvn4bN9znw34gk2uyb7017wANPxA8S5dFm7fPVfDOTp5Ykawnb74-D7d/s1600/Imagen015.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8rC5xhUfQoOlN2wzIktCuQXiI8H5wGNJWvrTU9l0JnSdS_u7bc1-XdpxE5-XG3l5oFXVm7U8XfejqHsto8XOzdvn4bN9znw34gk2uyb7017wANPxA8S5dFm7fPVfDOTp5Ykawnb74-D7d/s640/Imagen015.jpg" width="480" /></a></div>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-28893332190256511672010-05-25T12:54:00.000+02:002010-05-25T12:55:15.658+02:00Un par de funcionalidades de Maven 2<span style="font-size: large;">Utilizar artefactos que no están en ningún repositorio</span><br />
<br />
<span style="font-size: large;"><span style="font-size: small;">Un problema recurrente en Maven 2 es cómo usar y versionar artefactos que no hay en ningún repositorio público. Se pueden instalar en el repositorio local, o en el privado de la empresa, pero si quieres distribuir el código fuente, éste no va a compilar sin hacer ciertos pasos previos. Una forma de solucionar esto es lo que propongo aquí, y es guardar los jars necesarios en el directorio lib del proyecto que los necesita e instalarlos en el repositorio local durante la fase 'initialize' usando el plugin 'maven-install-plugin'. En mi caso me hizo falta para incluir en mi aplicación el puente PHP/Java.</span></span><br />
<br />
<code><span style="font-size: small;"> <plugins></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">plugin</span></code><code><span style="font-size: small;">></span></code><code></code><code></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">!-- Install the JavaBridge JARs in the local maven repository : JavaBridge --</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">artifactId</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">maven-install-plugin</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/artifactId</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;"> <br />
</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">executions</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">execution</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">id</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">install-javabridge-javabridge</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/id</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">phase</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">initialize</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/phase</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">goals</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">goal</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">install-file</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/goal</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/goals</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">configuration</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">file</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">lib/JavaBridge.jar</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/file</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">groupId</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">net.sourceforge.phpjavabridge</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/groupId</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">artifactId</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">JavaBridge</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/artifactId</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">packaging</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">jar</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/packaging</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">version</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">${phpjavabridge.version}</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/version</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/configuration</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/execution</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/executions</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/plugin</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/plugins</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;"> </span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">properties</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">phpjavabridge.version</span></code><code><span style="font-size: small;">></span></code><code><span style="font-size: small;">6.1.2.1</span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/phpjavabridge.version</span></code><code><span style="font-size: small;">></span></code><br />
<code><span style="font-size: small;"> </span></code><code><span style="font-size: small;"><</span></code><code><span style="font-size: small;">/properties</span></code><code><span style="font-size: small;">></span></code><br />
<code><br />
</code><br />
<span style="font-size: large;">versions:set </span><br />
<br />
<span style="font-size: large;"><span style="font-size: small;">Existe una plugin en Maven para aumentar la versión en todos los módulos de un proyecto multimódulo. Estas son las llamadas que utilizo:</span></span><br />
<br />
<span style="font-size: large;"><span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;">mvn versions:set -DnewVersion=1.2</span></span></span><br />
<span style="font-size: large;"><span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;">mvn versions:commit </span><br />
</span></span>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-79009116754802609922010-05-23T22:34:00.003+02:002010-05-26T00:46:10.265+02:00Una pala Galasport me ha durado menos de 5 mesesEn este blog le quiero hacer un hueco también al Kayak-polo, un deporte de equipo con balón en el que los jugadores van montados en kayak. En esta ocasión inaugural para quejarme de que se me ha roto la pértiga de mi pala Galasport Contact tras usarla desde febrero, y no intensivamente. La rotura se produjo cuando recibí un golpe de balón en el centro de la pértiga. Se me han roto ya muchas palas jugando a esto, pero siempre habían durado más de un año, incluso cuando jugaba con mayor frecuencia. Aquí pongo un par de fotos del resultado:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYdO5p43orq1xVIDWBBBy0nhDDCqgi_iSVqwJuBvsE8nwumeC-6Uih8MRABiu6jE6gOVcxFK5jvfFzQq2e2KG8GguxwbRrus2bQjJaUgPFby30ikNK8UqD_enyI3VC4U9GSqs69rZRyEQO/s1600/Imagen012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYdO5p43orq1xVIDWBBBy0nhDDCqgi_iSVqwJuBvsE8nwumeC-6Uih8MRABiu6jE6gOVcxFK5jvfFzQq2e2KG8GguxwbRrus2bQjJaUgPFby30ikNK8UqD_enyI3VC4U9GSqs69rZRyEQO/s320/Imagen012.jpg" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYenQOkHED7e-NkuocpKCUYmtru0U0mT5e7JyEOwFMuwkSXbHNuJ-TFnfMCE4-FshG29roOE2yDr-mvNGuMSl0fxi1wiG0lCi-tOLlzlJXuhlj6O6oLBPESFyJFq4M8MxSfCcAP9OjseFW/s1600/Imagen013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYenQOkHED7e-NkuocpKCUYmtru0U0mT5e7JyEOwFMuwkSXbHNuJ-TFnfMCE4-FshG29roOE2yDr-mvNGuMSl0fxi1wiG0lCi-tOLlzlJXuhlj6O6oLBPESFyJFq4M8MxSfCcAP9OjseFW/s320/Imagen013.jpg" /></a></div>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-25541727935599610032010-05-23T22:21:00.000+02:002010-05-23T22:40:03.362+02:00Jardín exótico de la Universidad de HohenheimLa universidad de Hohenheim, en Stuttgart, tiene un jardín inglés con numerosas plantas exóticas. Este jardín pertenece realmente al palacio de Hohenheim.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DA39NUFpbB9LIPKJDsxPgSwhJXfl4bsl8-RxFHPwoj-_TmmoYQqRNIElCsJQyL9BnWtE7tERzdCAs5DnngkHe_TfsiK24Q8Nrkt2ngPsi81DrlIewFbjXS3YaqKCoKTfgogsnAdamnck/s1600/Imagen007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DA39NUFpbB9LIPKJDsxPgSwhJXfl4bsl8-RxFHPwoj-_TmmoYQqRNIElCsJQyL9BnWtE7tERzdCAs5DnngkHe_TfsiK24Q8Nrkt2ngPsi81DrlIewFbjXS3YaqKCoKTfgogsnAdamnck/s640/Imagen007.jpg" width="640" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsWz-Gkw6PVbOjtUtEBkrw8K0Dkesc3mc86hmFcZ2UjlEvj6vLVp6gZz9GNKie9m2oL2GxV4Pv5Q-jZdaaxP0PJNvS9lUwhB8FkfIWMacd6AofezGjWK9gE8HwTNH0BFX8xoOOHfrt2nNl/s1600/Imagen010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsWz-Gkw6PVbOjtUtEBkrw8K0Dkesc3mc86hmFcZ2UjlEvj6vLVp6gZz9GNKie9m2oL2GxV4Pv5Q-jZdaaxP0PJNvS9lUwhB8FkfIWMacd6AofezGjWK9gE8HwTNH0BFX8xoOOHfrt2nNl/s640/Imagen010.jpg" width="640" /></a></div>¡Hay plantas muy raras en este sitio!Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-82565407788862594822010-05-22T23:19:00.000+02:002010-05-22T23:21:06.609+02:00Kulinarischer Weinweg en Kernen-StettenDel 22 al 24 de mayo se celebra en Kernen-Stetten el 'Kulinarischer Weinweg' ('Camino culinario del vino', digamos), en el que se mezcla el andar un poquito por los viñedos alrededor del castillo Yburg y el tomarse un vino y alguna cosilla de comer.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr9DZDBUISO9yzS9VeaHcRWWLVDu3E2jNNSxntNpdTHJCJChj5QpNcHYII8_Fs_1MHIR-FOXDGsRwNDkbEKZAbN8U12SEfcoLzXtyE22NCQy8-IVbfSQVyPbhe6ii8lvcKxtdBdS8xCJg9/s1600/Imagen005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr9DZDBUISO9yzS9VeaHcRWWLVDu3E2jNNSxntNpdTHJCJChj5QpNcHYII8_Fs_1MHIR-FOXDGsRwNDkbEKZAbN8U12SEfcoLzXtyE22NCQy8-IVbfSQVyPbhe6ii8lvcKxtdBdS8xCJg9/s640/Imagen005.jpg" width="640" /></a></div>Foto: Los viñedos y una de las zonas de venta de vino y viandas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq6icL5FXkRbwC1WauKa2sRBH-WaXd_3t-FDkFpmAluF12jKW0Q_QgbtsZ6yuuY4PlJVCZq9i40dLIraeQT-ZZf5bDv4QJ4HLtdO8y971YSjkcQoO5HPDDNcgPgiA8FtmMU53XwjTwy6EN/s1600/Imagen006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq6icL5FXkRbwC1WauKa2sRBH-WaXd_3t-FDkFpmAluF12jKW0Q_QgbtsZ6yuuY4PlJVCZq9i40dLIraeQT-ZZf5bDv4QJ4HLtdO8y971YSjkcQoO5HPDDNcgPgiA8FtmMU53XwjTwy6EN/s640/Imagen006.jpg" width="480" /></a></div>Foto: El castillo Yburg<br />
<br />
En el siguiente link hay más fotos de la edición del 2005, para hacerse una idea de qué va el tema: <a href="http://www.weinweg.de/Sites/BilderKW05.htm">http://www.weinweg.de/Sites/BilderKW05.htm</a>.Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-15970725919787703092010-05-21T21:52:00.000+02:002014-10-06T18:32:58.314+02:00Cómo eliminar los caracteres ^M en viHoy me ha vuelto a pasar que varios ficheros de configuración de mi aplicación web que acababa de subir al servidor Linux desde Windows tenían todas las líneas acabadas en un carácter representado como ^M. Posiblemente retorno de carro o nueva línea, nunca me acuerdo de cual. Google me ha dirigido rápidamente a tropecientos sitios con la solución que buscaba. Lo que he hecho es escribir el comando ':%s/^M//g' en VI. Con esto desaparecerán. Para escribir la ^M correctamente hay que pulsar primero ctrl+V y luego ctrl+M.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxdJzbP-qdT9tt8Kin8QadOzMXm0GH-3EmCfyErqRQIi89EC0R8LgvnV0VoQzUEl3rf2P78nBm7jkyeAWSsrp8n-aKjecckIK1H4Yk_x1o-T0ZN7epG_Y360BakZyOtrOtqjtAZYSk_Ks/s1600/remove_ctrl_m.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxdJzbP-qdT9tt8Kin8QadOzMXm0GH-3EmCfyErqRQIi89EC0R8LgvnV0VoQzUEl3rf2P78nBm7jkyeAWSsrp8n-aKjecckIK1H4Yk_x1o-T0ZN7epG_Y360BakZyOtrOtqjtAZYSk_Ks/s640/remove_ctrl_m.png" height="162" width="640" /></a></div>
<br />
Via: <a href="http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/%20">http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/ </a><br />
<br />
Y aquí hay una serie de posibles soluciones al mismo problema:<a href="http://www.computing.net/answers/unix/remove-m-from-file/6031.html">http://www.computing.net/answers/unix/remove-m-from-file/6031.html </a>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-57940540658121106192010-05-21T09:21:00.000+02:002010-05-22T23:21:06.610+02:00StadtmauerrundgangComo no tengo nada que contar, aquí dejo una foto hecha hace tiempo en la muralla de Waiblingen<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkux9fRet78hsngU_TGEJcb6eTenaGEdOk-iTrOZ1KV52hsJeIN6b0SB9YZK4auUHh90GDlPZSZ15eu-RpvAjFjavt2MIKtoAW4vDwa020kqmjdPvA7-ggkXzOocgKB7xEgDEWIGeivYgc/s1600/DSCF0475.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkux9fRet78hsngU_TGEJcb6eTenaGEdOk-iTrOZ1KV52hsJeIN6b0SB9YZK4auUHh90GDlPZSZ15eu-RpvAjFjavt2MIKtoAW4vDwa020kqmjdPvA7-ggkXzOocgKB7xEgDEWIGeivYgc/s640/DSCF0475.JPG" width="640" /></a></div>Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0tag:blogger.com,1999:blog-3451152703544407093.post-60770731319375132972010-05-21T07:51:00.000+02:002010-05-22T23:21:06.610+02:00Primer Post de PotoblofEste es el primer, y hasta ahora último post en Potoblof.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj61QT7kzDvgB7t82WxInLR0oN3HhdWPZgj7xjUSwhphXB1SgtRyIUexhggPG5pIFfFKGbBcesrbelm1UYge1AU5Mbcjfo-tT1vsFmiUSv1ZCf3Am05YYUet17o-2Nvl6yCCloApcVjRv6h/s1600/potoblof_01_tnsbf.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj61QT7kzDvgB7t82WxInLR0oN3HhdWPZgj7xjUSwhphXB1SgtRyIUexhggPG5pIFfFKGbBcesrbelm1UYge1AU5Mbcjfo-tT1vsFmiUSv1ZCf3Am05YYUet17o-2Nvl6yCCloApcVjRv6h/s640/potoblof_01_tnsbf.jpg" width="640" /></a></div><br />
<br />
Foto: La Selva No Tan Negra (Y no tan selva)Potoblofferhttp://www.blogger.com/profile/04847015985724721802noreply@blogger.com0