Lire un AndroidManifest.xml d’un apk
Pour verifier le AndroidManifest.xml installé dans un apk, il suffit de faire:
aapt d xmltree path/to/My.apk AndroidManifest.xml
Pour verifier le AndroidManifest.xml installé dans un apk, il suffit de faire:
aapt d xmltree path/to/My.apk AndroidManifest.xml
Depuis quelques mois, la 3D s’introduit partout: Navigateur Web, iPhone, Android…Aye aye implémentations différentes à chaque fois… Que nenni….
La bonne nouvelle est que certains standards semblent émerger. WebGL, disponible sur les versions alpha de Webkit et Firebox 3.7 n’invente pas une nouvelle API comme l’a fait O3D mais s’appuie sur le standard OpenGL ES 2.0, que l’on va bientôt retrouver sur nos mobiles préférés: Android, Iphone, WinMe…
Un lien pour découvrir WebGL:
http://learningwebgl.com/blog/
Un lien pour écrire ses fragment shaders:
L’injection de dépendance est un pattern que tout programmeur java connait. Forme spécifique du patttern IoC (inversion of control), il permet de rendre la programmation plus modulaire. Le principe :
Le composant C crée la liaison entre A et B. On injecte ainsi la dépendance; Les avantages?
Les possibilités sont énormes et lorsque l’on y a gouté difficile de s’en passer.
Enfin, il est à noter qu’existe de nombreuses implémentations de Depedency Injection:
Guice pour sa compacité semble aujourd’hui s’imposer. Simple dans ses usages triviaux, sa documentation reste toutefois trop sommaire sur ses possibilités avancées. Toutefois, un tutorial sympatique pourra vous éclairer :
http://www.ibm.com/developerworks/library/j-guice.html
A lire sans modération.
OSGI – Episode 2
Dans l’épisode précédent, nous avons vu comment installer rapidement une plate-forme OSGI avec pax runner. Dans ce nouvel épisode, nous allons mettre en place un serveur Web avec OSGI.
OSGI n’était pas destiné aux serveurs d’applications mais peu à peu OSGI s’est introduit dans le monde J2EE. Tout d’abord par sa modularité, il a été utilisé pour modulariser les serveurs d’applications afin de les rendre moins monolythiques :
De son coté, le consortium OSGI a définit une spécification de service http permettant de gérer des pages statiques et des servlets. Ceci a du sens pour les produits embarqués voulant fournir de très simples interfaces HTTP mais cela reste peu productif pour de plus importantes applications.
Mais quel peut être l’intérêt pour OSGI de pouvoir faire fonctionner des applications Web ? Simplement de fournir une application complète!
En effet, fournir une application Web consiste à fournir une application au format WAR ou EAR, à installer un serveur d’application, puis configurer et déployer le WAR ou l’EAR. Ceci est simplement hors de porté pour 99% des particuliers et de très nombreuses entreprises. Le risque d’erreurs de configuration est aussi maximal. Fournir une application unique qui embarque son serveur HTTP est au contraire une solution élégante et moins risquée. Ceci aurait pu être possible avec J2EE mais la taille des serveurs d’applications a découragé ce type de solutions.
Suite à cet aparté, retour les mains dans le camboui. Nous allons utiliser Pax Web 0.7.0. Ce bundle est un packaging de jetty permettant l’éxécution de servlets et de JSP. Dans le répertoire pax-runner-1.2.0 obtenu dans le répertoire précédent, il suffit d’exécuter :
bin/pax-run.sh --profiles=felix.config,web,war war:mvn:org.apache.wicket/wicket-examples/1.3.0/war
Et la vérification que tout est opérationnel avec son navigateur :
http://localhost:8080/mvn_org.apache.wicket_wicket-examples_1.3.0_war/helloworld/
Impressionnant, on a une application déployée en une ligne…
Ralentit Technique :
Voila pour aujourd’hui… Dans le prochain billet, nous verrons comment modifié un war pour le faire fonctionner sur le principe vu dans ce billet.
Ce vendredi, nous avons tenté d’utiliser le plugin maven-release-plugin pour automatiser nos mises à jour. Après avoir tenté notre idée de solution, c’est à dire mettre l’identifiant de release dans une variable nous sommes rendu compte qu’il s’agit d’une mauvaise idée. En effet, la variable dans les fichiers pom.xml n’est pas résolue et se retrouve sur le dépot central…. et là le drame.
Comme souvent avec Maven, il existe une solution préconisée qu’il faut respecter (les autres chemins sont sinueux). Bref, la solution est le plugin release. Attention, le projet doit être stocké par une gestionnaire de configurations (svn, cvs, git, baazar …). Ce plugin crée un tag pour chaque release et mets à jour les identifiants de versions dans les fichiers pom.xml.
Utilisation du plugin:
Il ne reste plus qu’à faire:
Le bug est rencontré sur svn >=1.5 et mvn-release-plugin version < 2.0.9. Lors de la preparation, il tente de créer un tag avec un svn copy et vous indique que la branche existe déja sans que cela soit le cas. Il s’agit d’un BUG svn. 2 solutions :
OSGI – Episode 1
Le premier épisode décrit la mise en place d’une plateforme OSGI. Afin de me simplifier la vie et après de nombreuses lectures, j’ai choisi l’approche “Pax Runner”.
J’ai alors suivi les étapes décrites dans le screencast (en prenant les dernières versions) :
Et me voila par défault sur la console Felix. Il me reste plus qu’à utiliser Felix avec les commandes suivantes:
Après avoir quitté Felix, un répertoire de cache est apparu: runner. Ce répertoire stocke les bundles téléchargés pour éviter de les télécharger à chaque démarrage.
Pax runner, c’est beaucoup plus qu’un Felix packagé. Il permet également de lancer les autres plateformes OSGI:
Il existe bien d’autres options utiles comme le montre cette page.
En conclusion de cette rapide note, Pax runner permet d’installer rapidement les plateformes OSGI du marché et donc de valider et tester vos travaux sur celles-ci.
Références :
Il est possible d’utiliser Qt avec Visual C++ et non MinGW. Pour cela, il faut recompiler QT.
Un outil sympa :
Pour réussir ma compilation de Qt (4 tentatives): j’ai utilisé les options no_webkit et no-sql-sqlite dans le configure.
Et voila depuis quelques jours, je découvre les joies du développement sur plate-forme Windows. Venant d’OS X et Linux, mon choix s’est porté sur le package MinGW. Choix pas si libre car fourni avec le QT SDK.
Bref, mingw est basé sur gcc 3.4.5. Oh souvenirs & souvenirs. Le problème n’est pas tant là mais il ne gère pas correctement les exceptions C++. Il faut donc migrer pour réaliser des exceptions correctes sur gcc 4. J’ai donc opté pour gcc 4.4 TDM avec les exceptions SJLJ. On prend le zip et on le dézippe dans le répertoire mingw de QT SDK.
Et malheureusement ça ne suffit pas pour bien fonctionner. Je décide de récréer mon environnement mingw :
Une mésaventure. Le symbole suivant est défini dans X11 et QT
CursorShape
Il provoque alors une erreur cryptique :
qnamespace.h:833: error: expected identifier before numeric constant qnamespace.h:833: error: expected unqualified-id before numeric constant
Bref la solution : X11 et QT attention. Il faut placer les headers X11 en dernier
http://braincore.blogspot.com/2005_11_01_archive.html