# HG changeset patch
# User veltr
# Date 1363106671 -3600
# Node ID a2d5b669f6639dcf073e3cb016c944e1d8567791
# Parent 14dd1980b0b9a16b3bf4be511ce1ded1f12ef8c3
new data access method
diff -r 14dd1980b0b9 -r a2d5b669f663 .hgignore
--- a/.hgignore Fri Mar 08 19:05:17 2013 +0100
+++ b/.hgignore Tue Mar 12 17:44:31 2013 +0100
@@ -2,4 +2,6 @@
syntax: regexp
^\.project$
syntax: regexp
-\.webm$
\ No newline at end of file
+\.webm$
+syntax: regexp
+^thumbnails$
\ No newline at end of file
diff -r 14dd1980b0b9 -r a2d5b669f663 css/playscreen.css
--- a/css/playscreen.css Fri Mar 08 19:05:17 2013 +0100
+++ b/css/playscreen.css Tue Mar 12 17:44:31 2013 +0100
@@ -34,21 +34,15 @@
.keyword-search {
line-height: 20px; padding: 0 5px; margin-top: 4px; border: 1px solid #000000; width: 300px; font-size: 18px;
- background: #666666; color: #FFFFFF;
-}
-::-webkit-input-placeholder {
- color: #cccccc; font-style: italic;
-}
-:-moz-placeholder {
- color: #cccccc; font-style: italic;
+ background: #666666;
}
-.ui-autocomplete {
- background: #666666; font-size: 14px;
+.keyword-search a {
+ color: #FFFFFF; text-decoration: none;
}
-.ui-autocomplete a {
- color: #ffffff;
+a.placeholder {
+ color: #cccccc;
}
.shadow-block {
@@ -85,7 +79,7 @@
}
.play-images {
- left: 300px; position: absolute;
+ left: 155px; position: absolute;
}
.play-images img {
@@ -109,3 +103,25 @@
.play-localtweets p {
margin-left: 24px;
}
+
+.play-tagcloud {
+ left: 720px;
+ top: 5px;
+ position: absolute;
+ width: 296px;
+}
+
+.play-tagcloud li {
+ float: left; width: 98px; height: 10px;
+ line-height: 10px;
+ text-align: center;
+}
+
+.play-tagcloud li:nth-child(3n+2) {
+ margin-top: 5px;
+}
+
+.play-tagcloud li:nth-child(3n) {
+ margin-top: 10px;
+}
+
diff -r 14dd1980b0b9 -r a2d5b669f663 css/startscreen.css
--- a/css/startscreen.css Fri Mar 08 19:05:17 2013 +0100
+++ b/css/startscreen.css Tue Mar 12 17:44:31 2013 +0100
@@ -21,7 +21,7 @@
.play-button {
float: left; margin: 8px; font-size: 44px;
- line-height: 50px;
+ line-height: 50px; color: #FFFFFF; text-decoration: none;
}
.duration {
diff -r 14dd1980b0b9 -r a2d5b669f663 js/playscreen.js
--- a/js/playscreen.js Fri Mar 08 19:05:17 2013 +0100
+++ b/js/playscreen.js Tue Mar 12 17:44:31 2013 +0100
@@ -10,7 +10,17 @@
function showData() {
- var topicHash = document.location.hash || "#topics=5,15";
+ var topicHash = document.location.hash || "#selectedtopics=5,15&visibletopics=5,10,15";
+
+ var pageParams = {};
+
+ topicHash
+ .replace(/^#/,'')
+ .split('&')
+ .forEach(function(p) {
+ var s = p.split('=');
+ pageParams[s[0]] = s[1].split(",").map(function(t) { return decodeURIComponent(t)});
+ })
var ordertag = 0;
@@ -48,9 +58,7 @@
});
var sortedTopics = data.topics.filter(function(t) {
- return t.index !== topicPoubelle;
- }).sort(function(a,b) {
- return b.score - a.score;
+ return pageParams.visibletopics.indexOf(t.index.toString()) !==-1 && t.index !== topicPoubelle;
});
@@ -173,7 +181,8 @@
ph = jqsvg.height(),
globW = 85,
globL = 40,
- localL = 155,
+ entonnoirR = 155,
+ localL = 235,
localW = 85,
localR = (localL + localW),
localTimeR = (localL + localW) + globL,
@@ -246,22 +255,25 @@
entonnoir.toBack();
+ var cloudTemplate = _.template('
<%- word %>');
+
function showLocal() {
localyscale = ph / localduration;
var localstart = localpos - localduration/2;
localend = localpos + localduration/2;
globtop = yscale * localstart,
globbottom = yscale * localend,
- betweenx = (globR + localL) / 2,
+ betweenx = (globR + entonnoirR) / 2,
betweenyt = (globtop) / 2,
betweenyb = (globbottom + ph) / 2,
- curve = (localL - globR) / 2,
+ curve = (entonnoirR - globR) / 2,
entonnoird = "M0," + globtop + "l" + globR + ",0Q" + betweenx + "," + globtop + "," + betweenx + ","
+ Math.max(globtop - curve, betweenyt) + "L" + betweenx + "," + Math.min(curve, betweenyt) + "Q"
- + betweenx + ",0," + localL + ",0"
- + "L" + localR + ",0L" + localR + "," + ph + "L" + localL + "," + ph + "Q" + betweenx + "," + ph + ","
+ + betweenx + ",0," + entonnoirR + ",0"
+ + "L" + localR + ",0L" + localR + "," + ph + "L" + entonnoirR + "," + ph + "Q" + betweenx + "," + ph + ","
+ betweenx + "," + Math.max(ph - curve, betweenyb) +"L" + betweenx + "," + Math.min(globbottom + curve, betweenyb)
- + "Q" + betweenx + "," + globbottom + "," + globR + "," + globbottom + "L0," + globbottom;
+ + "Q" + betweenx + "," + globbottom + "," + globR + "," + globbottom + "L0," + globbottom,
+ localkeywords = {};
entonnoir.attr("path",entonnoird);
localTimes.forEach(function(t) {
@@ -280,8 +292,20 @@
localMmsoDelta = parseInt(filteredSegments[0].id.split("_")[1]);
localMmsos = filteredSegments.map(function(s) {
var y = localyscale * (s.start - localstart),
- h = localyscale * s.duration;
- var rect = paper.rect( localL, y, localW, h );
+ h = localyscale * s.duration,
+ rect = paper.rect( localL, y, localW, h ),
+ visibled = (
+ s.start < localstart
+ ? s.duration - localstart + s.start
+ : (
+ s.end > localend
+ ? s.duration - s.end + localend
+ : s.duration
+ )
+ );
+ _(s.keywords).each(function(v,k) {
+ localkeywords[k] = (v * visibled) + (localkeywords[k] || 0);
+ });
rect.attr({stroke: "none", title: s.id});
if (parseInt(s.id.replace("MMSO_","")) % 2) {
var altrect = paper.rect( localR, y, 60, h);
@@ -356,6 +380,28 @@
}
});
+ localkeywords = _(localkeywords)
+ .chain()
+ .map(function(v,k) {
+ return { word: k, score: v }
+ })
+ .sortBy(function(w) {
+ return -w.score;
+ })
+ .first(30)
+ .value();
+
+ var values = _(localkeywords).pluck('score'),
+ max = Math.max.apply(Math, values),
+ min = Math.min.apply(Math, values),
+ scale = 10 / (max - Math.min(max - .1, min));
+
+ localkeywords.forEach(function(w) {
+ w.size = 10 + (w.score - min) * scale;
+ });
+
+ $(".play-tagcloud").html(localkeywords.map(cloudTemplate).join(""));
+
throttledGetTweets();
showTopicViz();
@@ -381,8 +427,8 @@
if (mmsostruct) {
for (var j = 0; j < topics.length; j++) {
var topicid = topics[j];
- if (mmsostruct[topicid]) {
- var tweetids = mmsostruct[topicid].tweetids;
+ if (mmsostruct.tweetids) {
+ var tweetids = mmsostruct.tweetids[topicid];
for (var k = 0; k < tweetids.length; k++) {
toshow.push(tweetids[k]);
}
@@ -400,11 +446,15 @@
tweetstoshow.forEach(function(tw) {
tw.topic = tw.topics.filter(function(t) {
- return topics.indexOf(t.topic) !== -1;
+ return topics.indexOf(t.topic.toString()) !== -1;
}).sort(function(a,b) {
return b.weight - a.weight
})[0];
});
+
+ tweetstoshow = tweetstoshow.filter(function(t) {
+ return !!t.topic;
+ })
tweetstoshow.sort(function(a, b) {
return b.topic.weight - a.topic.weight;
@@ -416,8 +466,6 @@
return a.timestamp - b.timestamp;
});
- console.log(tweetstoshow);
-
var html = tweetstoshow.map(tweetTemplate).join("");
$(".play-localtweets").html(html);
@@ -431,31 +479,35 @@
}
function getMmsoTweetIds(mmstruct) {
-
- TopicsBean.bestSocialInteractionsIdsMatching(mmstruct.mmso, mmstruct.topic, 0, _NTWEETS, {
- callback: function(tw) {
+ TopicsBean.bestSocialInteractionsIdsMatching(mmstruct.mmsoid, 0, _NTWEETS, {
+ callback: function(res) {
mmstruct.status = 2;
- mmstruct.tweetids = tw;
- for (var k = 0; k < tw.length; k++) {
- var tweetid = tw[k],
- relevance = mmstruct.weight * (_NTWEETS - k) / _NTWEETS;
- if (!requestedtweets[tweetid]) {
- requestedtweets[tweetid] = {
- id: tweetid,
- status: 0,
- topics: []
+ mmstruct.tweetids = res;
+ for (var j = 0; j < res.length; j++) {
+ var tweetids = res[j],
+ ntw = tweetids.length,
+ topicweight = data.topics[j].weights[mmstruct.mmsoindex];
+ for (var k = 0; k < tweetids.length; k++) {
+ var relevance = topicweight * (ntw - k) / ntw,
+ tweetid = tweetids[k];
+ if (!requestedtweets[tweetid]) {
+ requestedtweets[tweetid] = {
+ id: tweetid,
+ status: 0,
+ topics: []
+ }
}
+ requestedtweets[tweetid].topics.push({
+ topic: j,
+ weight: relevance
+ });
}
- requestedtweets[tweetid].topics.push({
- topic: mmstruct.topic,
- weight: relevance
- });
}
debouncedGetTweetData();
},
- errorHandler: function(err) {
+ errorHandler: function(err,info) {
mmstruct.status = 0;
- console.log(err);
+ console.error(err,info);
throttledGetTweetIds();
}
});
@@ -469,17 +521,13 @@
var toload = [];
- _(tweetstructure).each(function(v) {
- _(v).each(function(w) {
- if (!w.status) {
- w.status = 1;
- toload.push(w);
- }
- });
+ _(tweetstructure).each(function(w) {
+ if (!w.status) {
+ w.status = 1;
+ toload.push(w);
+ }
});
- console.log("Loading tweet ids");
-
if (toload.length) {
if (toload.length > _MAX_BATCH) {
@@ -545,21 +593,11 @@
for (var i = 0; i < localMmsos.length; i++) {
var mmso = data.segments[localMmsoDelta + i];
if (!tweetstructure[mmso.id]) {
- tweetstructure[mmso.id] = {}
- }
- var mmsostruct = tweetstructure[mmso.id];
- for (var j = 0; j < topics.length; j++) {
- var topicid = topics[j],
- weight = data.topics[topics[j]].weights[localMmsoDelta + i];
- if (weight > .1 && !mmsostruct[topicid]) {
- mmsostruct[topicid] = {
- topic: topicid,
- mmso: mmso.id,
- status: 0,
- weight: weight,
- tweetids: []
- };
- }
+ tweetstructure[mmso.id] = {
+ mmsoid: mmso.id,
+ mmsoindex: localMmsoDelta + i,
+ status: 0
+ }
}
}
@@ -571,11 +609,12 @@
throttledShowLocal = _.throttle(showLocal, 100);
showTopics(sortedTopics);
- (topicHash.match(/\d+/g) || []).forEach(function(id) {
+
+ pageParams.selectedtopics.forEach(function(id) {
$(".topic[data-topic-id=" + id + "]").addClass("selected").attr("data-timestamp",++ordertag);
});
- var localpos = 7100,
+ var localpos = 300,
localduration = 600;
showLocal();
@@ -645,7 +684,11 @@
}
totalScroll = 0;
}
- })
+ });
+
+ if (pageParams.keywords && pageParams.keywords.length) {
+ $(".keyword-search a").removeClass("placeholder").text(pageParams.keywords.join(", "));
+ }
}
@@ -705,14 +748,33 @@
loadJson("data/5secs.json", "fiveseconds");
loadJson(
- solrUrl("MMSO", {q: "*:*", fl: "topic*,MMSO_id,multimediaSegment", rows: 250 }),
+ solrUrl("MMSO", {q: "*:*", fl: "topic*,MMSO_id,multimediaSegment,keywordsFromSocial,keywordsFromAudio", rows: 250 }),
"segments",
function(d) {
return d.response.docs.map(function(mmso) {
var tc = mmso.multimediaSegment.match(/\d+/g),
start = parseInt(tc[0]),
end = parseInt(tc[1]),
- topics = [];
+ topics = [],
+ keywords = {};
+
+ function getKeywords(field) {
+ var keywordtexts = mmso[field].replace(/[{}]/g,'').split(", ");
+ keywordtexts.forEach(function(k) {
+ var t = k.split('='),
+ s = parseFloat(t[1]),
+ w = t[0].split(" ");
+ w.forEach(function(m) {
+ if (m.length > 2) {
+ keywords[m] = s + (keywords[m] || 0);
+ }
+ });
+ });
+ }
+
+ getKeywords("keywordsFromAudio");
+ getKeywords("keywordsFromSocial");
+
for (var k in mmso) {
if (k.substr(0,5) === "topic" && mmso[k] > .01) {
topics.push({
@@ -733,7 +795,8 @@
start: start,
end: end,
duration: end - start,
- topics: topics
+ topics: topics,
+ keywords: keywords
}
}).sort(function(a,b) {
return a.start - b.start;
diff -r 14dd1980b0b9 -r a2d5b669f663 js/startscreen.js
--- a/js/startscreen.js Fri Mar 08 19:05:17 2013 +0100
+++ b/js/startscreen.js Tue Mar 12 17:44:31 2013 +0100
@@ -210,7 +210,10 @@
allwords.sort();
$(".keyword-search").autocomplete({
- source: allwords
+ source: allwords,
+ change: function() {
+ window.setInterval(wordFilter,0);
+ }
}).on("keyup change paste", wordFilter);
// */
@@ -233,14 +236,11 @@
sbl = selectedBlocks.length,
topicBlocks = $(".topic");
if (!sbl && topicBlocks.length < sortedTopics.length) {
- topicBlocks.each(function() {
-
- })
selectedBlocks = topicBlocks;
sbl = selectedBlocks.length;
}
var topicsAndColors = [];
- selectedBlocks.map(function() {
+ selectedBlocks.each(function() {
var el = $(this),
topicid = parseInt(el.attr("data-topic-id"));
topicsAndColors.push({
@@ -285,6 +285,17 @@
}
}
+ var url = "playscreen.html#visibletopics="
+ + Array.prototype.join.call($(".topic:visible").map(function(){return $(this).attr("data-topic-id")}))
+ + "&selectedtopics="
+ + Array.prototype.slice.call(topicsAndColors.map(function(t){return t.id}))
+ + "&keywords="
+ + selectedWords.map(function(w) {
+ return encodeURIComponent(w);
+ }).join(",");
+
+ $(".play-button").attr("href",url);
+
}
var jqsvg = $(".start-svg");
diff -r 14dd1980b0b9 -r a2d5b669f663 playscreen.html
--- a/playscreen.html Fri Mar 08 19:05:17 2013 +0100
+++ b/playscreen.html Tue Mar 12 17:44:31 2013 +0100
@@ -34,7 +34,7 @@
0:00:00
@@ -44,9 +44,10 @@
diff -r 14dd1980b0b9 -r a2d5b669f663 startscreen.html
--- a/startscreen.html Fri Mar 08 19:05:17 2013 +0100
+++ b/startscreen.html Tue Mar 12 17:44:31 2013 +0100
@@ -29,7 +29,7 @@
Le débat