Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

Un juste retour dans l’Histoire

, , , ...

Il est rare que je parle de politique. Non pas que cela ne m’intéresse pas, mais disons que chacun a son avis et peut dire ce qu’il veut tant le domaine est vaste et impénétrable tant qu’on n’est pas spécialisé dans ce dit terrain.
C’est encore plus inhabituel lorsque je le fais sur mon blog privé alors que je le destine plus comme un aide mémoire dédié à l’informatique générale ou spécialisée mais…

Souvenons-nous de la création du Benelux, que je considère comme un rapprochement à la formation de la CEE, menant par la suite encore à l’UE (oui je sais, je brode et je raccourcis beaucoup ! Même trop !) et l’actuelle Europe des 27.

Quoi de plus normal que de voir alors un homme politique d’un de ces pays à la première présidence de l’Europe ! Herman Van Rompuy, un homme politique sage et de l’ancienne « boutique », vas-t-il de ce pas prendre la tête de l’Europe ? Nous le serons dans quelques heures mais déjà les médias s’arrachent les suppositions les plus folles alors que les informations officielles sont très rares (bien qu’à l’heure actuelle nous avons la confirmation que la Suède soutienne la candidature de l’homme politique).

Soyons zen, nous aurons (en tant que belges) bientôt un homme à la tête de l’Europe, mais la Belgique perd un sage qui a maintenu jusqu’à présent le navire politique belge.

Affaire à suivre (mais pas sur ce blog).


Déblocage de comptes en masse

, , , ...

Il arrive que pour des raisons de sécurité, une multitude de compte soient bloqués (Account is locked out) dans l’Active Directory.
Il faut donc par la suite les débloquer et on ne dispose pas toujours d’une console etc. Et un script en VBS peut nous aider.

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Début de la déclaration des variables
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select AdsPath from 'LDAP://OU=Mes-Users,DC=Mon-Reseau,DC=Mon-Reseau-Connexion " & "where objectClass='user'"
Set objRecordSet = objCommand.Execute
'Fin de la déclaration des variables
'Compteur
monCompteur = 0
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

'Sélection des comptes bloqués (boucle)
With objRecordSet
While Not .EOF
AdsPath = .Fields("AdsPath")
Set objItem = GetObject(AdsPath)
If objItem.IsAccountLocked = True Then ' True peut aussi avoir la valeur-1
' Routine pour débloquer les comptes'
objItem.isAccountLocked = 0 ' False
objItem.setInfo
'Fin de la routine pour débloquer les comptes
monCompteur = monCompteur + 1
Dim maVariable
If maVariable = "" Then
maVariable = objItem.sAMAccountName & " unlocked" & vbCRLF
else
maVariable = objItem.sAMAccountName & " unlocked" & vbCRLF & maVariable
End If
Else
'ADS_UF_LOCKOUT desactive
End If
.Movenext
Wend
End With

WScript.Echo Date() & vbTab & Time() & vbTab & "Nb. de compte désactivé:" & monCompteur & vbCRLF & _
"Liste des comptes désactivé: " & VbCRLF & maVariable

A lancer avec un compte administrateur et bien entendu il faut personnaliser le chemin LDAP… Cela peut se faire via Adsi Edit pour avoir le chemin complet !


Déploiement par décompression

, , , ...

Il arrive qu’en place et lieu de déployer par script, par GPO etc. il ne faille « que » décompresser une application dans un dossier (avec ou sans droits sur celui-ci…) et créer un raccourcis.

Simple comme bonjour, mais lorsqu’on utilise la gravure, oops, on se rend compte que l’idée est bonne mais que le nom de fichier d’un contenant est très (trop, beaucoup trop) long (j’entends par là, plus de 256 caractères !). Passons sur le fait que le nommage n’est pas « idéal », ou encore d’autres aspects.

Voyons maintenant comment déployer cela :
  • télécharger un logiciel gratuit (cela me change du libre) : Freebyte Zip ;
  • créer une nouvelle archive en exécutant la dite application, cette archive contiendra donc tous vos « documents », applications, etc. ;
  • créer ensuite un fichier BATCH contenant cette unique ligne :
    START /WAIT FBZIP.EXE -E -P REPERTOIRE_ZIP.ZIP C:\REPERTOIRE_DESTINATION

  • créer ensuite un Autorun.inf ;
  • gravez votre compilation et tester.

Vous devriez avoir au bout de quelques secondes (selon la rapidité de votre PC) un écran MS-DOS ainsi qu’une fenêtre Feebyte Zip. Après la décompression, vous avez alors les écrans qui disparaissent et votre « document », logiciel ou autre sont décompressés dans le répertoire adéquat.
Bien entendu, vous pouvez l’exécuter avec les droits administrateurs… Ce qui est largement recommandé !

Installation silencieuse d’une application

, , , ...

Il arrive parfois qu’on doivent installer des logiciels sans interactions humaines… Cette méthode d’installation s’appelle « silent » ou « stealth ».

Pour ce faire, nous utilisons un fichier MSI… Nous savons que le MSI utilise le MSIExec… Logiciel de Microsoft pour installer ces dits logiciels est appelé « Microsoft Installer » (plus sympa aussi). Nous savons aussi ses paramètres et sa syntaxe :



msiexec /Option <Required Parameter> [Optional Parameter]

Install Options
</package | /i> <Product.msi>
Installs or configures a product
/a <Product.msi>
Administrative install - Installs a product on the network
/j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]
Advertises a product - m to all users, u to current user
</uninstall | /x> <Product.msi | ProductCode>
Uninstalls the product
Display Options
/quiet
Quiet mode, no user interaction
/passive
Unattended mode - progress bar only
/q[n|b|r|f]
Sets user interface level
n - No UI
b - Basic UI
r - Reduced UI
f - Full UI (default)
/help
Help information
Restart Options
/norestart
Do not restart after the installation is complete
/promptrestart
Prompts the user for restart if necessary
/forcerestart
Always restart the computer after installation
Logging Options
/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>
i - Status messages
w - Nonfatal warnings
e - All error messages
a - Start up of actions
r - Action-specific records
u - User requests
c - Initial UI parameters
m - Out-of-memory or fatal exit information
o - Out-of-disk-space messages
p - Terminal properties
v - Verbose output
x - Extra debugging information
+ - Append to existing log file
! - Flush each line to the log
* - Log all information, except for v and x options
/log <LogFile>
Equivalent of /l* <LogFile>
Update Options
/update <Update1.msp>[;Update2.msp]
Applies update(s)
/uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>
Remove update(s) for a product
Repair Options
/f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>
Repairs a product
p - only if file is missing
o - if file is missing or an older version is installed (default)
e - if file is missing or an equal or older version is installed
d - if file is missing or a different version is installed
c - if file is missing or checksum does not match the calculated value
a - forces all files to be reinstalled
u - all required user-specific registry entries (default)
m - all required computer-specific registry entries (default)
s - all existing shortcuts (default)
v - runs from source and recaches local package
Setting Public Properties
[PROPERTY=PropertyValue]


En règle générale nous avons donc la ligne de commande suivante
MSIEXEC.EXE /i INSTALL.MSI /qn

Cependant, et bien souvent, les utilisateurs ne sont pas adminstrateur de leurs postes. Et les applications se font de plus en plus lourde pour les distribuer à travers le réseau via des GPO.
Par là même il faut donc utiliser des droits d’un profil administrateur… Cela peut se faire de deux manières :
passage de paramètres à un fichier BATCH, les arguments sont stockés par exemple dans un exécutable (non visible à l’utilisateur donc) et transmis par %1 et %2 dans le BATCH
utilisation de la commande RUNASWAIT d’AutoIT avec un chargement de profil :
RunAsWait($s_utilisateur, $s_reseau, $s_motdepasse, 4, "MSIEXEC.EXE /i INSTALL.MSI /qn", @ScriptDir, @SW_Hide)

L’installation continuera dès la fin de la commande. Il est tout aussi utile alors d’utiliser la commande ProgressSet afin de faire patienter l’utilisateur (il est toujours recommandé de ne pas faire d’autres actions lors d’une installation).

Dans la continuité, il faut changer les droits du dossier… Simplement avec script en MS-DOS.

Simple et efficace. Mais surtout convivial pour l’utilisateur : il ne se préoccupe pas de l’installation, tout se fait « automatiquement » avec le SI derrière :smile:

Added

Et hop… Bon cela faisait longtemps que je n’avais pas écrit un article. Et peut-être celui-ci est-il décousu du reste, mais bon. Faut bien se refaire non ?

Et si nous faisions un point sur les logiciels libres que j’ai découvert (ou qu’on m’a fait découvrir) ? (Je rajoute que j’ai ressortis pour l’occasion un logiciel non libre mais gratuit: Windows Live Writer)

  • OpenProj: un clone de Microsoft Project,
  • OSFlv: un lecteur de fichier FLV,
  • CamStudio: enregistre les actions de l’écran en film,
  • Cu3er: un cube 3D pour le web,

Et tout cela en quelques semaines. On peut faire mieux mais c’est plus cher.

Pourquoi une telle présentation alors que je ne fais cela qu’une fois par année ? Car j’ai lancé hier un troll sur Twitter… Les réactions n’ont pas trainé, mais c’était aussi pour dire que je n’étais pas passé du coté obscure de la force (et non je n’ai rien contre le logiciels propriétaires, ils sont excellent aussi…).

D’avis je pense que la récalcitrante n’est pas au niveau de la DSI, mais bien de l’utilisateur sur le changement. Tout le monde s’oppose au changement. Dommage, mais n’est-il pas “mieux” d’avoir des utilisateurs contents qu’un DSI heureux ? (le résumé de la réaction au troll)

Bien entendu j’aurais pu réaliser d’emblée un autre troll, mais je me suis retenu: “pourquoi les standards ne seront jamais en entreprise” (ou du moins majoritairement) ?

Framework, utilisation globale

, , , ...

J’ai pu suivre récemment une formation d’un AGL (dénommé Windev pour ceux qui n’étaient pas au courant :smile: ) et aussi la manière d’utilisation d’un framework par une application.

En règle générale il y a 3 méthodes d’utilisation :

L’extériorisation : l’application dispose de son framework à coté d’elle et pointe directement dessus et c’est le cas pour chaque application qui dispose de son propre framework. L’avantage est que nous pouvons personnaliser le framework pour l’application en soi, l’alléger ou l’alourdir pour l’application etc. etc. Le désavantage est la multiplication de celui-ci et la maintenance de ceux-ci (au vu qu’ils sont différents). La maintenance peut être pourvue d’une documentation afin de faciliter tant l’utilisation que la fonctionnalité…

La centralisation : toutes les applications utilise un même framework qui se trouve à un endroit sur un serveur, toutes le contenu s’y trouve et chaque application l’attaque. Peu importe qu’il utilise le composant, la DLL, ou autre… Tout s’y trouve.
La maintenance s’en retrouve facilitée mais le développement pur et dur est quant à lui plus complexe. Nous devons bien entendu nous assurer que le framework est compatible toutes version descendante tout en le mettant à jour régulièrement avec de nouvelles entrées et composants.

L’encapsulation : le framework est dans l’application et au moment d’ouvrir l’application, celui-ci est décompressé dans un endroit temporaire du disque dur. Cela sous-entend bien sur que l’application à droit d’écriture etc. L’inconvénient est les droits applicatifs, la maintenance d’évolution (il faut mettre à jour tout d’une traite) et bien entendu le poids !

Quelle est la méthode idéale pour bien faire ? Chacune ont leurs avantages comme leurs désagréments !
Je pense d’une manière générale que s’il s’agit d’une application interne le framework extériorisé dans le répertoire application est le plus simple, s’il s’agit d’un groupe d’application à faible potentiel évolutif et utilisant une même base de programmation la centralisation est le plus simple (toujours dans le cas d’une application d’entreprise) ; dans le cas d’une application livrée à un client, l’encapsulation peut facilement se montrer la solution de facilité, tout en ayant précisé les dépendances bien sûr !

Mais faut-il absolument utiliser un framework ? C’est la question qu’il faut se poser aussi… Principalement que ceux-ci sont propriétaires (Microsoft, PC Soft, etc.) (bien que de nombreux repose aussi sur des technologies libres). N’est-ce pas se restreindre ou se limiter dans la fonctionnalité ?
Pour répondre facilement : le cas où le framework est distribuable librement et utilisable de cette même manière je dirais oui, l’utilisation n’est pas bloquante… Mais que faire si on n’est pas le propre mainteneur du dit framework ?

Google, fin d’une légende

, , , ...

Il y a peu, on (je) pensait Google infaillible… Il monopolisait sans gêner, il offrait sans prendre grand-chose, il permettait beaucoup et n’était jamais en panne.

C’était jusqu’il y a peu, quelques semaines encore, qu’est survenu la première panne. Elle (la panne) a fait réagir la blogosphère, puis les médias web pour en venir aux médias classiques ; celle-ci (toujours la panne) avait en effet duré plusieurs heures, paralysant des millions d’internautes (d’une manière quelconque).

Puis vint l’erreur humaine (un employé de Google à fait une « petite erreur » avec la mort de Jackson…). Puis la seconde panne.
Et hier la troisième. Une simple panne de serveur.

Mais où est donc ce géant de fer qui est devenu papier ? Est-il comme la grenouille qui a voulu manger le bœuf ? Sur le point d’exploser ?

Je ne pense pas, mais sa diversité de domaine en fait sa faiblesse ; alors qu’avant sa spécialisation (et unique) en était sa force.
Je ne dénigre certainement pas les services offerts ! J’utilise à outrance GMail (plusieurs comptes reliés et ce pour toute la famille !), Blogger (pour le blog de ma fille), Picasa (même si je n’ai pratiquement rien en ligne…), profil (peu utilisé, mais présent quand même)… Et je ne compte pas les laisser tomber à cause de pannes successives ; ne dit-on pas que l’erreur est humaine ?

Google reprend une dimension humaine, celle de l’erreur.

Edit (14h20) : un article qui va dans le même sens :


Xave dit ... (lire la suite)

LimeSurvey - personnalisation

, , ,

C’est enfin fait et réalisé, j’ai pu intégrer LimeSurvey sur l’hébergement de ma société… LimeSurvey, ce fameux logiciel d’enquête, sondage etc. en open-source !

Mais comme vous le savez déjà un logiciel open-source peut être personnalisé et c’est ce que j’ai réalisé. Une sorte de kit graphique en moins « pro ».

Voici donc le fichier à télécharger afin de personnaliser LimeSurvey.

Que faut-il faire ? Remplacer les dossiers de LimeSurvey (après avoir fait une sauvegarde) par ceux contenu dans l’archive… Simple et efficace.
N’hésitez pas à donner vos commentaires !

GLPI : documentation

, , , ...

J’ai pu (enfin) continuer l’étape par étape de la documentation GLPI … Ici j’ai attaqué le domaine serré de la personnalisation de l’application (le graphisme, les couleurs et autres (l’IHM pour être précis)).

Voici donc la documentation.

Windows Live Writer (partie 2)

Le billet pourquoi je n’utiliserais que rarement Windows Live Writer (WLV) pour écrire sur la plateforme My Opera. Lorsqu’on a peut de visiteur, il est important de définir dans ses billets des tags, des URL contenant le titre du billet et quelques informations autres afin d’optimiser son blog dans les moteurs de recherches (principalement dans le but d’avoir des personnes techniques en tant que lecteur…).

Malheureusement Windows Live Writer (dans sa version 14) ne le permet pas. Cependant il a de nombreux avantages (simplicité, convivialité, prise en charge multi blog, …) qui le rendent sympathique à son utilisation. Je le réserverais alors plus à une utilisation “hors ligne” pour mes vacances ou en faire un logiciel d’écriture sur des billets qui ne me sont pas “cher” et qui ne demande pas d’attirer l’attention sur une spécificité quelconque.

Adieu WLW, je t’aimais bien !

Twunch – Ergonomie cognitive (feedback)

Alors que le premier twunch vient de passer, pour être exact c’était hier à 12h30 aux galeries Ravenstein (pour faire regretter les absents), je fais un petit feedback de ce qui à pu se narrer. Comme nous l’avions dit préalablement nous avons discuté principalement de l’ergonomie cognitive. Cette discussion à eu lieu avec Marina Aubert, responsable de Journaliste Web. Bien entendu nous nous sommes d’abord présenté (brièvement): elle journaliste spécialisée dans l’ergonomie et l’écriture web pour les sociétés, moi informaticien polyvalent développeur et automatisation en tout genre. Et là le premier hic commence: nos pôles sont totalement différents, mais c’est aussi le challenge ! En effet, ne sommes-nous pas présent pour en discuter de cette difficulté ? Les IHM le sont, mais la communication humaine aussi…

Nous avons bien entendu parlé de l’ergonomie web, de où attirer le regard et poser les éléments afin d’avoir une meilleure communication (plus de percussion et de choc), mais aussi que le plus complexe n’est pas de créer un site web ou une application mais d’établir une communication efficiente dans l’IHM même ! Outre le fait de devoir convaincre les responsables de services, qu’un service (marketing ou autre) doit prendre contact avec des spécialistes de la communication sans passer par des spécialistes du développement (applicatif, web…) ce qui manque encore dans notre métier est la synergie et pour cause: nous étions absolument d’accord sur les principales actions bloquantes, les récalcitrants etc.. mais nous ne pouvions aller plus loin dans nos développements et nos idées, non seulement en cause du temps manquant mais aussi car notre pôle métier est parallèle !

Toutefois je pense qu’un prochain twunch pourrais se faire, mais avec plus de mesures à prendre: les actions que l’on peut entreprendre, les travaux que l’on peut développer, les documents que nous avons en base de travail. Je suis certain qu’autant le web que les applications peuvent facilement se compléter !

Windows Live Writer (test 1)

Information: ce billet est destiné à faire un test logiciel, ne pas tenir compte de la pertinence de celui-ci. Merci.

Alors que je naviguais tranquillement sur la toile, je suis tombé sans me faire mal sur Windows Live Writer… Paraît que ce logiciel de Microsoft serait compatible avec My Opera que j’utilise comme plateforme de blog… Et si vous savez lire ce billet c’est que c’est vrai !

 

Edit: eh oui cela fonctionne correctement. J’ai pu trouver les informations de paramétrages ici (uk). Merci à eux, et pour une fois n’est pas coutume, bravo Microsoft d’avoir fait enfin un logiciel aux multiples compatibilité grâces aux API

GLPI : documentation

, , , ...

J’ai pu (enfin) continuer l’étape par étape de la documentation GLPI … Ici j’ai attaqué le domaine serré de la personnalisation de l’application, j’entends par « personnalisation » que le graphisme, les couleurs et autres (l’IHM pour être précis).

Voici donc la documentation.

Ergonomie: OpenOffice.org et Microsoft Office

, , , ...

Étant donné que je suis dans ma période d'étude et plus particulièrement sur l'ergonomie cognitive IHM, je pense que ce sondage est intéressant: OOo doit-il se mettre à la sauce MSO ?

Dans l'aperçu général et sans avoir pensé plus loin, faisabilité, utilisateurs, etc. je dirais oui... Il n'y aucune honte à dire que la version 2003 est "belle", qu'elle a des idées, des principes simples et efficaces etc. mais il reste bien évidement des erreurs à corriger, il faut espérer qu'OOo les dépasses !

Prise en main d’une application

, , ,

Avant de prendre des vacances (bien méritée selon moi, mais pas pour le blog !), j’ai abordé le sujet des interfaces utilisateurs avec ma femme :

qu’attends-tu d’une interface utilisateur en règle générale ? Qu’elle soit le plus simple possible ?



Sa réponse ne se fait pas attendre et un non fut prononcé… Suivis de quelques phrases en plus :

qu’elle soit intuitive et très logique afin de moins chercher



C’est le rôle de l’ergonomie interface homme machine… Mais lorsqu’on regarde un peu dans ce qui a déjà été fait, rares sont les documents qui sont encore d’actualités (la plupart datent d’avant 2000, autant dire l’ère de la préhistoire en IT).

Mais vers quoi s’orienter ? Je dirais plus particulièrement vers des thèses, des mémoires et autres documents de ce style.

Cela permet de tomber sur de superbes documents remplis d’idées, de manière de faire, de références… En quelques sortes une bible pour le néophyte en ergonomie cognitive qui ne désirerait pas se casser la tête et avoir une base théorique vers laquelle se tourner.

Mais si on passe en revue les applications que l’on a tous les jours, ce n’est pas encore le cas… Loin de là.



Dans mon cas, oui je développe un peu des applications aussi, je dirais qu’une prise en main d’application, ce que j’attends d’une IHM, c’est qu’elle soit simple, intuitive mais surtout très compacte afin de faire le moins de mouvement possible ou d’encodage.



Mais lorsque je vois des images d’applications multipliant les écrans dans une fenêtre tout aussi hétéroclite, je me dis qu’il faut repenser l’application avoir une succession d’écran s’interposant afin de simplifier l’utilisation (et l’encodage obligatoire).

SplashScreen: utilité

, ,

Alors que je me pose pas mal de question sur les interfaces graphiques, j’ai eu une récente discussion avec un collègue développeur tournant notamment sur les splash screen et de son utilité.

Nous en avons conclu que le splash screen n’était utile qu’à partir du moment où l’application avait besoin d’initialisation ou d’ouverture de composants. Le dit écran servant non pas à masquer mais à faire patienter l’utilisateur pendant ce démarrage ; et à défaut était totalement inutile.

Cependant, je dois dire qu’un beau splash screen même sans initialisation ou chargement de composant est un accueil agréable.
Alors ? Avec ou sans ?

Interface utilisateur v2

Alors que je citais dans le billet précédent un dessin montrant la complexité des interfaces utilisateurs sur les applications d’entreprises par rapport aux produits Google et Apple, je me dis que j’ai commis une erreur en montrant un exemple de développement personnalisé : j’ai choisis de montrer un remaniement d’application sous Mac (interface reconnaissable facilement) alors que je citais déjà un comparatif avec Apple dans le dessin même.

Mais qu’à cela ne tienne, je pourrais tout aussi bien comparer Google (dans ses autres produits que le moteur de recherche, phare de la société précitée) qu’Apple. Ou encore cette dernière avec Microsoft.

C’est ce qu’à voulu faire Daniel Bozet avec un dessin presque aussi célèbre que celui que je vous ai présenté préalablement :


Comme quoi rien n'est joué pour personne, tant que le concept n'est pas réfléchis.
Toutefois ne jetons pas la première pierre au géant de Redmond, il réussit correctement certaines de ses interfaces et son design des systèmes d'exploitations au niveau des icônes, arrières-plan et autres est rarement une déception.
Son nouveau produit qui change aussi est BING, le moteur de recherche, chaque jour un nouvel arrière-plan. Sympathique (mais inutile et donc indispensable !??).

A suivre toujours dans un twunch prochain.

Interface utilisateur

, , , ...

Il y a peu j’ai twittéune pensée à brut d’une image connue :


La réponse de certain(e)s ne s’est pas fait attendre … Pour en arriver facilement à un futur dialogue.

Mais qu’en est-il en pratique… De ce que nous pouvons parler mais surtout faire.
Reprenons un peu brusquement :
Actuellement nous avons des interfaces utilisateurs qui ressemblent à ceci (comme le démontre l’image première) :


Que pouvons-nous constater ? Enormément de chose :

  • L’espace de la fenêtre est mal utilisé,
  • Les champs ne sont pas alignés,
  • Aucuns champs n’est renseigné comme obligatoire, (est-ce pour autant qu’il n’y a aucun contrôle et qu’au fait qu’on pousse sur Valider, cela nous renvoie la base complète des sociétés ?!!),
  • Les champs sont nombreux et non mis dans l’ordre, est-ce que l’ordre de tabulation est correct ?
  • Certains libellés ne sont pas affichés complètement…
  • Et bien d’autres tel : le nom des boutons n’est pas « significatif », pourquoi autant de bouton dans une fenêtre de recherche ? (peut-être faut-il alors repenser la recherche !)

Voyons maintenant ce que cela donnerait modifié !


Nous prenons en compte l’espace (coté gauche, coté droit, bas et espace des boutons), les champs sont alignés, sauf le premier qui est le requis afin d’attirer l’attention, en information est indiqué les champs optionnels, l’ordre de tabulation a été repensé… etc. etc.
En gros le formulaire est actuellement exploitable.

Mais… Pourquoi afficher les champs optionnels ? Ne peut-on pas les afficher uniquement sur demande ? Voyons cela :
  • Simplifions d’abord la fenêtre de recherche, que nous considérerons comme « normale » :

    Qu’avons-nous fait ? Suppression des champs inutiles, rajout d’un bouton permettant d’accéder à la recherche avancée (bien entendu chaque bouton dispose d’une infobulle !).

  • Par la suite, créons une nouvelle fenêtre de recherche avancée :

    Qu’avons-nous fait ? Simplement rajouté les champs de la fenêtre précédente… Et nous avons supprimé le bouton Annuler. Pourquoi disposer d’un bouton Annuler alors que nous demandons une recherche avancée ? Par contre nous gardons bien le bouton pour accéder à la recherche « normale ».


Est-ce pour autant la meilleure solution ?
Certainement pas, il n’y a pas de solution « standard », il n’y a qu’une approche supposée de l’utilisateur. Tout le monde ne peut pas le partager et tout le monde ne regarde pas l’infobulle par exemple avant de cliquer sur un bouton (et donc on peut se poser la question faut-il un bouton Annuler dans la recherche avancée ?) etc.

En gros l’ergonomie est une chose aussi complexe que la programmation dont elle dépend. Une fausse action ou une fausse idée, ou un bouton de trop ou trop, un changement flagrant dans les habitudes de l’utilisateur ne font pas avancer le schmilblik. Loin de là, il y aura un certain recul envers l’application.

A suivre avec un prochain Twunch.

Utilisation du ProgressSet

, , , ...

Lorsqu’on déploie un logiciel, en mode silencieux par exemple, il est toujours bon d’indiquer où cette installation en est.

Bien entendu, nous pourrions créer une interface graphique (à l’aide de GUICreate), dans laquelle nous insérerions un GUICtrlCreateProgress… Mais pourquoi faire complexe lorsqu’on peut faire simple ?

Je préconise alors l’utilisation d’un Progress() que l’on peut personnaliser.
Cela se fait simplement par la commande suivante :
ProgressOn("titre du progress", "texte principal", "texte secondaire", position, position, option)


Par la suite, il faut faire « afficher » cette progression. Malheureusement il n’y a pas d’autres secrets que de faire « dormir » le script, le faire patienter. Encore faut-il trouver le temps correct pour que l’utilisateur puisse s’intéresser à cette progression, sans s’endormir ou penser que celle-ci est bloquée.

Je préconise donc une utilisation d’un sleep() variant de 200ms (en dessous c’est inutile, cela parait être « un flash ») à 4000ms (4s) (au dessus c’est un peu énorme, … Et l’utilisateur ne comprendra pas le but).

En code cela donne ceci :
ProgressOn("Deploiement", "Initialisation de l'installation", "Vérification des prérequis", -1, -1, 16); Barre de progression
WinActivate("Deploiement") ; Activation barre de progression
Sleep(500) ; je dors pendant ½ seconde


Lorsque cette barre est initialisée, il faut bien entendu lui donner à manger selon les actions faites.
Certes c’est fastidieux mais c’est nécessaire afin d’avoir un beau déploiement.
Cette mise à jour se fait par ProgressSet()
La syntaxe est aussi facile que le ProgressOn() :
ProgressSet(pourcentage, "mon texte secondaire", "mon texte principal")

Nous aurons donc selon les actions une succession de mise à jour :
ProgressOn( … )
WinActivate( …)
Sleep( … )
ProgressSet( … )
Sleep( … )
 MON_ACTION_A_FAIRE
ProgressSet( … )
Sleep( … )
MON_AUTRE_ACTION_A_FAIRE
ProgressSet( … )
; etc etc


Le pourcentage évoluera selon les actions à faire… Ou ce qu’il faut faire dans l’action (pourcentage de l’action).
Mais par la suite, il faut « tuer » ce Progress() et ça c’est via ProgressOff() (aucun argument nécessaire).

Oui mais… Et si on a des fonctions de vérifications me direz-vous ?
Bien souvent ces fonctions font un renvoi d’erreur. Et bien nous complèterons donc dans la fonction le Progress() !

Func _maFonction($arguments)
$maconditiond_erreur = 1
If $arguments = $maconditiond_erreur Then
ProgressSet(99,"Erreur trouvée", "ERREUR : " & @ScriptLineNumber)
Sleep(3000)
ProgressOff()
MsgBox(0+16, "ERREUR", "Une erreur est rencontrée, sortie du déploiement")
EXIT
EndIf
EndFunc


Simple et esthétique. Et surtout destiné à ne pas s’ennuyer dans les GUI !

Twitter addict

,

How addicted to Twitter are you?

Created by The Oatmeal

Je retiens v1

, , , ...

Il était temps que j’évolue dans mes titres… Après deux exemplaires du style « la phrase du jour », je vous berne aujourd’hui avec : « Je retiens v1 » pour citer F. Cavazza dans un billet qui m’interpelle.

On y parle de Chrome OS le futur système d’exploitation de Google qui se comporte de plus en plus comme son grand rival Microsoft, du marché du netbook, etc. etc.

Mais ce que je retiens est particulièrement une phrase :

C’est également un marché très instable apparamment dominé par Microsoft avec un produit en complet décalage avec le potentiel des machines. Pour résumer : les 97% de parts de marché de Microsot ne sont qu’un leurre, le grand public réclame Windows car c’est le seul OS qu’il connaisse mais donnez-leur un iPhone et il leur pousse des ailes. Tout ce qu’il manque aux netbooks c’est un acteur qui daigne investir de l’argent pour éduquer et convaincre les clients.



Le rôle aurait été trop beau… Si on ne lis pas plus bas :

Malgré les apparences, Chrome OS n’est pas un concurrent de Windows mais plutôt de Linux. Au risque de me répéter : Faire tourner Windows sur un netbook est une aberration car cela limite fortement l’usage que l’on peut en faire

.

Mais que penser face à cela ? Est-ce que Linux serait en danger face à deux géants en place d’un ? Je ne pense pas. Google ne vise pas Microsoft, mais pas Linux non plus. Ce géant à toujours été orienté vers l’internet et le restera, grignotera quelques part du marché mais ne pourra pas s’imposer face à une communauté… Illusion ? Non, le marché du netbook est fortement occupé par Linux (et Microsoft bien sur), mais ceux qui ont choisis Linux ne le lâcherons plus, contrairement à ceux qui ont choisis Microsoft.

L’idée est présente et l’annonce de Google pour son OS fait grand bruit tant dans la blogosphère, que dans les blogueurs influents etc. Mais toutes les cartes ne sont pas encore distribuée et Google nous à déjà surpris plus d’une fois avec son modèle économique, ses réactions, ses idées etc.

A voir dans 1 an.

VLC 1.0.0

, , ,

C’est assez rare que je fais une promotion d’un logiciel libre autre qu’en vrac et inclus dans un billet à autre sujet, mais il était temps, il était attendu. Voici VLC en version finale et définitive numérotée 1.0.0 !

Et honnêtement je le considère comme le meilleur player disponible sur tous les OS. A télécharger et installer sans aucune modération.

CV en ligne

, , ,

J’ai découvert il y a quelques jours le site de CV en ligne DoYouBuzz, une sorte de concurrent francophone à LinkedIn.

Et bien après avoir fait la découvert de ce service, j’ai tenté l’expérience et ma femme aussi… C’est un site assez tendance « web2.0 » aux couleurs et design agréables, permettant aussi d’avoir un espace pro (nom de domaine en plus et design exclusif).

Je vous invite donc à partager cette expérience, et si vous disposer déjà d’un compte LinkedIn (ce que je n’en doute pas), vous avez même la possibilité de l’importer.

Compilation avancée avec InnoSetup

, , , ...

Innosetup est un logiciel libre permettant de créer des installeurs sous Microsoft Windows.

Grâce à son assistant de création il est très simple d’emploi. Il permet d’avoir rapidement une solution efficace et efficiente !

Mais lorsqu’on y regarde de plus près et si on ne veut laisser aucune trace pour la distribution de l’installeur à ses clients, c’est un peu loupé… En effet lorsqu’on va voir dans les propriétés de l’application (clic avec le bouton droit de la souris et Propriété dans le menu contextuel) nous avons encore des champs qui ne sont pas personnalisés et laissé par défaut avec des commentaires en anglais de InnoSetup.

Voici donc les paramètres qu’il faut avoir pour un installeur complet avec les bonnes propriétés ainsi que les bons renseignements dans les panneaux de configurations (informations de support etc.)

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{D1F3D6D4-5FFA-4921-8AF5-73BC783CFF21}
AppName=NomApplication
AppVerName=NomApplicationEtVersion 1.0.1.19
AppVersion=1.0.1.19 ; Version
AppPublisher=Producteur 
AppPublisherURL=http://my.opera.com/groumphy ; website du producteur
AppSupportURL=http://supportURL ; URL de support
AppUpdatesURL=http://updateURL ; URL d’update
AppComments=Commentaire
AppSupportPhone=N° de téléphone du support
Compression=lzma/ultra64 ; niveau de compression
DefaultDirName={pf}\Appz ; repertoire d’installation
DefaultGroupName=Appz ; groupe d’installation menu démarrer
DisableDirPage=yes ; option d’installation
DisableProgramGroupPage=yes ; option d’installation
VersionInfoCompany=Information compagnie producteur
VersionInfoDescription=Description de l’application
VersionInfoProductName=Information sur le nom du produit
VersionInfoProductVersion=1.0.0.19
OutputDir=\\MAP\OutputDirectory ; repertoire de sortie
OutputBaseFilename=setup_on-test ; nom de l’installeur
SetupIconFile=\\MAP\Images\Gnome.ico ; icône de l’installeur
SolidCompression=yes ; ne pas toucher  

; TO DO
; WizardImageFile=myimage.bmp ; image de l’installeur
; WizardSmallImageFile ; petite image de l’installeur
; WizardImageBackColor => a utiliser avec WizardImageStretch ; couleur de fond de l’installeur
; VersionInfoCopyright ; info sur le copyright 
; VersionInfoVersion ; information sur la version
; AppCopyright ; copyright de l’application
;


De ce fait vous obtiendrez une application totalement personnalisée sur l’installation avec toutes les informations nécessaires.

flickR

, , , ...

Je m'étais pourtant dit que je n'ouvrirais pas de si tôt un compte pour héberger mes photographies... Non pas que je suis timide, que j'ai peur de big brother ou autre, mais je ne suis pas un bon photographe.

Toutefois devant le nombre de photo, le compte my Opera que je dispose sera vite saturé. De ce fait, j'ai quand même cédé à la tentation de ne pas saturer mon hébergement et d’ouvrir un compte flickR.

Je peux donc uploader plus que ce que je faisais par le passé, et de plus c’est assez tendance ce service…
A suivre si vous le voulez.

Twitter, la proximité que Google n'a pas ?

, , , ...

Alors que j'écrivais il y a peu que Twitter est le Google de demain, voici un billet qui va dans ce sens : Taxonweb sur Firefox et MacOSX avec comme phrase retenue,


Un petit tour sur Twitter, ne me renseigne pas énormément. Une recherche dans les FAQ de taxonweb.be ne m'aide pas vraiment.

Une recherche approfondie dans Google me dirige sur un forum d'expats.


Twitter peut devenir (mais ne l'est pas encore) une excellente source d'information choisie, si pas la meilleure qui soit ; mais son potentiel dans le domaine est encore (malheureusement) faible face à ce géant qu'est Google (mais surtout spécialisé dans l'indexation d'information) et qui à orienté Marin vers les résultats corrects.

HTC Google Android

, , ,

J’aimerais tant vous dire, ne cliquez pas ici, mais je ne suis pas une pute (c’est aussi dit amicalement, car c’est un grand blogueur) voir je n’utilise pas mon blog à très grande audience pour passer en premier (oui Christophe, tous les coups sont permis… Et c’est tout aussi dit amicalement que précédemment…) mais comme le dit si bien Baudouin : c’est pour un Androïd merde !

Alors si vous pouviez me faire légèrement avancer dans le classement en cliquant simplement sur ce lien http://www.androidparty.be/Groumphy ... Ce serait vraiment génial.

Un grand merci… Heu oui vous pouvez maintenant le dire, je racole !

La phrase que je retiens (v2)

, , , ...


La meilleure chose à faire si l’on veut continuer à enfermer Internet dans des restrictions barbelées d’interdictions, c’est d’utiliser Adobe Flash tel qu’il existe aujourd’hui. Internet a été conçu pour qu’un réseau ouvert et sans limites puisse partager des informations. Pourtant, on l’utilise de nos jours dans un but diamétralement opposé : pour interrompre cet immense flot d’informations. Beaucoup de gens ne considèrent pas le Flash comme un problème, et ne perçoivent pas Adobe comme un dictateur nuisible. En réalité, le Flash est le pire goulot d’étranglement qui menace l’efficacité d’Internet, tout comme l’immense diversité des langues parlées dans le monde entier est le pire goulot d’étranglement du réseau social planétaire. Un changement de stratégie commerciale d’Adobe en ce qui concerne le Flash est la seule façon de transformer ce bridage inutile du potentiel de la communauté connectée à Internet, pour en faire une véritable technologie innovante et favorable aux synergies.


Via Framalang

Rendre le menu Dock (Fisheyes) accessible

, , , ...

J’ai récemment pu télécharger un menu très sympathique, rappelant celui de Mac… Son utilisation est des plus simplistes, vu que le travail nous a été maché.

Malheureusement, lorsque nous regardons le code, ce n’est pas très propre (oui cela valide, mais on peut faire mieux !) :
<div class="dock-container" id="dock-contener">
  <a class="dock-item" href="../index.php" tabindex="1" accesskey="1"><img src="../images/menu/accueil.png" alt="Accueil"><span>Accueil</span></a> 
  <a class="dock-item" href="../contact.php" tabindex="2" accesskey="2"><img src="../images/menu/contact.png" alt="Contact"><span>contactez-nous</span></a> 
  <a class="dock-item" href="../photographies" tabindex="3" accesskey="3"><img src="../images/menu/les-photos.png" alt="Photos"><span>Les photos</span></a>
  <a class="dock-item" href="../ceremonie_civile.php" tabindex="4" accesskey="4"><img src="../images/menu/ceremonie-civile.png" alt="cécrémonie civile"><span>La cérémonie civile</span></a> 
  <a class="dock-item" href="../ceremonie_laique.php" tabindex="5" accesskey="5"><img src="../images/menu/ceremonie-laique.png" alt="cécrémonie laïque"><span>La cérémonie laïque</span></a> 
  <a class="dock-item" href="../nos_fiancailles.php" tabindex="6" accesskey="6"><img src="../images/menu/nos-fiancailles.png" alt="fiançailles"><span>Nos fiançailles</span></a> 
  <a class="dock-item" href="../le_mariage.php" tabindex="7" accesskey="7"><img src="../images/menu/mariage.png" alt="mariage"><span>Le mariage</span></a> 
  <a class="dock-item" href="../le_voyage_de_noce.php" tabindex="8" accesskey="8"><img src="../images/menu/voyage-de-noces.png" alt="voyage de noces"><span>Le voyage de noces</span></a>
</div>

Comme vous pouvez le constater, ici il s’agit d’une succession d’ancre située dans un conteneur… Ces ancres, ce conteneur et ces « span » sont mis en forme par du CSS que voici :
.dock { margin-left: 150px; float: left; width: 400px; position: relative; height: 50px;  text-align: center; padding-left: 20px; }
.dock-container { top: 0px; height: 50px; }
a.dock-item { display: block; width: 40px; color: #A50021; position: absolute; top: 0px; text-align: center; text-decoration: none;
font: bold 12px Verdana, "Lucida Grande", Lucida, Tahoma, "Trebuchet MS", Arial, Geneva, Helvetica, sans-serif; }
li.dock-item a { color: #A50021; font: font: bold 12px Verdana, "Lucida Grande", Lucida, Tahoma, "Trebuchet MS", Arial, Geneva, Helvetica, sans-serif; }
.dock-item img { border: none; margin: 5px 10px 0px; width: 100%; }
.dock-item span { display: none; padding-left: 20px; }

Ce qui donne un bel effet de mise en page, grâce à la librairie Jquery ainsi qu’un petit complément appelé Interface.
Malheureusement lorsqu’on navigue sans le javascript activé, cela n’a pas l’effet escompté… Et la mise en page ne se charge pas comme nous le désirions, et rend donc la navigation impossible (en gros tout est superposé).
Il est vrai qu’il n’est pas recommandé de baser sa navigation principale sur le javascript ou un complément quelconque… Toutefois si nous regardons le code, ce n’est pas le cas principal ici : c’est du HTML mis en forme par du CSS sur lequel on passe une couche de javascript pour donner un effet. Ouf mais cela ne résoud pas notre problème !
Tentons d’abord quelques petites modification basique pour rendre ce code plus propres :
a)modifions le HTML comme suis :
<div class="dock" id="dock">
<ul class="dock-container" id="dock-contener">
  <li class="dock-item"><a href="../index.php" tabindex="1" accesskey="1"><img src="../images/menu/accueil.png" alt="Accueil"><span>Accueil</span></a> </li>
  <li class="dock-item"><a href="../contact.php" tabindex="2" accesskey="2"><img src="../images/menu/contact.png" alt="Contact"><span>contactez-nous</span></a> </li>
  <li class="dock-item"><a href="../photographies" tabindex="3" accesskey="3"><img src="../images/menu/les-photos.png" alt="Photos"><span>Les photos</span></a></li>
  <li class="dock-item"><a href="../ceremonie_civile.php" tabindex="4" accesskey="4"><img src="../images/menu/ceremonie-civile.png" alt="cécrémonie civile"><span>La cérémonie civile</span></a></li> 
  <li class="dock-item"><a href="../ceremonie_laique.php" tabindex="5" accesskey="5"><img src="../images/menu/ceremonie-laique.png" alt="cécrémonie laïque"><span>La cérémonie laïque</span></a> </li>
  <li class="dock-item"><a href="../nos_fiancailles.php" tabindex="6" accesskey="6"><img src="../images/menu/nos-fiancailles.png" alt="fiançailles"><span>Nos fiançailles</span></a> </li>
  <li class="dock-item"><a href="../le_mariage.php" tabindex="7" accesskey="7"><img src="../images/menu/mariage.png" alt="mariage"><span>Le mariage</span></a> 
  <li class="dock-item"><a href="../le_voyage_de_noce.php" tabindex="8" accesskey="8"><img src="../images/menu/voyage-de-noces.png" alt="voyage de noces"><span>Le voyage de noces</span></a></li>
</ul>
</div>

(en résumé j’ai ajouté un LI devant les A, et remplacé le DIV nommé DOCK-CONTENER par un appel de liste uniforme UL)
b)modifier le javascript
Mais si on recharge la page, cela ne fonctionne plus. Eh non, car dans les paramètres de Interface il faut modifier aussi du javascript. Comme suis :
$(document).ready(
function()
{
$('#dock').Fisheye(
{
maxWidth: 50,
//items: 'a',// test accessibilite
items: 'li',
itemsText: 'span',
container: '.dock-container',
itemWidth: 40,
proximity: 90,
halign : 'center'
}
)
}
);

(en résumé : j’ai changé l’interaction sur les éléments de liste en place d’un élément d’ancre)
Et là tout refonctionne à merveille…
Mais lorsque nous naviguons sans javascript, cela ne va toujours pas !
Bon ne paniquons pas… Que se passe-t-il ? La mise en page est scabreuse. Remodifions donc la mise en page pour le cas où le visiteur n’a pas le javascript d’activé !
c)petit hack entre amis
Pour cela, déterminons un emplacement dans l’entête qui va appeler une feuille de style (CSS) en cas où le javascript n’est pas actif. En effet, ici ce n’est plus un problème d’accessibilité, mais de mise en page.
Nous savons aussi que le dernier élément appelé d’une CSS est celui dont la mise en page sera appliquée. Parfais. Maintenant que nous savons cela, nous avons la solution !
Modifions le HTML comme suis, et rajoutons :
<!-- HACK pour JQUERY INTERFACE si Javascript desactive --> 
<noscript>
<link href="../css/noscript.css" rel="stylesheet" type="text/css">
</noscript>
<!-- FIN HACK pour JQUERY INTERFACE si javascript desactive -->

Ceci doit être placé en fin de la balise HEAD.
Créons maintenant une CSS appelée noscript.css qui sera appelée comme déterminé plus haut et remettons la mise en page correcte !
/* 
CSS Hack pour JQUERY INTERFACE
Rôle : réadapte le menu si le javascript n'est pas actif
Auteur :  X Brusselaers
Licence : GNU GPL v2
*/
.dock { margin-left: 150px; float: left; width: 400px; position: relative; height: 150px; padding-left: 20px; }/* augmenter la hauteur pour repousser les éléments du bas
réorganisation selon une liste classique */
.dock-container { height: 100%; }/* modification simple => 100% */
li.dock-item { display: block; width: 400px; color: #A50021; position: relative; text-align: left; /* remise en ordre des éléments du menu  */
text-decoration: none; 
font: bold 12px Verdana, "Lucida Grande", Lucida, Tahoma, "Trebuchet MS", Arial, Geneva, Helvetica, sans-serif;}
.dock-item img { display: none; }/* je cache les images, car je ne veux plus naviguer avec */ 
.dock-item span { display: block; }/* display en block, pour annuler le display none */

Maintenant lorsqu’on navigue sans javascript, nous avons un menu qui s’affiche comme une liste.

[[ EDIT ]]
Et zut, cela ne valide pas ! Mais au moins c'est accessible... Je recherche encore une solution pour cette "unique" erreur...

La phrase que je retiens

, , ,


100 millions de dollars de pub pour relancer le moteur de recherche de Microsoft, sous un nouveau nom, BING. Le Point s'interroge : "Bing sera-il le bruit de Google qui chute, ou celui de l'épée de Microsoft qui se brise sur le bouclier de Google ?" D'ici 2 ou 3 ans, quand on aura réalisé que le marketing ne remplace pas l'investissement en R&D et que malheureusement Google ne sera pas challengé par Microsoft sur ce terrain, je pourrais titrer "BING, le moteur qui fait CHPLOFFF"..

par Tristan
November 2009
M T W T F S S
October 2009December 2009
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30