Mise en ligne du site Black-Frames.net

Bonjour à tous ! :)

Voici un petit article pour vous annoncer l'arrivée d'un nouveau site, Black-Frames.net. Ce site est un énième site d'images marrantes sur Internet mais avec la particularité que seules les images contenues dans un fond noir, avec un petit texte descriptif, sont présentes.

Vous pouvez profiter du site en affichant les images une par une. Sachez que des raccourcis clavier sont mis en place pour aller d'une image à l'autre (flèche droite ou gauche, ou q et d pour les gamerz ;)), et vous pouvez voter avec les touches z (vote pour) ou s (vote contre).

En gros lorsque vous êtes sur l'affichage d'une page, les touches zqsd feront votre bonheur :)

Ensuite, vous pourrez ajouter l'image de votre choix sur les principaux réseaux sociaux et suivre les flux rss de l'ajout des images, du top 20 ou des commentaires pour une image spécifique.

Nous allons très rapidement mettre en place un module spécial concernant les droits d'auteurs et les copyright, qui sont primordiaux, mais la partie contact fait déjà une partie du travail. (Sachez que nous sommes ouverts en cas d'image ne respectant pas votre vie privée et nous ferons tout le nécessaire pour corriger cela rapidement.)

Partagez le site avec vos amis et amusez-vous bien ;)

Filed under  //  Development   General   Humour   Projects   black-frames   comic   fun   picture   projet   site   window  
Posted by Cyril Nicodème 

Nouvelle version de Reflectiv.net

Vous l'avez certainement remarqué, notre site Reflectiv à vu son thème modifié.

Mais ce n'est pas tout !

En effet, l'ancienne version, qui datait de 2007, commençait à se faire vieux et ne reflétait plus notre domaine d'activité et nos motivations.

C'est aujourd'hui chose faite.

De nouvelles rubriques ont fait leur apparition, d'autres ont disparut, l'essentiel est là !
Pour faire simple, voici nos différentes sections avec une petite explication pour chacune :

  • L'équipe : Une page qui présente les responsables de Reflectiv.
    Il est possible de consulter un CV en ligne et de récupérer la vCard pour l'ajouter dans vos contact
  • Nos Références : Présente une liste de toutes nos réalisations, projets.
    Qu'ils soient en cours ou terminés, réalisés pour des clients ou pour nous.
  • Le blog : Afin d'être au plus proche de nos visiteurs, nous rédigeons des articles techniques ou nous proposons des scripts généralement en rapport avec notre domaine d'activité ! :)
  • Nous contacter : Vous pouvez nous contacter de manière générale ou contacter un membre en particulier.
    Pour chaque options, vous pouvez aussi joindre la personne par Twitter ou par Téléphone, en fonction de votre demande

Le site est aussi disponible en deux langues, Anglais et Français, ce qui nous permet de gérer des évènements à l'international et d'avoir une vitrine anglaise qui ne nous fasse pas perdre toute crédibilité face à nos amis anglophones :)

Mais reflectiv.net n'est pas complètement terminé, il reste des retouches à faire par-ci par-là.

Nous avons établis une liste des éléments que nous devrions encore modifier afin d'arriver à un site complet et terminé, liste que voici :

  1. Faire en sorte que les Urls de l'ancien blog (http://blog.reflectiv.net) soient redirigées sur le nouveau blog, sans pertes de liens (erreur 404)
  2. Si twitter deviens inaccessible, notre site aussi (vu que nous utilisons Twitter sur la page d'accueil), ce qui est gênant :p Il faut trouver un moyen pour empêcher cela !
  3. Faire un système de génération du sitemap
  4. Faire un système d'authentification utilisateur simplifié pour le blog en couplant le site avec :
    • Facebook Connect
    • Open Id
    (les systèmes sont quasiment prêts, ils ne reste plus que quelques points à régler)
  5. Mettre en place un système de pingback pour notifier les blogs lorsque l'on utilise leur liens et vice versa
  6. Modification profonde du code HTML/CSS. J'ai tout fait pour sortir une version respectueuse des standards le plus rapidement possible, mais j'aimerai quelque chose de beaucoup plus propre. Je le ferai dans mon temps libre ;)
  7. Faire une version HTML 5 / CSS 3 pour les navigateurs qui prennent en charge ces nouveaux standards (qui ne sont encore qu'à l'état de brouillon)
  8. Faire une version Mobile et une version iPhone
  9. Faire une version imprimable
  10. Faire une vCard Interactive, ça commence à être la mode, il faut qu'on la suive ;)

Donc voilà, encore de nombreuses heures de travail en perspective ! Je vous invite fortement à nous faire part de vos avis, commentaires, si vous trouvez un bug, une faute de frappe, une mauvaise organisation d'une partie ou quoique ce soit d'autre !

Surtout n'hésitez pas !

Vous pouvez nous contacter soit par email, via le formulaire, ou l'email que vous trouverez sur nos profils, ou soit par Twitter.

Pour Twitter, voici les différents liens :

  • @reflectiv : Pour toute refléxion en général
  • @cx42net : Au niveau développement, agencement du site
  • @aminoux : Au niveau design, structure d'une partie

Merci beaucoup :)

Filed under  //  General   Projects   django   nouvelle   projet   reflectiv   site   twitter   version  
Posted by Cyril Nicodème 

Django en serveur - Sommaire : Site en Python (Django) chez OVH

(Voici la suite de ma petite série “faire mumuse avec python sur son serveur”.)

Nous avons vu précédemment comment configurer notre projet Django pour qu'il fonctionne sur un serveur Apache, en utilisant soit mod_python, soit mod_wsgi. Comme j'ai réalisé ce projet pour un client, je lui ai pris avec un forfait Start1G chez OVH.

Ce serait bête de ne pas l'utiliser ! :)

J'ai donc fait quelques recherches sur le web sur comment faire fonctionner un projet python sur un hébergeur qui, à la base, n'accepte que du Php. Heureusement pour moi, j'ai trouvé deux articles complémentaires qui m'ont permis de faire fonctionner mon site :

Le premier article est très complet et c'est parce que j'ai eu quelques difficultés à y arriver que je poste ma solution, sinon j'aurais juste mis le liens vers ce site. Le second peux donner quelques idées pour résoudre vos soucis, mais les liens vers les documents (.htaccess, django.cgi) retournent des erreurs 404.

Alors voilà, comme toujours, il faut respecter une certaine arborescence, qui dépends de vos goûts je doit dire.

Pour ma part, voici l'arborescence finale :

  • cgi-bin/ : dossier par défaut fournis par OVH, non modifié
  • projet/
  • [project_name]/ : le nom du projet, contient le code python, dont le settings.py
  • static/ : les fichiers statiques (css, js, images, etc)
  • templates/ : les templates nécessaires à l'affichage du site.
  • python-local/ : contient tout ce qui est nécessaire au fonctionnement du site, dans mon cas, juste Django
  • django/ : le framework Django
  • requetes/ : dossier par défaut fournis par OVH, non modifié
  • www/
  • media/ : copie du repertoire django/django/contrib/admin/media/ (medias utilisés par l'admin)
  • .htaccess
  • django.cgi

Voici le contenu des fichiers .htaccess et django.cgi

.htaccess : très simple, mais efficace ;)

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.cgi/$1 [L]

django.cgi.
Vous pourrez trouver une version originale de ce fichier ici.

#!/usr/bin/env python
# encoding: utf-8
"""
django.cgi

A simple cgi script which uses the django WSGI to serve requests.

Code copy/pasted from PEP-0333 and then tweaked to serve django.
http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side

This script assumes django is on your sys.path, and that your site code is at
/home/mycode/mysite. Copy this script into your cgi-bin directory (or do
whatever you need to to make a cgi script executable on your system), and then
update the paths at the bottom of this file to suit your site.

This is probably the slowest way to serve django pages, as the python
interpreter, the django code-base and your site code has to be loaded every
time a request is served. FCGI and mod_python solve this problem, use them if
you can.

In order to speed things up it may be worth experimenting with running
uncompressed zips on the sys.path for django and the site code, as this can be
(theorectically) faster. See PEP-0273 (specifically Benchmarks).
http://www.python.org/dev/peps/pep-0273/

Make sure all python files are compiled in your code base. See
http://docs.python.org/lib/module-compileall.html

"""

import os, sys

sys.path.append("/[racine]/python-local/django")
sys.path.append("/[racine]/[projet]")

import django.core.handlers.wsgi

def run_with_cgi(application):

    environ                      = dict(os.environ.items())
    environ['wsgi.input']        = sys.stdin
    environ['wsgi.errors']       = sys.stderr
    environ['wsgi.version']      = (1,0)
    environ['wsgi.multithread']  = False
    environ['wsgi.multiprocess'] = True
    environ['wsgi.run_once']     = True

    if environ.get('HTTPS','off') in ('on','1'):
        environ['wsgi.url_scheme'] = 'https'
    else:
        environ['wsgi.url_scheme'] = 'http'

    headers_set  = []
    headers_sent = []

    def write(data):
        if not headers_set:
             raise AssertionError("write() before start_response()")

        elif not headers_sent:
             # Before the first output, send the stored headers
             status, response_headers = headers_sent[:] = headers_set
             sys.stdout.write('Status: %s\r\n' % status)
             for header in response_headers:
                 sys.stdout.write('%s: %s\r\n' % header)
             sys.stdout.write('\r\n')

        sys.stdout.write(data)
        sys.stdout.flush()

    def start_response(status,response_headers,exc_info=None):
        if exc_info:
            try:
                if headers_sent:
                    # Re-raise original exception if headers sent
                    raise exc_info[0], exc_info[1], exc_info[2]
            finally:
                exc_info = None     # avoid dangling circular ref
        elif headers_set:
            raise AssertionError("Headers already set!")

        headers_set[:] = [status,response_headers]
        return write

    result = application(environ, start_response)
    try:
        for data in result:
            if data:    # don't send headers until body appears
                write(data)
        if not headers_sent:
            write('')   # send headers now if body was empty
    finally:
        if hasattr(result,'close'):
            result.close()

# Change mysite to the name of your site package
os.environ['DJANGO_SETTINGS_MODULE'] = '[projet].settings'

run_with_cgi(django.core.handlers.wsgi.WSGIHandler())

Bien évidement, vous modifierez les valeurs de [racine] et de [projet] par celle correspondantes.

Pour évaluer [racine], j'ai fait un simple script php qui me faisait un echo de $_SERVER["DOCUMENT_ROOT"] :

<?php
echo $_SERVER["DOCUMENT_ROOT"];
?>

Pour [projet], c'est le nom que vous avez donné à votre projet python.

Enfin, n'oubliez pas d'adapter les chemins dans votre fichier settings.py à votre structure.

Normalement, si vous tentez d'accéder à votre site maintenant, vous aurez une erreur 500. Si vous regardez les logs d'erreurs, voici le type d'erreur que vous aurez :

Premature end of script headers: django.cgi suexec policy violation: see suexec log for more details

En fait, l'erreur est très conne ici. Tout ce que vous avez à faire, c'est donner les bons droits à votre fichier django.cgi, notamment le fait qu'il soit exécutable.

Pour ma part, seul le droit -rwx------ (tous les droits pour l'utilisateur, et rien pour le groupe et les autres) fonctionne. A vous de voir.

Maintenant, un petit F5 sur votre site et il devrait-être opérationnel !

Voilà ! C'est la fin de ma petite série sur Django, j'espère que vous avez apprécié :) Si vous avez des questions n'hésitez pas, les commentaires sont fait pour ça !

Pour ma part, j'aurai préféré avoir un raccourcis de media dans www qui pointe sur le dossier django/contrib/admin/media, mais je n'ai pas trouvé comment faire cela dans FileZilla. Si c'est possible et que vous savez comment faire, je suis impatient d'avoir votre explication :)

Filed under  //  Development   Projects   Python   django   media   ovh   site  
Posted by Cyril Nicodème 

[Design] - Todays news (16/10/2008)

Aujourd'hui, quelques éléments dans le design, avec plus de 1000 pinceau photoshop gratuits en haute résolution, et une petite liste de 70 sites avec un large arrière plan.

Enjoy it ;)

Filed under  //  2008   Design   arrière   background   brush   news   octobre   photoshop   pinceau   plan   site   today  
Posted by Cyril Nicodème 

Installer Eclipse avec le plugin PHP (pdt) : JSEclipse

Après les infos pour installer le plugin Pdt pour PHP sous Eclipse, voici l'info pour installer JSEclipse, Javascript pour Eclipse.

Comme d'hab, c'est tout simple, il suffit d'ajouter un new Remote Site, avec comme url :
http://download.macromedia.com/pub/labs/jseclipse/autoinstall/

et voila, vous avez maintenant toutes les clés en main pour bien programmer du Web sous Eclipse ! :)

Filed under  //  Howtos   Javascript   Unix/Linux   eclipse   jseclipse   remote   site  
Posted by Cyril Nicodème