[Vidéo] Tears Of Steel – Blender Fundation

Le 4e court-métrage de la Blender Foudation est disponible!!
Changement d’époque pour cette dernière réalisation puisque nous plongeons dans un univers type science-fiction, où les robots occupe une place non négligeable. Nouveauté également du côté des personnages, puisque ce sont des acteurs en chairs et en os qui participent à l’action.

Comme dans les éditions précédentes, tous les éléments graphiques, modèles 3D, etc sont publiés sous licence Creative Commons Attribution.
Encore une fois, le financement est assuré par la vente des DVDs du court et grâce à des sponsors de différentes sortes. Ce court-métrage est encore une fois l’occasion de montrer toute la puissance de Blender et par la même occasion, de l’améliorer.

Ce film présente donc un groupe de scientifiques et de soldats se rassemblant à « Oude Kerk » à Amsterdam pour rejouer un événement crucial du passé, dans une tentative désespérée de sauver le monde de robots destructeurs.

Une très belle réalisation à ne pas manquer!

Lien vers « Tears of Steel – Blender VFX Open Movie »

 

P.S: N’hésitez pas à découvrir les court-métrages précédents, l’émouvant Sintel, l’excellent Big Buck Bunny et l’étrange Elephants Dream.

Migrer son WordPress

C’est effectif depuis jeudi soir, Unicoda dispose maintenant d’un serveur tout neuf. Effectuer une migration de WordPress est en fait relativement simple pour peu qu’un terminal ne vous fasse pas peur et sinon, des interfaces graphiques et autres plugins peuvent parfois vous simplifier encore le travail. Le nom de domaine ne changeant pas, la procédure en est encore simplifiée.

On arrive donc sur un serveur vierge de tout paquets, les paquets de base et c’est tout. Quelques installations s’impose donc, à coup d’aptitude ou de apt-get si vous préférez. Avant toute chose, on met à jour les informations concernant les paquets avec aptitude update, puis mise à jour via aptitude safe-upgrade. Suite à ces manipulations, un petit dpkg-reconfigure tzdata s’impose, histoire d’avoir une heure correcte sur le serveur. L’heure de Moscou, c’est bien beau, mais pour avoir des logs lisibles, une heure française c’est mieux (Bonjour à nos amies russes et biélorusses au passage). Arrive donc la phase d’installation à proprement parler. Via aptitude install, on installe donc les paquets suivants: php5, mysql-server, php5-mysql, php5-gd, vsftp.

Vient ensuite la configuration de vsftp, serveur FTP comme vous avez pu le deviner. On édite le fichier /etc/vsftpd.conf et on relance avec /etc/init.d/vsftpd restart pour que les modifications soient prises en compte.

On s’attaque ensuite à la partie MySQL pour préparer la nouvelle base de données de notre site à accueillir celle provenant de l’autre serveur : mysql -p. Puis dans votre invite de commande MySQL:

>CREATE DATABASE nomBaseDeDonnees;

>GRANT ALL PRIVILEGES ON nomBaseDeDonnees.* TO "NomUtilisateur"@"hostname" IDENTIFIED BY "motDePasse";

>FLUSH PRIVILEGES;

>EXIT;

Concernant les différents paramètres, nomBaseDeDonnes correspond au nom que vous donnez à votre base de données, nomUtilisateur parle de lui-même, hostname est généralement à remplacer par localhost et motDePasse c’est limpide. Votre base de données est donc prête à accueillir vos anciennes informations relatives à vos articles, utilisateurs, commentaires, etc…

Il faut également récupérer le contenu de votre dossier wp-content qui contient toutes les images que vous avez pu héberger sur votre site, les thèmes et les plugins. Un téléchargement du dossier via un client FTP fonctionnera très bien. Compresser le dossier avant envoi vous permettra de patienter moins longtemps pendant le téléchargement de vos données et surtout, pendant leur upload à venir. Une fois le dossier téléchargé, on l’upload justement vers le nouveau serveur; cette étape prend du temps surtout si votre dossier n’est pas compressé et que votre upload se résume à du 36Ko/s. On peu ensuite remplacer le dossier wp-content de notre installation toute fraîche de WordPress par celui de notre ancien site.

Il faut également transférer les données de  l’ancien base de données et les injecter dans la nouvelle. La commande suivante vous permet de récupérer les anciennes données dans un fichier:

mysqldump --add-drop-table -h mysqlhostserver -u mysqlusername -p databasename | bzip2 -c > fichier.bak.sql.bz2.

Au niveau des paramètres, localhost pour mysqlhostserver, votre nom d’utilisateur pour mysqlusername, le nom de l’ancienne base de données à la place de databasename et remplacer fichier par le nom que vous voulez pour votre sauvegarde des données. On récupère ensuite le fichier via notre ftp, on l’upload à son tour vers le nouveau serveur, on décompresse au préalable le fichier: bzip2 -d fichier.bak.sql.bz2 et on injecte les données dans notre nouvelle base de données:

mysql -h mysqlhostserver -u mysqlusername -p databasename < fichier.bak.sql

Avec localhost pour mysqlhostserver, votre nom d’utilisateur mysql pour mysqlusername et le nom de votre nouvelle base de données en lieu et place de databasename. A ce stade, votre nouveau site est presque opérationnel, il ne reste plus qu’à faire pointer le nom de domaine vers le nouveau serveur, configurer apache (Doc Ubuntu) et éditer le fichier wp-config.php de votre nouveau WordPress avec les paramètres utilisés pour la création de la nouvelle base de données.

On trouve la plupart des informations dont on a besoin sur le web, et notamment sur le site de WordPress. Quelques heures suffisent donc à effectuer la migration d’un site WordPress vers un nouveau serveur si on conserve le même nom de domaine, le plus long étant à mon sens, l’upload du dossier wp-content.

Fête du Roi de l’Oiseau – Le Puy-en-Velay

Journée au Puy-en-Velay hier, pour assister à la fête Renaissance du Roi de l’Oiseau. Beaucoup de monde dans la ville, un nombre de costume assez impressionnant, plusieurs campements et groupes de musique. 415e participant au concours de tir à l’arc, trois flèches, aucune chance de ce côté là, quelques points tout de même :). J’y rencontre les archers de Rochebaron (Mathieu, Wiwi, Mickey et Chauve entre autres) qui assurent l’organisation sur le pas de tir depuis le matin avec l’aide d’autres archers. Le marché médiéval est d’une grande diversité et de qualité. Plusieurs artisans du cuir, deux marchands d’armes et d’armure, un fabricant d’arc et sa femme venu d’Angleterre (très sympathique), de multiples marchands de costume, quelques vendeurs de peau.

Quelques photos prises au cours de la journée:

[…]

Lien vers « Deep inside, you always knew ! »

Morpheus: You’ve felt it your entire life, that there’s something wrong with the world. You don’t know what it is, but it’s there, like a splinter in your mind, driving you mad. It is this feeling that has brought you to me. Do you know what I’m talking about?
Neo: The Matrix.
Morpheus: Do you want to know what it is?
Neo: Yes.
Morpheus: The Matrix is everywhere. It is all around us. Even now, in this very room. You can see it when you look out your window or when you turn on your television. You can feel it when you go to work… when you go to church… when you pay your taxes. It is the world that has been pulled over your eyes to blind you from the truth.
Neo: What truth?
Morpheus: That you are a slave, Neo. Like everyone else you were born into bondage. Into a prison that you cannot taste or see or touch. A prison for your mind.

Lien vers « Vous êtes l’Evolution ! »

 

 Je ne veux ni conquérir, ni diriger personne. Je voudrais aider tout le monde dans la mesure du possible, juifs, chrétiens, païens, blancs et noirs. Nous voudrions tous nous aider si nous le pouvions, les êtres humains sont ainsi faits. Nous voulons donner le bonheur à notre prochain, pas lui donner le malheur. Nous ne voulons pas haïr ni humilier personne. Chacun de nous a sa place et notre terre est bien assez riche, elle peut nourrir tous les êtres humains. Nous pouvons tous avoir une vie belle et libre mais nous l’avons oublié.
L’envie a empoisonné l’esprit des hommes, a barricadé le monde avec la haine, nous a fait sombrer dans la misère et les effusions de sang. Nous avons développé la vitesse pour nous enfermer en nous-mêmes. Les machines qui nous apportent l’abondance nous laissent dans l’insatisfaction. Notre savoir nous a fait devenir cyniques. Nous sommes inhumains à force d’intelligence, nous pensons beaucoup trop et nous ne ressentons pas assez. Nous sommes trop mécanisés et nous manquons d’humanité. Nous sommes trop cultivés et nous manquons de tendresse et de gentillesse. Sans ces qualités humaines, la vie n’est plus que violence et tout est perdu. Les avions, la radio nous ont rapprochés les uns des autres, ces inventions ne trouveront leur vrai sens que dans la bonté de l’être humain, que dans la fraternité, l’amitié et l’unité de tous les hommes.
En ce moment même, ma voix atteint des millions de gens à travers le monde, des millions d’hommes, de femmes, d’enfants désespérés, victimes d’un système qui torture les faibles et emprisonne des innocents.

Je dis à tous ceux qui m’entendent : Ne désespérez pas ! Le malheur qui est sur nous n’est que le produit éphémère de l’habilité, de l’amertume de ceux qui ont peur des progrès qu’accomplit l’Humanité. Mais la haine finira par disparaître et les dictateurs mourront, et le pouvoir qu’ils avaient pris aux peuples va retourner aux peuples. Et tant que des hommes mourront pour elle, la liberté ne pourra pas périr.
Soldats, ne vous donnez pas à ces brutes, à une minorité qui vous méprise et qui fait de vous des esclaves, enrégimente toute votre vie et qui vous dit tout ce qu’il faut faire et ce qu’il faut penser, qui vous dirige, vous manœuvre, se sert de vous comme chair à canons et qui vous traite comme du bétail.
Ne donnez pas votre vie à ces êtres inhumains, ces hommes-machines avec une machine à la place de la tête et une machine dans le cœur.
Vous n’êtes pas des machines !
Vous n’êtes pas des esclaves !
Vous êtes des hommes, des hommes avec tout l’amour du monde dans le cœur.
Vous n’avez pas de haine, sinon pour ce qui est inhumain, ce qui n’est pas fait d’amour.
Soldats ne vous battez pas pour l’esclavage mais pour la liberté.
Il est écrit dans l’Évangile selon Saint Luc « Le Royaume de Dieu est dans l’être humain », pas dans un seul humain ni dans un groupe humain, mais dans tous les humains, mais en vous, en vous le peuple qui avez le pouvoir : le pouvoir de créer les machines, le pouvoir de créer le bonheur. Vous, le peuple, vous avez le pouvoir : le pouvoir de rendre la vie belle et libre, le pouvoir de faire de cette vie une merveilleuse aventure.

Alors au nom même de la Démocratie, utilisons ce pouvoir. Il faut tous nous unir, il faut tous nous battre pour un monde nouveau, un monde humain qui donnera à chacun l’occasion de travailler, qui apportera un avenir à la jeunesse et à la vieillesse la sécurité.
Ces brutes vous ont promis toutes ces choses pour que vous leur donniez le pouvoir : ils mentaient. Ils n’ont pas tenu leurs merveilleuses promesses : jamais ils ne le feront. Les dictateurs s’affranchissent en prenant le pouvoir mais ils font un esclave du peuple.
Alors, il faut nous battre pour accomplir toutes leurs promesses. Il faut nous battre pour libérer le monde, pour renverser les frontières et les barrières raciales, pour en finir avec l’avidité, avec la haine et l’intolérance. Il faut nous battre pour construire un monde de raison, un monde où la science et le progrès mèneront tous les hommes vers le bonheur. Soldats, au nom de la Démocratie, unissons-nous tous !

Charlie Chaplin, Le Dictateur (1983)

API Google Maps

J’ai eu l’occasion la semaine dernière, de jouer avec l’API Google Maps. Récupération de données en json auprès d’un serveur en lui demandant de filtrer les résultats sur la valeur d’un champ. Je présente ici, une version simplifiée, j’ai placé des données en dur dans mon fichier .js, quelques gares: Nom, Région, Latitude, Longitude, et je m’arrange pour afficher leur position avec l’API de Google.

On prépare d’abord la page Html qui va recevoir le tout. On ajoute le JS de l’API:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=VOTRE_CLE&sensor=false">
</script>

En remplaçant VOTRE_CLE par la cle d’API générée par Google.

On place une balise <div> pour accueillir la map une fois celle-ci générée.

Initialisation de la Google Maps

var mapOptions = {
  center: new google.maps.LatLng(47.2, 2),
  zoom: 5,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
  mapOptions);

Pour créer un marqueur:

var latlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
  position: latlng,
  title: "Titre du marqueur"
});
marker.setMap(map);

Concernant la gestion des marqueurs, depuis la dernière version de Google Maps, il est nécessaire de les gérer soit même. Il faut donc garder une trace des marqueurs pour pouvoir les supprimer par la suite, si besoin. On stockera les marqueurs dans un tableau.

var markersArray = [];

On ajoute les marqueurs au tableau après le placement sur la carte.

markersArray.push(marker);

La fonction pour supprimer tous les marqueurs du tableau de la carte et nettoyer la carte est deleteOverlays().

Pour créer une OpenWindow:

var infowindow = new google.maps.InfoWindow({
  content: contentString
});

//Ajout d'un Listener sur le marqueur pour réagir en cas de clic
google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});

Obtenir votre clé d’API Google Maps
Aller sur https://code.google.com/apis/console et se connecter avec son compte Google.
Cliquer sur Services dans le menu à gauche.
Activer le service Google Maps API v3.
Cliquer sur API Access dans le menu à gauche.
La clé est visible dans la page API Access, section Simple API Access, celle-ci est indiqué sous le nom de Key for browser apps.

Le code:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Gare de France</title> 

        <script src="jquery.js"></script>
    <script src="getdata.js"></script>
    <script type="text/javascript"
        src="http://maps.googleapis.com/maps/api/js?key=VOTRE_CLE&sensor=false">
        </script>
    </head> 

 <body>
    <div id="map_canvas"></div> 

    <div id="gareTab">
        <h1>Liste de Gares Françaises</h1> 

        <table><tr>  <th>Nom de la gare</th> <th>Région</th> <th>Latitude</th>   <th>Longitude</th>  </tr></table>
    </div>
 </body>
</html>

Côté CSS, on aura:

html {
      height: 100%
}
body {
    height: 100%;
    margin: 0;
    padding: 0;
    margin-left: 2em;
    margin-top: 2em;
}
table {
    border-collapse: collapse;
}
td, th {
    border: 1px solid black;
    padding-left: 5px;
    padding-right: 5px;
}
#map_canvas {
     display: inline-block;
     position: absolute;
     margin-top: 6em;
     width: 50%;
     height: 55%;
     left: 45%
 }
#gareTab {
     position: absolute;
     width: 60%;
     margin-top: 6em;
 }

Et enfin, passons au côté JavaScript proprement dit:

//Contient tous les marqueurs présents sur notre carte
var markersArray = [];
//On retient l'InfoWindow ouverte pour pouvoir la fermer au besoin
var openedInfoWindow;
//Nos données
var data = [
            {
                "Nom de la gare": "Amiens",
                "Région": "Picardie",
                "Latitude": "49.88993025",
                "Longitude": "2.30981909"},
            {
                "Nom de la gare": "Lyon-Part-Dieu",
                "Région": "Rhône-Alpes",
                "Latitude": "45.76032897",
                "Longitude": "4.86050906"},
            {
                "Nom de la gare": "Bas-Monistrol",
                "Région": "Auvergne",
                "Latitude": "45.29796638",
                "Longitude": "4.13958253"},
            {
                "Nom de la gare": "Strasbourg",
                "Région": "Alsace",
                "Latitude": "48.58496713",
                "Longitude": "7.734584"}, 

            {   "Nom de la gare": "Quiberon",
                "Région": "Bretagne",
                "Latitude": "47.48552763",
                "Longitude": "-3.11816733"},
            {
                "Nom de la gare": "Carcassonne",
                "Région": "Languedoc-Roussillon",
                "Latitude": "43.21816508",
                "Longitude": "2.35242959"}
            ]; 

//Suppression des marqueurs Google Maps
function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
} 

//Suppression du contenu du tableau de gare
function deleteTab() {
    for(var i = 0; i < $('.ligne').length; ++i) {
        $('.ligne').remove();
    }
} 

//S'exécute lorsque le document est prêt
function readyFn() { 

    //Initialisation de la Google Maps
    var mapOptions = {
        center: new google.maps.LatLng(47, 2),
        zoom: 6,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"),
    mapOptions); 

    //Suppression de tout ce qui pourrait préexister
    deleteOverlays();
    deleteTab(); 

    var tab = [];//On construit le contenu du tableau HTML dans tab
    data.forEach(function(element, index, array) {
        //Construction d'une ligne du tableau
        tab.push('<tr><td> ' +
            element["Nom de la gare"] + ' </td><td>' +
            element["Région"] + ' </td><td>  ' +
            element["Latitude"] + '  </td><td>  ' +
            element["Longitude"] + '  </td></tr>'
        ); 

        //Construction du marqueur Google Maps
        var latlng = new google.maps.LatLng(element["Latitude"], element["Longitude"]);
        var marker = new google.maps.Marker({
            position: latlng,
            title: element["Nom de la gare"]
         });
        marker.setMap(map);//Ajout du marqueur à la carte
        markersArray.push(marker); 

        //Ajout d'une InfoWindow pour chaque marqueur
        //Ce qui s'affichera:
        var contentString = '<b>' + element["Nom de la gare"]
            + '</b><br />' + element["Région"]
            + '<br />Latitude: ' + element["Latitude"]
            + '<br />Longitude: ' + element["Longitude"]; 

        //Création des fenêtres d'info (ou InfoWindow)
        var infowindow = new google.maps.InfoWindow({
            content: contentString
        }); 

        //Ajout d'un Listener sur le marqueur pour réagir en cas de clic
        google.maps.event.addListener(marker, 'click', function() {
            if(openedInfoWindow != undefined) {//Au cas où il n'y a pas d'info window à fermer
                openedInfoWindow.close();
            }
            infowindow.open(map,marker);
            openedInfoWindow = infowindow;
        });
    }); 

    //concaténation du tableau en string et ajout dans la balise table
    $('table').append(tab.join(''));
} 

$(document).ready(readyFn);

 

Pour tout savoir sur l’API Google Maps, je vous conseille la doc de Google qui est très claire et détaillée:
https://developers.google.com/maps/documentation/javascript/tutorial

Pour le zip contenant les fichiers ci-dessus, c’est par ici:

GareOnGoogleMaps

Maj 25.03.2013: En fait, il n’est pas nécessaire de générer une clé d’API pour pouvoir utiliser la Google Maps. Il suffit simplement d’utiliser l’url suivante http://maps.googleapis.com/maps/api/js?&sensor=false correspondant à l’adresse utilisée dans cette exemple sans le paramètre key. Ajout du zip comprenant les sources.