Day One

3 repas dans l’avion, 3 blocages à la douane, 5 passages de checkpoints et un joli scanner corporel.
5 films d’Adam Sandler, 1 ticket pour Mission et un unlimited plan.
10 annonces cragislist, 1 premier connard, un petit budget.
500m² de locaux incroyables, 2 iced-teas maison, et une pizza chicken parmigiana épinards.

Nous venons d’arriver à San Francisco.

Un sourire

Garlone, en temps de crise je reviens au problème initial.
J’ai toujours été la montagne, la béquille hivernale.
Une réponse contient un absolu, un mensonge qui rassure,
Donc je distille à qui veut l’entendre des histoires bleu azur.

Garlone, par méprise je me suis enfermé dans une vie diététique.
Je manque d’empathie, j’apréhende la vie comme un problème mathématique.
Pour trouver la vérité, je dois clarifier les prémisces,
Je range dans des cases le méritant, le dérisoire, la bonté et le vice.

Garlone en temps de brise partons ensemble à l’aventure.
A mettre la vie en équation j’ai fait quelques ratures.
Tes mots ont gommé ce qui chez moi allait de travers.
Je n’ai plus rien d’amer au coté de cette fille particulière.

Garlone nous ne sommes pas la reprise d’une histoire antérieure.
Nous sommes la promesse de quelque chose de beau et de meilleur.
A portée de main réside une boule de bonheur, je te la dois,
Voila pourquoi je souris lorsque mes yeux se posent sur toi.

How to fix « invalid byte sequence in US-ASCII » in bundler installation

When trying to push to Heroku I came accross this nasty bug :

   /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/specification.rb:519:in `normalize_yaml_input': invalid byte sequence in US-ASCII (ArgumentError)
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/specification.rb:479:in `from_yaml'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_input.rb:183:in `load_gemspec'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_input.rb:51:in `block in initialize'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_reader.rb:64:in `block in each'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_reader.rb:55:in `loop'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_reader.rb:55:in `each'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_input.rb:32:in `initialize'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_input.rb:17:in `new'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package/tar_input.rb:17:in `open'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/package.rb:58:in `open'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/format.rb:63:in `from_io'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/format.rb:51:in `block in from_file_by_path'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/open-uri.rb:35:in `open'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/open-uri.rb:35:in `open'
    from /usr/ruby1.9.2/lib/ruby/1.9.1/rubygems/format.rb:50:in `from_file_by_path'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/source.rb:72:in `fetch'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/installer.rb:45:in `block in run'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `block in each'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/installer.rb:44:in `run'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/installer.rb:8:in `install'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/cli.rb:225:in `install'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/bin/bundle:13:in `<top (required)>'
    from /usr/ruby1.9.2/bin/bundle:19:in `load'
    from /usr/ruby1.9.2/bin/bundle:19:in `<main>'

Basically it is saying that one of the Gemspec of one of my gems in containing UTF8 characters and so the slug compilation can’t go forward. Even by adding LANG = « en_US.UTF-8 » to the heroku config vars.

What did the trick was to add these two lines to the Gemfile :

LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

I didn’t know that a Gemfile could contain ruby code and get evaluated, there you go.

Serializeable with rails, real world use.

I’ve been using the serialize extension from greg moreno for a few weeks now. But I’ve always been thrown of by the way the initialization of values is done.

Let’s say I create a User model with a :settings hash, containing :notify_mail => true as a default value. All the new created users are going to have the notify_mail value set. Now if I had another attr say :invites_count => 10. All users created afterwards are going to inherit from the two attributes, but what about all the previously created users ? They are still stuck with the only one attribute.

Since I didn’t want to have to refresh all the values for everyone every time I added another attribute to the :settings Hash, I modified the AttributeSerializer to make the setter return the default value if nothing is set.

Here is the gist :

Android GridView, CursorAdapter and Imageview sizing.

Alright, a geeky post for today, and in English so it might be useful to someone, maybe.

I had a problem with my GridView content jumping around, and here is how I fixed it :

public class PhotosGridAdapter extends CursorAdapter {
	
	public PhotosGridAdapter(Context context, Cursor c) {
		super(context, c);
	}
 
	@Override
	public void bindView(View view, Context context, Cursor cursor) {
		
		ImageView photo = (ImageView) view;
        String url_medium = cursor.getString(cursor.getColumnIndex(KarmaDbAdapter.PHOTO_URL_MEDIUM));
        ImageCache.download(url_medium, photo);

	}
 
	@Override
	public View newView(Context context, Cursor cursor, ViewGroup parent) {
		ImageView v = new ImageView(context);
		v.setLayoutParams(new GridView.LayoutParams(100, 100));
		v.setScaleType(ImageView.ScaleType.FIT_CENTER);
		bindView(v, context, cursor);
		return v;
	}
}

Basically you need to set the layout params in the newView, and not in the bindView, otherwise the previous content get shrank down.

There you go, I’m going back to my nexus.

Dynamic layout

Un petit essai de layout différent pour mon blog : http://a.rnaud.net/projects/dynamic/

Interface avec un scrolling au clavier, sorte de damier qui s’étend à l’infini, compatible avec Chrome seulement (pour le scale des divs et les animations automatiques). Le design est vraiment vraiment minimaliste, un petit PoC pour me détendre.

En façade

Le monde n’est qu’un amas de règles, tout du moins c’est ce que raconte M. Albert pendant ses déjeuner d’affaires. Certaines sont dictées par notre société, d’autres par notre nature humaine. Comment se tenir, comment convaincre, comment aimer, il sait que tout a déjà été essayé, tout est devenu réglementé par deux mille années d’histoire et d’histoires. Comme un personnage kafkaïen, il a compris qu’il ne servait à rien de discuter ces règles, que pour arriver à ses fins il était plus important de naviguer habilement entre ces grands principes implicites mais pressentis de tous. Il ne l’a pas su tout de suite bien sûr, il a lu Machiavel et Sun-Tzu, mais ce sont les grandes claques bruyantes et douloureuses de la vie qu’ils l’ont finalement convaincu.

A force de le marteler, ce visage est devenu un masque de plomb, sévère et froid. En façade il est présentable, ce qu’il faut de défauts pour ne pas sembler inhumain, ce qu’il faut de prétention pour l’être tout à fait. M. Albert se nourrit de ces règles, il en abuse, il les fait danser au gré de ses besoins, de ses envies. Le libre arbitre est une blague, il est devenu une réaction, le second rôle stéréotypée d’une mauvaise fiction. M. Albert est devenu ce masque, un pantin empaillé, le sang s’est arrêté de tourner et tout est égal. Ses pensées ne font qu’un tour, en boucle, encore et à nouveau. Dans un monde sans folie les jours se ressemblent, les gens aussi. Il n’y a rien de pire que d’être d’accord avec soi-même. Alors derrière ce masque de papier il se questionne, pour la première fois depuis bien longtemps.

déséquilibre

Une histoire est une vision parcellaire, un instantané. Tout comme la carte n’est pas le territoire, l’histoire ne touche qu’une partie du sens, un regard forcément biaisé puisqu’il n’est pas omniscient. Même lorsque l’essence d’un moment est capturé, elle est dénaturée. C’est un gros mensonge que de voir dans ces histoires la promesse d’un instant futur, elles ne sont que des témoignages, de souvenirs parfois, de rêves bien souvent.

Le réel ne rattrapera jamais l’icône dans la course pour le beau, car les lignes fixes d’une image, d’une icône ont un attrait divin, quelque chose d’inamovible. On regarde ces lignes, ces images et l’on tombe en pâmoison devant la promesse d’une émotion éternelle, à jamais réalisée. On cherche à se souvenir de ces histoires, mais elles ne sont que les pales copies d’une vie, les enfants pauvres, une icône qu’on met en exergue pour espérer.

Le tour de force n’est pas de se plier à l’inaccessible objectif d’une histoire pré-écrite, mais de savoir danser sur les lignes mouvantes d’une vie qui réagit à la moindre de nos actions. L’icône veut devenir humaine, imparfaite. Elle cherche désespérément à faire vivre ses contours, à obtenir une chance de faire ses preuves. Pendant que des milliers d’yeux se tournent et se retournent dans l’espoir de gommer leurs failles, l’icône creuse ses pores, elle trébuche de force pour imiter l’homme.