jeudi 19 août 2010

Android game : Paratrooper

Paratrooper is the android adaptation of the famous amstrat game.
Use your finger to destroy paras, helicopters, bombers, and much more..

Xp point based system to upgrade your cannon specs.

To get the game : Download

mercredi 21 avril 2010

Split n Go !



Split N Go is a high addictive android game.

Draw lines with your finger to reduce the surface of the screen without crossing ball's trajectory. When you 'll reach about 75% you ll get to the next level.

Here is a preview video :

PS : Level 7 is NOT a bug, it's a challenge!

dimanche 18 avril 2010

Space Sim sur Android


Space sim is a gravity game that allows you to play with planets and satellites on your android phone !

Get the Lite version !

Features :

  • Add satelites and planets with your finger.
  • Repulsive planets
  • Multitouch zooming
  • Sat. cam to focus camera on a satellite (use trackpad)

how to :
  • add a satellite : simply draw a ligne on the screen with your finger. Longer is the line, faster will be the satellite !
  • add a planet : kepp pressing the screen during 5 sec where you want to add a planet. You can choose the kind of planet (repulsive or not) in the menu.
Download now : Download from market

lundi 3 mars 2008

Sortie de bea workshop 10.2



Bea nous offre la nouvelle release de son ide commercial basé sur Eclipse.
En attendant la nouvelle version de son serveur d'application qui devrait gérer(enfin) JSF 2.0, BEA s'est concentré sur l'IDE. Au menu un correctif de beug, une amélioration des performances, l'intégration flex et le support du "tuxedo control" que nous retrouverons dans cette version 10.2.

Nouveauté, une couche au dessus des produits BEA qui permet de lancer et de visualiser les produits bea installés sur le poste : WorkSpace studio.

Workshop deviendra t'il un IDE utilisable sereinement par les développeurs, avec un serveur simplifié sur le poste développeur plus rapide à démarrer et une consommation mémoire raisonnable (< à 2Go) ? Ce sera en tout cas la clé pour une adoption massive du produit. Pour l'annonce en anglais c'est ici : http://dev2dev.bea.com/blog/phumphrey/archive/2008/02/the_fastest_wor.html

lundi 11 février 2008

Télécharger un fichier via JSF

Question du jour: comment renvoyer un fichier (généré à la volée ou du disque) au navigateur web à partir d'un back bean JSF?

Prendre un FacesContext, extraire l'objet response de son external context. Faire revenir la response en la castant en HttpServletResponse. Ajouter quelques headers http (pour le nom du fichier), un type mime (pour le comportement du navigateur). Ajoutez un flux quelconque (généré à la volée ou lue a partir d'un fichier selon les goûts), et retirez immédiatement (responseComplete) pour éviter les ennuis.
Compilez, déployez et savourez ...

En mode intelligible ça donne ceci :

public void doTestStream(ActionEvent ae) throws IOException
{
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext ec = context.getExternalContext();
HttpServletResponse response = (HttpServletResponse) ec.getResponse();
response.reset();
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "filename=Demo.csv");
response.setHeader("Content-Transfer-Encoding", "binary");
ServletOutputStream sop = response.getOutputStream();
sop.write("hello;csv;world".getBytes());
sop.flush();
context.responseComplete();
}

mardi 15 janvier 2008

Kodo Optimistic Exceptions

Aujourd'hui, une simple astuce dans l'utilisation de Kodo. Dans le cas de table avec des relations parent-enfants, il est assez courant de vouloir utiliser des supressions en cascade.
Pour ce faire on configure le CascadeType dans le bean entity.

Je suis tombé hier sur une exception de type OptmisticException dans le cas d'une suppression en cascade :
<1.0.0> org.apache.openjpa.util.OptimisticException: Optimistic locking errors were detected when flushing to the data store. The following objects may have been concurrently modified in another transaction:

Il s'avère que Kodo a l'étrange idée de se tirer une balle dans le pied en tentant de supprimer d'abors l'enregistrement parent et ensuite les enfants...

Pour palier à ce soucis, je vous invite à rajouter dans votre persistance.xml la petite ligne qui suit :




<property name="kodo.jdbc.MappingDefaults" value="jpa(ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict)"/>



Merci Bea d'agrémenter mes journées de travail par de longues et infructueuses recherches désespérées de la petitie ligne de configuration servant à modifier un comportement qui, bien que nécessaire dans 99% des cas, n'est pas activé par défault.

vendredi 7 décembre 2007

Injection EJB avec JSF1.1 solution 2

Nouvelle solution plus propre (ca fera plaisir à Alexandre) et plus performante pour effectuer une injection @EJB dans un managed bean (ou back bean) JSF. L'utilisation d'un lookup local tout simplement (bien que sur Workshop ce soit pas du gâteau).

Une petite classe donc qui, avec sa simple méthode à appeller dans le contructeur de votre back bean vous permettra par réflexion d'effectuer un context lookup vers votre ejb (Champs @EJB public uniquement). Toujours en attendant l'injection @EJB dans le nouveau WorkShop.

télécharger la classe java

Pour cerain il peut se produire une erreur de lookup du style :

javax.naming.NameNotFoundException: While trying to look up comp/env/Addition/Local in /app/webapp/TEST_JSF_EBJ/12227708.; remaining name 'comp/env/Addition/Local'


Pour résoudre ce problème j'ai simplement ajouté un ServletContextListener à mon application web dans laquelle je référence mes ejb . Après le lookup local dans les back beans fonctionne a merveille...

public class testListener implements ServletContextListener {

@EJB(name = "Addition/Local")

public AdditionRemote ar;

public void contextDestroyed(ServletContextEvent arg0) { }

public void contextInitialized(ServletContextEvent arg0) { }

}




Exemple d'utilisation :


@EJB(name = "Addition/Local")

public AdditionRemote ar; // is va être injecté dans le constructeur

public testBackBean() {

fr.sihm.common.ejblocator.EJBLocator.injecterMesEJB(this);

}

public String getResultEJB() // on teste

{

if (ar == null) {

return "NOT BOUND";

} else {

return "Bouded , result = " + ar.additionner(5, 5);

}

}