Process Explorer de Sysinternals

Pour le développement et même pour avoir une meilleure connaissance du fonctionnement de son PC sous Windows, un outil qui doit être installé à mon avis par défaut est Process Explorer.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

Premier développement Seafile

Suite à l’utilisation de Seafile alternative open-source à Dropbox, je me suis posé la question du rajout de fonctionnalité dans cette solution.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

Typescript avec Vim sur Windows Seven

Le développement avec Typescript propose une solution d’intégration avec un grand nombre d’IDE (Eclipse, Atom, Visual Studio, etc.).

Pour l’administration système et pour le traitement de très gros fichiers texte, j’utilise VI ou VIM depuis très longtemps. Du coup, j’ai testé l’installation d’outil de coloration syntaxique et d’auto-complétion pour Typescript dans VIM.

Coloration syntaxique

En premier, il faut télécharger la coloration syntaxique depuis ce blog, dézipper le contenu pour copier le fichier typescript.vim dans le dossier des syntaxes de VIM soit dans mon cas : C:\Program Files (x86)\Vim\vimfiles\syntax\

Pour activer la reconnaissance de la syntaxe, il faut créer un fichier typescript.vim dans le dossier suivant: C:\Program Files (x86)\Vim\vimfiles\ftdetect\ contenant l’instruction d’association de l’extension .ts avec le type typescript:

au BufRead,BufNewFile *.ts set filetype=typescript

 Installation d’un gestion de plugins dans VIM

Je ne me doutais pas que VIM avait des installateurs de plugins; habituellement je me contentais de copier des fichiers pour activer une fonctionnalité. Au final, on trouve des évolutions dans VIM de manière tout à fait similaire à tous les autres IDEs.

Donc j’ai installé le plugin gérant les plugins vim-plug.

Il faut copier le fichier plug.vim en provenance du site GitHub  dans le dossier C:\Program Files (x86)\Vim\vim80\autoload\.

Pour activer l’installation d’un plugin il faut éditer le fichier C:\Program Files (x86)\Vim\_vimrc en ajoutant les lignes suivantes

call plug#begin('C:/Developpement/vim/plugged')

call plug#end()

Le dossier C:\Developpement\vim\plugged\ contiendra les plugins installés dans la suite.

Installation de Tsuquyomi en attente

Ce plugin permet de réaliser l’auto-complétion mais son installation suppose des pré-requis: les installations de Node.js, Typescript et Shougo/vimproc.vim.

Node.js

L’installation de node.js se fait assez simplement sous windows via le téléchargement de l’installeur windows via https://nodejs.org/en/download/.

Typescript

L’installation se fait tout aussi simplement pour Typescript via la commande suivante à exécuter dans le dossier où on veut avoir Typescript (dans mon cas dans c:\Developpement\typescript\)

npm install --prefix . -g typescript

Vimproc

L’installation de vimproc va s’appuyer sur le gestionnaire de plugin. Dans le fichier C:\Program Files (x86)\Vim\_vimrc il faut demander l’installation et la compilation de vimproc pour fabriquer la DLL vimproc.dll. L’ajout du Plugin se fait avec la ligne Plug à ajouter entre le plug#begin et le plug#end

call plug#begin('C:/Developpement/vim/plugged')

Plug 'Shougo/vimproc.vim', {'do' : 'mingw32-make'}

call plug#end()

Il faut disposer d’un compilateur gcc par exemple MinGw et indiquer dans la variable d’environnement PATH le chemin vers le dossier bin (dans mon cas C:\Developpement\MinGW\bin)

Ouvrir vim et taper la commande pour installer les plugins et la compilation via mingw32-make (qui est dans la variable d’environnement %PATH%) car c’est VIM qui va exécuter la commande de compilation.

:PlugInstall

Voici la fin de la compilation du nouveau plugin:

Installation de Tsuquyomi enfin

Il faut réouvrir le fichier C:\Program Files (x86)\Vim\_vimrc pour ajouter à la ligne d’installation de vimproc.vim une installation en plus de tsuquyomi:

call plug#begin('C:/Developpement/vim/plugged')

Plug 'Shougo/vimproc.vim', {'do' : 'mingw32-make'} | Plug 'Quramy/tsuquyomi'

call plug#end()

Un rappel de nouveau à la commande :PlugInstall pour installer le dernier plugin.

L’ajout du nouveau plugin se passe correctement mais à l’ouverture d’un fichier typescript test.ts…

Problème rencontré

La compilation a réalisé la création d’une dll vimproc_win64.dll, cette dernière est pour windows 7 x64 hors mon VIM est en version x32 d’où incompatibilité:

La compilation à la main via la commande suivante dans le dossier C:\Developpement\vim\plugged\vimproc.vim\ devrait fabriquer la dll correcte:

mingw32-make -f make_mingw32.mak

Cette commande fabrique correctement la dll dans le même dossier que la version x64:

C:\Developpement\vim\plugged\vimproc.vim\lib\winproc_win32.dll

Enfin

L’ouverture d’un fichier test.ts associé avec gvim avec la commande Control+x Control+o permet d’obtenir l’auto-complétion dans VIM selon typescript:

Il ne me reste qu’à rajouter dans le fichier C:\Program Files (x86)\Vim\_vimrc les derniers réglages pour avoir une complétion plus détaillé en ajoutant ces lignes:

let g:tsuquyomi_completion_detail = 1
autocmd FileType typescript setlocal completeopt+=menu,preview

Maintenant, je vais pouvoir commencer à utiliser angular.j version 2 qui se base sur typescript en utilisant ce bon vieux VIM qui rend encore énormément de service.

 

SourceMap

Comme on a le fichier typescript.ts qui est compilé en typescript.js, il peut être difficile dans les debuggers intégrés des navigateurs de trouver la correspondance entre le code .ts et l’exécution en javascript .js.

Bien entendu, les développeurs de typescript (et d’autres surcouche/framework javascript) on trouvé une solution qui est de réaliser une correspondance entre les 2 qui s’appelle SourceMap.

Pour utiliser la sourceMap, il faut en premier lieu l’activer dans le navigateur, par exemple. Dans Chrome, il faut ouvrir les outils de développement (CTRL+SHIFT+I) puis F1 pour avoir les préférences et on peut alors activer les sourcesMap:

Pour Firebug, l’intégration est en cours dans la version 3.0.

Pour Firefox, il semblerait que l’option est activé par défaut:

Au boulot…

 

Publié dans Blog, Développement | Laisser un commentaire

DaoManager

Download Drivers JDBC sqlite

package fr.ema.lgi2p.emacs.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import fr.ema.lgi2p.emacs.metier.Application;
import fr.ema.lgi2p.emacs.metier.Todo;

public class DaoManager {

private static DaoManager instance = null;
private Connection connection = null;

private static final Logger log = Logger.getLogger("BoostrapSample");

private DaoManager() {

try {
  Class.forName("org.sqlite.JDBC");
  connection = DriverManager.getConnection("jdbc:sqlite:c:/Developpement/todo.db");
} catch (Exception e) {
   System.err.println(e.getClass().getName() + ": " + e.getMessage());
   System.exit(0);
}
   System.out.println("Opened database successfully");
  log.info("Opened database successfully");

   createDatabase();
}

public static DaoManager getInstance() {
  if (instance == null) {
    instance = new DaoManager();
  }
  return instance;
}

private void createDatabase() {
  try {
    Statement stmt = connection.createStatement();
    String sql = "CREATE TABLE IF NOT EXISTS TODO ( ID INTEGER PRIMARY KEY AUTOINCREMENT, TEXTE TEXT NOT NULL, ACTIF BOOLEAN NOT NULL)";

    stmt.executeUpdate(sql);
    stmt.close();

   } catch (Exception e) {
       log.severe( e.getClass().getName() + ": " + e.getMessage() );
   }

    addTodo( new Todo("lait" , false ) );
    addTodo( new Todo("pain" , false ) );
}

public void addTodo(Todo todo){

  try {
    PreparedStatement preparedStatment = connection.prepareStatement("insert into TODO(TEXTE,ACTIF) values( ? , ? )" );

    preparedStatment.setString(1, todo.getTexte() );
    preparedStatment.setBoolean(2, todo.isActif() );

    preparedStatment.execute();
    preparedStatment.close();

  } catch (Exception e) {
     log.severe( e.getClass().getName() + ": " + e.getMessage() );
   }
}



public List<Todo> getAllTodo(){
   List<Todo> returnListTodo = new ArrayList<Todo>();
   try {
      Statement statement = connection.createStatement();

      if ( statement.execute( "Select TEXTE,ACTIF FROM TODO " ) ){
        ResultSet resultSet = statement.getResultSet();
        while ( resultSet.next() ) {
          String texte = resultSet.getString("TEXTE");
          boolean actif = resultSet.getBoolean("ACTIF");

          returnListTodo.add( new Todo( texte , actif ));
        }
       }
       statement.close();

    } catch (Exception e) {
        log.severe( e.getClass().getName() + ": " + e.getMessage() );
    }
     return returnListTodo 
  }

}

Publié dans IMT Mines Alès | Laisser un commentaire

Authentification One-Time Password

Le principe de l’authentification One-Time Password est d’avoir des mots de passes qui changent régulièrement pour éviter les attaques par force brute sur les sites Web.

En me basant sur le module apache mod_authn_otp, je reprend dans cet article les étapes importantes de l’installation de cet module en version simplifié (pas de code PIN).

En premier téléchargement et compilation sur Ubuntu 14.4 du module apache mod_authn_opt en version 1.1.7:

wget https://s3.amazonaws.com/archie-public/mod-authn-otp/mod_authn_otp-1.1.7.tar.gz

Note de mise à jours: test sur Ubuntu 16.04 du module apache mod_authn_opt en version 1.1.8:

wget https://s3.amazonaws.com/archie-public/mod-authn-otp/mod_authn_otp-1.1.8.tar.gz

N’oublier de dézipper ce fichier:

tar xvfz  mod_authn_otp-1.1.8.tar.gz
cd mod_authn_otp-1.1.8

 

Avec les outils de compilation installés:

sudo aptitude install apache2-devel
sudo aptitude install openssl-devel
sudo aptitude install apache2-dev
sudo aptitude install build-essential

Note de mise à jours: le package openssl-devel ne semble plus disponible mais il ne parait plus nécessaire.

 

Réaliser la compilation du module avec les commandes suivantes:

./configure
make
make install

nous obtenons un module pour apache installé mais aucunement activé:

/usr/lib/apache2/modules/mod_authn_otp.so

Réalisation l’ajout en tant que module dans apache avec la création du fichier suivant:

/etc/apache2/mods-available/authn_otp.load

Contenant la ligne suivante:

LoadModule authn_otp_module /usr/lib/apache2/modules/mod_authn_otp.so

Le module est configuré dans apache mais pas activé car pour cela nous devons faire un lien symbolique vers ce fichier depuis le dossier des modules activés

cd /etc/apache2/mods-enabled/
ln -s ../mods-available/authn_otp.load .

 

Le lien est réalisé pour symbolisé que le module est à activer au prochain redémarrage d’apache que nous réalisons avec cette commande:

service apache2 restart

Nota j’ai eu une erreur à cause du nom du module. L’erreur était:

undefined symbol: mod_authn_otp

Car le fichier ( /etc/apache2/mods-available/authn_otp.load) avait comme nom de module mod_authn_otp alors qu’il faut indiquer authn_otp_module.

Je modifie la configuration d’apache pour protéger le dossier test d’un accès avec un mot de passe à utilisation unique :

<Directory /var/www/html/test/ >
 AuthType Basic
 AuthName intranet
 AuthBasicProvider OTP
 Require valid-user
 OTPAuthUsersFile "/etc/otp/otp-users.txt"
</Directory>

 

Tout ce passe ensuite sur le nouveau fichier /etc/otp/otp-users.txt.

Nota: il faut que le dossier et le fichier soit propriété de l’utilisateur www-data qui est sous Ubuntu l’utilisateur qui exécute le logiciel apache2. Création du dossier, du fichier et changement de droit avec les commandes suivantes:

mkdir /etc/otp/
touch /etc/otp/otp-users.txt
chown -R www-data.www-data /etc/otp/

Et maintenant le contenu du fichier otp-users.txt sachant que je souhaite une authentification basé sur le temps et non sur un jeton.

HOTP/T30         jean          -       01234567890101112130

J’indique je veux une authentification sur T avec une fenêtre de 30 secondes basé sur un décalage de 01234567890101112130. (Par défaut cette authentification attendra un One-Time Password de 6 chiffres).

Le tiret indique que je n’utilise pas de code PIN au moins dans un premier temps.

Je peux utiliser un exécutable pour calculer le mot de passe pour la fenêtre de 30 secondes avec la commande suivante:

 otptool -t '01234567890101112130' -i 30

J’obtient en sortie 3 chiffres: token:  password  counter

480455332: 458789 cf8081

Le mot de passe valide est 458789.

Que je peux vérifier par la commande de vérification suivante:

 otptool -t '01234567890101112130' -i 30 458789

 

Maintenant je souhaite utiliser une application Android pour générer le mot de passe depuis mon téléphone.

Avec la commande suivante je vais convertir le décalage en temps dans le bon format:

python -c "import base64,binascii; 
print base64.b32encode(binascii.unhexlify('01234567890101112130'))"

J’obtient l’encodage suivant: AERUKZ4JAEARCIJQ

J’installe l’application de Google Authenticator qui semble un peu décrier mais qui fonctionne très bien pour mon premier exemple dans cette technologie.

Je lance l’application en indiquant « Ajouter un compte » et « Saisir la clé fournie ».

Dans l’interface, le premier champ est un texte libre pour identifier le serveur.
Ensuite j’indique la clé AERUKZ4JAEARCIJQ et je laisse le dernier champ sur « Basée sur l’heure » vu qu’il s’agit de mon type d’authentification et non sur un jeton/token.

L’authentification fonctionne en générant des mots de passes toutes les minutes.

De nombreuses options sont disponibles pour améliorer ce processus d’authentification avec un nombre limite de tentative, un code PIN qui s’ajoute avant le code à utilisation unique.

Google-One-time-password

Pour éviter d’avoir à entrer le code, on peut utiliser un qrcode qui peut être par exemple généré avec inkscape (http://goinkscape.com/how-to-make-qr-codes-in-inkscape/) via le menu Extensions > Rendu > Codes-barres > QR code…

Ensuite, il suffit d’entrer dans la zone Texte le code pour généré un QR Code que l’application Google Authenticator comprend pour entrer la longue suite de code sans erreur.

Sources :

 

Publié dans Développement | Laisser un commentaire

Documents Développement Web

Document Developpement Web Developpment-Web-2019.pdf

See Step by Step from JSP to JSP bellow

See Video about debug and install bellow

French Articles Ressources :

Eclipse débogage et points d’arrêts

Java log dans Eclipse

Process Explorer de Sysinternals

Exemple d’un codage en Stream Java

Ajout de Javadoc dans un programme Java

Step by Step from JSP to JSP


Chain of operations:

URL->JSP->Formulaire->Servlet->doGet->model part ->JSP->browser

Etape 1: Ask from browser to the JSP

The browser asks an URL to Tomcat which execute a JSP

Step 2: Building a Html Form from the JSP

JSP shows the form into the browsser to send 2 parameters: action and todo_texte

Step 3: Browser shows Html Form

The user fills the Html form  into the browser.

Step 4: The user fill the form

after fill the form, the user press the « submit » button

Step 5: The Html form transform data to GET URL request

the browser sends 2 fields action and todo_texte with values to Tomcat

Step 6: Control Servlet trigger from the URL /Contoleur

@WebServlet annotation mark the servlet which receive GET request to the doGet method

Step 7: doGet method extracts action and todo_texte parameters

2 variables action et texte are created by GET parameters from form

Control layout calls to model part to add new TODO instance from parameter todo_texte. This will realy create an instance of Todo after, backup it into the database.

Step 8: Servlet ask a JSP to display the final answer

request.getRequestDispatcher( "index.jsp" ).forward(request, response );

In this example, index.jsp is the page display to the user as response to the initial request.

URL http://localhost:8080/Controleur?action=addTodo&todo_texte=pain

This page index.jsp generates HTML do display informations about Todo items list and provide a Html form to add new TODO as step 2.

The index.jsp is a view to manage two functions: offers a form to add an other Todo item and displays the list of Todo items.

Voici la vidéo explicative de l’enchainement des actions pour le débugage avec Eclipse qui reprend les étapes vues ci-dessus:


TP 0 Vidéo configuration et installation de Tomcat avec Eclipse J2EE à adapter selon votre OS et votre configuration personnelle

Publié dans IMT Mines Alès | Laisser un commentaire

Javascript Debug avec Eclipse Mars

Cet article est périmé. Il montre une utilisation de technologies qui fonctionnait au moment de son écriture, mais dont actuellement je ne sais si son fonctionnement est opérationnel et/ou pertinent.
J’ajoute que j’ai été contacté pour indiquer ce lien ci-dessous en référence sur les alternatives à firebug. J’avoue que la liste est correcte, mais que je ne me limiterai pas à cette page :
https://www.pcwdld.com/firebug-alternatives-javascript-debugging-tools

La liaison de débuggage Javascript dans le navigateur est par contre très utile et à retrouver ici : https://pierrejean.wp.imt.fr/2021/03/03/ligne-de-commande-pour-recharger-une-page-dans-chrome/

CrossFire

Je suis un utilisateur régulier de Firebug, donc je me suis tourné vers l’extension Crossfire de Firebug qui permet le « remote debug » depuis Eclipse. Malgré les explications du tutoriel je n’ai pas été capable d’avoir  les points d’arrêt entre Firebug et Eclipse qui fonctionne.

ChromeDevTools

J’ai donc basculer sur la solution Google Chrome Developer Tools for Java. Le projet est « discontinued » mais j’ai quand même fait un essai.

Configuration de base:

  • Eclipse for PHP Developer Version: Mars.1 Release (4.5.1)
  • Chromium 48.0.2539.0 (64-bit)

Installation:

  • Site de Module Eclipse http://chromedevtools.googlecode.com/svn/update/dev/.
    • Installation depuis  ce site Google Chrome Developer Tools

eclipse-install-google javascript remote debugger

Démarrage de Chromium avec le port d’écoute sur 5005 :

chrome.exe  --remote-debugging-port=5005

Configuration d’Eclipse pour le « remote debug » de type « WebKit Protocol »

remote-debug-configuration-eclipse

Phase de Debug

Démarrage du Debug classique par le bouton « Debug » d’Eclipse.

La fenêtre « Debug » d’Eclipse indique que la connection avec Chrome fonctionne bien. Par contre, à ce moment là, les points d’arrêt ne semble pas fonctionner tout le temps.

Mon contournement est donc de mettre le processus de Debug en « Suspend » comme indiqué sur cette capture d’écran:

eclipse-suspend-remote-debug

Et à ce moment là on peut débugger de manière classique avec des points d’arrêts :

javascript-eclipse-remote-debug

 

Pour des breakpoints plus efficace surtout dans les frameworks Jquery et AngularJS, l’utilisation du mot-clef « debugger » est très utile.

eclipe-javascript-breakpoint

 

Et voila.. à voir dans le temps si les variables sont bien échangées, les exécutions bien réalisées, bref si ce processus est robuste en attendant que CrossFire soit aussi plus mature.

Publié dans Développement | Laisser un commentaire

Exemple d’un codage en Stream Java

Supposons que j’ai des nombres à traiter, séparés par des points virgules:

String donneesToSplit ="14;15;8;10;7;9";

Je voudrais obtenir au final une sortie de type CSV mais avec des zéro sur 4 chiffres, comme ceci:

14,0015,0008,0010,0007,0009

J’aurai donc un code Java qui va divisé donneesToSplit en tableau puis passer chaque élément du tableau pour ajouter les zéro puis reconstruire une chaîne de caractères en ajoutant une virgule pour au final enlevé la dernière virgule:

 String[] splited = donneesToSplit.split(";");
 String donneesCsv = "";
 for(int i=0; i<splited.length; i++){ 
    String nombre = splited[ i ];
    nombre = ("0000" + nombre).substring(nombre.length());
    donneesCsv += nombre + ",";
 }
 donneesCsv = donneesCsv.substring(0, donneesCsv.length()-1);

Un classique du parcours total dans un tableau avec un jolie conversion du nombre avec 4 chiffre que l’on trouve sur Internet.

La version Java 8, un peu plus complexe à lire mais je pense qu’elle est intéressante et surtout plus performante.

 List<String> numbers = Arrays.asList( donneesToSplit.split(";") ); 
 donneesCsv = numbers.stream()
 .map(i -> ("0000" + i).substring(i.length()) )
 .collect(Collectors.joining(",") );

On peut noter la conversion en List<String> qui est souvent une forme de données classique surtout après extraction de données depuis une base de données.

La nouvelle fonction stream() qui ouvre des fonctionnalités très performante surtout en parallélisant certains calcul.

La fonction map() qui injecte une méthode d’une classe anonyme, bref qui fait le parcours total de la liste et qui extrait le i ième élément pour lui appliquer une opération.

Enfin, la méthode collect qui assure le retour des données en une seule structure. Cette méthode exploite le Collectors qui évite la concaténation des chaines de caractères et d’enlever la dernière virgule.

Les dernières évolutions de Java 8 et bientôt Java 9 sont très performante pour traiter des « types de problématiques ». Il y a une évolution marqué pour améliorer les traitements de type filtrages et conversions de données en masse, surtout des données faiblement structurées que l’on retrouve dans le Big Data.

 

Publié dans Développement | Laisser un commentaire

JavaFX vers Application Android, « Preuve du concept »

Dans le cadre d’un projet avec une forte composante Smartphone/Tablette, on se doit de tester différentes solutions techniques.

3 Solutions sont à l’étude:

  • Développer pour le Web mobile avec javascript et svg/html
  • Développer en natif avec Android et IOS
  • Développer avec un générateur de code style phonegap et/ou JavaFX

Cette dernière solution est donc le sujet de cet article. Après une rapide étude de phonegap, je ne vois pas bien l’intérêt dans mon démonstrateur d’une solution phonegap. En effet, autant développer directement dans notre cas avec une application Web mobile.

La solution JavaFX semble enfin mature dans Java8. Une intégration directe avec le JDK 8 sans installation additionnel est enfin opérationnelle. Eclipse avec e(fx)clipse intègre le JavaFX au sein de cet IDE utilisé classiquement en développement Java.

Les premiers développements sous JavaFx montrent une facilité dans les interactions avec l’interface graphique. Swing et Awt semblent bien partis pour être remplacés à plus ou moins long terme.

La problématique est de basculer une application JavaFX vers un fichier apk.

javafx2apk

En m’appuyant sur le tutoriel suivant : (https://bitbucket.org/javafxports/android/wiki/Building%20and%20deploying%20JavaFX%20Applications), l’on peut arriver à ses fins.

Je me permet juste quelques remarques comme retour d’expérience sur mon portage d’application.

En premier lieu, les chemins des outils principaux que l’on indique d’ailleurs en variable d’environnement:

  • JAVA_HOME=C:\Program Files\Java\jdk1.8.0_25
  • PATH=C:\Program Files\Java\jdk1.8.0_25\bin;C:\Developpement\gradle-2.2.1-all\bin;C:\Developpement\android-sdk_r24.0.2-windows\tools;C:\Developpement\apache-ant-1.9.4-bin\bin;

Voici une copie d’écran de mon disque dur, je ne travaille jamais dans le dossier c:\Programme Files\ ou sur le bureau, tous mes outils sont dans un dossier Developpement (sans accent, sans espace ou caractères autre que [A-Za-z0-9.-]):

 

android-folder

Après le développement de l’application de manière classique dans Eclipse, il faut faire un export en « Runnable JAR file »:

Eclipse-export-Runable-jar

Le fichier final est dans le dossier PierreFX du dossier sample de l’outil de portage javafxport. Dans cet outil de portage, il y a un script pour déployer l’application d’exemple (qui ne fonctionne pas d’ailleurs dans ma configuration) : createHelloworld.bat, voici donc la version pour ma configuration et mon projet PierreFX.jar:

createPierreFX-bat

Ligne de commande de gradlew.bat: ANDROID_SDK , JFX_SDK, , JFX_MAIN_CLASS

 

Notez les / au lieu des \ plus classique sous Windows. D’avance j’avais installé dans le SDK les packages pour le développement en Android 4.4.2 et 5.0, d’ailleurs je ne sais pas comment il fait le choix de la version…

L’exécution de ce programme createPierre.bat va produire un dossier: C:\Developpement\dalvik-sdk-8u40-ea3\samples\PierreFX\PierreFX contenant tout le projet préparé pour android.

Un ant debug dans le dossier  C:\Developpement\dalvik-sdk-8u40-ea3\samples\PierreFX\PierreFX va produire ensuite dans C:\Developpement\dalvik-sdk-8u40-ea3\samples\PierreFX\PierreFX\bin le fichier apk: PierreFX-debug.apk

Nota important: si vous travailler avec un émulateur, vous pouvez avoir l’impression que le JavaFX produit une application avec écran noir (c’est aussi le cas si vous avez une erreur, logcat est à ce moment là votre meilleur ami). L’écran noir peut aussi venir que l’application dans l’émulateur est très lente, elle peut prendre 30 secondes même pour une application classique et même sur un ordinateur Core i7, ce n’est peut être pas planté, juste très lent….

Nota: l’affichage de png a posé un problème sur l’émulateur Android, « Pixel format BYTE_BGRA_PRE not supported on this device », il semblerait que le support de la transparence soit la cause du problème. La conversion de l’image en jpg a contourné le problème mais sans donné l’effet de la transparence bien sûr.

 

 

 

 

Publié dans Développement | Laisser un commentaire

Problème de la ligne verte du debug qui ne suit pas dans xdebug et Wamp

Si vous avez la ligne verte symbolisant la ligne de debug dans Eclipse PDT Luna qui ne se décale pas, alors il faut:

  • Allez dans le Menu Eclipse->Help->Install New Software
  • Appuyez sur le bouton Add, ajouter une nom par exemple PDT et location: http://download.eclipse.org/tools/pdt/updates/latest/
  • Dans le champ « type filter text » indiquez PDT
  • Et cocher « PHP Development Tools (PDT) »
  • Continuer l’installation en acceptant la licence
  • Redémarrer Eclipse

Article de référence: http://stackoverflow.com/questions/26067892/xdebug-breakpoints-work-but-step-over-does-not

Publié dans Développement | Laisser un commentaire