Skip to content

Commit 272d95e

Browse files
committed
optimized compilation
1 parent 0c2b77d commit 272d95e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+17398
-13105
lines changed

app/controllers/BirdWatch.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ object BirdWatch extends Controller {
3333
def indexReactJs = Action { Ok(views.html.react_js()) }
3434

3535
def indexCljs = Action { Ok(views.html.cljs_om()) }
36+
def indexCljsOpt = Action { Ok(views.html.cljs_om_opt()) }
3637

3738
/** Controller Action serving Tweets as JSON going backwards in time. Query passed in as JSON */
3839
def search = Action.async(parse.json) {

app/views/cljs_om_opt.scala.html

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
<!DOCTYPE html>
2+
3+
<html lang="en">
4+
<head>
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
7+
<title>BirdWatch</title>
8+
9+
<!-- Stylesheets -->
10+
<link rel="stylesheet" media="screen" href="/assets/stylesheets/main.css">
11+
<link rel="stylesheet" media="screen" href="/assets/stylesheets/bootstrap-glyphicons.css">
12+
<link rel="stylesheet" media="screen" href="/assets/stylesheets/bootstrap.min.css">
13+
<link rel="stylesheet" media="screen" href="/assets/stylesheets/rickshaw.min.css">
14+
<link rel="shortcut icon" type="image/png" href="/assets/images/favicon.png">
15+
</head>
16+
17+
<body>
18+
19+
<div>
20+
<!-- Navigation Bar -->
21+
<div class="navbar">
22+
<div class="container">
23+
24+
<span class="navbar-brand">BirdWatch</span>
25+
26+
<!-- Search field in NavBar -->
27+
<div class="navbar-form pull-left col-lg-6 input-group">
28+
<div id="search"></div>
29+
</div>
30+
31+
<div class="nav-collapse">
32+
33+
<!-- Tweets. Project info -->
34+
<ul class="nav navbar-nav pull-right">
35+
<li class="dropdown">
36+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">About
37+
<b class="caret"></b></a>
38+
<ul class="dropdown-menu">
39+
<li><a href="http://matthiasnehlsen.com"
40+
target="_blank">Project Introduction</a></li>
41+
<li><a href="http://matthiasnehlsen.com" target="_blank">Blog</a></li>
42+
<li><a href="https://github.com/matthiasn/BirdWatch" target="_blank">Project on GitHub</a></li>
43+
<li><a href="#" onclick="BirdWatch.legalStuff()">Legal stuff</a></li>
44+
</ul>
45+
</li>
46+
</ul>
47+
48+
<!-- Settings -->
49+
<ul class="nav navbar-nav pull-right">
50+
<li class="dropdown">
51+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Settings
52+
<b class="caret"></b></a>
53+
<ul class="dropdown-menu">
54+
<li><a href="#">Previous Tweets:</a></li>
55+
<li>
56+
<a>
57+
<select class="form-control" id="prev-size">
58+
<option value="5000">5000</option>
59+
<option value="10000">10000</option>
60+
<option value="20000">20000</option>
61+
<option value="50000">50000</option>
62+
<option value="100000">100000</option>
63+
</select>
64+
</a>
65+
</li>
66+
<li><hr></li>
67+
<li><a href="#">Page Size:</a></li>
68+
<li>
69+
<a>
70+
<select class="form-control" id="page-size">
71+
<option value="5">5</option>
72+
<option value="10" selected>10</option>
73+
<option value="25">25</option>
74+
<option value="50">50</option>
75+
<option value="100">100</option>
76+
</select>
77+
</a>
78+
</li>
79+
<li>
80+
<a>
81+
<select class="form-control" id="offset-size">
82+
<option value="0" selected>0</option>
83+
<option value="1">1</option>
84+
<option value="2">2</option>
85+
<option value="3">3</option>
86+
<option value="4">4</option>
87+
<option value="5">5</option>
88+
</select>
89+
</a>
90+
</li>
91+
</ul>
92+
</li>
93+
</ul>
94+
95+
<div class="nav navbar-text col-lg-2 pull-right">Tweet count: <span id="tweet-count"></span></div>
96+
97+
</div>
98+
</div>
99+
</div>
100+
101+
<!-- Tweets column with Pagination -->
102+
<div class="container container-fluid">
103+
<div class="row">
104+
<!-- Pagination -->
105+
<div id="pagination"></div>
106+
</div>
107+
108+
<div id="sort-buttons"></div>
109+
110+
<!-- Main page layout -->
111+
<div class="row">
112+
<!-- Tweet Cards inside frame -->
113+
<div class="col-lg-4" id="tweet-frame"></div>
114+
115+
<!-- Charts column -->
116+
<div class="col-lg-8">
117+
<div id="timeseries1" class="timeseries" data-tsdata="cf.timeseries()" data-live="live" data-height="100"></div>
118+
<hr />
119+
<div id="wordCloud" class="cloud" ></div>
120+
<hr />
121+
<h5>word frequency</h5>
122+
<div id="react-bar-chart" class="barchart" ></div>
123+
<hr />
124+
</div>
125+
126+
</div>
127+
</div>
128+
</div>
129+
130+
<!-- Scripts placed at the end of the document so the pages load faster -->
131+
132+
<script src="/assets/javascripts/vendor/jquery-1.10.2.min.js"></script>
133+
<script src="/assets/javascripts/vendor/bootstrap.min.js"></script>
134+
<script src="/assets/javascripts/vendor/d3.v3.min.js"></script>
135+
<script src="/assets/javascripts/vendor/d3.layout.cloud.js"></script>
136+
<script src="/assets/javascripts/vendor/crossfilter.v1.min.js"></script>
137+
<script src="/assets/javascripts/vendor/rickshaw.min.js"></script>
138+
<script src="/assets/javascripts/vendor/moment.min.js"></script>
139+
<script src="/assets/javascripts/vendor/underscore.min.js"></script>
140+
<script src="/assets/react-js/vendor/react.js"></script>
141+
<script src="/assets/react-js/vendor/regression.js"></script>
142+
<script src="/assets/cljs-js/barchart.js"></script>
143+
<script src="/assets/cljs-js/wordcloud.js"></script>
144+
145+
<script src="/assets/cljs-opt/cljs_om.js" type="text/javascript"></script>
146+
147+
</body>
148+
</html>

cljs-om/externs.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
var moment = {};
2-
moment.fromNow = function(bool) {};
2+
moment.fromNow = function (bool) {};
33

44
var BirdWatch = {};
55
BirdWatch.WordCloud = function (w, h, maxEntries, addSearch, elem) {};
6+
BirdWatch.init = function () {};
7+
BirdWatch.redraw = function (dataSource) {};
8+
9+
BirdWatch.updateBarchart = function (words) {};
610

711
var Rickshaw = {};
12+
Rickshaw.Fixtures = {};
13+
Rickshaw.Fixtures.RandomData = {};
14+
Rickshaw.Fixtures.RandomData.addData = function (n) {}
15+
Rickshaw.Graph = {};

cljs-om/js/react.min.js

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cljs-om/js/regression.js

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
/**
2+
* @license
3+
*
4+
* Regression.JS - Regression functions for javascript
5+
* http://tom-alexander.github.com/regression-js/
6+
*
7+
* copyright(c) 2013 Tom Alexander
8+
* Licensed under the MIT license.
9+
*
10+
**/
11+
12+
;(function() {
13+
'use strict';
14+
15+
var gaussianElimination = function(a, o) {
16+
var i = 0, j = 0, k = 0, maxrow = 0, tmp = 0, n = a.length - 1, x = new Array(o);
17+
for (i = 0; i < n; i++) {
18+
maxrow = i;
19+
for (j = i + 1; j < n; j++) {
20+
if (Math.abs(a[i][j]) > Math.abs(a[i][maxrow]))
21+
maxrow = j;
22+
}
23+
for (k = i; k < n + 1; k++) {
24+
tmp = a[k][i];
25+
a[k][i] = a[k][maxrow];
26+
a[k][maxrow] = tmp;
27+
}
28+
for (j = i + 1; j < n; j++) {
29+
for (k = n; k >= i; k--) {
30+
a[k][j] -= a[k][i] * a[i][j] / a[i][i];
31+
}
32+
}
33+
}
34+
for (j = n - 1; j >= 0; j--) {
35+
tmp = 0;
36+
for (k = j + 1; k < n; k++)
37+
tmp += a[k][j] * x[k];
38+
x[j] = (a[n][j] - tmp) / a[j][j];
39+
}
40+
return (x);
41+
};
42+
43+
var methods = {
44+
linear: function(data) {
45+
var sum = [0, 0, 0, 0, 0], n = 0, results = [];
46+
47+
for (; n < data.length; n++) {
48+
if (data[n][1]) {
49+
sum[0] += data[n][0];
50+
sum[1] += data[n][1];
51+
sum[2] += data[n][0] * data[n][0];
52+
sum[3] += data[n][0] * data[n][1];
53+
sum[4] += data[n][1] * data[n][1];
54+
}
55+
}
56+
57+
var gradient = (n * sum[3] - sum[0] * sum[1]) / (n * sum[2] - sum[0] * sum[0]);
58+
var intercept = (sum[1] / n) - (gradient * sum[0]) / n;
59+
// var correlation = (n * sum[3] - sum[0] * sum[1]) / Math.sqrt((n * sum[2] - sum[0] * sum[0]) * (n * sum[4] - sum[1] * sum[1]));
60+
61+
for (var i = 0, len = data.length; i < len; i++) {
62+
var coordinate = [data[i][0], data[i][0] * gradient + intercept];
63+
results.push(coordinate);
64+
}
65+
66+
var string = 'y = ' + Math.round(gradient*100) / 100 + 'x + ' + Math.round(intercept*100) / 100;
67+
68+
return {equation: [gradient, intercept], points: results, string: string};
69+
},
70+
71+
exponential: function(data) {
72+
var sum = [0, 0, 0, 0, 0, 0], n = 0, results = [];
73+
74+
for (len = data.length; n < len; n++) {
75+
if (data[n][1]) {
76+
sum[0] += data[n][0];
77+
sum[1] += data[n][1];
78+
sum[2] += data[n][0] * data[n][0] * data[n][1];
79+
sum[3] += data[n][1] * Math.log(data[n][1]);
80+
sum[4] += data[n][0] * data[n][1] * Math.log(data[n][1]);
81+
sum[5] += data[n][0] * data[n][1];
82+
}
83+
}
84+
85+
var denominator = (sum[1] * sum[2] - sum[5] * sum[5]);
86+
var A = Math.pow(Math.E, (sum[2] * sum[3] - sum[5] * sum[4]) / denominator);
87+
var B = (sum[1] * sum[4] - sum[5] * sum[3]) / denominator;
88+
89+
for (var i = 0, len = data.length; i < len; i++) {
90+
var coordinate = [data[i][0], A * Math.pow(Math.E, B * data[i][0])];
91+
results.push(coordinate);
92+
}
93+
94+
var string = 'y = ' + Math.round(A*100) / 100 + 'e^(' + Math.round(B*100) / 100 + 'x)';
95+
96+
return {equation: [A, B], points: results, string: string};
97+
},
98+
99+
logarithmic: function(data) {
100+
var sum = [0, 0, 0, 0], n = 0, results = [];
101+
102+
for (len = data.length; n < len; n++) {
103+
if (data[n][1]) {
104+
sum[0] += Math.log(data[n][0]);
105+
sum[1] += data[n][1] * Math.log(data[n][0]);
106+
sum[2] += data[n][1];
107+
sum[3] += Math.pow(Math.log(data[n][0]), 2);
108+
}
109+
}
110+
111+
var B = (n * sum[1] - sum[2] * sum[0]) / (n * sum[3] - sum[0] * sum[0]);
112+
var A = (sum[2] - B * sum[0]) / n;
113+
114+
for (var i = 0, len = data.length; i < len; i++) {
115+
var coordinate = [data[i][0], A + B * Math.log(data[i][0])];
116+
results.push(coordinate);
117+
}
118+
119+
var string = 'y = ' + Math.round(A*100) / 100 + ' + ' + Math.round(B*100) / 100 + ' ln(x)';
120+
121+
return {equation: [A, B], points: results, string: string};
122+
},
123+
124+
power: function(data) {
125+
var sum = [0, 0, 0, 0], n = 0, results = [];
126+
127+
for (len = data.length; n < len; n++) {
128+
if (data[n][1]) {
129+
sum[0] += Math.log(data[n][0]);
130+
sum[1] += Math.log(data[n][1]) * Math.log(data[n][0]);
131+
sum[2] += Math.log(data[n][1]);
132+
sum[3] += Math.pow(Math.log(data[n][0]), 2);
133+
}
134+
}
135+
136+
var B = (n * sum[1] - sum[2] * sum[0]) / (n * sum[3] - sum[0] * sum[0]);
137+
var A = Math.pow(Math.E, (sum[2] - B * sum[0]) / n);
138+
139+
for (var i = 0, len = data.length; i < len; i++) {
140+
var coordinate = [data[i][0], A * Math.pow(data[i][0] , B)];
141+
results.push(coordinate);
142+
}
143+
144+
var string = 'y = ' + Math.round(A*100) / 100 + 'x^' + Math.round(B*100) / 100;
145+
146+
return {equation: [A, B], points: results, string: string};
147+
},
148+
149+
polynomial: function(data, order) {
150+
if(typeof order == 'undefined'){
151+
order = 2;
152+
}
153+
var lhs = [], rhs = [], results = [], a = 0, b = 0, i = 0, k = order + 1;
154+
155+
for (; i < k; i++) {
156+
for (var l = 0, len = data.length; l < len; l++) {
157+
if (data[l][1]) {
158+
a += Math.pow(data[l][0], i) * data[l][1];
159+
}
160+
}
161+
lhs.push(a), a = 0;
162+
var c = [];
163+
for (var j = 0; j < k; j++) {
164+
for (var l = 0, len = data.length; l < len; l++) {
165+
if (data[l][1]) {
166+
b += Math.pow(data[l][0], i + j);
167+
}
168+
}
169+
c.push(b), b = 0;
170+
}
171+
rhs.push(c);
172+
}
173+
rhs.push(lhs);
174+
175+
var equation = gaussianElimination(rhs, k);
176+
177+
for (var i = 0, len = data.length; i < len; i++) {
178+
var answer = 0;
179+
for (var w = 0; w < equation.length; w++) {
180+
answer += equation[w] * Math.pow(data[i][0], w);
181+
}
182+
results.push([data[i][0], answer]);
183+
}
184+
185+
var string = 'y = ';
186+
187+
for(var i = equation.length-1; i >= 0; i--){
188+
if(i > 1) string += Math.round(equation[i]*100) / 100 + 'x^' + i + ' + ';
189+
else if (i == 1) string += Math.round(equation[i]*100) / 100 + 'x' + ' + ';
190+
else string += Math.round(equation[i]*100) / 100;
191+
}
192+
193+
return {equation: equation, points: results, string: string};
194+
}
195+
};
196+
197+
var regression = (function(method, data, order) {
198+
199+
if (typeof method == 'string') {
200+
return methods[method](data, order);
201+
}
202+
});
203+
204+
if (typeof exports !== 'undefined') {
205+
module.exports = regression;
206+
} else {
207+
window.regression = regression;
208+
}
209+
210+
}());

0 commit comments

Comments
 (0)