Google updates App Engine

Posted By: Hassane Moustapha On vendredi 3 décembre 2010


Google vient de lancer la mise à jour la plus importante cette année de Google App Engine, sa plateforme d'hébergement d'application Java et Python en mode Cloud Computing.

Cette version 1.4.0, inclut de nouvelles fonctionnalités, l'amélioration de certains services existants ainsi que la levée de certaines limitations et restrictions.

Parmi les nouveautés, « The Channel API » est un nouveau service qui permet aux applications de notifier les navigateurs sans que ces derniers soient contraints d'interroger régulièrement l'application serveur via JavaScript.

Le service « Always On », permet de réserver trois instances d'applications pour la somme de 9$ par mois. Le but étant d'en faire usage en cas de montées en charge pour garantir la haute disponibilité des applications aux trafics variables.

Always On est d'autant plus efficace qu'il a été renforcé avec « Warm Up Requests », un service qui anticipe le besoin d'utiliser d'autres instances et les charge en mémoire avant leur sollicitation.
Cela réduit le temps de latence nécessaire au démarrage de ces instances.

Du côté de la levée des limitations, Google vient de revoir à la hausse le temps limite d'exécution de tâches de fond, qui était jusqu'à cette version limité à seulement 30 secondes.
Les développeurs peuvent donc à présent programmer des tâches de fond pouvant aller jusqu'à 10 minutes, sans interruption.

Les limites de la taille des requêtes à certaines API ont aussi été revues à la hausse.
URLFetch qui permet d'interroger des ressources en ligne peut récupérer des données allant jusqu'à 32Mo.
La même taille peut être désormais utilisée pour le système de gestion de mémoire cache Memcache et l'API Image.

La taille limite des pièces jointes des e-mails envoyées par les applications hébergés sur Google Engine App a elle aussi été fixée à 10Mo contre 1 Mo précédemment.

De quoi ravir les développeurs Java et Python.

En attendant que Google offre le support d'autres langages.

Source : le blog de Google Engine

Episode 2 : Views, Partials, Formulaires et DataMapper

Posted By: Hassane Moustapha On lundi 27 septembre 2010

Hello,

Nous continuons notre série avec l'épisode 2 où nous parlerons des vues, des vues partielles, des formulaires et de DataMapper.

Dans l'article précédent, nous avons appris à installer sinatra et à écrire notre première application :)
Aujourd'hui nous allons faire des trucs un peu plus intéressants. Nous allons :
- Créer un layout pour notre application
- Créer des vues spécifiques aux actions utilisées
- Apprendre à utiliser les vues partielles
- Créer des formulaires
- Envoyer les données du formulaire à notre application sinatra (multiple block parameters)
- Enregistrer ses données dans une base de données

Que des choses simples mais largement suffisantes pour créer une application web dynamique répondant aux besoins.
Nous allons créer une application AppEngine basée sur Sinatra !

1 - appcfg.rb generate_app serie

La génération de l'application prendra quelques secondes (environ 30 secondes).
Une fois notre application générée, nous pouvons passer au code et nous amuser.

Voici l'architecture de l'application générée.

Notons que le fichier "main.rb" que j'ai créé n'a pas été généré par "appcfg". Et c'est dans ce "main.rb" que nous aurons l'essentiel de notre application : traitements, routages etc.
 Le fichier Gemfile contient l'ensemble des dépendances que notre application peut avoir.

Et now au boulot :
Remplissons notre "main.rb" avec ce code :












Pour répondre à la requête GET, l'application renvoie la vue 'index' en utilisant le moteur de template erb.
La vue "index" doit se trouver dans le repertoire "views" qui se trouve à la racine du projet et doit être enregistrée sous le nom "index.erb".


2- Création de la page d'accueil :

      Jetons un coup d'oeil sur le contenu de la vue "index" :
Sur cette page, nous avons juste un message de bienvenue et un lien pour poster un nouveau message !
Cliquons sur ce lien et créons un message.

Nous devons préparer notre application pour qu'elle puisse répondre à cette requête.
Notre main.rb devient  :
3 - Création d'un mécanisme pour l'ajout de nouveaux messages 

Passons maintenant à la création de la vue 'nouveau.erb' qui nous permettra de poster de nouveaux messages.
Et surtout n'oublions pas que toutes les vues sont placées dans le répertoire VIEWS !

Notre vue nouveau.erb va ressembler à ça :




















Je pense qu'il n'y a pas grand chose à dire sur cette vue! Elle contient un formulaire très simple.
Passons maintenant au "core" de notre application et voyons à quoi elle ressemble actuellement :

























Beaucoup de nouvelles choses :) je sais !
Explications :
Nous avons des données qui proviennent d'une vue; ces données (le message en gros ) doivent être enregistrées. Et pour ce faire, nous allons utiliser une base de données et passer par une couche qui nous facilitera la communication avec cette base de données!  Cette couche c'est DataMapper.

Je ne vais pas entrer dans les détails et dire comment fonctionne DM (visitez son site web ...).
Nous avons créé un MODEL (la classe message) pour notre entité Message avec les propriétés (id, nom, email et body) et inclus DataMapper::Resource pour lui permettre d'agir comme un 'document'.
Nous avons ensuite défini un point de sauvegarde que nous avons appelé 'default' pour dire à DataMapper où est ce qu'il doit stocker nos données; et dans cet exemple nous utilisons DataStore de Google AppEngine.

La dernière modification était l'ajout du bloc de code qui permet l'enregistrement du message et la redirection vers la vue index ( redirect '/' ).

4 - Affichage des messages créés

A ce stade nous pouvons afficher les messages enregistrés dans notre base de données et nous allons utiliser la vue "index.erb" pour le faire.
Alors modifions cette vue!
















Nous vérifions que des messages existent déjà ! et les afficher !
PS: le test (if @messages do) n'est pas obligatoire ! il est là juste pour souci de clarté :)

Modifions aussi le bloc qui gére la vue "index.erb" :
Actuellement, nous pouvons créer des messages et les afficher.
Il serait cool de pouvoir commenter chacun des messages si l'on veut bien le faire ! Et pour le faire facilement on peut créer une vue partielle et l'utiliser quand on en a besoin. Le seul hic est que sinatra ne supporte pas les vues partielles (pas par défaut) :( 
Aucun problème :) nous allons apprendre à Sinatra comment utiliser les vues partielles et ce grâce au langage ruby !
Nous allons rajouter une seule methode dans un bloc à l'intérieur de la classe MonApplication et avant toutes methodes :

   helpers do
        def partial (la_vue, locals = {})
              erb(la_vue, :layout => false, :locals => locals)
        end
    end

Nous pouvons désormais utiliser les 'partials' depuis toutes nos vues.
Ex : <%= partial(:commentaire, :message => message.id) %>

Et now .... la fin de cet épisode!
Dans le prochain épisode, nous allons apprendre à créer des "composants" web et des widgets (Rack applications) et surtout comment intégrer d'autres services Google à notre application AppEngine...

Waiting for your feedback !

Série Google AppEngine : Sinatra On AppEngine

Posted By: Hassane Moustapha On lundi 20 septembre 2010


Hi guys !

Dans ce gtug, nous essayons tous de partager nos connaissances et expériences. 
Chose que j’essaie de faire ! Et je veux parler de Google AppEngine et de sinatra pour aider les "intéressés" à écrire des applications  web (sites et services) et les héberger sur AppEngine.

Je commence cette série par une présentation de ce que nous aurons à utiliser :
         --> Sinatra
           --> Rack
           --> DataMapper
           --> DataStore

Let's start !

         Sinatra n'est pas un framework mais une bibliothèque qui vous permet de construire pratiquement n'importe quel type d'applications basées sur le Web d'une manière très simple et super sexy aussi. Lorsque vous codez en Sinatra vous n'êtes lié que par HTTP et votre connaissance du langage Ruby.

            Les applications Sinatra sont généralement écrites dans un fichier unique. Elles démarrent et s'arrêtent presque instantanément et n'utilisent pas beaucoup de mémoire et servent les demandes (requêtes) de façon très rapide. Mais, elles offrent aussi presque toutes les fonctionnalités principales que vous attendez d'un  framework web complet : les ressources RESTful, les templates (ERB, haml / Sass, et Builder), les types MIME, fichiers transmis en continu, etags, le développement en mode de production, gestion des exceptions.

         Sinatra est compatible avec tous les frameworks de TEST écrits en Ruby et est aussi multithread (par défaut), mais vous pouvez vous passer de cette "option" pour envelopper certaines de vos actions(traitements) dans un mutex indépendant.

Vous pouvez utiliser Sinatra avec toutes les bases de données en passant par ActiveRecord, DataMapper ou certains autres ORM
Une dernière chose dans cette brève présentation : Sinatra est basée sur Rack et utilise mongrel par défaut.


Installation de Sinatra :

Sur windows :
        c:> gem install sinatra
Sur Linux/Os X :
          sudo gem install sinatra

J'avoue que l'installation est assez compliquée :)

Première application Sinatra

Nous allons écrire une application très simple et que l'on fera évoluer step by step.

require 'sinatra'

get '/' do
    "Hello world:"
end

Enregistrons ce bout de code dans un fichier que nous allons appeler "mon_app.rb" et lançons le comme suit :

       ruby mon_app.rb

Notre application est disponible sur ==> http://localhost:4567.


Blake Mizerany le créateur de Sinatra dit qu'il est préférable d'apprendre (ou d'essayer) Sinatra avant Ruby on Rails:
  
"Lorsque vous découvrez un framework aussi large, vous êtes présenté à une abondance d'idées, de contraintes, et de magie. Pire que tout, on vous impose un modèle. Dans le cas de Rails, c'est le MVC. MVC ne correspond pas à la plupart des applications web au tout début ou pas du tout. " Blake Mizerany


Retour au code ! Essayons de comprendre ce que nous avons écrit :

require 'sinatra' ==> import de la gem (ou bibliothèque)

get '/' do
     "hello wolrd"
end

On avait dit (plus haut) qu'avec Sinatra on n'a affaire qu'au HTTP et aux objets Ruby :
sans entrer dans les détails de ce que c'est une requête HTTP on dira pour chaque type de requête on a un bloc de code à exécuter.
La chaine de caractères "hello world" est renvoyée à tout agent ayant émis une requête HTTP avec le verbe GET et sans paramètre.

J'espère que c'est assez clair :) Sinon vous pourrez jeter un coup d'oeil sur la documentation sur le site officiel de sinatra (http://sinatrarb.com).

Ceux qui ont déjà eu à utiliser des frameworks web se demanderont au début "où mettre telle ou telle autre chose ?"  La réponse est assez simple "Tout type de choses a sa place" : les vues (ou pages web) sont placées dans le répertoire "views" à la racine du projet, les css, js et images dans le répertoire "public".

Un exemple :
  
      Mon_Projet_Sinatra\

       -- views\
                        -- layout.erb
                        -- index.erb
       -- public\
                        js\
                            -- mes_scripts.js
                        css\
                            -- style.css
                        images\
                           -- vos images 

       -- mon_app.rb
       -- Gemfile                                                                                                                        

C'est à peu près à ça que ressemblent les applications sinatra (pas toutes).

C'est la fin de cette première partie! Dans le prochain article, nous allons jeter un coup d'oeil sur les vues (le layout général et les vues spécifiques) et introduire DataMapper et apprendre à l'utiliser dans une application Sinatra.

Google Ramadan Meetup The 2nd Round

Posted By: Idriss On mercredi 25 août 2010

Venez vous inscrire suivant ce lien et faites passer l'information https://spreadsheets.google.com/viewform?formkey=dF9KdlUteXBuRmloRlFRalhFdktuNUE6MQ
C'est ce samedi a Lhotel Sokhamon

Google Ramadan Parties avec Gtug-Dakar

Posted By: Hassane Moustapha On mardi 10 août 2010

S'inscrire en suivant le lien :
https://spreadsheets.google.com/viewform?formkey=dFlTWUlHTlh5c2dFSzhIRkZOcU9TVnc6MQ

Introduction à AppEngine, Gwt

Posted By: Hassane Moustapha On lundi 28 juin 2010

Bonjour tout le monde. Voici une introduction à Google AppEngine et GWT. Je ne serai pas long ... Bonne lecture.
NB : toutes vos remarques et/ou suggestions sont les bienvenues.

Google Maps et le guide du développeur .

Posted By: Hassane Moustapha On dimanche 13 juin 2010

Bonjour tout le monde :) pendant que je fouinais sur internet je suis tombé sur quelques articles qui traitent de Google Maps et ils sont en français :) et j'ai pensé à vous.

Les liens :

- Google Maps v2
- les 5 tutoriels sur Google Maps v3

Django On AppEngine ..

Posted By: Hassane Moustapha On mercredi 9 juin 2010

Bonjour et bienvenue sur Gtug-Dakar, le blog sur "tout" ce qui est en relation avec le développement d'application web avec Google AppEngine . Le but de cet article est de suivre l'avancé de Google AppEngine et de ce qu'il est possible de faire avec.
En attendant, voici une vidéo d'introduction sur le développement d'une petite application Django de livre d'or :

Introduction à jQuery et Google Maps

Posted By: Hassane Moustapha On mercredi 2 juin 2010

Il existe déjà une multitude de techniques différentes afin d'afficher une carte Google Map dans votre page web. Voyons en une de plus aujourd'hui grâce à l'utilisation de jQuery et des API googles. Voyons donc comment faire interagir les 2 ensembles.

Intégration de l'API Google Maps et de jQuery

Tout d'abord, il vous faudra obtenir votre clé (API KEY) en vous inscrivant sur le site de google ; http://code.google.com/apis/maps/signup.html. Vous aurez besoin de cette dernière à l'étape suivante.

Chargeons ensuite jQuery et l'API dans vos pages :
Remplacer "VOTRE_CLE_API" par la clé que vous avez obtenue. En utilisant la librairie Google AJAX Libraries API, vous êtes en mesure de charger les librairies JavaScript dont vous avez besoin directement des serveurs Google.

Afin de créer une carte de base, nous avons besoin d'un conteneur
et d'un peu de CSS afin d'affecter une taille à la carte.

HTML

CSS

Afin de créer une carte, nous allons créer une nouvelle instant de GMap2. Par la suite nous allons positionner le centre de la carte sur la localisation désiré. Nous avons imbriqué le code à l'intérieur de la fonction $(document).ready de jQuery afin d'exécuter ce code une fois la page chargée.
$(document).ready(function(){

   var map = new GMap2(document.getElementById('map'));

// Centrer la carte sur la Latitude et Longitude (X,Y)
var MapCenter = new GLatLng(44.797916,-93.278046);
// Positionnement de la carte et niveau du Zoom
map.setCenter(MapCenter, 8);
});

Insérons maintenant quelques points sur notre carte simple.
// Insertion de 10 points aléatoire

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();

var latSpan = northEast.lat() - southWest.lat();
var markers = [];
for (var i = 0; i < point =" new" marker =" new">
Nous allons maintenant pouvoir utiliser jQuery et Google Maps.
Utilisons maintenant le tableau des marqueurs afin d'ajouter de l'interaction
avec jQuery.
$(markers).each(function(i,marker){

GEvent.addListener(marker, "click", function(){
map.panTo(marker.getLatLng());
});
});
Dans la boucle, nous allons utiliser l'espace de nom GEvent afin d'attacher
un événement sur le clique de chaque marqueur. La fonction panTo() permet de
centrer la carte sur le marqueur cliqué.

Insérons maintenant une liste des marqueurs cliquables à droite de notre carte
à l'aide d'une liste<>
    .

    HTML

      < id="list">

    CSS


    Revenons à notre boucle, et ajoutons une étape à notre fonction afin
    que cette dernière ajoute un lien cliquable dans notre liste
      .
      $("").html("Point "+i).click(function(){ map.panTo(marker.getLatLng()); })
      
      .appendTo("#list");

      Ajoutons des boites de message personalisé à notre carte.

      HTML

      CSS

      #message { position:absolute; padding:10px; background:#555; color:#fff;
      
      width:75px; }

Nous devons maintenant placer le bloc
à l'intérieur de la carte. Pour ce faire, nous allons utiliser jQuery afin
d'ajouter le tout à un objet. La visualisation de la carte est séparée en panneau.
Chaque panneau est un bloc
une par-dessus l'autre. Il suffit de récupérer le panneau où l'on désire ajouter
notre bloc
à l'aide de la méthode map.getPane(PANE). Dans le cas actuel,
G_MAP_FLOAT_SHADOW_PANE est le panneau que nous allons utiliser pour attacher
les messages personnalisés.
$("#message").appendTo(map.getPane(G_MAP_FLOAT_SHADOW_PANE));
Afin d'afficher le message à l'endroit désiré, nous devons séparer l'action du
clic en une fonction séparée. Pour ce faire,
remplacer map.panTo(marker.getLatLng()); avec displayPoint(marker,i);
qui appellera la fonction ci-dessous;
function displayPoint(marker, i){

map.panTo(marker.getPoint());

var markerOffset = map.fromLatLngToDivPixel(marker.getPoint());
$("#message").show().css({ top:markerOffset.y, left:markerOffset.x });
}
C'est ici que la magie s'installe! map.fromLatLngToDivPixel(GLatLng);
permets de convertir une latitude et une longitude d'un marqueur en pixel.
Cette dernière retourne donc une position en pixel (x,y) en fonction de la
gauche et du haut de la carte. Afin de terminer en beauté, ajoutons donc un
peu de visuels à tout ceci. Nous allons donc ajouter un événement suite au
défilement de la carte. Lorsque cette dernière arrête de défiler, nous allons
ajouter un peu de "fadeIn".
function displayPoint(marker, index){

$("#message").hide();

var moveEnd = GEvent.addListener(map, "moveend", function(){
var markerOffset = map.fromLatLngToDivPixel(marker.getLatLng());
$("#message")
.fadeIn()
.css({ top:markerOffset.y, left:markerOffset.x });

GEvent.removeListener(moveEnd);
});
map.panTo(marker.getLatLng());
}



source : pckult

Google Maps On Ruby On Rails en 13 étapes (très) faciles

Posted By: Hassane Moustapha



L'API Google Maps est sans doute l'une des API les plus populaires disponibles sur le web aujourd'hui. Il offre webmasters la possibilité d'ajouter des fonctionnalités de cartographie, semblable à maps.google.com, à leurs sites Web. Toutes les fonctionnalités de Google Maps, y compris les marqueurs, les orientations, options de zoom et vue satellite ne sont que quelques lignes de code de suite. Mais avant de commencer à utiliser la portion de code, vous aurez besoin d'une clé API Google Maps. Obtenir une clé API Google Maps prend une minute et ne coûte rien. Connectez-vous à votre compte Google (je suis sûr que vous en avez un) et la tête aux http://code.google.com/apis/maps. Sur le côté droit vous verrez un lien
"Sign up for a Google Maps API key", où vous pourrez tout simplement cliquer sur l'étape 1 «Inscrivez-vous pour un" Google Maps API clés.
Ensuite, entrez le nom domaine de votre site (ça peut être localhost aussi :) ), acceptez les termes et cliquez sur le bouton"Générer API Key" .

Sur la page suivante votre clé API unique apparaîtra. Assurez-vous que vous la copiez et collez la dans un endroit sûr (lol). Tout juste en bas de votre clé il y aura des exemples en JavaScript pour vous aider à démarrer rapidement.

Dans ce tutoriel, nous allons générer un code similaire à l'utilisation de certains plugins Ruby que l'on va utiliser avec Rails. Le plus populaire plug-in est le "Cartes Jaunes" pour Ruby, également connu sous le nom YM4R. Comme il existe d'autres API de cartographie écrites en Ruby.

1. Créons notre application rails :
rails map_example -d mysql




2. Créez la base de données 'map_example_development' et supprimez le "public/index.html"

(rake db:create)




3. Ajoutons un controller et l'action index


ruby script/generate controller location index (pour rails <= 2.3.8) rails generate controller location index (pour rails >= 3)


4. Installez le plugin YM4R/GM ruby script/plugin install git://github.com/queso/ym4r-gm.git rails plugin install git://github.com/queso/ym4r-gm.git 5. Ajouter une vue frontend.html.erb dans app/views/layouts contenant ce code:

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> < html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> < head> < title>Google Maps Rails Exampletitle> < /head> < body> < /body> < /html>


Notez que nous avons inclus deux lignes YM4R/GM dans la section head. Le GMap.header comprendra les fichiers JavaScript nécessaire tout en ligne the@map.to_html génère JavaScript basés sur les paramètres passés dans l'objet de la carte. Nous allons créer l'objet de la carte @map dans notre contrôleur location. 6. Ajouter cette ligne dans le app/views/location_controller: layout "frontend" 7. Et mettre ce code dans la méthode (action) index du controller location:

coordinates = [41.8921254,-87.6096669] @map = GMap.new("map") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init(coordinates,14) @map.overlay_init(GMarker.new(coordinates,:title => "Navy Pier", :info_window => "Navy Pier")) Premièrement, nous positionnerons notre carte coordonnées dans un tableau. Le premier nombre est la latitude et la seconde est la longitude. Ces coordonnées point de Navy Pier à Chicago, Illinois. Si vous voulez essayer une autre région pour cet exemple, cet outil facile (http://stevemorse.org/jcal/latlon.php) vous offre la latitude et la longitude de n'importe quelle adresse vous souhaitez utiliser .. Ensuite, nous avons mis l'objet de la carte @ passer dans notre avis. L'objet de la carte @ contient une nouvelle instance de la classe GMap, la «carte» de chaîne est l'id de la div qui contiendra la carte. La ligne suivante active contrôles pour notre carte. La grande carte active l'option de zoom alors que le type de carte active différents points de vue comme une carte ordinaire, le satellite ou le relief. Ensuite, nous configurons le centre de la carte par défaut et le zoom. Nous avons d'abord passer les coordonnées de tableau afin de notre emplacement sera centré, puis nous passons dans un entier pour déterminer le niveau de zoom. Cet entier peut être comprise entre 0 et 22, plus le nombre plus le zoom de la carte sera. Enfin, on ajoute un marqueur de superposition. Le premier argument est le coordonne et c'est le seul argument requis besoin d'ajouter un marqueur. Le titre et info_window sont tous deux en option, le titre est le texte qui s'affiche lorsque la souris est inactive sur le marqueur. 8. le code de la vue app/views/location/index.html.erb :

<h1>Google Maps Rails Exampleh1>


9. Un peu de routing dans config/routes.rb: map.root :controller => "location", :action => "index" 10. Lancez votre application Rails et une carte devrait apparaître. Actuellement, notre carte est statique et l'emplacement ne peut pas changer. Il serait agréable d'avoir une option pour modifier l'emplacement par un champ de texte. Comme il est un champ de texte, l'utilisateur sera en mesure de taper n'importe quel endroit possible et attendons de nos applications pour le Plan. Nous allons avoir à convertir le texte entré par l'utilisateur en coordonnées géographiques. Semble compliqué, heureusement il ya une autre rails plug-in qui peut être utile ici et que plug-in Google est-Geocoder. Google Geocoder trouverez 11. Installez le plugin Google-Geocoder: ruby script/plugin install git://github.com/tobstarr/google-geocoder.git

<br /> >Enter a new Location to map:label> /> <% end %> Ajouter ce formulaire à toutes les deux vues que vous avez créées. 13. Et maintenant ajoutons la méthode create au location controller:

def create new_location = params[:new_location] gg = GoogleGeocode.new("Your API Key Here") gg_locate = gg.locate(new_location) coordinates = [gg_locate.latitude, gg_locate.longitude] @map = GMap.new("map") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init(coordinates,14) @map.overlay_init(GMarker.new(coordinates, :title => new_location, :info_window => new_location)) render :action => "index" end Nous avons d'abord défini la variable new_location à la valeur du paramètre new_location. Puis nous passons la clé API Google Maps à une nouvelle instance de la classe GoogleGeocode, cela nous permettra d'exécuter des méthodes telles que «location», qui reviendra avec les coordonnées de l'information. Ensuite, nous configurons les coordonnées du tableau et le reste est en terrain connu. La seule différence, c'est que nous établissons le titre et le texte de la fenêtre d'info à l'entrée de l'utilisateur et, enfin, nous réutilisons l'indice modèle. Nous avons pu obtenir une carte fonctionne en utilisant le plug-in YM4R. Puis nous avons été en mesure de localiser des lieux sur la carte saisis par l'utilisateur en utilisant la Geocoder plug-in Google. Vous pouvez facilement étendre cet exemple en donnant aux utilisateurs la capacité de mettre sur la carte plusieurs endroits à la fois.


L'article d'origine : GoogleMaps

Sinatra On AppEngine

Posted By: Hassane Moustapha On dimanche 30 mai 2010

Bonjour tout le monde.
Aujourd'hui nous allons apprendre à écrire une simple application Sinatra.
Sinatra est un DSL, écrit en Ruby, pour la création rapide d'applications web et avec un effort minimal.
Commençons par l'installation de Sinatra :
> gem install sinatra
Une fois que nous avons installé sinatra nous pouvons écrire notre première application (Hello world).

# hello_world.rb
require 'rubygems'
require 'sinatra'

get '/' do
"Hello world"
end

> ruby hello_wolrld.rb
Notre application est disponible sur http://localhost:4567

Sinatra nous donne un minimum pour faire des applications web mais nous permet de profiter de la puissance de ruby et de ses Gem.
Vous avez aussi la possibilité d'utiliser tous les modules de rails (vu que ce son des Gem) dans vos applications sinatra.
Une nouvelle gem (sinatra_more) vous permet d'utiliser les helpers de rails dans une application Sinatra.










Le but de ce mini article est d'utiliser Sinatra et AppEngine alors parlons un peu de AppEngine.
Google AppEngineest en fait une plate-forme qui vous permet de concevoir et d’héberger vos applications directement sur les serveurs de Google. Ainsi, toutes vos applications se trouvent au même endroit et l’infrastructure est gérée par le leader des entreprises web.

Installons AppEngine :
>gem install google-appengine
Pour Python ou java, vous trouverez un SDK ici.

Pour toute application que vous voulez héberger sur AppEngine vous aurez besoin d'un fichier de configuration de type rack. Le nom de se fichier est "config.ru" et voici son contenu :
require 'appengine-rack'
AppEngine::Rack.configure_app(
:application => 'application-id', # <= Vous mettez le nom de l'application :version => 1)
require 'hello_world.rb'
run
Sinatra::Application
Et now passons au déploiement :
toujours aussi simple :)
appcfg update helloworld # helloworld est le répertoire qui contient l'application .

snipt

Fourni par Blogger.