The Old Lady #paris #eiffel #tower #instagram
Kevin Whinnery: Comparing Titanium and PhoneGap
A common question I get asked at developer events and conferences is how Titanium compares to PhoneGap. I thought I would take some time to explain how each technology works at a high level, and assess how the two technologies compare to one another.
From 10,000 feet, PhoneGap and Titanium…
Source : whinnery
JS Inheritance in 15mins or Less
Inheritance and encapsulation is an essential tennant of OOP. JS does things a little bit differently than most languages, we’ll go over those differences in this post. It’s assumed you already have a basic familiarty w/ OO JS, if not head over my OO JS in 15mins or Less tutorial to cover the basics.
Classes
JavaScript technically doesn’t have classes but it does have constructors. Constructors act as containers for class variables and methods just like the class statement in other languages. Let’s start by creating a constructor function.
function Person() {};Looks good, to bad it’s empty. Let’s tack on an instance variable and a method that can access that instance variable w/ prototype (Need a crash course on prototype in JS? See the posts by Yehuda Katz or Angus Croll).
Person.prototype.type = "Human"; Person.prototype.sayType = function() { console.log("Type: " this.type); } var me = new Person(); me.sayType(); // "Type: Human"
Source : beardedocto
This is the mobile app I’m working on in my spare time ; if I replaced Ruby/Sinatra with Node, it would be 100% JavaScript :)
Why isn’t there a BASIC interpreter for tablets?
Back in the 80’s, home computers like the Commodore 64 had an integrated BASIC interpreter. Any kid could learn programming on these machines. Actually, this was one of the major selling points to parents: not only your child will be able to use educational software, he will also learn programming ! (of course most of the kids just used the thing for games)
BASIC had a fantastic main feature: as a language designed for beginners, it was really easy to learn, with instructions that looked like simple human words. Much easier than current popular interpreted languages like JavaScript.
BASIC became a starting point for many children who tried to reproduce other software, or just invent something funny or useful. When they reached the limits of BASIC, it motivated them to learn more complex languages like assembler or C, and more computer science concepts.
Unfortunately, today no tablet comes with an interpreter built-in ; actually some tablet vendors seem to actively discourage such interpreters.
This means that no one can learn how to program on a tablet.
This is a real shame, because a tablet is a formidable tool to learn and not only watch movies and play games.
A tablet BASIC would need to allow anyone to create applications that looks like real native apps, even if they didn’t perform as well.
None of these home brew apps could possibly compete with professional apps available on the various stores and marketplaces ; but it could help a whole generation of kids to learn programming.
Peut-on vraiment déployer en production sur Heroku?
Heroku est une plateforme PaaS assez remarquable, largement documentée, qui permet de déployer très rapidement des applications Ruby, Java ou PHP, et qui offre un modèle de montée en charge très granulaire.
Pour une application qui vise des utilisateurs Européens, Heroku pose malheureusement un problème : elle n’est actuellement disponible que sur la région US-East d’Amazon Web Services.
La première conséquence est la latence : sur de petites requêtes, il n’est pas rare de voir des latences de 200ms pour faire l’aller-retour transatlantique, alors que l’on pourrait typiquement avoir dans les 60ms sur un data center situé en Europe (Irlande pour AWS ou Windows Azure par exemple), et moins encore pour un data center situé en France.
Cette latence est particulièrement handicapante pour des applications temps réel, jeux ou mobiles, qui vont peut-être faire de nombreuses petites requêtes, et pour qui la rapidité et la fluidité sont importantes!
La deuxième problème est encore plus sérieux : Heroku n’adhère pas au programme “Safe Harbor” qui garantit l’intégrité des données personnelles d’un citoyen de l’Union Européenne lorsqu’elles sont hébergées par un prestataire établi aux Etats-Unis (plus d’informations sur le site de la CNIL). Sans cette adhésion, il est tout simplement interdit par les lois européennes de transférer des données personnelles au prestataire!
Ces deux freins rendent concrètement très difficile pour une société française le déploiement d’une application critique en production sur Heroku, ce qui est bien dommage!
Déployer vers de multiples environnements avec Capistrano Multi-Stage Extension
Il est possible avec Capistrano de gérer plusieurs environnements cible pour le déploiement d’une application, grâce à l’extension “Multi-Stage”. Voici un résumé de la mise en oeuvre, pour une application Sinatra en l’occurence.
Tout d’abord, installons la gem:
gem install capistrano-ext
Puis je vais modifier mon Capfile pour ajouter la définition de mes différents stages, le stage par défaut, et charger l’extension:
set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'
A part ça, je laisse le reste de mon Capfile inchangé ; je vais typiquement y trouver des choses comme :
set :domain, 'toto.com'
set :application, "mon_appli"
set :repository, "git@github.com:tomconte/monappli.git"
set :scm, :git
set :branch, "master"
set :deploy_via, :remote_cache
ssh_options[:forward_agent] = true
Et je vais maintenant déplacer dans des fichiers de configuration séparés les valeurs qui changent entre mes stages, par exemple ici, les adresses des serveurs (qui seront différents en production et en staging).
Ces fichiers doivent être rangés dans config/deploy :
mkdir -p config/deploy
Et je vais par exemple mettre dans production.rb :
set :user, 'ec2-user'
role :web, "ec2-xx-xx-xx-xx.eu-west-1.compute.amazonaws.com"
Et ceci dans staging.rb :
set :user, 'tomconte'
role :web, "toto.dedibox.fr"
Dans mon cas, j’ai des utilisateurs différents pour mes différentes machines, j’inclus donc également le paramètre :user.
Pour cibler les différents environnements, il suffit alors de faire cap staging deploy ou cap production deploy.
jQuery Mobile : comment passer des paramètres entre pages
Le framework jQuery Mobile offre en standard une gestion sophistiquée de la navigation au sein d’une application ; notamment, il sait aller automatiquement charger une page en Ajax pour en afficher le contenu, donnant ainsi l’impression que l’on est resté sur la même page.
Il y a par contre une conséquence regrettable à ce système : il n’est du coup pas simple de passer des paramètres d’une page à une autre ; plus précisément, ce n’est simplement pas possible en standard!
Il faut donc utiliser un petit plugin que l’on trouve sur GitHub : jqm.page.params.js. Une fois ce script ajouté à votre page, vous pourrez passer des paramètres via l’URL de façon classique, puis les récupérer en faisant quelque chose comme:
$('#ma-page').live("pagebeforechange", function( event, data ) {
$.mobile.pageData = data.options.pageData;
});
Vous pourrez alors récupérer $.mobile.pageData n’importe où dans la page pour récupérer les paramètres extraits de l’URL.
The crises people face in these early months of 2012 are individual and circumstantial, yes, but they’re global and abstract as well, stemming largely from the haunting awareness (it’s certainly haunting me) that the fates of everyone in the world are intertwined and the job of protecting civilization from assorted inevitable disasters seems to have fallen to no one.
Hasta la vista Tumblr
Finalement, ça n’a pas trop marché entre Tumblr et moi :) C’est vrai que l’interface est cool et pratique, mais par contre il y a quand même des tonnes de limitations par rapport à un “vrai” moteur de Blog… Et puis finalement ça me manque de faire tourner moi-même ma petite plateforme!
Je suis donc en train d’étudier la migration vers Jekyll et Octopress, qui ont l’air top tendance chez les hackers en ce moment ;) J’aime bien l’idée de générer un bon vieux site statique qui sera super facile à héberger! Pourquoi s’embêter avec une base de données pour quelque chose d’aussi statique qu’un blog?… Et puis ça me rappellera mes débuts avec Greymatter qui il y a dix ans fonctionnait exactement comme ça!
A priori tout se présente bien à part un petit bug dans la moulinette de migration depuis Tumblr : les titres contenant des “:” semblent faire planter le script.
Je vais prendre mon temps pour migrer le contenu, car avec les nombreuses migrations, certains articles commencent à vraiment avoir une drôle de tronche…

