L'éducation populaire ou l'obligation de subversion

Transmis via Solidarités-Jeunesses, un message qui me tient à cœur :

Par quelque biais qu’on pose la question, la conclusion s’impose: l’éducation populaire ne peut échapper à sa vocation profonde: la subversion. le mot peut faire peur.

On le voit la loi Sapin annonce l’arrivée du privé dans le loisir et la culture: si un maire est obligé (ou a le droit) de soumettre l’attribution d’un équipement d’éducation populaire à un appel d’offre, ou un marché concernant le loisir, ou les vacances, ou le théâtre… comme pour n’importe quel marché public, on ne voit pas ce qui empêcher le privé de se mettre sur les rangs et de dire: je fais mieux et moins cher! La seule réponse à ce défi est dans ce qui fait depuis toujours la légitimité de l’éducation populaire et de l’associatif: la faculté à subvertir. Cela, le secteur marchand ne le fera jamais. (…)

Mais qu’entendons par “subversion”? Seraient-ce les restes du Grand Soir? Non, bien sûr. Cela peut aussi s’appeler citoyenneté, ou politisation ou tout simplement…idéal. Après des décennies où le terrain de la politisation fut occupé par des groupes extrémistes, il peut être utile de rappeler qu’on peut être politisé sans vouloir pendre tous les bourgeois.

L’auteur rappelle alors la déclaration de Villeurbane, rédigée en 1968 par les patrons du théâtre public d’alors avec cette définition de la “subversion” :

“Tout effort d’ordre culturel ne pourra plus que nous apparaître vain aussi longtemps qu’il ne se proposera pas expressément d’être une entreprise de politisation: c’est-à-dire d’inventer sans relâche, à l’intention du non-public, des occasions de se politiser, de se choisir librement, par delà le sentiment d’impuissance et d’absurdité que ne cesse de susciter en lui un système social où les hommes ne sont pratiquement jamais en mesure d’inventer leur propre humanité.” (…)

Tant il est vrai qu’à la fin, la seule question est bien d’humaniser la société.

Jacques Bertin, in Politis, Le retour de l’utopie, hors série, février-mars 2000

iOS developer: What to do if In-App Purchases stop working?

What to do if In-App Purchases stop
working?This post is the first of a series dedicated to iOS development.They address to a rather technical audience, and present aspect or issues encountered when developing applications on Apple’s devices.

The first post deals with a frequent issue when implementing Apple’s In-App Purchases (IAP). It happens frequently that IAP transactions suddenly stop working, without any visible reason. There can be two steps of failure:

Here’s how to deal with it.

We won’t bother with obvious issues here (like prices not declared on iTunes Connect, wrong product identifiers, invalid test users): the interesting case is the one were everything used to work perfectly, but suddenly errors pop out from nowhere.

Prices not retrieved

The first problem manifests when prices are not retrieved anymore from iTunes Connect. The SKProductsRequest fails with a generic error, although you’re sure your product identifiers and App ID are correct.

It seems that iTunes Connect services are very picky about the clean state of a request. A lot of authentication checks are performed, to be sure that the request is legit. If not, the request fails with a non-descriptive generic error.

So you need to convince iTunes Connect that your app is legit. How to do?

A good idea is to ensure that only a single development Provisioning Profile exists for the application. If your device contains several different Provisioning Profiles that match your application, chances are that iTunes Connect will reject your requests.

To ensure this, the easiest steps are to:

Removing the Provisioning Profiles is done in Settings / General / Profiles (see the screenshot below).

Removing the Provisioning Profiles is done in Settings / General /
Profiles

But why deleting the application? Because it contains an embedded Provisioning Profile, that can interfer with the profiles on the device. Plus the StoreKit seems to store some state in the application bundle (like the last logged AppleID for this app), and we want to clear these informations to get a fresh state.

This should do the trick, and your prices requests should work again. If they doesn’t, try any step you can think to make your app look legit: deconnect your device from the test account (Settings / Store), reboot the device, reset the settings… And don’t forget first to ensure you don’t miss something obvious (like no network, invalid product identifiers or mismatched App ID).

Transaction request fail

Now here is the case when your prices request works, but when you want to test the actual purchase of an item, the SKPaymentTransaction fails with a rather generic “Cannot connect to the iTunes Store” error. It used to work before, so what happened?

The first cause of troubles can be the iTunes Store Sandbox misbehaving. The Sandbox is not the iTunes Connect component with the best uptime: it frequently happens that some requests are dropped, or that the Sandbox fails to validate any request at all.

How can you be sure? Go have a look in the relevant section of the Apple Developers Forums (you need to be a registered Apple Developer for this). Usually, if the Sandbox is down, a lot of developers will be reporting the issue in a thread.

If the Sandbox seems up, it may be that your test user has expired. Apple recently started to invalidate test users after a specific number of transactions. In the best case, you get a message informing you that the user expired — in the worst case, just a generic error.

You may try to re-activate the test user, but it doesn’t always work. The shorter path is to create a new batch of test users, and use them one after another: we one expires, just switch to the next.

Generally speaking, testing with a freshly created test user is one of the best things you can do: it often works, and saves a lot of frustration when transactions refuse to work.

tldr;

If prices requests fail, try to:

If transaction requests fail:

Sortie de l'application ePresse pour iPhone et iPad

Logo de l'application ePresse

L’application ePresse est sortie ce matin !

Il s’agit d’un kiosque numérique, qui rassemble neuf titres de presse française dans une seule application iPhone et iPad. On y trouve pour l’instant les éditions quotidiennes de Libération, du Figaro, du Parisien et Aujourd’hui en France, de L’Équipe et des Échos, mais aussi les éditions hebdomadaires du Nouvel Observateur, du Point et de L’Express. Une présentation plus complète est disponible sur iGeneration.

Cette sortie marque pour moi la fin de plusieurs mois de développement et de peaufinage, pour pouvoir au final présenter quelque chose de qualité. Il y a des raccourcis et des imprécisions, bien sûr : c’est une 1.0. Mais n’hésitez pas à me dire ce que vous en pensez !

ePresse -
ePresse

Larry Page on ads for Google

Larry Page, after approving the first ad campaign for Google in ten years:

It’s obviously very contrary to what we normally do, and I think part of the reason we wanted to do it is for that reason. It sort of violates every known principle that we have, and every once in a while, you should test that you really have the right principles. You don’t want to end up too rigid.

Minimalist searchbox for Firefox

As you know, I love how the Firefox UI can be customized with only a few lines of CSS. This time, I wanted to simplify the Search box of Firefox 4 — because I don’t think we need a bright search-engine icon, and the useless magnifying glass button. Here is the result:

Firefox 4 minimalist search bar — with a few lines in
userchrome.css

Compare with the original theme:

Firefox 4 searchbar using the default
theme

And here are the few lines you can add to your userChrome.css to achieve this result:

/* Remove the magnifying glass icon on the right of the searchbox */
.search-go-container { display: none; }
.searchbar-textbox .textbox-input-box { padding-right: 7px !important; }

/* Replace the active search engine icon by a magnifying glass */
.searchbar-engine-image { display: none; }
.searchbar-engine-button {
  padding-left: 16px !important;
  background: url("chrome://browser/skin/Search.png") 4px 4px no-repeat;
}

Tested with Firefox 4.0b8 — but should work with Firefox 3.6 too.