Highcharts 4.1.0 : la bibliothèque HTML5 / JavaScript améliore son offre de graphiques avec de nombreuses corr... http://t.co/Pz1IxJd3Or
— IBACK (@ibackservice) 16 Mars 2015
lundi 16 mars 2015
Highcharts 4.1.0 : la bibliothèque HTML5 / JavaScript
Libellés :
Actualités,
Javascript
Pays/territoire :
France
vendredi 13 mars 2015
La fin de Google Code !
Google Code ferme ses portes et laisse la place à GitHub http://t.co/OusotGGLUH pic.twitter.com/CJqrfseGiT
— Frédéric DEBAILLEUL (@fdebailleul) 13 Mars 2015
jQuery UI 1.11.4 est disponible !
jQuery UI 1.11.4 est disponible, version de maintenance pour le code UI du framework JavaScript: jQuery UI 1.1... http://t.co/GX7Av68oq1
— IBACK (@ibackservice) 13 Mars 2015
Libellés :
Actualités,
Javascript
Pays/territoire :
France
mercredi 11 mars 2015
Nouveautés Apple MacBook
Apple présente les nouveaux MacBook 12 pouces, MacBook Air et MacBook Pro, pour le grand bonheur de ses fans: ... http://t.co/zFr0WXRO9g
— IBACK (@ibackservice) 10 Mars 2015
Zoom sur Android 5.1
Android 5.1 : toutes les nouveautés http://t.co/2FdUXdFoDz
— Journal du Net (@JDNSolutions) 11 Mars 2015
Libellés :
Actualités,
Android
Pays/territoire :
France
USB Type-C
USB Type-C : les choses indispensables à savoir http://t.co/mf6xhIdL2R pic.twitter.com/aHrOqwaT41
— CNET France (@cnetfrance) 11 Mars 2015
Apple Watch / Batterie
Apple Watch : la durée de vie de la batterie laisse sceptique http://t.co/yB1JmZg95S
— Journal du Net (@JDNebusiness) 11 Mars 2015
SDK 5.1 d'Android
Le SDK de la version 5.1 d'Android est disponible: Cette nouvelle version d'Android a donc son SDK qui est dis... http://t.co/bO7mchfAKd
— IBACK (@ibackservice) 11 Mars 2015
Libellés :
Actualités,
Android
Pays/territoire :
France
vendredi 27 février 2015
Webix : un framework javascript UI performant !
Trouver un Framework Web performant n'est pas une chose facile.
Une fois trouvé, il est nécessaire que la mise en oeuvre de ce Framework soit la plus "rapide" et la plus "intuitive" possible pour le développeur.
Ce Framework doit aussi correspondre à certaines exigences techniques (support HTML5, support des différents "devices" actuels, collection complète de widgets UI).
Webix correspond à ces exigences.
Ce Framework est proposé en version gratuite et en version pro (payante).
La version gratuite est très complète et permet de couvrir la plupart des besoins.
La version pro propose des fonctionnalités plus avancées.
Nous avons testé ce Framework sur une application qui doit être mise en production.
Voici les résultats de ce premier test :
Possibilité de choisir un thème (skin) pour les widgets UI utilisés.
Quelques thèmes sont fournis - nous avons toujours la possibilité d'ajouter de nouveaux skins (par fichier CSS), voire de modifier les skins existants
Nous avons apprécié la collection de widgets UI très complète.
Chaque widget peut être "facilement" géré (styling, gestion des events, initialisation, validation).
La documentation et les samples sont de qualité.
Vous pouvez aussi vous appuyer sur un Forum "réactif".
Les widgets UI qui travaillent avec des données utilisent des appels AJAX asynchrones par défaut.
Très pratique - ce qui évite d'écrire du code supplémentaire.
A noter que le format des données gérées lors des appels AJAX est "souple" - par exemple support XML ou JSON.
Moins de code à écrire.
Meilleure architecture du code.
Vous distinguez très bien les données à extraire du code UI - Votre projet peut ainsi être bien architecturé.
A noter que vous trouverez sur le site des conseils à ce sujet.
Exécution du code rapide.
Une fois trouvé, il est nécessaire que la mise en oeuvre de ce Framework soit la plus "rapide" et la plus "intuitive" possible pour le développeur.
Ce Framework doit aussi correspondre à certaines exigences techniques (support HTML5, support des différents "devices" actuels, collection complète de widgets UI).
Webix correspond à ces exigences.
Ce Framework est proposé en version gratuite et en version pro (payante).
La version gratuite est très complète et permet de couvrir la plupart des besoins.
La version pro propose des fonctionnalités plus avancées.
Nous avons testé ce Framework sur une application qui doit être mise en production.
Voici les résultats de ce premier test :
Quelques thèmes sont fournis - nous avons toujours la possibilité d'ajouter de nouveaux skins (par fichier CSS), voire de modifier les skins existants
Nous avons apprécié la collection de widgets UI très complète.Chaque widget peut être "facilement" géré (styling, gestion des events, initialisation, validation).
La documentation et les samples sont de qualité.Vous pouvez aussi vous appuyer sur un Forum "réactif".
Les widgets UI qui travaillent avec des données utilisent des appels AJAX asynchrones par défaut.Très pratique - ce qui évite d'écrire du code supplémentaire.
A noter que le format des données gérées lors des appels AJAX est "souple" - par exemple support XML ou JSON.
Moins de code à écrire.
Meilleure architecture du code.Vous distinguez très bien les données à extraire du code UI - Votre projet peut ainsi être bien architecturé.
A noter que vous trouverez sur le site des conseils à ce sujet.
Exécution du code rapide.vendredi 6 février 2015
Serveur Web / FTP et Linux
Vous avez fait l’acquisition d’un super hébergement externe
avec une pré-installation de Linux.
C'est une bonne chose.
Mais comment installer et paramétrer un serveur Web et
FTP sur cet hébergement ?
Car le but est de pouvoir utiliser au mieux votre hébergement.
Voici une procédure qui a été testée dans un environnement
de production (Ubuntu Serveur 12.04).
Nous partons du principe que vous êtes connectés en ROOT (plus facile pour la suite du tutoriel).
Pour commencer, mettre à jour la liste des Packages : apt-get
update
Créons ensuite l'utilisateur non « ROOT » qui va être utilisé
pour l'accès FTP : adduser nom_user
Le mot de passe va être demandé : mon_pwd
Retapez le mot de passe.
L'installation
du serveur FTP
apt-get install
proftpd
Comment configurer notre serveur FTP ?
Comment configurer notre serveur FTP ?
vi
/etc/proftpd/proftpd.conf
Nous partons du principe que vous connaissez suffisamment l'éditeur de texte vi.
Mettre à "off" le paramètre "UseIpv6" (L'ipv6 peut être une source d'erreur, en fonction des routeurs des hébergeurs).
Chercher la Ligne "#Use this to jail all users in their homes" et dé-commenter "DefaultRoot".
Cela empêche les utilisateurs de se déplacer dans les niveaux supérieurs de l’arborescence.
Mettre à "off" le paramètre "UseIpv6" (L'ipv6 peut être une source d'erreur, en fonction des routeurs des hébergeurs).
Chercher la Ligne "#Use this to jail all users in their homes" et dé-commenter "DefaultRoot".
Cela empêche les utilisateurs de se déplacer dans les niveaux supérieurs de l’arborescence.
L'installation
du serveur Web (LAMP)
apt-get install
lamp-server^
Note : "^"
: ce n'est pas une faute de frappe.
Suivre les étapes d'installation : le mot de passe root de mysql va être
demandé.
Ne pas oublier d'installer phpmyadmin : apt-get install phpmyadmin
Configurer automatiquement apache2 pendant l'installation en cochant
"apache2" avec la touche espace, lorsque cela est demandé.
Association du
dossier Home de l'utilisateur et apache
Cette étape est nécessaire pour pouvoir accéder aux
fichiers sources de l'application web à partir de l'utilisateur.
Copier le fichier de configuration par défaut comme backup :
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default-backup
Modifier le fichier default : vi /etc/apache2/sites-available/default
Modifier les 2 entrées "/var/www" et "/var/www/" en
"/home/nom_user" et "/home/nom_user/".
Valider et quitter.
Relancer le serveur : service apache2 restart
Créer un fichier "index.html" de test puis l'uploader sur le
serveur ftp en utilisant les identifiants de l'utilisateur.
Tester la page sur un navigateur internet.
Attribution à
apache les droits d'écriture sur le dossier d'utilisateur
- Changer le propriétaire du dossier :
chown –R nom_user:www-data /home/nom_user
nom_user étant l’utilisateur et www-data pour apache.
- Donner les droits d’écriture, d’exécution et de lecture :
chmod –R ug=rwxs /home/nom_user
-R : Récurrence ; C'est-à-dire s’applique au dossier, aux sous
dossiers / fichiers
Et voilà nos serveurs Web et FTP sont opérationnels !
Liste des processus sous SQL SERVER
Voici un script fort utile pour lister les processus sous SQL SERVER.
Script
Script
SELECT S.*, C.*, R.*,
MRS.dbid AS
DERNIERE_BD_REQUETE, MRS.text AS
DERNIERE_REQUETE,
Q.dbid AS BD_REQUETE, Q.text AS REQUETE,
P.query_plan AS
PLAN_REQUETE
FROM sys.dm_exec_sessions
AS S
LEFT OUTER JOIN sys.dm_exec_connections
AS C
ON S.session_id = C.session_id
OUTER APPLY
sys.dm_exec_sql_text(most_recent_sql_handle) AS MRS
LEFT OUTER JOIN sys.dm_exec_requests
AS R
ON S.session_id = R.session_id
OUTER APPLY
sys.dm_exec_sql_text(sql_handle) AS Q
OUTER APPLY
sys.dm_exec_query_plan(plan_handle) AS P;
Un exemple d'utilité de ce script : vous devez supprimer ("killer") un processus - il vous suffit juste de récupérer l'identifiant du processus dans la liste.
lundi 2 février 2015
Caisse enregistreuse tactile et Cloud
Caisse
enregistreuse tactile et Cloud : à la croisée des chemins
Qu’est-ce que Cloud apporte concrètement à
nos caisses enregistreuses tactiles ? Il nous faudra d’abord cerner comment
fonctionne un logiciel Cloud.
Cloud est un outil big data – aucun débat à ce propos. Avec ce système, les données d’une entité sont stockées sur un serveur distant. Outre la capacité de stockage, le niveau de sécurité est une exigence phare pour tout serveur Cloud.
Retour donc sur l’innovation apportée par Cloud et sur l’intérêt de stocker les données d’une caisse enregistreuse dans un serveur Cloud.
Le
fonctionnement de Cloud
Comme évoqué ci-dessus, le niveau de sécurité élevé est la première raison qui convainc les nombreux professionnels utilisant à Cloud. Mais il existe d’autres raisons pratiques.
On pense notamment à la réactivité d’un serveur Cloud. Ça se traduit par la fluidité de l’accès aux données, mais pas seulement.
L’entité utilisant Cloud ne se prend pas la tête pour pas mal de problèmes informatiques. Le serveur peut lui-même se charger des tâches liées à la maintenance.
Cloud est en outre l’allié des professionnels qui se déplacent beaucoup. Les données sont consultables en temps réel, y compris depuis un Smartphone ou une tablette.
Sinon, Cloud vient maximiser, en quelque sorte, la performance d’une caisse enregistreuse tactile, en matière de stockage de données, mas pas seulement.
La place de Cloud dans le fonctionnement d’une caisse enregistreuse
La caisse enregistreuse tactile est un outil informatique comme un autre. Grâce à un bon logiciel de caisse, elle emmagasine et exploite les données d’un commerce.
Sans Cloud, la caisse enregistreuse est toujours performante. En effet, en exploitant ses différentes données, elle les fait interagir entre elles.
Concrètement, les données du stock impactent sur celles de la gestion de la clientèle, par exemple en termes de préférences. Cette interconnexion de données est exploitée par les CHR et les salons de coiffure en particulier pour promouvoir une politique ciblée.
Alors, tout ce que la caisse enregistreuse est capable de faire, elle le fait aussi quand les données sont stockées sur un serveur distant. D’un autre côté, Cloud devient un peu comme un système concurrent d’Ethernet.
Ethernet permet à plusieurs caisses d’un
commerce d’émettre sur une ligne unique leurs données. Chacune peut exploiter
voire modifier les données émises par d’autres. C’est très pratique dans les
restaurants.
Alors, quand les données sont sur serveur
Cloud, toutes les caisses d’un commerce y ont accès. L’utilisateur d’une des caisses
exploitera les données dont il a besoin, et son action impactera sur l’état de
la base de données.
vendredi 30 janvier 2015
Pourquoi opter pour le développement informatique en offshore ?
Il va de soi que la principale raison est
d’ordre financier.
En France, même en faisant appel à un freelance – ce qui
suppose l’absence de charges salariales – la facture est toujours salée.
Mais au-delà de la considération financière,
il y a aussi la recherche de compétences et de spécialités. Nous
« baignons » au milieu d’outils technologiques performants, eux ont fait
table rase de la notion même de frontière.
Quelques chiffres à titre de comparatif de prix
Ceci est une ébauche de comparatif des prix d’une prestation de développement informatique. On notera surtout qu’en France, les prix varient considérablement en fonction des villes et des régions, Paris étant toujours au sommet du podium.
En embauchant un développeur débutant, une entreprise devra débourser au minimum 200 € par jour de salaire. À cela s’ajoutent les charges sociales et fiscales.
Dans certains domaines, le recours à un freelance est une option rentable. Le domaine de l’informatique, et surtout du développement, échappe à cette réalité.
En moyenne, un développeur français facture sa prestation entre 300 et 500 € par jour. Dans certaines régions, les prix peuvent descendre en dessous de 300 €. Il faut aussi savoir que les tarifs dépendent du diplôme et de l’expérience.
En revanche, un développeur offshore facture sa prestation en moyenne à 140 € par jour. Ça descend à 70-80 € par jour dans certains pays asiatiques et africains notamment.
La création de site internet pas cher, c’est bien beau. Mais qu’en est-il de la qualité du résultat ?
Le développeur et le client sont coresponsables de la qualité du résultat
On sait tous que le développeur offshore doit respecter à la lettre les consignes du cahier des charges. Il déploiera son expérience pour exploiter les meilleurs outils adéquats aux attentes de ses clients.
Mais le développeur offshore n’est pas à blâmer si les consignes du cahier de charges présentent des ambigüités. Le premier responsable de la qualité du résultat, c’est le client lui-même.
Élaborer un cahier des charges est assez complexe. Le client doit indiquer toutes les contraintes avec lesquelles le développeur devra travailler.
Ces contraintes, ce sont la technologie, le design, la durée de la prestation, les fonctionnalités à inclure et tout un tas de paramètres techniques. Bref, le cahier des charges est un document qui se doit d’être très précis.
L’indécision du cahier de charge aura un effet boomerang contre le client lui-même. Car le développeur ne considérera que les informations qu’il contient, et fera le travail de la manière qu’il juge la plus adaptée ou la plus rapide.
L’offshoring, c’est une affaire financièrement intéressante. Mais l’entreprise doit scruter au préalable la meilleure destination offshore pour une prestation donnée.
Par exemple, l’Afrique francophone du Maghreb, Madagascar et Maurice sont parmi les destinations prisées des Français pour la rédaction web offshore. En revanche, il n’est pas rare que les connaisseurs de l’offshoring conseillent aux Français de se tourner plus vers l’Asie et l’Europe de l’Est.
vendredi 23 janvier 2015
Conversion Pixels / Inches
Une image / photo peut être affichée, scannée ou imprimée.
La taille réelle de cette image / photo va sensiblement varier selon le <device> utilisé.
L'unité utilisée (pixels, inches) pour exprimer la taille de l'image va aussi dépendre du <device> sur lequel l'image sera traitée.
En tant que développeur nous devons quelque fois faire des conversions sur des images (surtout si nous devons "propager" ces images sur différents <devices>) afin d'obtenir le meilleur rendu possible.
Vous trouverez cet outil très pratique :
Cliquez ici
La taille réelle de cette image / photo va sensiblement varier selon le <device> utilisé.
L'unité utilisée (pixels, inches) pour exprimer la taille de l'image va aussi dépendre du <device> sur lequel l'image sera traitée.
En tant que développeur nous devons quelque fois faire des conversions sur des images (surtout si nous devons "propager" ces images sur différents <devices>) afin d'obtenir le meilleur rendu possible.
Vous trouverez cet outil très pratique :
Cliquez ici
Convertisseur décimal, hexadécimal, binaire
Qui n'a pas eu besoin un jour de faire une conversion en décimale, binaire ou hexadécimale ?
En tant que développeur, nous nous sommes tous confrontés à ce problème.
Voici un outil très utile.
En tant que développeur, nous nous sommes tous confrontés à ce problème.
Voici un outil très utile.
jeudi 22 janvier 2015
Formater votre SQL !
Voici une astuce pour afficher du SQL correctement indenté, bref bien formaté.
Cliquez ici
Une fois votre code SQL saisi, cliquez sur le bouton <Format SQL>.
Votre code SQL est affiché dans une fenêtre parfaitement formaté, prêt à l'emploi.
Vous avez aussi la possibilité de copier le SQL formaté dans le presse-papier ou de l'imprimer.
Une astuce bien pratique.
Cliquez ici
Une fois votre code SQL saisi, cliquez sur le bouton <Format SQL>.
Votre code SQL est affiché dans une fenêtre parfaitement formaté, prêt à l'emploi.
Vous avez aussi la possibilité de copier le SQL formaté dans le presse-papier ou de l'imprimer.
Une astuce bien pratique.
Pays/territoire :
France
mercredi 21 janvier 2015
JavaFX / ANT / MSI : le trio gagnant !
Wix est un ensemble d'outils qui permettent de créer le <Windows Installer> de votre application (.MSI) à partir de documents XML.
Ces documents XML (.WXS, .WXL par exemple) vont "décrire" l'installation de votre application.
Une fois Wix installé, intéressons - nous au fichier <BUILD.XML> de notre application JavaFX.
Pour rappel, ce fichier va "builder" votre application et générer dans notre cas le fichier MSI.
L'exécution de ce fichier se fait par ANT.
Voici un extrait d'un fichier <BUILD.XML> type :
<?xml version="1.0" encoding="UTF-8"?>
<project name="mon application" default="do-deploy" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="classpath" location="chemin JDK\jre\lib\ext\jfxrt.jar;" />
<target name="init-fx-tasks">
<path id="fxant">
<filelist>
<file name="${basedir}" />
</filelist>
</path>
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml" uri="javafx:com.sun.javafx.tools.ant" classpathref="fxant" classpath="chemin JDK\lib\ant-javafx.jar" />
</target>
<target name="setup-staging-area">
<delete dir="externalLibs" />
<delete dir="project" />
<delete dir="projectRefs" />
<mkdir dir="externalLibs" />
<copy todir="externalLibs">
<fileset dir="chemin mon projet\lib">
<include name="*" />
</fileset>
</copy>
<mkdir dir="project" />
<copy todir="project">
<fileset dir="chemin mon projet">
<include name="src/**" />
</fileset>
</copy>
<mkdir dir="projectRefs" />
</target>
<target name='do-compile'>
<delete dir="build" />
<mkdir dir="build/src" />
<mkdir dir="build/lib" />
<mkdir dir="build/classes" />
<copy todir="build/lib">
<fileset dir="externalLibs">
</fileset>
</copy>
<copy todir="build/src">
<fileset dir="project/src">
<include name="**/*" />
</fileset>
</copy>
<javac includeantruntime="false" source="1.8" target="1.8" srcdir="build/src" destdir="build/classes" encoding="Cp1252">
<classpath>
<fileset dir="build/lib">
<include name="*" />
</fileset>
</classpath>
</javac>
<copy todir="build/classes">
<fileset dir="project/src">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="do-deploy" depends="setup-staging-area, do-compile, init-fx-tasks">
<delete file="dist" />
<delete file="deploy" />
<mkdir dir="dist" />
<mkdir dir="dist/lib" />
<copy todir="dist/lib">
<fileset dir="externalLibs">
<include name="*" />
</fileset>
</copy>
<mkdir dir="dist/resources" />
<copy todir="dist/resources">
<fileset dir="../resources" />
</copy>
<mkdir dir="package" />
<fx:resources id="appRes">
<fx:fileset dir="dist" includes="mon_application.jar" />
<fx:fileset dir="dist" includes="lib/*" />
<fx:fileset dir="dist" includes="resources/**" />
</fx:resources>
<fx:application id="fxApplication" name="MonApplication" mainClass="application.Main" version="x.x.x" />
<mkdir dir="build/classes/META-INF" />
<fx:jar destfile="dist/mon_application.jar">
<fx:application refid="fxApplication" />
<fileset dir="build/classes" />
<fx:resources refid="appRes" />
<manifest>
<attribute name="Implementation-Vendor" value="Mon Entreprise" />
<attribute name="Implementation-Title" value="MonApplication" />
<attribute name="Implementation-Version" value="x.x.x" />
<attribute name="JavaFX-Feature-Proxy" value="None" />
</manifest>
</fx:jar>
<mkdir dir="deploy" />
<fx:deploy verbose="true" embedJNLP="false" extension="false" includeDT="false" offlineAllowed="true" outdir="${basedir}/deploy" outfile="mon_application" nativeBundles="msi" updatemode="background">
<fx:info title="mon application" vendor="mon entreprise" />
<fx:application refId="fxApplication" />
<fx:resources refid="appRes" />
<fx:info vendor="mon entreprise" description="deploiement de mon application" />
</fx:deploy>
</target>*
</project>
Nous ne rentrerons pas dans le détail de ce fichier mais vous noterez que la balise <fx:deploy> permet de spécifier le type de "bundle" à savoir dans notre cas le type "MSI".
Exécutez ce fichier <BUILD.XML> (après quelques customisations bien sûr) : votre fichier MSI est généré !
Pays/territoire :
France
samedi 17 janvier 2015
Java / Log4J : Console & fichier LOG
LOG4J n'est plus à présenter : API puissante et indispensable pour tout développeur Java qui souhaite tracer certaines informations.
Nous allons nous attarder sur la façon "d'orienter" les traces vers la console et vers un fichier LOG.
Exemple d'un fichier log4j.properties.
Pour rappel ce fichier est le principal fichier pour le paramétrage de LOG4J.
log4j.rootLogger= , A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=INFO
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.File= ${user.home}/mon_fichier.log
log4j.appender.A2.MaxFileSize=5000KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} %3x - %m%n
Nous allons nous attarder sur la façon "d'orienter" les traces vers la console et vers un fichier LOG.
Exemple d'un fichier log4j.properties.
Pour rappel ce fichier est le principal fichier pour le paramétrage de LOG4J.
log4j.rootLogger= , A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=INFO
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.File= ${user.home}/mon_fichier.log
log4j.appender.A2.MaxFileSize=5000KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} %3x - %m%n
Dans cet exemple nous utilisons 2 "loggers" (autrement dit 2 "canaux" pour tracer les informations).
Le premier logger (A1) est la console.
Toutes les informations de type "INFO" seront tracées dans la console avec un format particulier (ConversionPattern).
Le deuxième logger (A2) : il va permettre de tracer les informations de type "INFO" dans un fichier LOG (mon_fichier.log).
A noter l'utilisation de ${user.home} qui spécifie le répertoire "HOME" de l'utilisateur.
Ce fichier est de type "RollingFile" : lorsque sa taille sera de 5000 KB (MaxFileSize) il sera automatiquement "vidé".
Le gros avantage de cette méthode est de pouvoir contrôler la taille des fichiers LOG.
L'inconvénient est de bien définir la taille du fichier selon nos besoins.
LOG4J permet aussi d'archiver ce type de fichier lorsqu'il a atteint la taille maximale. La propriété <MaxBackupIndex> définie le nombre de fichiers "archives" souhaité.
Les informations tracées dans le fichier sont formatées (ConversionPattern).
Java / Design Pattern Stratégie
Le pattern stratégie est utile pour des situations où il est nécessaire de choisir dynamiquement un algorithme à exécuter.
Vous mettez en place une stratégie dans l'exécution de votre code selon le contexte.
Par exemple : vous souhaitez gérer la première exécution d'une application nouvellement installée.
Lors de la première exécution, il est souvent demandé de saisir certaines informations utiles à l'application.
Il peut arriver que vous stoppiez pour différentes raisons cette saisie d'informations.
Lors d'une prochaine exécution de votre application, il vous sera demandé de compléter cette saisie d'informations inachevée.
Le pattern stratégie peut être utile pour définir quelles sont les données restantes à saisir.
Voici un exemple d'implémentation en Java.
Définissons d'abord notre <Strategy Manager>, c'est notre point d'entrée.
public class StrategyManager {
private static StrategyManager instance = null;
// contexte d'exécution
private StrategyContext ctx;
/**
* @return instance StrategyManager
*
* @throws Exception
*/
public static StrategyManager getInstance() throws Exception {
if (instance == null)
instance = new StrategyManager();
return instance;
}
/**
* exécuter stratégie de lancement
*
* @throws Exception
*/
public void execCtx() throws Exception {
ctx.exec();
}
/**
* @throws Exception
*/
private StrategyManager()
throws Exception {
ctx = new StrategyContext();
boolean etat = getEtat();
if (etat == 1)
ctx.setStrategy(new Launch1());
else if (etat == 2)
ctx.setStrategy(new Launch2());
else
// erreur
}
private int getEtat() {
int etat = 0;
// définir l'état qui correspond au contexte que vous souhaitez traiter
return etat;
}
}
Vous avez noté que nous avons utilisé un autre pattern, le pattern Singleton. De cette façon nous manipulons qu'une seule instance de notre manager.
Définissons la gestion du contexte <Strategy Context>.
public class StrategyContext {
private IStrategy strategy;
/**
* fixe la stratégie
*
* @param strategy
* : stratégie à appliquer
*/
public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}
/**
* exécuter stratégie sélectionnée
*
* @return
* @throws Exception
*/
public boolean exec() throws Exception {
return strategy.go();
}
}
public interface IStrategy {
/**
* exécuter le code propre à la stratégie choisie
*
* @throws Exception
*/
public boolean go() throws Exception;
}
Vous mettez en place une stratégie dans l'exécution de votre code selon le contexte.
Par exemple : vous souhaitez gérer la première exécution d'une application nouvellement installée.
Lors de la première exécution, il est souvent demandé de saisir certaines informations utiles à l'application.
Il peut arriver que vous stoppiez pour différentes raisons cette saisie d'informations.
Lors d'une prochaine exécution de votre application, il vous sera demandé de compléter cette saisie d'informations inachevée.
Le pattern stratégie peut être utile pour définir quelles sont les données restantes à saisir.
Voici un exemple d'implémentation en Java.
Définissons d'abord notre <Strategy Manager>, c'est notre point d'entrée.
public class StrategyManager {
private static StrategyManager instance = null;
// contexte d'exécution
private StrategyContext ctx;
/**
* @return instance StrategyManager
*
* @throws Exception
*/
public static StrategyManager getInstance() throws Exception {
if (instance == null)
instance = new StrategyManager();
return instance;
}
/**
* exécuter stratégie de lancement
*
* @throws Exception
*/
public void execCtx() throws Exception {
ctx.exec();
}
/**
* @throws Exception
*/
private StrategyManager()
throws Exception {
ctx = new StrategyContext();
boolean etat = getEtat();
if (etat == 1)
ctx.setStrategy(new Launch1());
else if (etat == 2)
ctx.setStrategy(new Launch2());
else
// erreur
}
private int getEtat() {
int etat = 0;
// définir l'état qui correspond au contexte que vous souhaitez traiter
return etat;
}
}
Vous avez noté que nous avons utilisé un autre pattern, le pattern Singleton. De cette façon nous manipulons qu'une seule instance de notre manager.
Définissons la gestion du contexte <Strategy Context>.
public class StrategyContext {
private IStrategy strategy;
/**
* fixe la stratégie
*
* @param strategy
* : stratégie à appliquer
*/
public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}
/**
* exécuter stratégie sélectionnée
*
* @return
* @throws Exception
*/
public boolean exec() throws Exception {
return strategy.go();
}
}
public interface IStrategy {
/**
* exécuter le code propre à la stratégie choisie
*
* @throws Exception
*/
public boolean go() throws Exception;
}
Définissons maintenant les différents algorithmes qui peuvent être utilisés selon le contexte.
public class Launch1 implements IStrategy {
public Launch1() {
super();
}
/**
* exécuter stratégie lancement de type 1
*/
@Override
public boolean go() throws Exception {
boolean resp = true;
// votre code...
return resp;
}
}
public class Launch2 implements IStrategy {
public Launch2() {
super();
}
/**
* exécuter stratégie lancement de type 2
*/
@Override
public boolean go() throws Exception {
boolean resp = true;
// votre code...
return resp;
}
}
La dernière étape : comment utiliser notre pattern stratégie ?
StrategyManager instance = StrategyManager.getInstance();
boolean resp = instance.execCtx();
if (!resp) {
// erreur
}
Un des avantages de ce pattern est la possibilité d'ajouter ou de modifier un algorithme facilement sans réellement toucher au "corps" du traitement.
mercredi 14 janvier 2015
Comment passer en mode Développeur sur votre appareil ANDROID ?
Vous souhaitez tester votre application sur votre appareil ANDROID version >= 4.0 ?
Pour cela il est nécessaire que votre appareil soit en mode "Développeur".
Sinon votre appareil ne sera pas "reconnu" par votre IDE préféré.
Hors par défaut ce "mode" n'est pas actif sur votre appareil.
Pour l'activer, dans l'application "Paramètres" / onglet "Général" / option "A propos de l'appareil" :
Tapez 7 fois sur le "numéro de version" (build) -> vous êtes en mode "Développeur".
Revenez sur l'onglet "général" : une nouvelle option est apparue -> "Options de développement".
Cliquez sur cette option : activer le Débogage USB.
Une fois votre appareil en mode "Développeur", branchez votre appareil (via le cable USB) sur votre PC / MAC.
Sous Windows, veuillez à installer le driver USB Google (via le SDK manager).
Lancez par exemple Android Studio.
Dans la liste des "DEVICES" doit apparaître votre appareil.
Exécutez votre application : option "Choose a running device" (par défaut votre appareil est sélectionné sinon veuillez en choisir un dans la liste proposée).
Votre application est automatiquement exécutée sur votre appareil !
Evidemment cette "facilité" ne doit pas supplantée l'exécution de votre application sur l'émulateur qui reste importante.
Pour cela il est nécessaire que votre appareil soit en mode "Développeur".
Sinon votre appareil ne sera pas "reconnu" par votre IDE préféré.
Hors par défaut ce "mode" n'est pas actif sur votre appareil.
Pour l'activer, dans l'application "Paramètres" / onglet "Général" / option "A propos de l'appareil" :
Tapez 7 fois sur le "numéro de version" (build) -> vous êtes en mode "Développeur".
Revenez sur l'onglet "général" : une nouvelle option est apparue -> "Options de développement".
Cliquez sur cette option : activer le Débogage USB.
Une fois votre appareil en mode "Développeur", branchez votre appareil (via le cable USB) sur votre PC / MAC.
Sous Windows, veuillez à installer le driver USB Google (via le SDK manager).
Lancez par exemple Android Studio.
Dans la liste des "DEVICES" doit apparaître votre appareil.
Exécutez votre application : option "Choose a running device" (par défaut votre appareil est sélectionné sinon veuillez en choisir un dans la liste proposée).
Votre application est automatiquement exécutée sur votre appareil !
Evidemment cette "facilité" ne doit pas supplantée l'exécution de votre application sur l'émulateur qui reste importante.
Inscription à :
Commentaires (Atom)










