Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
Comme beaucoup de développeurs une grande partie de mon temps libre est utilisé pour découvrir de nouvelles technologies et développer des applications avec celles-ci.
J'ai donc choisi de découvrir le développement d'application Java sur le cloud, avec Google AppEngine, pour créer le site http://www.resultri.com qui permet de gérer les resultats de triathlon (mon autre passion).
Développer cette application est une aventure interessante que je partage avec vous durant ce BOF:
découverte de GAE et des outils de developpement
les "surprises" du NoSQL, surtout pour un cerveau "cablé relationnel comme le mien"
hmmm tout n'est pas gratuit?
les quelques trucs à savoir : l'importance de memcache, utilisation de CloudSQL, les batchs....
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
Comme beaucoup de développeurs une grande partie de mon temps libre est utilisé pour découvrir de nouvelles technologies et développer des applications avec celles-ci.
J'ai donc choisi de découvrir le développement d'application Java sur le cloud, avec Google AppEngine, pour créer le site http://www.resultri.com qui permet de gérer les resultats de triathlon (mon autre passion).
Développer cette application est une aventure interessante que je partage avec vous durant ce BOF:
découverte de GAE et des outils de developpement
les "surprises" du NoSQL, surtout pour un cerveau "cablé relationnel comme le mien"
hmmm tout n'est pas gratuit?
les quelques trucs à savoir : l'importance de memcache, utilisation de CloudSQL, les batchs....
Construisez votre première application MongoDBMongoDB
Démarrez votre journée avec une introduction à MongoDB en créant une application web simple basée sur le stack MEAN et en exécutant Serverless sur AWS. Tout d'abord, nous aborderons les bases de la conception de schéma, de la sécurité, des requêtes et de l'indexation. Puis nous déploierons l'application sur AWS à l'aide des API Gateway, Lambda et MongoDB Atlas.
Objectif général : Découvrir l'un des SGBDs noSQL les plus utilisés
Objectifs spécifiques :
Installer et démarrer un serveur et un client mongo
Créer une base de données dans un serveur mongo
Créer une collection dans une base de données mongo
Connaître les principaux types de données
Insérer des données
Consulter des données
Modifier des données
Supprimer des données
--session donnée dans le cadre du 24HOP Francophone--
http://www.sqlpass.org/24hours/2016/french/Sessions.aspx
Les données sont le nouveau pétrole ? Alors vous avez besoin de pipelines.
Azure Data Factory est la solution pour déplacer des données entre vos briques de stockage ou de calcul, qu’elles soient dans le Cloud ou dans votre Data Center.
Dans cette session, vous découvrirez cette technologie et comment construire votre 1er pipeline.
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
MongoDB Stitch est une plate-forme "serverless" conçue pour vous aider à créer facilement et en toute sécurité des applications utilisant votre cluster sur MongoDB Atlas. Il permet aux développeurs de se concentrer sur la création d'applications plutôt que sur la production de code de manipulation de données, l'intégration de services ou les problèmes d'infrastructure...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...MongoDB
Il s'agit du quatrième webinaire de la série « Retour aux fondamentaux » qui a pour but de vous présenter la base de données MongoDB. Ce webinaire expliquera l’Indexation avancée, les index de texte et géospatiaux.
Présentation donnée avec @_bruno_b_ lors du @breizhcamp 2016
Vous avez coder votre première application avec MongoDB, c'est décidé votre prochain vrai prochain utilisera cette base NoSQL. Il vous faudra éviter quelques écueils avant que tout fonctionne en production. Nous en parlons dans cette présentation.
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
ElasticSearch est un moteur de recherche open source reposant sur une interface JSON, pouvant fonctionner en mode distribué et interrogeable facilement via son API REST. Cédric Nirousset, Développeur web indépendant, vous fera découvrir les intérêts de l’utiliser dans vos applications à travers quelques exemples pratiques.
A propos de l’intervenant : Cédric Nirousset, diplomé dut DUT SRC Montébliard en 2006 et de l’UTBM en Informatique en 2010, il est maintenant développeur web indépendant à Besançon, travaillant pour des entreprises de toutes tailles et tous horizons. Suivez Cédric sur Twitter @Nyr0
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
MongoDB ? Elastic ? Ces technologies sont elles faites pour être concurrentes ?
C'est l'histoire d'une rencontre entre deux technologies. A l'occasion de cette conférence vous apprendrez comment MongoDB et Elastic peuvent se compléter, comment tirer partie du meilleur de chaque monde : "le bon outil pour le bon usage".
Enfin, nous vous présenterons les principaux patterns d'architecture permettant d'intégrer ces deux technologies.
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...MongoDB
Il s'agit du troisième webinaire de la série « Retour aux fondamentaux » qui a pour but de vous présenter la base de données MongoDB. Ce webinaire vous explique en quoi consiste l'architecture de bases de données orientée Document.
Dans cette session, vous apprendrez:
Les différences entre modéliser pour MongoDB versus une base de données relationnelle.
Une méthodologie pour modéliser pour MongoDB qui est adaptable aux projets simples, agiles ou plus complexes.
Quelques patrons de conception (design patterns) courants dans le développement d'applications avec MongoDB, dans le but de maximiser la performance.
Construisez votre première application MongoDBMongoDB
Démarrez votre journée avec une introduction à MongoDB en créant une application web simple basée sur le stack MEAN et en exécutant Serverless sur AWS. Tout d'abord, nous aborderons les bases de la conception de schéma, de la sécurité, des requêtes et de l'indexation. Puis nous déploierons l'application sur AWS à l'aide des API Gateway, Lambda et MongoDB Atlas.
Objectif général : Découvrir l'un des SGBDs noSQL les plus utilisés
Objectifs spécifiques :
Installer et démarrer un serveur et un client mongo
Créer une base de données dans un serveur mongo
Créer une collection dans une base de données mongo
Connaître les principaux types de données
Insérer des données
Consulter des données
Modifier des données
Supprimer des données
--session donnée dans le cadre du 24HOP Francophone--
http://www.sqlpass.org/24hours/2016/french/Sessions.aspx
Les données sont le nouveau pétrole ? Alors vous avez besoin de pipelines.
Azure Data Factory est la solution pour déplacer des données entre vos briques de stockage ou de calcul, qu’elles soient dans le Cloud ou dans votre Data Center.
Dans cette session, vous découvrirez cette technologie et comment construire votre 1er pipeline.
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
MongoDB Stitch est une plate-forme "serverless" conçue pour vous aider à créer facilement et en toute sécurité des applications utilisant votre cluster sur MongoDB Atlas. Il permet aux développeurs de se concentrer sur la création d'applications plutôt que sur la production de code de manipulation de données, l'intégration de services ou les problèmes d'infrastructure...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...MongoDB
Il s'agit du quatrième webinaire de la série « Retour aux fondamentaux » qui a pour but de vous présenter la base de données MongoDB. Ce webinaire expliquera l’Indexation avancée, les index de texte et géospatiaux.
Présentation donnée avec @_bruno_b_ lors du @breizhcamp 2016
Vous avez coder votre première application avec MongoDB, c'est décidé votre prochain vrai prochain utilisera cette base NoSQL. Il vous faudra éviter quelques écueils avant que tout fonctionne en production. Nous en parlons dans cette présentation.
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
ElasticSearch est un moteur de recherche open source reposant sur une interface JSON, pouvant fonctionner en mode distribué et interrogeable facilement via son API REST. Cédric Nirousset, Développeur web indépendant, vous fera découvrir les intérêts de l’utiliser dans vos applications à travers quelques exemples pratiques.
A propos de l’intervenant : Cédric Nirousset, diplomé dut DUT SRC Montébliard en 2006 et de l’UTBM en Informatique en 2010, il est maintenant développeur web indépendant à Besançon, travaillant pour des entreprises de toutes tailles et tous horizons. Suivez Cédric sur Twitter @Nyr0
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
MongoDB ? Elastic ? Ces technologies sont elles faites pour être concurrentes ?
C'est l'histoire d'une rencontre entre deux technologies. A l'occasion de cette conférence vous apprendrez comment MongoDB et Elastic peuvent se compléter, comment tirer partie du meilleur de chaque monde : "le bon outil pour le bon usage".
Enfin, nous vous présenterons les principaux patterns d'architecture permettant d'intégrer ces deux technologies.
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...MongoDB
Il s'agit du troisième webinaire de la série « Retour aux fondamentaux » qui a pour but de vous présenter la base de données MongoDB. Ce webinaire vous explique en quoi consiste l'architecture de bases de données orientée Document.
Dans cette session, vous apprendrez:
Les différences entre modéliser pour MongoDB versus une base de données relationnelle.
Une méthodologie pour modéliser pour MongoDB qui est adaptable aux projets simples, agiles ou plus complexes.
Quelques patrons de conception (design patterns) courants dans le développement d'applications avec MongoDB, dans le but de maximiser la performance.
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
CoreData vous tente mais vous fait peur ? Vous trouvez le framework un peu dur à prendre en main ? Ou vous en avez marre d’écrire autant de ligne à chaque fois juste pour faire une simple récupération de vos données ?
Olivier Halligon (développeur de FoodReporter) vous offrira une découverte de MagicalRecord, le framework qui va drastiquement simplifier votre code CoreData, en apportant le Design Pattern ActiveRecord (comme utilisé en Ruby) sur Objective-C.
Session donnée lors du Drupal Camp Lyon 2012. Présentant les différentes alternatives pour gérer la mobilité avec Drupal.
- Responsive Design
- Contextes mobiles (themes mobiles)
- Applications Natives et intégrations en Web Services ou HTML5
Pour une fois, il s’agit de parler de ce que l’on ne montre pas toujours au public : «l’envers du décor», soit le backend base de données et la synchronisation avec l’application iPhone.
Le but de la session est de présenter notre expérience dans le contexte suivant :
Base de données locale Sqlite
Base de données serveur MySql
Synchronisation des données application - serveur
Présentation de l’application
Présentation de l’administration des données (écrans de maintenance des données intégrés à Joomla)
Présentation de l’approche et du code, productivité de développement pour le backend web
Sqlite sans CoreData
Echange des données en JSON
Procédures stockées et vues MySql
Discussion concernant les techniques possibles et la productivité
Pour une fois, il s’agit de parler de ce que l’on ne montre pas toujours au public : «l’envers du décor», soit le backend base de données et la synchronisation avec l’application iPhone.
Le but de la session est de présenter notre expérience dans le contexte suivant :
Base de données locale Sqlite
Base de données serveur MySql
Synchronisation des données application - serveur
Présentation de l’application
Présentation de l’administration des données (écrans de maintenance des données intégrés à Joomla)
Présentation de l’approche et du code, productivité de développement pour le backend web
Sqlite sans CoreData
Echange des données en JSON
Procédures stockées et vues MySql
Discussion concernant les techniques possibles et la productivité
Présentation utilisée lors du SharePoint Summit Québec 2011.
Rappels sur le stockage des données SharePoint et sur l'utilisation et la mise en place du Remote Blob Storage.
Microsoft a mis node.js au premier plan en l'intégrant dans Windows Azure. Quelles sont les forces de ce langage ? Comment fonctionne-t-il ? Quelles sont les alternatives ? Session 100% technique !
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...Paris Open Source Summit
Always wanted to control your IoT device without SSH'ing into it? In this talk we will show how WebSockets, MQTT and a set of custom go/js libraries can help in managing remotely your IoT device without knowing its IP address. Learn how you can use the Arduino Create Agent to easily deploy containers, remotely. A journey on Docker client, APT command line, sockets, systemd and much more on Arm and Intel Linux devices.
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...Paris Open Source Summit
La mise-à-jour de firmwares "Over-The-Air" sur microcontrôleur a toujours été un sujet ambitieux et pourtant primordial pour sécuriser une application IoT. Le système d'exploitation RIOT (https://riot-os.org) fournit désormais les briques logicielles pour réaliser des mise-à-jour de firmware en utilisant des protocoles standards et sécurisés de bout-en-bout.
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, ArduinoParis Open Source Summit
IoT is at the peak of the hype cycle - what they call the 'Peak of Inflated Expectations’. The complexity of the cybersecurity landscape is at an all-time high, with security researchers, vendors and even governments all trying to come to a consensus for making the cyber-world a safer place. In this world of lightning-fast development cycles, it may intuitively feel like security gets left behind. The battle over standards is always a struggle. The unresolved problem of software updates and short vendor support cycle combined with the lack of effort into security makes these devices an easy target. Companies not only need to update their technology stack for the evolving security landscape but also their mindset, processes and culture. This talk will shine a light on some of the challenges that today’s executives face in finding and fixing systemic problems in and outside of security through people, tools and understanding.
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...Paris Open Source Summit
"Cette présentation a pour but de présenter MirageOS et ses applications à l'écriture d'applications IoT sécurées. En particulier, MirageOS permet de développer des applications d'infrastructure réseau --- firewalls, proxy VPN, serveurs d'emails, etc. --- qui peuvent être déployées sur des processeurs embarqués de type ARMv8, ESP32 ou RISC-V. Nous expliquerons comment nous nous appuierons sur cette couche d'infrastructure entièrement open-source pour développer OSMOSE, une plateforme sécurisée et décentralisée permettant de construire des application IoT centrées sur l'utilisateur et le respect de sa vie privée.
"
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...Paris Open Source Summit
WarpScript est un langage de programmation open source conçu pour facilement requêter, manipuler et traiter des données de séries temporelles à la volée. Bien qu'il soit compatible nativement avec Warp 10, WarpScript peut aussi être connecté à d'autre sources de données. Dans cette présentation, nous allons détecter des anomalies à la volée en utilisant des fonctions WarpScript et répondre aux questions suivantes. Que doit-on définir comme une anomalie ? Quel algorithme correspond au type d'anomalie que l'on cherche à détecter ? Comment prendre en compte la possible saisonnalité de mes données ?
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...Paris Open Source Summit
ONLYOFFICE développée par Ascensio System SIA, est une suite bureautique open-source basée sur l'élément Canvas de HTML5, qui offre une gamme complète d’outils d’édition en ligne des documents texte, feuilles de calcul et présentations.
Cette présentation commence par l’aperçu des principes de base :
- support de tous les formats courants,
- riche éventail d’outils de la mise en forme,
- affichage du contenu de manière identique, quel que soit le navigateur utilisé,
- ressources permettant d’étendre les fonctionnalités des éditeurs,
- capacités avancées de co-édition,
- transfert de données sécurisé en temps réel.
Le nombre des universités et des écoles qui optent pour les alternatives open source aux solutions populaires offertes par les grandes marques, augmente chaque année. Les solutions de ONLYOFFICE sont actuellement utilisées par plus de 30 établissements d’enseignement en France tels que treize Universités de la Sorbonne, l’Université de Grenoble, l’Université de Nantes, l’École Nationale d'Ingénieurs de Brest, le l'établissement public Campus Condorcet, etc.
Dans cette partie, Jeremy Maton, l’Administrateur Systèmes et Réseaux à l’Institut de Biologie de Lille, va présenter comment ONLYOFFICE est intégrée au sein de leur unité de recherches et aide à organiser le flux de travail.
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...Paris Open Source Summit
Stratégie, risques liés à l'adoption de l'open source... Comment un modèle de gouvernance fort peut rendre votre parcours open source le plus efficace.
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...Paris Open Source Summit
Dans une banque vieille de 200 ans, il ne parait pas forcément évident au premier abord de convaincre d’une démarche Open Source. Et pourtant, nous l’avons fait !
Dans cette conférence, nous vous expliquerons comment l’idée de publier du code Open Source est née, quels sont les leviers et opportunités que nous avons actionnés pour convaincre nos différentes directions. Nous expliquerons également les difficultés rencontrées et les choix retenus.
Si vous aussi, vous êtes dans une banque, une assurance ou encore un groupe industriel, et que vous cherchez des clés pour initier une démarche Open Source, alors venez nous voir !
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...Paris Open Source Summit
#Business #Apps - Track - Gestion documentaire et collaboration
VITAM est une solution d'archivage open source utilisée pour des volumes élevés jusqu'à des milliards de documents. C'est un système distribué qui peut être implémenté aussi bien sur du bare metal que du cloud OpenStack, utilisant de 3 à plus de 100 VM.
Il est conçu pour être efficace et très facile à administrer. Les principales opérations techniques sont entièrement automatisées.
Cette présentation vous donnera les principales informations sur l'architecture VITAM, la façon de l'installer sur votre infrastructure et les pièges classiques à éviter. Elle vous permettra aussi de rencontrer des techniciens impliqués dans le développement de VITAM.
4. Pourquoi du stockage local ?
● Des WebApps, pas de "simples" sites Web...
● Proposer une expérience utilisateur identique, avec ou sans connexion
● Indispensable pour rivaliser avec les applications natives
● La gestion du offline, primordiale pour les applis mobiles
5. Les différents types de stockage
● Stockage local de données utilisateurs
● Cookies
● Local Storage (également appelé Web Storage, HTML 5 Storage ou
Dom Storage)
● Web SQL Database (WebDB)
● IndexedDB
● Caching
● Stockage de pages et ressources associées
6. Les challenges du stockage local
des données
● De la capacité !
● De la persistence, au-delà des refresh de page!
● Une manipulation des données à la fois puissante et souple
pour l'utilisateur
● Laisser à l'utilisateur le libre choix sur les données à échanger
avec le serveur
7. Cookies
● Stockage de petites quantités d’informations sous un format
clé/valeur
● Cookies de sessions vs Cookies persistents
● Utilisation de l’attribut “expires”
● Max 4KB de données par cookie et 20 cookies par domaine
● Les cookies transitent systématiquement entre le navigateur et
le site --> overhead
8. Manipulation des cookies
● Option 1 : Manipulation des cookies au niveau de l’enveloppe
HTTP
● Poser un cookie
Set-Cookie : NOM=VALEUR; domain=NOM_DE_DOMAINE;
expires=DATE
● Option 2 : Manipulation des cookies au niveau javascript
● Utilsation de l’objet document.cookie
● var expire = new Date();
var unAn = expire.getTime() + (365*24*60*60*1000);
expire.setTime(unAN);
document.cookie = "JDNCookie=Test; expires=" +
expire.toGMTString();
9. Implémentation "Local Storage"
● Stockage de données au format "Clé / Valeur"
● Les avantages :
● Un stockage réellement persistent
● Une API très simple à utiliser
● Mécanisme d'événements pour intercepter les modifications effectuées
sur l'espace de stockage
10. Local Storage
● Les limitations
● Plus grande capacité de stockage que les cookies mais limitation à 5MB
par domaine
● Stockage de données de n'importe quel type mais sous forme de chaînes
--> Sérialisation et Désérialisation nécessaires !
● Un mode de stockage peu propice aux structures de données complexes
11. Local Storage - Code
● L'accès au stockage local s'effectue par l'objet
window.localStorage
● Des méthodes simples de manipulation de données
● clear()
● getItem()
● value = window.localStorage.getItem(key)
● setItem()
● window.localStorage.setItem(key, value)
● removeItem
● Key
12. Local Storage - itération
Disponibilité d'une fonction 'length'
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var value = localStorage.getItem(key);
}
13. Local Storage - Evénements
Ajout d'un listener sur l'événement 'storage'
window.addEventListener("storage", function(event) {
var key = event.key;
var newValue = event.newValue;
var oldValue = event.oldValue;
var url = event.url;
var storageArea = event.storageArea;
// handle the event
});
14. Local Storage : détecter si la
fonctionnalité est supportée
Manuellement ou via l'utilisation de script spécialisé (ex:
Modernizr)
if (Modernizr.localstorage) {
// window.localStorage is available!
} else {
// no native support for local storage :(
}
15. Local Storage - Navigateurs
supportés
● Local Storage est aujourd'hui supporté par l'ensemble des
navigateurs fixes et mobiles.
16. Web SQL Database
● Toute la puissance (et les inconvénients) d'une base de
données relationnelle dans le navigateur
● Taille de stockage bien supérieure à 5MB (potentiellement
jusqu'à 1GB)
● La plupart des implémentations reposent sur SQLLite
● Implémentation supportée par les navigateurs mobiles
18. Web SQL Database - Ouverture de
BDD
var db = window.openDatabase(
"MyDB",
"",
"My super database",
1024);
19. Web SQL Database
Vérification de la version
Gérer les versions de la base et la création des tables
if (db.version != "1") {
db.changeVersion(db.version, "1", function(tx) {
// User's first visit. Initialize database.
var tables = [
{ name: "users", columns: ["id INTEGER PRIMARY KEY", "name TEXT"]},
{ name: "groups", columns: ["id INTEGER PRIMARY KEY", "name TEXT"]},
{ name: "users_groups", columns: ["userId INTEGER", "groupId INTEGER", date TEXT"]}
];
for (var index = 0; index < tables.length; index++) {
var table = tables[index];
tx.executeSql("CREATE TABLE " + table.name + "(" + table.columns.join(", ") + ");");
}
}, null, function() {loadData(db);}
);
}else {
// User has been here before, no initialization required.
loadData(db);
}
20. WebDatabase : insertion de
données
db.transaction(function(tx) {
for (var index = 0; index < myTable.length; index++) {
var myValue = myTable[index];
tx.executeSql("INSERT INTO users (name) VALUES (:name);", [myValue],
function(tx, results) {
// Do something here after the insert
});
}
});
21. WebDatabase : lecture
d'enregistrements
db.readTransaction(
function(tx) {
tx.executeSql("SELECT * FROM users",
function(tx, results) {
var rows = results.rows;
for (var index = 0; index < rows.length; index++) {
var item = rows.item(index);
var element = document.createElement("div");
element.textContent = item.name;
document.getElementById("usersList").appendChild(element);
}
});
}
);
22. WebDatabase : support des
navigateurs
● Fonctionnalité non supportée par Firefox
● A venir dans IE
23. IndexedDB
● Une alternative à WebDB avec les mêmes objectifs : fournir une
solution de stockage local avancé pour les applications HTML5
● Repose sur une implémentation "NoSQL" basée sur un concept
de "DataStore"
● L'ensemble des accès est asynchrone
24. IndexedDB - Code
Ouverture de la base et vérification de la version
var request = window.indexedDB.open("MyDB“, "My great database");
request.onsuccess = function(event) {
var db = event.result;
if (db.version != "1") {
// User's first visit, initialize database.
var createdObjectStoreCount = 0;
var objectStores = [
{ name: "users", keyPath: "id", autoIncrement: true },
{ name: "groups", keyPath: "id", autoIncrement: true },
{ name: "users_groups", keyPath: "", autoIncrement: true } ];
function objectStoreCreated(event) {
if (++createdObjectStoreCount == objectStores.length) {
db.setVersion("1").onsuccess = function(event) { loadData(db);};
}
}
for (var index = 0; index < objectStores.length; index++) {
var params = objectStores[index];
request = db.createObjectStore(params.name, params.keyPath, params.autoIncrement);
request.onsuccess = objectStoreCreated;
}
} else {
loadData(db);
}
};
25. IndexedDB : insertion de données
var request = window.indexedDB.open("MyDB", "My great database");
request.onsuccess = function(event) {
var objectStore = event.result.objectStore("users");
for (var index = 0; index < users.length; index++) {
var user = users[index];
objectStore.add(user).onsuccess = function(event) {
document.getElementById("display").textContent = "Saved record
for " + user.name + " with id " + event.result;
};
}
};
26. indexedDB : lecture
d'enregistrements
var request = window.indexedDB.open("MyDB", "My great database");
request.onsuccess = function(event) {
// Enumerate the entire object store.
request = event.result.objectStore("users").openCursor();
request.onsuccess = function(event) {
var cursor = event.result;
// If cursor is null then we've completed the enumeration.
if (!cursor) {
return;
}
var element = document.createElement("div");
element.textContent = cursor.value.name;
document.getElementById("usersList").appendChild(element);
cursor.continue();
};
};
28. Synthèse : support des browsers
source : http://www.html5rocks.com/en/features/storage
29. Wrappers javascript
● Lawnchair :
● une interface unifiée qui supporte les différentes implémentations
● IndexedDB Polyfill
● Wrapper IndexedDB autour de WebSQL
30. Stockage des pages et ressources
associées dans le navigateur
● Utilisation d'un fichier "Manifest" permettant de décrire le
comportement des ressources
● Un seul fichier Manifest à la racine de la WebApp, toutes les
pages de la WebApp pointant sur ce fichier
31. Structure d'un fichier Manifest
● Un MIME Type spécfique: text/cache-manifest
● Utilisation d’une extension “ .appcache”
● Header d'un fichier manifest : CACHE MANIFEST
● 3 sections :
● CACHE : liste les ressources devant être obligatoirement mises en
cache
● NETWORK : liste les ressources nécessitant obligatoirement d'être
connecté. La wilcard * permet d'ajouter au cache les ressources
référencées sur d'autres domaines
● FALLBACK : liste les ressources à afficher lorsque la page consultée en
offline n'est pas dans le cache
32. Exemple de fichier Manifest
CACHE MANIFEST
# rev 42
NETWORK:
/tracking.cgi
CACHE:
/clock.css
/clock.js
/clock-face.jpg
FALLBACK:
/ /pageNotFound.html
33. Manipulation du cache par
Javascript
● Différents événements renvoyés lorsque le navigateur lit
lanifeste
● Accès programmatique au cache : window.applicationCache
var appCache = window.applicationCache;
appCache.update();
if (appCache.status == window.applicationCache.UPDATEREADY) {
appCache.swapCache();
}
34. Trucs et astuces sur AppCache
● Utilisez des outils de génération automatique du Manifeste (ex:
HTML5 BoilerPlate)
● En mode développement, configurez votre serveur Web pour
un TTL de 0 pour servir le fichier Manifeste.
● Possibilité de voir le contenu du cache
● Sous Chrome : chrome:appcache-internals
35. Détection des modes offline / online
● fonction navigator.online()
● permet de détecter si le navigateur est connecté
● Evénements :
● document.body.addEventListener("online", function () {...}
● document.body.addEventListener("offline", function () {...}
● Attention, navigator.online() renvoie true dès qu’on est connecté
à un réseau mais sans nécessairement de connexion internet
● Possibilité d’implémenter un polling par xmlHTTPRequest