Mais que ferait-on sans Wikipedia ?!


Saviez-vous que la ville de Springfield (où réside Homer et Marge Simpson, entre autres) avait été fondée en 1796, que le nom de son maire (Démocrate) était Joe Qimby, ou bien encore que sa centrale nucléaire enfreignait 352 règles de sécurité ?!

Edit : Encore mieux, il existe même un Wiki dédié exclusivement à la série !

 



Commentaires Aucun commentaire pour le moment

Rhaaaaa... encore une démo de dingue de Paul Rouget !


Si vous voulez voir ce que va devenir le Web d'ici peu : http://hacks.mozilla.org/2010/07/firefox4-beta2/ . C'est franchement impressionnant. C'est drôle comme parallèle mais en fait, dans un sens, on dirait un peu le Web y'a dix ans quand le Flash a débarqué (et presque tout emporté, en son temps). Sauf qu'on aura pas à subir de systeme propriétaire (API fermé, besoin d'un plugin, indexation et SEO très approximatifs...).

Bon, maintenant, va se poser une nouvelle question : est-ce que les Designers sauront faire tout à la fois beau, bling-bling ET ergonomique ?! Parce que je me rappelle cette fameuse époque des sites full flash : c'était toujours bluffant, très animé et coloré mais aussi souvent... inutilisable !!! (Comment on coupe cette p*** de musique... ça sert à quoi ce bidule qui clignote... et au fait, il est où mon caddie dans tout ça ?!)

Enfin bref : HTML5 + CSS3 + SVG = une révolution est en marche (et ça va pas être simple)



Commentaires Aucun commentaire pour le moment

3D Secure, mythes et légendes


E-Commerçant de tous bords, je vous encourage à lire ce post : Comment enlever 3D Secure , et tout particulièrement les commentaires qui s'ensuivent. 40% de perte de Chiffre d'affaire ! 40% !!! L'attitude des institutions bancaire me sidère : leur but ne devrait-il pas être de faire gagner le plus d'argent possible à leurs clients ? Alors pourquoi donc imposer un "bidule" qui fait instantanément chuter les ventes, sans aucune véritable valeur ajoutée en contrepartie ?!

Si je résume :

  • 3D Secure n'est absolument pas obligatoire
  • N'écoutez pas votre conseiller qui veut vous l'imposer
  • Avec 3D Secure : 40 % de CA en moins
  • Sans 3D Secure : moins 0.5% de fraude, grand max
  • Votre conseiller refuse le retrait de 3D Secure ? Insistez, insistez, insistez encore...
  • Au pire : changez de banque !!!

 

Note : coîcidence, je viens justement d'acheter une imprimante chez "rue du commerce". Devinez quoi ?... il n'utilisent pas 3D Secure. Evidemment.

 



Commentaires 5 commentaires

La vie est dure, quand on fréquente les Bettencourt


Tiré du monde.fr, à l'instant même :

 

"Cette île [d'Arros], je la déteste, elle est bourrée de moustiques, elle est minuscule, et il y fait très humide", a déclaré François-Marie Banier aux enquêteurs.

C'en est tellement indécent que les bras m'en tombent, je ne sais quoi dire... "Viva la révolucion" peut être ? Mmmmmh, oui, tout du moins quelque chose d'approchant.



Commentaires Aucun commentaire pour le moment

Moz-border-radius ? Finalement, je suis pour


Depuis 8 ans maintenant que je code du HTML et de la CSS, j'ai toujours été hostile à tous les attributs propriétaires. Sans racisme aucun, qu'ils soient de chez Microsft comme de tous les autres, ma volonté a toujours été de faire qu'un site Web _devait_ s'afficher sur tous les browsers de la même façon. Mais ça c'était "avant". Avant que les IE (toutes versions cumulées) ne descendent en dessous des 50% de part de marché, avant que Firefox ne s'impose, que Chrome et Safari n'envahissent le terrain avec des possibilitées fort sympathiques, et avant que CSS3 ne déboule.

"It's not a bug, it's a feature !"

"Maintenant", donc, et après moult réflexions, j'ai décidé d'employer progressivement mais sans limite les différents attributs propriétaires de chacun des Browsers... ce qui était avant un bug va sciamment devenir une fonctionnalité

Ce qui va changer :

  • Les sites n'auront plus très exactement la même apparence entre les différents navigateurs
  • Il est très probable (certain !) que mes sites seront moins beaux lorsqu'ils seront vu avec Internet Explorer
  • J'oubli purement et simplement IE6. Fini.
  • J'assume, il va falloir convaincre et -je dirais -presque- "former" les clients

Pourquoi ?

  • Si tout le monde, petit à petit, se met à agir ainsi, les clients comprendront tout naturellement que le Web est beaucoup plus beau, interactif et interressant avec Firefox, Safari, Opéra ou Chrome
  • Je suis fatigué de toujours devoir m'aligner sur le maillon faible (IE 6 !!!), alors que les navigateurs modernes permettent beeeeeaucoup plus de choses, notamment en terme de Design
  • J'ai envie d'aller de l'avant, de proposer des choses nouvelles, et à un moment, il faut savoir tourner la page et dire au revoir aux anciennes pratique

 

Seule exception, le Flash pour les vidéos, où faute d'alternative encore suffisament standardisée, je vais continuer d'utiliser les player embed.... pour combien de temps encore ? Le Web change vraiment ces derniers temps !



Commentaires Aucun commentaire pour le moment

Cherche banque à qui parler... désespérement


Développeur Web expérimenté cherche chargé d'affaire pour création et déploiement offres E-Commerce. Conseillers n'ayant qu'Internet Explorer 6 sur son poste de travail et aucune notion de ce qu'est la vente en ligne s'abstenir. Personnel injoignable et/ou constamment en vacances aussi. En revanche, si vous répondez au téléphone, savez qu'ATOS n'est pas seulement le nom d'un mousquetaire, et avec conscience qu'un délai de deux mois entre la signature d'un contrat et son déploiement technique est résolument inacceptable, vous pouvez me contacter...

Non mais sans rire, c'est incroyable comme il difficile de trouver un conseiller qui sache de quoi il parle quant aux offres de paiement en ligne, d'autant plus quand on voit les frais qui sont imputés aux clients, la moindre des choses serait de fournir un conseil à la hauteur (et un service, aussi, parce que les interfaces de back office ne brillent pas par leur ergonomie ni leur esthétique).

Voila, c'était juste le coup de gueule du jour. Sur ce, je retourne au travail :-)



Commentaires Un commentaire

A powerfull yet simple on the fly thumbnail generator for Ruby on Rails


One of the first thing I need to deal with when I start a project are images, and thumbnail generation is -in my developper point of view- one the key feature of a framework/application. Nonetheless, I found it pretty hard to get a really good thumbnailer as I starded using Rails, so I wrote my own with full caching, img tag attributes and JS events support.

Edit : I finally turned my little helper into a plugin, you should now install it from Github like this :

script/plugin install git@github.com:guillaumedelyon/thumbnail_tag.git

...but anyway, if you want to read about how it works, you can continue reading.

Wanna try it ? Put this code snippet inside one of your helpers (I choosed the main "application_helper")

  def thumbnail_tag(args)
    #On the fly image resizer with cache managment    
    #synopsis = thumbnail_tag(:img=>'path_to_image', :size=>'100xauto' [, :class=>'your_css_class_here', :id=>'id_of_your_img_tag', :title=>'title_of_your_image', :alt=>'alt_attribute', :onclick=>"alert('Hi !')"...])
    
    #Sanity check
    raise 'Thumbnailer error ! Undefined :img parameter in thumbnail_tag helper' if (!args[:img])
    raise 'Thumbnailer error ! Undefined :size parameter in thumbnail_tag helper' if (!args[:size])

    #Get attributes
    options = ""    
    if args[:title] then options << " title='#{args[:title]}'" end
    if args[:id] then options << " id='#{args[:id]}'" end
    if args[:class] then options << " class='#{args[:class]}'" end
    #The alt attribute is automatically picked from the image file name if not explicitly given as an argument
    args[:alt] ? options << " alt='#{args[:alt]}'" : options << " alt='#{args[:img].split('/').last}'"
            
    #Get all other attributes as JS events
    attributes_array = ['img','alt','title','class','id','size']
    args.each do |arg|
      if !attributes_array.include?(arg[0].to_s)  
        options << " #{arg[0].to_s}=\"#{arg[1].to_s}\""
      end
    end
      
    #Create cache dirs if needed
    Dir.mkdir("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}") if !File.directory?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}")
    Dir.mkdir("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images") if !File.directory?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images")
    Dir.mkdir("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}") if !File.directory?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}")
    Dir.mkdir("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}/#{args[:img].split('/')[0]}") if !File.directory?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}/#{args[:img].split('/')[0]}")

    #Fallback in case something goes wrong later...
    response = "no pic"

    if (resize_array[0] == 'auto' && resize_array[1] == 'auto')
      #Dry picture requested => send back direct link to image, no cache
      response = ""
    end

    if (FileTest.exists?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}/#{args[:img]}"))
      #We've got it in cache
      response = ""
    end
    
    if (!FileTest.exists?("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}/#{args[:img]}")) && !(resize_array[0] == 'auto' && resize_array[1] == 'auto')
      #File doesn't exists in cache and have to be resized
      require 'rubygems'
      require 'RMagick'
   
      #Image not already in cache ! => resize and write to cache 
      begin
        img = Magick::Image.read("#{RAILS_ROOT}/public/sites/#{request.host.split('www.').last}/medias/images/#{args[:img]}").first
      rescue
        #Ooops, image may have been deleted ?! => fall back on an empty image
        img = Magick::Image.read("#{RAILS_ROOT}/public/images/no_pic.jpg").first
      end
      
      #get requested size
      resize_array = args[:size].split('x')
      width = resize_array[0].to_i if resize_array[0] != 'auto'
      height = resize_array[1].to_i if resize_array[1] != 'auto'
    
      if resize_array[0] == 'auto' 
        #Width is set to 'auto' => compute corresponding X scale
        if img.rows.to_i > height.to_i 
          width = img.columns/(img.rows.to_f/height.to_f)
        else
          width,height = img.columns,img.rows
        end
      end
      
      if resize_array[1] == 'auto'
        #height is set to 'auto' => compute corresponding Y scale
        if img.columns.to_i > width.to_i 
          height = img.rows/(img.columns.to_f/width.to_f)
        else
          width,height = img.columns,img.rows
        end
      end  
    
      #resize
      thumb = img.resize(width,height)
      
      #write it to cache
      thumb.write("#{RAILS_ROOT}/public/cache/#{request.host.split('www.').last}/images/#{args[:size]}/#{args[:img]}")

      #send the image tag pointing on the cached picture
      response = ""
    end
      
    response
  end

Now you can use it like this in your views :

<%= thumbnail_tag(:img=>'/path_to_image/image_name.jpg', :size=>'100xauto') %>

This will generate thumbnail, cache it, then output this to your view :

image_name

Want a height of 200px, with a css class and an onclick event handler ? Simple as pie :

 
<%= thumbnail_tag(:img=>'path_to_image', :size=>'autox200', :class=>'landscape', :onclick=>"alert('hi !')") %>

Full synopsis looks like :

thumbnail_tag(:img=>'path_to_image', :size=>'100xauto' [, :class=>'your_css_class_here', :id=>'id_of_your_img_tag', :title=>'title_of_your_image', :alt=>'alt_attribute', :onclick=>"alert('Hi !')"...])

 

Now, please be carefull about these too things :

  • FIRST OF ALL : WATCH FOR PATH NAMES, as I use a pretty custom file tree in my apps, this surelly won't fit into your own (look about your cache dir !)
  • I actually use ImageMagick to manipulate images, ensure to have it working on your PC

Comments are welcome, but I do not garantee any support.



Commentaires Aucun commentaire pour le moment