Just-In-Time Compiler Speeds Up G1

September 2nd, 2010

One important feature of the new android 2.2 system (Froyo) is the integration of the JIT, also called just-in-time compiler. JIT compiles the java bytecode into machine code at runtime to improve the execution speed. But can the JIT compiler really boosts the performance of the mobile system, even on the old photo like the G1 ?

I did some tests on my old G1 dev phone, the results are showed here below. For every configuration, I ran CaffeineMark 3 times and took the average value.

Test environment :

  • HTC Dream G1
  • Cyanogenmod-6.0.0-DS-RC1
  • CaffeineMark 3.0

Test results:

No JIT, Heap 16MB With JIT, Heap 16MB With JIT, Heap 24MB
Average 615 Average 1253 Average 1444

Table shows that the JIT compiler can almost double the program’s execution speed and giving more heap memory to vm can slightly increase the performance due to the less GC time. The effect of the JIT compiler to the battery life is unknown from the tests.

dux Java

ASP.NET, Windows Authentification et erreur 401.1

May 18th, 2010

Il est déroutant d’avoir une application web ASP.NET configurée pour utiliser l’authentification Windows et se retrouver face à un prompt de Login alors que tout est sensé fonctionner correctement. C’est ce qu’il m’est arrivé récemment.

Après investigation, nous avons découvert que lorsque une application web :

-          tourne dans un application pool spécifique,

-          avec les crédential d’un user du domaine ou local à la machine,

-          et que l’authentification est mise en « Windows Authentification ».

Il est possible d’avoir l’erreur «HTTP Error 401.1 – Unauthorized: Access is denied due to invalid credentials » lors de la connexion alors que tout semble OK.

Cela peut être du au fait que le service n’est pas enregistré au niveau de l’AD, ou que la machine à été renommée et est donc mal enregistrée dans l’AD.

En effet, pour que Kerbeyros fonctionne correctement, il faut une entrée dans l’AD qui permet au gestionnaire du domaine de re-router correctement les informations de sécurité vers le bon service qu’il a enregistré dans sa table de serveurs.

Ceci est valable pour IIS, SQL Server, …  et tout autre service qui demanderait une authentification de type Windows à l’utilisateur .

Plus d’info ( concernant le cas d’IIS) : http://support.microsoft.com/default.aspx?scid=kb;en-us;871179

Olivier Dri Microsoft

WCF et mise à disposition de classes côté client par réflexion

May 18th, 2010

J’ai réalisé un système plutôt simple permettant à un service WCF de mettre à disposition des classes côté client sans référencer les DLLs contenant ces classes dans le projet client, ni qu’elles soient forcément utilisés dans le code du service, et ce, sans recompiler votre service WCF à chaque fois que vous voulez rendre disponible ou non telle ou telle DLL du service.

A quoi un truc pareil pourrait bien servir… alors plus concrètement, voici un exemple :

Vous créez une méthode dans votre service WCF avec un paramètre d’entrée de type ObjetMetier mais vous souhaitez que le client appelle cette méthode avec un objet de type CustomObjetMetier qui dérive de ObjetMetieret, qui plus est, ne se trouve pas forcément dans le même assembly que la classe ObjetMetier.

Pour corser le tout, vous ne voulez pas référencer les assemblies contenant vos types ObjetMetier et CustomObjetMetier côté client afin d’assurer une meilleure interopérabilité.

Premier problème.. Votre méthode WCF contenant dans sa signature de méthode un paramètre de type ObjetMetier, le WSDL généré ne vous donnera la signature que de l’objet ObjetMetier. Votre client aura donc comme seule ressource l’objet ObjetMetier.

Deuxième problème…… Même si vous arrivez à passer à la méthode du service un objet CustomObjetMetier, il s’efforcera d’essayer de le ‘déserialiser’ en tant qu’objet de type ObjetMetier, ce qui va vous retourner une jolie petite exception..

Bref, pour les interessés par cette problématique, voilà ma solution ci-dessous :

Pré-requis pour ceux qui ne connaitraient pas bien WCF :
- Les classes que vous voudrez rendre disponible côté client doivent implémenter l’attribut [DataContract].
- Les propriétés de ces classes doivent quant à elles implémenter l’attribut [DataMember].

Tout ce qui suit doit être implémenter au niveau de votre service WCF.

1. Tout d’abord il vous faut ajouter des références dans votre projet vers toutes les dll que vous voudrez rendre disponible côté client. Je suppose que tout le monde sait faire..
Vous allez ensuite créer un appSetting dans le fichier config permettant d’énumérer les assemblies dont vous voulez référencer les classes côté client (séparées par des point-virgules) :

<add key="ObjetMetierAssemblies" value="Service.ObjetMetiers.Base;Service.ObjetMetiers.Custom"/>

2. La majeure partie du travail consiste en l’implémentation de la classe ci-dessous :

static class KnownTypesHelper
{
///
/// Gets the types to be known on the client side.
///
/// The provider.
///
public static IEnumerable GetKnownTypes(ICustomAttributeProvider provider)
{
//Types to be known by the client side
List knownTypes = new List();

//Check if assemblies references are needed on the client side
if (ConfigurationSettings.AppSettings["ObjetMetierAssemblies"] == null
|| ConfigurationSettings.AppSettings["ObjetMetierAssemblies"] == string.Empty)
{
//return empty list
return knownTypes;
}

//Get the list of assembly names for the classes needed on the client side
string[] assemblyNamesList = ConfigurationSettings.AppSettings["ObjetMetierAssemblies"].Split(new char[1] { ';' });
foreach (string assemblyName in assemblyNamesList )
{
if (assemblyName != string.Empty)
{
//Get assembly object from assembly name
Assembly assembly = Assembly.LoadWithPartialName(assemblyName );
if (assembly != null)
{
//Get types contained in assembly
foreach (Type type in assembly.GetTypes())
{
foreach (object customAttribute in type.GetCustomAttributes(true))
{
//If the current type has a DataContract attribute,
//we add the type to the result list
if (customAttribute.GetType() == typeof(DataContractAttribute))
{
knownTypes.Add(type);
}

}}}}}

//Return types to be known on the client side

return knownTypes;
}}

Cette classe va lister toutes les assemblies référencées dans le fichier config (cf 1.) pour en extraire les types qui contiennent l’attribut [DataContract] et retourner la liste de ces derniers.

3. Pour finir vous rajoutez au dessus de l’interface de votre service l’attribut ServiceKnownType comme ci-dessous, avec le nom de la méthode et le type de la classe qui contient la méthode :

[ServiceKnownType("GetKnownTypes", typeof(KnownTypesHelper))]
public interface IService
{
[OperationContract]
ObjetMetier DoSomething(ObjetMetier value);
}

Le tour est joué, en ajoutant une référence au service dans un projet client, vous aurez accès à toutes les classes des assemblies listées dans le fichier de config, pour peu qu’elles soient munies de l’attribut [DataContract] .

Julien Dumas Microsoft ,

Windows Mobile : Envoi / Réception d’un SMS

March 16th, 2010

Après avoir passé en revu la création d’un projet de développement Windows Mobile, nous allons faire un overview de la gestion des SMS avec le Compact Framework.

En quelques lignes de codes, vous pouvez très facilement envoyer et recevoir des SMS grâce aux librairies suivantes:

Microsoft.WindowsMobile.PocketOutlook;
Microsoft.WindowsMobile.PocketOutlook.MessageInterception;

Envoi d’un SMS.

string numero = tbTel.Text;
string message = tbMessage.Text;
if (message.Length > 160)
{
MessageBox.Show("Le message ne doit pas excéder 160 Caractères");
}
else
{
_sms = new SmsMessage(numero,message);
_sms.Send();
MessageBox.Show("Le message a été correctement envoyé");
}

Réception d’un SMS.

La réception d’un SMS nécessite la mise en place d’un abonnement à  l’event  MessageReceived lié a l’intercepteur de message (Objet MessageInterceptor).

public void InitializeInterceptor()
 {
 _messageInterceptor = new MessageInterceptor();
 _messageInterceptor.InterceptionAction = InterceptionAction.Notify;
 _messageInterceptor.MessageCondition = 
new MessageCondition(MessageProperty 
.Sender,MessagePropertyComparisonType.Contains ,"7726");"
 _messageInterceptor.MessageReceived 
+= new MessageInterceptorEventHandler(_intercept_MessageReceived);
 }

 

Puis on récupère le message dans l’eventargs , casté en SmsMessage

private void _intercept_MessageReceived
(object sender, MessageInterceptorEventArgs e)
{
SmsMessage message = (SmsMessage) e.Message;
MessageBox.Show(string.Format("Message reçu de: {0}({1})",
message.From.Name,message.From.Address ));
MessageBox.Show("Message: " + message.Body);
}

Note: A partir de ces quelques lignes de codes, vous pouvez donc laisser court à votre imagination. Par exemple, pourquoi ne pas développer un système de retraitement de vos SMS en fonction de mots clés, de vos contacts.

Exemple: avec le morceau de code suivant, seuls les messages commencent par “Test”, seront interceptés et traité.

 _messageInterceptor .MessageCondition =
                new MessageCondition(
                   MessageProperty.Body,
                   MessagePropertyComparisonType.StartsWith,
                   "Test", true);

Bon amusement.

Prochain post: Création et utilisation d’une base de données SQL CE.

Christian Eyler Microsoft

Application Racing FC

March 10th, 2010

logoRFCUL.gifSur le site RTL.lu on peut voir le président du club de football de Luxembourg interviewé au sujet de l’application iPhone que nous avons réalisé. Pour ceux qui comprennent le luxembourgeois, elle est disponible ici :  

http://tele.rtl.lu/waatleeft/videoarchiv/v/20100225/0/10016407/

fdewasmes Java ,

Apple To Bring iPhone OS To New Gadgets

February 23rd, 2010

201002230921.jpg

On its company job board, Apple says it is looking to hire “a talented and inspired manager to lead a team focused on bring-up of iPhone OS on new platforms.” [From Apple To Bring iPhone OS To New Gadgets]

J’ai vu la nouvelle à deux endroits différents ce qui peut laisser croire que ce soit vrai. Si c’est le cas, ca serait vraiment intéressant pour les développeurs ayant décidé de capitaliser sur l’iPhone OS d’atteindre de nouveaux marchés presque sans effort.

fdewasmes Java , ,

Are you choking? Yeah, there’s an app for that, too.

February 23rd, 2010

201002230911.jpgThe free I am choking app could save your life if you are choking on food and can’t speak. If you have your iPhone in hand and can avoid panicking, then you can launch the app, wave your iPhone frantically in front of someone who is nearby, and hope that they can a) read English, and b) follow the instructions in the app to perform the Heimlich Maneuver on you.Actually, this is no joking matter — about 3,000 adults die every year from choking on food. Of course, you’ll need to have the app downloaded and installed on your iPhone or iPod touch before this happens. As fellow TUAW blogger Erica Sadun noted, “by the time you download and install, you could be dead.” [From Are you choking? Yeah, there's an app for that, too.]

Il y a vraiment des applications pour n’importe quoi…

fdewasmes Java ,

EasyAnt : a mi-chemin entre Ant et Maven

February 17th, 2010

Je suis toujours surpris des réponses faites par les candidats quand je pose la question en entretien : “qu’utilisez-vous comme outil de build ?” Beaucoup ne voient pas du tout de quoi je parle mais pour les autres peu utilisent Maven et beaucoup utilisent soit directement l’integration ant de Netbeans ou Ant lui-même. Pourquoi ? Je pense que beaucoup sont rebutés par la courbe d’apprentissage de Maven qui est nettement plus raide que celle de Ant. Par ailleurs, pour ceux qui utilisent pas mal de projets Open Source, ils ont du être sérieusement refroidis par la difficulté de compilation de certains projets surtout quand vous êtes derrière un proxy. Je me rappelle a ce propos de douloureuses expériences lorsque je travaillais avec Jetspeed chez Thales ou encore sur Nuxeo au Parlement Européen.

Donc pour ceux qui n’auraient pas voulu migrer mais voudrait s’éviter tout de même la peine de réinventer à chaque projet leur fichier de build, le projet EasyAnt peut être une alternative. Ca a l’air simple, rapide à mettre en oeuvre et se base sur tout ce qu’on connait déjà.

fdewasmes Java

OneWeekApp ou suivre le développement d’une vraie application iPhone pas à pas

February 17th, 2010

201002171218.jpg

Pour ceux qui auraient raté l’info, Sahil Lavingia, développeur de Color Stream et Twizzle a décidé de créer une application en ‘live’ permettant au monde de voir les progrès qu’il fait jour après jour. Mais ca serait trop simple si le temps que le développeur s’est allouée n’était pas que d’une seule semaine :)

Sahil vient de terminer l’application et de la soumettre.

L’application réalisée est vraiment bien réussie au final et vous pouvez voir tous les détails sur son site dédié à cette expérience.

fdewasmes Java

le street view à la Bing

February 17th, 2010

Comme je ne suis pas forcément fermé à des technologies autres que celles que je manipule ordinairement, je jette parfois un oeil sur ce qui se fait ailleurs. A ce titre, j’ai été impressionné par ce que fait Microsoft avec Photosynth mais aussi seadragon. Microsoft a intégré tout cela au sein de Bing et cela donne une démo très impressionnante qui marque bien l’importance prépondérante des applications basées sur la géolocalisation.


fdewasmes Java, Microsoft ,