Nous vous avons déjà parlé des Promises et de leur utilité dans un précédent article (Asynchronicité : les promesses de Javascript).
Aujourd’hui nous allons vous montrer un nouvel exemple d’utilisation des Promises en conjonction avec une fonction introduite par ES5 : Array.prototype.reduce().

Array.prototype.reduce()

reduce() est une fonction qui s’applique sur un tableau, peut retourner n’importe quel type d’objet, et prend en paramètre un callback (qui sera appelé pour chaque élement du tableau, de la gauche vers la droite), ainsi qu’une valeur par défaut.


var value = [1,2,3].reduce(fn, defaultValue)

Lire la suite »

Taggé avec :
 

Avez vous déjà essayé d’échanger sur des problèmes de fond avec un singe ? Je ne vous le conseille pas. L’experience n’est ni satisfaisante, ni enrichissante. Elle vous plonge simplement dans un vide profond et vous convainc d’avoir perdu votre temps. C’est ce même sentiment que j’ai éprouvé lors de ma première recherche sur le magento connect. Un souk immense où déception rime avec frustration, où il est difficile de trouver son bonheur si celui-ci n’aborde pas les concepts de « paiement en ligne »,  « cadeaux et récompenses », « emailing », « devis » et autres « banner ». Après des heures de recherche et profondément marqué par le marketing US des années 80, une seule pensée prédomine « Just do it ». Pour être tout à fait exact, dans mon cas, cela a plutôt été « Can’t someone just do it ? » (merci Aurélien et Antoine). 

Lire la suite »

Taggé avec :
 

pdi_gis_00Pentaho Data Integration a toujours autorisé la création de « plugins » permettant d’étendre les fonctionnalités de cet ETL en ajoutant notamment de nouvelles « JobEntries » pour les « Jobs » ou de nouveaux « Steps » pour les « Transformations ». Cette possibilité offerte à l’utilisateur permettait de couvrir nombre de besoins mais il fallait se limiter à la manipulation de données dont le type était nativement reconnu par l’ETL (BigNumber, Binary, Boolean, Date, Integer, Number, String).
Dans le contexte de l’information géographique et avec les versions antérieures à la version 5, la manipulation de données spatialisées nécessitait de transformer les géométries pour les exploiter à travers les types standards «String » ou « Binary ». Si cet artifice permettait de transporter tant bien que mal les descriptions géométriques d’objets dans les flux de données elle nécessitait cependant la mise en place de mécanismes particuliers afin de d’assurer notamment la lecture et l’écriture depuis ou vers les bases de données (utilisation de fonctions telles que St_Astext() pour PostGIS ou SDO_UTIL.TO_WKTGEOMETRY() pour Oracle).
Avec l’arrivée de la version 5.0 de Pentaho Data Integration, il devient désormais possible d’étendre les types de données proposés par défaut en ajoutant ses propres types de données basés sur la classe « ValueMetaBase ». Tirant parti de cette nouvelle possibilité, les équipes d’Atol Conseils et Développements ont souhaité enrichir l’ETL Pentaho Data Integration d’un nouveau type de données « Geometry » dédié à la manipulation de l’information géographique. Cette fonctionnalité initialement mise en œuvre pour couvrir les besoins en lecture et en écriture vers ou depuis PostGIS a finalement débouché sur la création de briques complémentaires permettant notamment de lire ou de produire les formats SIG courants, de prendre en compte les systèmes de coordonnées et de proposer quelques fonctionnalités de manipulation de géométries.

pdi_gis_01

Lire la suite »

Taggé avec :
 

Depuis une dizaine d’années et l’avènement d’AJAX, les développeurs web s’appuient sur des fonctions asynchrones afin de construire des pages et applications dynamiques.

Asynchrone : Qualifie des mouvements qui se font de manière décalée dans le temps.

On peut observer ces dernières années une tendance à baser les nouveautés du langage Javascript sur des modèles asynchrones — c’est le cas pour IndexedDb et getUserMedia par exemple — mais aussi à adapter des fonctions synchrones existantes en fonction asynchrones (comme localStorage avec localForage).
async all the things

Pourquoi utiliser des fonctions asynchrones ? Car cela permet entre temps au moteur Javascript de gérer d’autre tâches (événements, affichage, interrogation de base locale, requêtes AJAX, …) et de conserver une interface réactive.

Lire la suite »

Taggé avec :
 

Responsive DesignAdaptive design, responsive design mais aussi amélioration progressive, mise en page adaptative, grilles fluides…autant de termes que l’on trouve maintenant partout sur Internet mais souvent utilisés à tort car au final, quelle est la différence entre ces deux notions ?

La création d’interfaces s’adaptant aux différents terminaux ( tablettes, smartphones, phabletes (tiré du mot phablet en anglais), écrans d’ordinateurs,…) est devenu un incontournable, plus question de développer des interfaces spécifiques à chaque taille d’écran pour des questions évidentes de coûts de conception et de maintenance. La manière de « designer » pour le Web a donc évoluée avec pour but principal, l’amélioration de l’expérience utilisateur c’est à dire faciliter la lecture, rendre simple et intuitive la navigation, s’assurer que la présentation des informations sera toujours propre, agréable quel que soit le terminal.

Lire la suite »

Taggé avec :
 

Introduction

Quand on déploie des cubes Mondrian dans Pentaho, on est bien souvent amené à gérer des droits d’accès sur une ou plusieurs dimensions d’un cube : par exemple pour un cube des ventes, ne permettre aux responsables commerciaux de visualiser uniquement les chiffres d’affaires concernant les zones dont ils ont la charge.

Cette opération de sécurisation d’accès aux données s’effectue assez simplement, via l’ajout d’attributs dans le schéma XML du cube, et ceci pour chaque rôle à filtrer, par exemple :

<Role name="California manager">
  <SchemaGrant access="none">
    <CubeGrant cube="Sales" access="all">
      <DimensionGrant hierarchy="[Measures]" access="all"/>
        <HierarchyGrant hierarchy="[Store]" access="custom" topLevel="[Store].[Store Country]">
          <MemberGrant member="[Store].[USA].[CA]" access="all"/>
          <MemberGrant member="[Store].[USA].[CA].[Los Angeles]" access="none"/>
        </HierarchyGrant>       
    </CubeGrant>
  </SchemaGrant>
</Role>

Cette sécurisation d’accès aux données fonctionne bien, mais montre rapidement ses limites dès que :

  1. le nombre de rôles devient important
  2. l’affectation des utilisateurs à ces rôles évolue souvent

Dans ces 2 cas, il devient alors très contraignant d’appliquer la sécurité car celle-ci nécessite obligatoirement une définition en dur dans le schéma XML

Comment donc procéder dans ce type de situation ?

Réponse : grâce à la sécurisation dynamique du schéma Mondrian offerte par le « Dynamic Schema Processor » (DSP)

Lire la suite »

Taggé avec :
 

Le webmapping occupe une place prépondérante sur le web depuis quelques années avec la démocratisation de cartes tel que google maps, openstreetmap et d’autres. La généralisation des smartphones et tablettes ont aussi explosé ces dernières années. De facto cela a entrainé l’émergence de la cartographie mobile et qui dit mobilité dit connectivité.

A l’heure du cloud, du tout connecté, on en arrive a oublier les réalités du terrain : en pleine nature pas de réseau wifi à l’horizon, ni 4G, ni même 3G…

Nous voilà arrivé à notre problématique : comment réaliser une application SIG mobile déconnectée avec des données cartographiques raster et vecteur ?

Lire la suite »

Taggé avec :
 

Vous allez peut-être me dire «CTE ? Quésako ?». Les requêtes CTE ou Common Table Expressions peuvent être considérées comme des tables ou vues temporaires qui vont exister seulement dans le cadre de l’exécution d’une requête. Pour notre plus grand bonheur, cela ne se limite pas à une simple vue ou table temporaire, nous pouvons y ajouter de la récursivité.

Les requêtes CTE vont avoir plusieurs utilités notamment pour :

  • rendre plus claires des requêtes complexes construites à partir de résultats d’autres requêtes.
  • ne plus passer par des fonctions en pl/pgsql pour faire de la récursivité

L’instruction permettant cela est WITH [RECURSIVE] qui est disponible depuis postgresql 8.4 pour les requêtes CTE de type SELECT et depuis la 9.1 pour les types INSERT, UPDATE et DELETE.

NB : les requêtes qui seront comprises dans le WITH ne seront évaluées qu’une fois, ce qui permet d’avoir de bonnes performances et le même ensemble de données.

Lire la suite »

 

Les moteurs Javascript s’améliorent, de nouvelles API sont introduites, les spécifications HTML et CSS évoluent et permettent au développeur d’envisager des applications purement web là où autrefois nous aurions eu besoin d’applications lourdes ou natives dans le cas d’application pour smartphone/tablette.

Depuis quelques années, ces différentes technologies sont regroupées sous le terme HTML5. Il ne faut pourtant pas se méprendre, ce terme est purement marketing et rassemble un ensemble de technologies qui vont bien au delà du langage HTML.
On pourrait donc citer HTML dans sa version 5, avec de nouvelles balises(video, audio, header, …), CSS3 (bordures arrondies, fonds multiples, dégradés, …) et de nouvelles API Javascript ( IndexedDB, getUserMedia, WebGL, …).

Pour cet article, nous allons nous intéresser aux différentes possibilités de stocker des données coté navigateur.
Il existe de nombreux cas d’utilisation pour le stockage des données coté client plutôt que sur un serveur :

  • Éviter de surcharger un serveur avec trop de requêtes HTTP
  • Économiser de l’espace sur la base de données
  • Économiser le forfait data de vos utilisateurs « mobiles »
  • Pouvoir continuer à utiliser une application lorsqu’il n’y a pas d’accès à internet (trains, avions, zones blanches, …).

Il existe pour cela plusieurs API Javascript avec chacune leurs avantages et leurs inconvénients.

Lire la suite »

Taggé avec :
 

La demande d’intégration de rapports et de gestion de contenu au sein d’une application web est aujourd’hui incontournable. Cependant plusieurs problématiques telles que la gestion des ressources permettant la génération des rapports, la gestion des droits ou bien encore la gestion des différents formats de sortie souhaités peuvent vite devenir complexes à mettre en œuvre et à maintenir.

Cet article à pour objectif de présenter une solution simple et efficace d’intégration de rapport par l’utilisation de l’API REST de JasperServer (version 4.5 Community Edition).

Lire la suite »

Taggé avec :