sábado, 1 de noviembre de 2008

Twitter Access in Java

After a long time I am back in the blogging world. Because I hope French and Mexican people will read this blog I have to write in English...

Since some days ago I am using twitter again (my id is yannart) but I have a big problem. From work I can't access to the main domain twitter.com. I try a personal proxy I have installed in a (secret) Internet URL and it works with some bugs. After that I start to wonder how difficult will be coding my own web app with server-side communication against twitter.

Java is my favorite programming language so I search if there where some APIs making easy the communication between a Java program and the twitter servers. I found 3:
But which one is better?
It's a difficult question I can't respond. However I chose Twitter4J for some simple reasons:
  • Good documentation
  • Asynchronous support
  • IN THE OFFICIAL MAVEN REPOSITORY

Let's code a simple application!


Usually I use Eclipse or NetBeans IDEs but I this example I will use only Maven 2 so everybody can adapt it in his favorite IDEs (using the official plug-in in NetBeans o the m2eclipse plug-in in Eclipse).
So, that's what you need:

Creation of the project with Maven


In the console run this:

mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=org.yannart.twitter \
-DartifactId=ConsoleTwitter

Maven will create the project in a folder named ConsoleTwitter.


Adding the dependencies

Open the folder of the project and edit the pom.xml file:

Add the Twitter4J dependency between the <dependencies> and </dependencies> tags:
...
<dependency>
<groupId>net.homeip.yusuke</groupId>
<artifactId>twitter4j</artifactId>
<version>1.0.6</version>
</dependency>
...
We need to configure the support for Java 5 because the default in Maven is Java 1.4 (for now):
Add this code between the <project> and </project> tags:
...
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
...

Modify the main class to retrieve data from twitter

Go to the folder src/main/java/org/yannart/twitter/ and open the file App.java.

Replace the existing code in the main method with that one:

public static void main( String[] args ){

if(args.length != 2){
System.out.println("ERROR - you must specify a twitter username and a password.");
System.out.println("Usage: [username] [password]");
return;
}

try {
Twitter twitter = new Twitter(args[0], args[1]);

twitter.update("Updating Twitter from my own Java code!");

List statuses = twitter.getUserTimeline();

System.out.println(" -- " + args[0].toUpperCase() + " timeline --");

//prints each status of the public user timeline
for (Status status : statuses) {
System.out.println(" - " + status.getText());
}

} catch (TwitterException ex) {
ex.printStackTrace();
}
}
This method will connect to Twitter using your username/password and will send the message "Updating Twitter from my own Java code!" and print your user timeline.


Compile the project

In the console go to the ConsoleTwitter folder and execute the command:

mvn install

This will compile your project and create a target folder with the binaries.


Run the project

To simplify the execution of the example, we use the exec Maven plug-in. Just run the command:
mvn exec:java -Dexec.mainClass="org.yannart.twitter.App" -Dexec.args="USERNAME PASSWORD"

Remplacing USERNAME and PASSWORD with yours.

Downloading the sources

This project is ready to execute. Just download it, compile it and run it.







domingo, 20 de enero de 2008

Restaurer tableau de bord de Gnome

A force de vouloir paramétrer mon Ubuntu 7.10, je me suis retrouvé avec un tableau de bord (barre du dessus, du dessous ou sur les côtés selon vôtre config) sans jauge de batterie ni raccourci pour gérer les connections réseau. En cherchant un peu sur le net j'ai trouvé une solution pour restaurer le tableau de bord avec les valeurs prédéfinies.

Il faut fermer la session pour l'utilisateur pour lequel on veut restaurer le tableau de bord pour que les fichiers de config ne soient pas réécris à la fermeture de la session avec des données en mémoire.

Ensuite, en s'identifiant comme root il faut effacer les dossiers suivants qui se trouvent dans le repértoire home (ex: /home/nom_utilisateur):

  • .gconf/apps/panel
  • .gnome2/panel2.d
Bien entendu plutot que faire un rm (remove) et effacer définitivement ces dossiers, autant faire un mv (move) et juste changer le nom des dossiers par exemple en rajoutant le suffixe "BAK", le système va donc ignorer les dossiers mais il seront toujours là pour revenir en arrière.

jueves, 17 de enero de 2008

Mon serveur virtuel

Je reprend un peu ce blog avec une nouvelle qui m'enthousiame beaucoup. Je vient de conclure la configuration d'un serveur virtualisé chez gandi.net (merci à Laurent Deséchalliers pour l'info).
Je conserverai pour l'instant mon autre serveur (chez hostingvirtual.com.mx) où je loge quelques sites php.

Dans ce type de serveur on peut choisir sa distribution Linux préférée parmi une liste assez exhaustive. Personnellement j'ai choisi Ubuntu server 7.10 car je veut forcément une distribbasée sur Débian mais les packages Ubuntu sont mis plus souvent à jour que dans une distribution Debian "pure". Je vais installer la JRE 6 et un Tomcat 6 pour pouvoir faire des tests avec des applis JEE que je développe.

Le serveur physique est divisé en 64 parts de ressources égales grâce à une technologie de virtualisation appellée Xen. Ce qui est bien c'est qu'on peut très facilement acheter de nouvelles parts en fonction de besoins ponctuels.
Brève de bavardages, voici la configuration disponible pour chaque part achetée:

  • Processeur : 1/64ème d'un quadri Dual Core AMD
  • Mémoire : 256 Mo garantis + 512 Mo de Swap
  • Type de disque : RAID6
  • Bande passante : 1/64ème des capacités (soit env. 500Go de transfert mensuel)
  • Trafic inclus : illimité
  • Disque dur : 5 Go
  • Adresse IP : incluse

Il est vrai qu'une seule part c'est un peu juste surtout en vitesse de traitement et en quantité de mémoire RAM mais c'est un bon début question de s'amuser un peu à coups de ssh!

PS: para los hispanos, por una vez escribo algo en francés, pero si a alguien le interesa lo que se dice aqui, si me lo piden hago un esfuerzo y lo traduzco.

miércoles, 18 de julio de 2007

Preparandose para ser un SCJP

He visto en internet muchos sitios con resúmenes de lo que se necesita para pasar la certificación Java y preguntas similares a las del examen. Sin embargo considero que la mejor manera de estudiar, no solo para pasar el examen sino también para dominar Java lo mas a fondo posible es leerse unos libros.

A continuación cito los libros que he consultado por orden de preferencia:

SCJP Sun Certified Programmer for Java 5 Study Guide de Katherine Sierra y Bert Bates
Este libro es una verdadera joya, un libro de 900 páginas incríblemente fácil de leer y entender. Viene con bastantes ejercicios y sobretodo respuestas bien explicadas.



Complete Java 2 Certification Study Guide de Philip Heller
Este segundo libro (que de hecho leí antes que el primero) es también un muy buen libro de unas 500 hojas, le podría reprochar que trata ciertos temas que no vienen en el examen y por lo mismo deja dudas en otras partes. Trae también bastantes ejercicios.


SCJP Exam for J2SE 5: A Concise and Comprehensive Study Guide for The Sun Certified Java Programmer Exam de Paul Sanghera
Este ultimo libro no lo aconsejo. Es muy corto (unas 350 paginas) y por lo mismo creo que no es suficiente para entender a fondo todo lo requerido para prepararse para el examen. Yo lo utilicé principalmente para practicar, resolviendo las preguntas. Pero estas ultimas son de un nivel de dificultad mas bajo que en los otros libros y hasta he detectado errores y ademas no se detalle bien el por qué de las respuestas correctas.


Recursos en Internet:

Java ranch, recopilacion de sitios para prepararse al SCJP y de "Mock exams"

Inquisition, un simulador de examen... muy bueno, gratuito y opensource

NO olvidar el factor humano, una buena preparación se facilita si encuentra a alguien con quien discutir dudas o plantearse nuevos problemas.

Pasando la certificación de programador Java 5

Después de varios meses de estudio a fondo del JavaSE 5 por fin me decidí a intentar el examen de "Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0" (SCJP 5 para los íntimos). Existe una versión en español pero para no tener sorpresas escogí la versión en inglés porque luego ocurre que una palabra se traduce mal o con un castellano distinto al que utilizamos aquí en México.

Al principio se disponen de 15 min para contestar un cuestionario sobre el nivel de nuestras habilidades pero éste no afecta en nada el tipo o la dificultad del examen.
En seguida se deben de aceptar las condiciones impuestas por Sun y ya estamos listos para empezar el examen en si.
Como previsto, eran 72 las preguntas y tenía tres horas para contestarlas. Me tardé unas 2 horas con diez minutos con todo y revisada. Una de mis sorpresas fue el numero de preguntas donde había que completar códigos o rellenar hoyos a través de "drag and drop", creo que más o menos una pregunta de cada tres o cuatro era de éste tipo. Sin embargo en general puedo decir que superé mis expectativas con un acierto de 65 preguntas o sea un 90%.
En el reporte de resultados, se detalla el porcentaje de aciertos en cada una de los 7 temas principales evaluados:
  • Declaration, Initialization and Scoping (100%)
  • Flow Control (90%)
  • API Contents (80%)
  • Concurrency (100%)
  • OO Concepts (100%)
  • Collections / Generics (90%)
  • Fundamentals (72%)

De estos temas sorprendentemente donde tuve el menor porcentaje de aciertos fue en los "Fundamentals" que son supuestamente las preguntas mas sencillas. Sin embargo me justifico a mi mismo pensando en el daño que hace utilizar un IDE tan completo como NetBeans que me evita estarme preocupando por los classpath y otros detalles que, creo, provocaron mis errores.

En fin, a unos pocos días haber terminado la carrera de Ingeniería en sistemas, éste pequeño pero no despreciable logro surge como un buen motivador para seguir con mi tesis... Usando Java claro (aunque JEE)..

domingo, 8 de julio de 2007

Subversion con OpenOffice

Para los que siguen dudando entre usar OpenOffice u otro programa de ofimática, encontraran un argumento más:
Puede utilizar Subversion para administrar las versiones de sus documentos. Para ésto existe un proyecto llamado OOoSVN que se instala como Add-on a OpenOffice.

Estos son los pasos de instalación:
1. Descargar e instalar OpenOffice desde su sitio o desde su repositorio Linux
2. Descargar e instalar Subversion desde su sitio o desde su repositorio Linux
2. Descargar OOoSVN
3. Abrir OpenOffice, seleccionar "Herramientas -> Administrar extensiones..."
4. Pulsar "Agregar" y seleccionar el archivo .zip que descargó
5. Aparecerá en el menú una nueva sección: "SVN"
6. Cuando haga el primer "commit" se configurará OOoSVN

viernes, 6 de julio de 2007

NetBeans 5.5.1 en otro idioma

Si descarga la versión traducida de Netbeans 5.5.1, esta se ejecutará en el idioma de su sistema operativo si existe una traducción en dicho idioma y si no desplegará la version en inglés.
¿Pero que pasa si tiene su OS en un idioma y quiere ejecutar NetBeans en otro idioma? Es muy sencillo:

1. Ubíquese en la carpeta de instalación de su IDE favorito.
2. Abra la carpeta " etc "
3. Edite el archivo " netbeans.conf " de la siguiente manera:
En la linea de "netbeans_default_options= ..." agregar "-J-
Duser.language=es" para obtener algo parecido a:
netbeans_default_options="-J-Duser.language=es -J-Xms128m -J-
Xmx256m ... ... etc ... ... "
Donde " es " es el código del idioma que desea utilizar.

La explicación es que con la opción -Duser.language= combiamos el idioma del "Locale" de ejecucion de un programa Java y con -Duser.region= cambiamos el país.

Ejemplo:
java -Duser.language=es -Duser.region=MX miclase

En el archivo de configuración de NetBeans hay que agregar "-J" antes de cada parámetro de ejecución.

Si quiere probar su memoria en cuanto a la ubicación de los menus, puede probar la versión en aleman (de) ;)

auf Wiedersehen!