Tuesday, April 21, 2009

Transfering a video to your iPod

Did you ever try to copy localy a YouTube video that seemed interesting to you ? It happened to me few days ago. On my Mac, I solved the problem by looking in the /var/folders directory where temp copies are hold.
In order to locate more precisely I had to do the following:


touch /tmp/now

find /var/folders -newer /tmp/now -print

while the video is still loading.


Then it is just a matter of converting the flash format to the m4v format, Handbrake will do the job for you.

Friday, February 20, 2009

Ogame c'est fini ... pour le moment

Juste pour la petite histoire, ce matin j'ai arrêté ogame a une petite vingt-cinquieme placeUn grand merci a Isildur, Amy et Percy !
Bonne continuation a tous les gamers fous qu'ils soient Moches ou pas - et en particulier a MN :) mais aussi tous les anciens LEM - surtout Uru mon bon fournisseur en deut, Jocker et ses Mouhahaha retentissants et Arca et son fameux gateau au chocolat ...
Angeluis fais attention a ma caravane, je reviendrais peut-etre !
Je remercie enfin le clochard qui m'a permis de reprendre mon tag ...

Wednesday, August 13, 2008

Real programmer don't eat much quiche (Part I)

I don't know much about Glen and Peter. I am just a fan of Gravl and a reader of Glen's blog but I am sure that their book "Grails in Action" will be a blockbuster in the community.
So feel free to buy the book, the TOC is quite appealing and I am sure that we will get plenty of practical examples.

Tuesday, August 12, 2008

My Wordle

Sunday, August 10, 2008

Street soccer (part I)

Remi Gaillard is a French actor who has set up his own web TV. His well known for one video done for Nike in a kind of street soccer precision shoots.
Here are two of his short movies:








If you wan to see more videos, go directly on his web site.

Saturday, June 21, 2008

YUI Treeview & Grails

In a project I need a kind of CMS in order to store/retrieve large files. Basically my choices were narrowed down to Alfresco and Grails.
Alfresco was seen as the "low entry cost" solution, Grails requiring more work but being more flexible.
Obviously my main requirement was to be able to upload large files (>10 GB). Obviously this can not be done using the browser and a specific (but simple) client had to be designed. Testing this with Grails took me one day, many tutorials being available [1][2]. With Alfresco despite many post to the forum, I am still stuck to the 2GB limit ...

I decided to go on with Grails. My next step was to be able to visualize the data being stored on the server. For this I decided to use the YUI Treeview component. Here is the controller I used:


// show.gsp will be used
def show = {
}

def dir = {
def cmsId = params.cms
def dir = params.dir?:"/"

// Removing some characters from the path
dir = dir.replaceAll("\\.\\./","")

// Get the root dir for the CMS
String configDir = grailsApplication.config.cmsdata.dir

String target = configDir + cmsId + dir

def files = []
File d = new File(target)
if (d.exists() && d.isDirectory()){
files = d.listFiles()
}

// return back a JSON structure
response.setHeader("Cache-Control", "no-store")
render(contentType: "text/json") {
nodes {
for (f in files) {
node(name: f.name, isDir: f.isDirectory())
}
}
}
}


The view is really simple. When you click on a tree node, the path is constructed the controller is called, the JSON is parsed and new tree nodes are created dynamically differentiating leaf nodes. (Here is the jscript part).




(function(){

// Creating the tree
function buildTree() {
var tree;
tree = new YAHOO.widget.TreeView("treeDiv");

tree.setDynamicLoad(loadNodeData);

var root = tree.getRoot();

var tempNode = new YAHOO.widget.TextNode("/", root, false);

tree.draw();
}

// Processing new nodes
function loadNodeData(node, fnLoadComplete) {
var path = "";
var leafNode = node;
while (!leafNode.isRoot()) {
path = leafNode.label + "/" + path;
leafNode = leafNode.parent;
}

var nodelabel = encodeURI(path);

var sUrl = "${params.cms}/dir?dir="+nodelabel;

var callback = {
success: function(oResponse){
var oResults = YAHOO.lang.JSON.parse(oResponse.responseText);

if ((oResults.nodes)&&(oResults.nodes.length)){
if (YAHOO.lang.isArray(oResults.nodes)) {
for (var i=0; i < oResults.nodes.length; i++){
var tempNode = new YAHOO.widget.TextNode(oResults.nodes[i].name, node, false);
tempNode.isLeaf = !oResults.nodes[i].isDir;
}
}
}
oResponse.argument.fnLoadComplete();
},
failure: function(oResponse){
oResponse.argument.fnLoadComplete();
},
argument:{
"node": node,
"fnLoadComplete":fnLoadComplete
},
timeout:5000
}

YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
};

YAHOO.util.Event.onDOMReady(buildTree);
}());



If you want to work offline (as I did), you have to install the excellent YUI Plugin.

The next step for me is to package this in a YUI panel :)

Saturday, May 3, 2008

Groovy 1.6-beta-1: c'est de la bombe :-)


>groovy -v
Groovy Version: 1.5.6 JVM: 1.5.0_13-119
>date; groovy Mandelbrot.groovy ; date
Sat May 3 22:03:53 SGT 2008
Groovy Elapsed 25.721
Groovy Elapsed 24.552
Groovy Elapsed 26.606
Sat May 3 22:05:12 SGT 2008


>/Applications/groovy-1.6-beta-1/bin/groovy -v
Groovy Version: 1.6-beta-1 JVM: 1.5.0_13
>date; /Applications/groovy-1.6-beta-1/bin/groovy Mandelbrot.groovy; date
Sat May 3 22:31:16 SGT 2008
Groovy Elapsed 5.198
Groovy Elapsed 5.174
Groovy Elapsed 5.273
Sat May 3 22:31:32 SGT 2008


x5 !
Congrats to the team !