jeudi 24 juillet 2008

Pachacamac, viaje y departamento

Dimanche dernier, nous sommes allés visiter les ruines de Pachacamac. Je pense que le terme de ruines est bien approprié, il n'y a pas grand chose à voir. Je dirais que ça permet surtout de sortir un peu de Lima. Quelques photos ici. En allant au site, nous sommes passés par des quartiers de Lima que je ne connaissais pas encore et qui sont d'un autre standing que là où j'habite. Deux photos pour illustrer mes propos :


Côté travail, j'ai fini ma première mission de 20 jours. Celle-ci c'est très bien déroulée et je peux donc espérer travailler de nouveau avec cette entreprise. Je vais maintenant devoir me lancer dans la prospection pour continuer à faire rentrer "la plata".

Côté Cimballi Consulting, la société est finalisée. Il faut maintenant que le comptable initialise les livres de comptabilité et je dois faire éditer les factures pour ensuite pouvoir facturer à mes clients (et entre autre, la précédente mission).

Côté permis de travail, c'est en cours, mais c'est plus compliqué que prévu. La certification des documents français nécessite plusieurs étapes, un passage à la mairie, un passage au ministère des affaires étrangères et enfin un passage au consulat du Pérou en France. Allez, allez, on reste optimiste, on va y arriver !

Demain je pars en vacances avec Paola, Edwin et une autre copine à Iquitos, pour 6 jours. Vamos a la selva ! La jungle et ses animaux magiques, en espérant éviter les moustiques et les serpents ! J'espère vous ramener quelques belles photos.

Et enfin, la grande nouvelle, on a réservé un appartement et on emménage le 2 août ! C'est toujours dans Miraflores, un immeuble de 21 étages, nous serons au 17ième, idéal pour plonger dans la mer, sauf que celle-ci est un peu plus loin... Quelques images ici. Il y a deux chambres, donc les invités sont les bienvenus ! Euh, attention, pour l'instant je suis sûr de rester ici uniquement jusqu'au 20 septembre ! Je vous tiens au courant pour la suite. ;-)

dimanche 13 juillet 2008

Una semana de fiestas

Cette semaine fut assez intense et je vais profiter de ce dimanche pour me reposer un peu.

Thierry est revenu sur Lima pour poursuivre sa mission, il est arrivé il y a deux semaines et est reparti vendredi soir. Nous avons pu caser deux dîners dont un avec Paola. Je lui souhaite de bonnes vacances, ces derniers jours il avait pas mal de travail !

Jeudi et vendredi, Paola et moi sommes allés dans une salle de bar concert, le Jazz Zone. Jeudi c'était pour entendre Magno, un ami de Ericka, l'amie de Paola dont j'ai déjà parlé. Nous étions un groupe de 8. Bien que Magno soit plutôt bon chanteur, la musique était sans plus, beaucoup de reprises. Et le vendredi, nous y sommes retournés, uniquement Paola et moi, pour entendre de la salsa cette foisLuisito Carbajal & Orquesta. En fait, c'était à l'occasion d'un club de danse qui faisait sa promo. Là, c'était vraiment cool, il y avait même la possibilité de danser, mais ce sera pour une autre fois pour nous, il faut qu'on s'entraîne un peu en privé avant ! :-D Seul bémol, la musique était un peu forte et j'avais les oreilles détruites à la fin de la soirée.



Et hier soir, nous sommes allés à une fête organisée par l'Alianza Francesa à l'occasion de la fête nationale de la France. Il y avait d'abord un dîner un peu chic avec choeurs, conteur (François Vallaeys) et autre musique de salon, puis ça a dérivé en mini discothèque avec musique locale genre salsa, merengue et autres. Là, nous avons dansé ! :-)
Et la cerise sur le gâteau, c'est que nous nous sommes retrouvés à une table d'entrepreneurs. Nous étions 5 couples et il y avait même un autre français dans le lot. Les 4 autres couples sont tous des propriétaires d'entreprises au Pérou, et j'en ferais bientôt parti ! :-D Il y a eu échange de cartes de visite, apparemment c'est un peu une tradition ici. On a beaucoup rigolé et après la soirée, nous nous sommes retrouvés dans un karaoké au centre culturel péruano-japonais. Sorti de là à 4 heures du matin ! Et si tout va bien, on se recontacte bientôt pour remettre ça.

Amour. Début de semaine difficile, mais à tout problème existe une solution !
Travail. Semaine tranquille, mais méfiez-vous de l'eau qui dort !
Santé. Brumeux.

A part ça, nous avons aussi commencé à regarder les appartements, et à priori, on a tellement bien regardé que nous aurions trouvé ! Je dois confirmer à l'agence cette semaine, dès que c'est fait je vous donne les détails. C'est incroyable, le directeur de l'agence est encore un français ! A croire que le Pérou rend les français entrepreneurs !

Voilà pour les news, ça tient en quelques lignes dans un blog, mais je peux vous dire que cette semaine a été intense ! J'imagine que pas mal d'entre vous vont commencer leurs vacances, alors je vous en souhaite de bonnes et je vous dis à bientôt.

Philosophie. Je ne sais pas jusqu'où me mènera cette aventure, mais je me sens pousser des ailes de plus en plus grandes chaque jour ! :-)

jeudi 10 juillet 2008

Histoires de Savoir

Link : Histoires de Savoir

Prorroga de Visa

Hier, je suis allé faire prolonger mon visa. Eh oui, les 3 mois arrivent bientôt à leur fin !

Voici une nouvelle recette.

Ingrédients :
- le passeport
- la tarjeta de migracion, c'est à dire le petit papier blanc rempli à l'aéroport
- une photocopie du passeport et de ladite tarjeta de migracion
- 20$ + 12NS, ne me demandez pas pourquoi il faut de l'argent dans les deux devises, c'est un peu idiot...
- un peu de patience, mais dans mon cas ce fût très rapide, environ 15 minutes

Recette :
- Aller au DIGEMIN, le ministère des migrations (comme pour les oiseaux)
- Remplir un formulaire de demande de prolongement du visa de touriste que l'on peut récupérer à l'accueil
- Aller payer les taxes à la Banco de la Nacion, au 1er étage
- Retourner au guichet précédent avec les justificatifs de paiement des taxes et la photocopie
- Attendre quelques minutes que l'on vous appelle
- Récupérer son passeport et sa nouvelle tarjeta de migracion

Et c'est parti pour un mois supplémentaire ! Prochaine date butoir, le 22 août 2008, mais d'ici là je devrais avoir obtenu le statut de travailleur étranger, si tout va bien.

lundi 7 juillet 2008

Testing JBoss Seam Persistence Components Outside a Container

Some weeks ago I had to experiment with the Seam Framework. After a lot of errors and research I was able to run unit tests on the Home Components outside a container and I will share my solution here.

Technologies used : Eclipse, Maven, Ant, Seam (EJB3, Hibernate, TestNG), SimpleJNDI and PostgreSQL.

Here is the configuration avec Maven dependencies :
"pom.xml"
<dependencies>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2_02</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.0.1B</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.3.2.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>3.0.0.ga</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam</artifactId>
<version>2.0.2.SP1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.3-603.jdbc3</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>simple-jndi</groupId>
<artifactId>simple-jndi</artifactId>
<version>0.11.3</version>
<scope>test</scope>
</dependency>
</dependencies>

The dependencies from JBoss need the JBoss repository :

"pom.xml"
<repositories>
<repository>
<id>jboss</id>
<url>http://repository.jboss.com/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

Next, the configuration of Seam, in the "META-INF" folder in the classpath :
"components.xml"
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd
http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd">

<core:init debug="true" jndi-pattern="#{ejbName}/local" />

<persistence:entity-manager-factory name="entityManagerFactory" />

<persistence:managed-persistence-context name="entityManager"
entity-manager-factory="#{entityManagerFactory}" />

<transaction:entity-transaction entity-manager="#{entityManager}" />

</components>

"persistence.xml"
<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">

<persistence-unit name="entityManagerFactory"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>test.model.Person</class>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver" />
<property name="hibernate.connection.username"
value="test-seam-user-login" />
<property name="hibernate.connection.password"
value="test-seam-user-password" />
<property name="hibernate.connection.url"
value="jdbc:postgresql://127.0.0.1:5432/test-seam" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>

</persistence>

In my case, I put the Seam configuration files in the "test/resources" folder of the Maven project structure, so I have to put an empty "seam.properties" file in the "main/resources" folder.

You also have to configure a JNDI context with the SimpleJNDI API. You have to put the following configuration file in the classpath :
"jndi.properties"
java.naming.factory.initial = org.osjava.sj.memory.MemoryContextFactory

Then, the code. I have a simple Person entity and an associated PersonHome component which only extend the "org.jboss.seam.framework.EntityHome" class. Then, here is the test class :

package test.home;

import javax.el.ELException;

import org.apache.commons.lang.StringUtils;
import org.jboss.seam.mock.SeamTest;
import org.testng.annotations.Test;

import test.model.Person;

@Test

public class PersonHomeTest extends SeamTest {

public PersonHomeTest() {
super();
}

@Test(dependsOnGroups = {
"persistOK"
})
public void testGetNull() throws Exception {
new ComponentTest() {

@Override
protected void testComponents() {
try {
super.setValue("#{personHome.id}", -1);
super.invokeMethod("#{personHome.getInstance}");

assert false;
} catch (final ELException ex) {
assert ex.getMessage().equals(
"org.jboss.seam.framework.EntityNotFoundException"
+ ": entity not found: test.model.Person#-1");
}
}

}.run();
}

@Test(groups = {
"persistOK"
})
public void testPersistOK() throws Exception {
new ComponentTest() {

@Override

protected void testComponents() {
final Person person =
(Person) super.invokeMethod("#{personHome.getInstance}");
person.setAge(20);
person.setGivenName("Arthur");
person.setSurname("Superman");
assert super.invokeMethod("#{personHome.persist}").equals(
"persisted");
}

}.run();
}

@Test(groups = {
"persistOK"
}, dependsOnMethods = {

"testPersistOK"
})
public void testGetOK() throws Exception {
new ComponentTest() {

@Override
protected void testComponents() {
super.setValue("#{personHome.id}", 1);
final Person person =
(Person) super.invokeMethod("#{personHome.getInstance}");
assert person.getAge() == 20;
assert person.getGivenName().equals("Arthur");
assert person.getSurname().equals("Superman");
}

}.run();

}

@Test(dependsOnGroups = {
"persistOK"
})
public void testPersistNoSurname() throws Exception {
new ComponentTest() {

@Override
protected void testComponents() {
try {
final Person person =
(Person) super
.invokeMethod("#{personHome.getInstance}");
person.setAge(15);

person.setGivenName("Max");
assert super.invokeMethod("#{personHome.persist}").equals(
"persisted");
assert false;
} catch (final ELException ex) {
assert ex
.getMessage()
.equals(
"javax.persistence.PersistenceException"
+ ": org.hibernate.PropertyValueException"
+ ": not-null property references a null or transient value"
+ ": test.model.Person.surname");

}
}

}.run();
}

@Test(dependsOnGroups = {
"persistOK"
})
public void testPersistSurnameTooLong() throws Exception {
new ComponentTest() {

@Override
protected void testComponents() {
try {

final Person person =
(Person) super
.invokeMethod("#{personHome.getInstance}");
person.setAge(15);
person.setGivenName("Max");
person.setSurname(StringUtils.repeat("a", 129));
assert super.invokeMethod("#{personHome.persist}").equals(
"persisted");
assert false;
} catch (final ELException ex) {
assert ex.getMessage().equals(
"javax.persistence.PersistenceException"
+ ": org.hibernate.exception.DataException"
+ ": Could not execute JDBC batch update");
}

}

}.run();
}
}


Here a screenshot of the project structure under Eclipse :



It was a bit hard to configure this and I hope it can help some of you to save time. I have an archive of this small test, I can send it to you if you want, only ask me. ;-)

Creacion de una Empresa en el Peru

D'après mon expérience en cours, voici un petit guide pour ceux ou celles qui souhaiteraient créer une entreprise au Pérou.

Ingrédients :
- 1 cabinet d'avocats
- 1 étude notariale
- 1 banque
- 2 actionnaires péruvien(ne)s
- 1 gérant(e) péruvien(ne), peut être un des actionnaires
- 1 nom d'entreprise
- environ 2500 soles

Recette :
- Contacter le cabinet d'avocats pour initier la procédure
- Proposer le nom de l'entreprise souhaité au cabinet d'avocats
- Le cabinet d'avocats transmet la demande à l'étude notariale qui valide que le nom de l'entreprise est disponible
- Le cabinet d'avocats écrit la minuta en précisant le nom de l'entreprise, les actionnaires, le ou la gérant(e), l'adresse du siège social et le capital initial
- Le ou la gérant(e) signe la minuta qui est ensuite transférée à l'étude notariale
- L'étude notariale certifie la minuta
- Ouvrir le compte bancaire de l'entreprise auprès de la banque et y déposer le capital initial, le compte n'est pas encore utilisable
- Remettre le certificat de dépôt du capital au cabinet d'avocats qui va le transmettre à l'étude notariale afin de réaliser la escritura
- Signer la escritura à l'étude notariale et payer celle-ci
- Après une quinzaine de jours, la escritura est officialisée et l'entreprise est constituée, elle possède alors un R.U.C. et peut donc émettre des factures
- Effectuer une copie légalisée de la escritura
- Aller à la banque avec la copie légalisée de la escritura afin de finaliser l'ouverture du compte bancaire
- Payer le cabinet d'avocats

Voilà ! De mon côté, j'attends l'officialisation de la escritura, donc encore une dizaine de jours à partienter.

Après ça, je pourrais initier la procédure d'embauche de moi-même par l'entreprise "Cimballi Consulting S.A.C.", entreprise de prestation de services en informatique.

jeudi 3 juillet 2008