├── .gitignore ├── MAINTAINERS ├── favicon.ico ├── logo-medium.jpg ├── archive ├── Zalando_Tech_Radar_2016_10.pdf └── Zalando_Tech_Radar_2017_03.pdf ├── lib ├── protovis-3.2 │ ├── README │ ├── jsdoc │ │ └── symbols │ │ │ └── src │ │ │ ├── src_geo_Geo.js.html │ │ │ ├── src_geo_LatLng.js.html │ │ │ ├── src_physics_Force.js.html │ │ │ ├── src_physics_Constraint.js.html │ │ │ ├── src_color_Ramp.js.html │ │ │ ├── src_behavior_Behavior.js.html │ │ │ ├── src_geo_Projection.js.html │ │ │ ├── src_physics_Particle.js.html │ │ │ ├── src_data_LinearScale.js.html │ │ │ ├── src_lang_init.js.html │ │ │ ├── src_layout_Layout.js.html │ │ │ ├── src_scene_SvgRule.js.html │ │ │ ├── src_physics_DragForce.js.html │ │ │ ├── src_mark_Anchor.js.html │ │ │ ├── src_data_RootScale.js.html │ │ │ ├── src_text_Format.js.html │ │ │ ├── src_scene_SvgBar.js.html │ │ │ ├── src_pv.js.html │ │ │ ├── src_mark_Bar.js.html │ │ │ └── src_physics_PositionConstraint.js.html │ ├── MIT.LICENSE │ ├── LICENSE │ └── examples │ │ ├── crimea │ │ ├── crimea-line.html │ │ ├── crimea-stacked-area.html │ │ ├── crimea-stacked-bar.html │ │ ├── crimea.js │ │ ├── crimea-grouped-bar.html │ │ └── crimea.html │ │ ├── antibiotics │ │ ├── antibiotics.js │ │ ├── antibiotics-scatter.html │ │ └── antibiotics.html │ │ ├── cars │ │ └── cars.html │ │ └── barley │ │ ├── barley.html │ │ └── barley.js ├── utils.js ├── utils_test.js └── jasmine-1.0.1 │ ├── jasmine.css │ └── jasmine-html.js ├── download.sh ├── test.html ├── radar_data.js.liquid ├── README.md ├── transform.rb ├── index.html ├── radar.js ├── LICENSE.txt └── data └── 2016_10.tsv /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ -------------------------------------------------------------------------------- /MAINTAINERS: -------------------------------------------------------------------------------- 1 | Tim Lossen 2 | 3 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitro/tech-radar/master/favicon.ico -------------------------------------------------------------------------------- /logo-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitro/tech-radar/master/logo-medium.jpg -------------------------------------------------------------------------------- /archive/Zalando_Tech_Radar_2016_10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitro/tech-radar/master/archive/Zalando_Tech_Radar_2016_10.pdf -------------------------------------------------------------------------------- /archive/Zalando_Tech_Radar_2017_03.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitro/tech-radar/master/archive/Zalando_Tech_Radar_2017_03.pdf -------------------------------------------------------------------------------- /lib/protovis-3.2/README: -------------------------------------------------------------------------------- 1 | Protovis v3.2 2 | 3 | For documentation, see http://protovis.org. 4 | For development, see http://gitorious.org/protovis. 5 | -------------------------------------------------------------------------------- /download.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MONTH=`date +%m` 4 | YEAR=`date +%Y` 5 | FILE="data/${YEAR}_${MONTH}.tsv" 6 | 7 | curl "https://docs.google.com/spreadsheets/d/1HvsbibsBTBvZXDaJZWYyHwTxuA7a4eEbgcIKaPhuoxs/export?gid=0&format=tsv" -o "$FILE" 8 | 9 | #remove first row 10 | tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE" 11 | -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | 2 | function polar_to_cartesian(r,t) { 3 | //radians to degrees, requires the t*pi/180 4 | var x = r * Math.cos((t*Math.PI/180)); 5 | var y = r * Math.sin((t*Math.PI/180)); 6 | return [x,y]; 7 | } 8 | 9 | function cartesian_to_raster(x,y) { 10 | var rx = w/2 + x; 11 | var ry = h/2 + y; 12 | return [rx,ry]; 13 | } 14 | 15 | function raster_to_cartesian(rx,ry) { 16 | var x = rx - w/2; 17 | var y = ry - h/2; 18 | return [x,y]; 19 | } 20 | 21 | function polar_to_raster(r,t) { 22 | var xy= polar_to_cartesian(r,t); 23 | return cartesian_to_raster(xy[0], xy[1]); 24 | } 25 | 26 | -------------------------------------------------------------------------------- /test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Radar Test 5 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_geo_Geo.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * @ignore
10 |   3  * @namespace
11 |   4  */
12 |   5 pv.Geo = function() {};
13 |   6 
-------------------------------------------------------------------------------- /lib/protovis-3.2/MIT.LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008-2010 Pivotal Labs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /radar_data.js.liquid: -------------------------------------------------------------------------------- 1 | var h = 1000; 2 | var w = 1450; 3 | 4 | var radar_arcs = {{ arcs }}; 5 | 6 | // movement: 7 | // t = moved (triangle) 8 | // c = stayed put (circle) 9 | // 10 | // blipSize: 11 | // This is optional, if you omit this property, then blip size will be 70. 12 | // 13 | // url: 14 | // This is optional, if you add it then blips will be clickable to some URL. 15 | // 16 | // pc: (polar coordinates) 17 | // r = distance away from origin ("radial coordinate") 18 | // - Each level is 100 points away from origin 19 | // t = angle of the point from origin ("angular coordinate") 20 | // - 0 degrees is due east 21 | // 22 | var radar_data = [ 23 | { 24 | "quadrant": "Techniques; Frameworks & Tools", 25 | "left" : 45, 26 | "top" : 188, 27 | "color" : "#8FA227", 28 | "items" : {{ techniques }} 29 | }, 30 | { 31 | "quadrant": "Data Management", 32 | "left": w-300+30, 33 | "top" : 188, 34 | "color" : "#587486", 35 | "items" : {{ data }} 36 | }, 37 | { 38 | "quadrant": "Platforms & Infrastructure", 39 | "left" :45, 40 | "top" : (h/2 + 38), 41 | "color" : "#DC6F1D", 42 | "items" : {{ platforms }} 43 | }, 44 | { 45 | "quadrant": "Languages", 46 | "color" : "#B70062", 47 | "left" : (w-300+30), 48 | "top" : (h/2 + 38), 49 | "items" : {{ languages }} 50 | } 51 | ]; 52 | -------------------------------------------------------------------------------- /lib/protovis-3.2/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, Stanford Visualization Group 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of Stanford University nor the names of its contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea-line.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crimean War 4 | 5 | 6 | 7 | 15 | 16 |
17 | 60 |
61 | 62 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea-stacked-area.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crimean War 4 | 5 | 6 | 7 | 15 | 16 |
17 | 60 |
61 | 62 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea-stacked-bar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crimean War 4 | 5 | 6 | 7 | 15 | 16 |
17 | 59 |
60 | 61 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea.js: -------------------------------------------------------------------------------- 1 | var causes = ["wounds", "other", "disease"]; 2 | 3 | var crimea = [ 4 | { date: "4/1854", wounds: 0, other: 110, disease: 110 }, 5 | { date: "5/1854", wounds: 0, other: 95, disease: 105 }, 6 | { date: "6/1854", wounds: 0, other: 40, disease: 95 }, 7 | { date: "7/1854", wounds: 0, other: 140, disease: 520 }, 8 | { date: "8/1854", wounds: 20, other: 150, disease: 800 }, 9 | { date: "9/1854", wounds: 220, other: 230, disease: 740 }, 10 | { date: "10/1854", wounds: 305, other: 310, disease: 600 }, 11 | { date: "11/1854", wounds: 480, other: 290, disease: 820 }, 12 | { date: "12/1854", wounds: 295, other: 310, disease: 1100 }, 13 | { date: "1/1855", wounds: 230, other: 460, disease: 1440 }, 14 | { date: "2/1855", wounds: 180, other: 520, disease: 1270 }, 15 | { date: "3/1855", wounds: 155, other: 350, disease: 935 }, 16 | { date: "4/1855", wounds: 195, other: 195, disease: 560 }, 17 | { date: "5/1855", wounds: 180, other: 155, disease: 550 }, 18 | { date: "6/1855", wounds: 330, other: 130, disease: 650 }, 19 | { date: "7/1855", wounds: 260, other: 130, disease: 430 }, 20 | { date: "8/1855", wounds: 290, other: 110, disease: 490 }, 21 | { date: "9/1855", wounds: 355, other: 100, disease: 290 }, 22 | { date: "10/1855", wounds: 135, other: 95, disease: 245 }, 23 | { date: "11/1855", wounds: 100, other: 140, disease: 325 }, 24 | { date: "12/1855", wounds: 40, other: 120, disease: 215 }, 25 | { date: "1/1856", wounds: 0, other: 160, disease: 160 }, 26 | { date: "2/1856", wounds: 0, other: 100, disease: 100 }, 27 | { date: "3/1856", wounds: 0, other: 125, disease: 90 } 28 | ]; 29 | 30 | (function() { 31 | var format = pv.Format.date("%m/%y"); 32 | crimea.forEach(function(d) { d.date = format.parse(d.date); }); 33 | })(); 34 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/antibiotics/antibiotics.js: -------------------------------------------------------------------------------- 1 | var antibiotics = ["penicillin", "streptomycin", "neomycin"]; 2 | 3 | var bacteria = [ 4 | {name: "Mycobacterium tuberculosis", penicillin: 800, streptomycin: 5, neomycin: 2, gram: "negative"}, 5 | {name: "Salmonella schottmuelleri", penicillin: 10, streptomycin: 0.8, neomycin: 0.09, gram: "negative"}, 6 | {name: "Proteus vulgaris", penicillin: 3, streptomycin: 0.1, neomycin: 0.1, gram: "negative"}, 7 | {name: "Klebsiella pneumoniae", penicillin: 850, streptomycin: 1.2, neomycin: 1, gram: "negative"}, 8 | {name: "Brucella abortus", penicillin: 1, streptomycin: 2, neomycin: 0.02, gram: "negative"}, 9 | {name: "Pseudomonas aeruginosa", penicillin: 850, streptomycin: 2, neomycin: 0.4, gram: "negative"}, 10 | {name: "Escherichia coli", penicillin: 100, streptomycin: 0.4, neomycin: 0.1, gram: "negative"}, 11 | {name: "Salmonella (Eberthella) typhosa", penicillin: 1, streptomycin: 0.4, neomycin: 0.008, gram: "negative"}, 12 | {name: "Aerobacter aerogenes", penicillin: 870, streptomycin: 1, neomycin: 1.6, gram: "negative"}, 13 | {name: "Brucella antracis", penicillin: 0.001, streptomycin: 0.01, neomycin: 0.007, gram: "positive"}, 14 | {name: "Streptococcus fecalis", penicillin: 1, streptomycin: 1, neomycin: 0.1, gram: "positive"}, 15 | {name: "Staphylococcus aureus", penicillin: 0.03, streptomycin: 0.03, neomycin: 0.001, gram: "positive"}, 16 | {name: "Staphylococcus albus", penicillin: 0.007, streptomycin: 0.1, neomycin: 0.001, gram: "positive"}, 17 | {name: "Streptococcus hemolyticus", penicillin: 0.001, streptomycin: 14, neomycin: 10, gram: "positive"}, 18 | {name: "Streptococcus viridans", penicillin: 0.005, streptomycin: 10, neomycin: 40, gram: "positive"}, 19 | {name: "Diplococcus pneumoniae", penicillin: 0.005, streptomycin: 11, neomycin: 10, gram: "positive"} 20 | ]; 21 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea-grouped-bar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crimean War 4 | 5 | 6 | 7 | 15 | 16 |
17 | 64 |
65 | 66 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_geo_LatLng.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; not implemented. There is no explicit constructor; this class
10 |   3  * merely serves to document the representation used by {@link pv.Geo.scale}.
11 |   4  *
12 |   5  * @class Represents a pair of geographic coordinates.
13 |   6  *
14 |   7  * @name pv.Geo.LatLng
15 |   8  * @see pv.Geo.scale
16 |   9  */
17 |  10 
18 |  11 /**
19 |  12  * The <i>latitude</i> coordinate in degrees; positive is North.
20 |  13  *
21 |  14  * @type number
22 |  15  * @name pv.Geo.LatLng.prototype.lat
23 |  16  */
24 |  17 
25 |  18 /**
26 |  19  * The <i>longitude</i> coordinate in degrees; positive is East.
27 |  20  *
28 |  21  * @type number
29 |  22  * @name pv.Geo.LatLng.prototype.lng
30 |  23  */
31 |  24 
-------------------------------------------------------------------------------- /lib/protovis-3.2/examples/cars/cars.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Cars 4 | 5 | 6 | 7 | 27 | 28 |
29 | 89 |
90 | 91 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_physics_Force.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; see an implementing class.
10 |   3  *
11 |   4  * @class Represents a force that acts on particles. Note that this interface
12 |   5  * does not specify how to bind a force to specific particles; in general,
13 |   6  * forces are applied globally to all particles. However, some forces may be
14 |   7  * applied to specific particles or between particles, such as spring forces,
15 |   8  * through additional specialization.
16 |   9  *
17 |  10  * @see pv.Simulation
18 |  11  * @see pv.Particle
19 |  12  * @see pv.Force.charge
20 |  13  * @see pv.Force.drag
21 |  14  * @see pv.Force.spring
22 |  15  */
23 |  16 pv.Force = {};
24 |  17 
25 |  18 /**
26 |  19  * Applies this force to the specified particles.
27 |  20  *
28 |  21  * @function
29 |  22  * @name pv.Force.prototype.apply
30 |  23  * @param {pv.Particle} particles particles to which to apply this force.
31 |  24  * @param {pv.Quadtree} q a quadtree for spatial acceleration.
32 |  25  */
33 |  26 
-------------------------------------------------------------------------------- /lib/utils_test.js: -------------------------------------------------------------------------------- 1 | 2 | describe("Radar", function() { 3 | describe("Cartesian to Raster Co-ordinate Transformation functions", function() { 4 | it("cartesian_to_raster_origin", function() { 5 | expect(cartesian_to_raster(0,0)).toEqual([w/2,h/2]); 6 | }); 7 | 8 | it("cartesian_to_raster_bounds", function() { 9 | expect(cartesian_to_raster(-500,-500)).toEqual([0,0]); 10 | expect(cartesian_to_raster(500,500)).toEqual([w,h]); 11 | expect(cartesian_to_raster(-500,500)).toEqual([0,h]); 12 | expect(cartesian_to_raster(500,0)).toEqual([w,h/2]); 13 | }); 14 | }); 15 | 16 | describe("Polar to Cartesian Co-ordinate Transformation functions", function() { 17 | 18 | it("polar origin ", function() { 19 | var r = 0, t = 0; 20 | expect(Math.round(polar_to_cartesian(r,t)[0])).toEqual(0); 21 | expect(Math.round(polar_to_cartesian(r,t)[1])).toEqual(0); 22 | }); 23 | 24 | it("polar to cartesian 1,90", function() { 25 | var r = 1, t = 90; 26 | expect(Math.round(polar_to_cartesian(r,t)[0])).toEqual(0); 27 | expect(Math.round(polar_to_cartesian(r,t)[1])).toEqual(1); 28 | }); 29 | 30 | it("polar to cartesian 20,90", function() { 31 | var r = 20; 32 | var t = 90; 33 | expect(Math.round(polar_to_cartesian(r,t)[0])).toEqual(0); 34 | expect(Math.round(polar_to_cartesian(r,t)[1])).toEqual(r); 35 | }); 36 | 37 | it("polar to cartesian 20, 180", function() { 38 | var r = 20, t = 180; 39 | expect(Math.round(polar_to_cartesian(r,t)[0])).toEqual(-20); 40 | expect(Math.round(polar_to_cartesian(r,t)[1])).toEqual(0); 41 | }); 42 | 43 | it("polar to cartesian, 20, 270", function() { 44 | var r = 20, t = 270; 45 | expect(Math.round(polar_to_cartesian(r,t)[0])).toEqual(0); 46 | expect(Math.round(polar_to_cartesian(r,t)[1])).toEqual(-20); 47 | }); 48 | 49 | }); 50 | 51 | describe("Raster to Cartesian Co-ordinate Transformation functions", function() { 52 | it("Raster to cartesian", function() { 53 | expect(raster_to_cartesian(0,0)).toEqual([-500,-500]); 54 | expect(raster_to_cartesian(1000,1000)).toEqual([500,500]); 55 | }); 56 | 57 | }); 58 | }); 59 | jasmine.getEnv().addReporter(new jasmine.TrivialReporter());; 60 | jasmine.getEnv().execute(); 61 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_physics_Constraint.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; see an implementing class.
10 |   3  *
11 |   4  * @class Represents a constraint that acts on particles. Note that this
12 |   5  * interface does not specify how to bind a constraint to specific particles; in
13 |   6  * general, constraints are applied globally to all particles. However, some
14 |   7  * constraints may be applied to specific particles or between particles, such
15 |   8  * as position constraints, through additional specialization.
16 |   9  *
17 |  10  * @see pv.Simulation
18 |  11  * @see pv.Particle
19 |  12  * @see pv.Constraint.bound
20 |  13  * @see pv.Constraint.collision
21 |  14  * @see pv.Constraint.position
22 |  15  */
23 |  16 pv.Constraint = {};
24 |  17 
25 |  18 /**
26 |  19  * Applies this constraint to the specified particles.
27 |  20  *
28 |  21  * @function
29 |  22  * @name pv.Constraint.prototype.apply
30 |  23  * @param {pv.Particle} particles particles to which to apply this constraint.
31 |  24  * @param {pv.Quadtree} q a quadtree for spatial acceleration.
32 |  25  * @returns {pv.Constraint} this.
33 |  26  */
34 |  27 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_color_Ramp.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Returns a linear color ramp from the specified <tt>start</tt> color to the
10 |   3  * specified <tt>end</tt> color. The color arguments may be specified either as
11 |   4  * <tt>string</tt>s or as {@link pv.Color}s. This is equivalent to:
12 |   5  *
13 |   6  * <pre>    pv.Scale.linear().domain(0, 1).range(...)</pre>
14 |   7  *
15 |   8  * @param {string} start the start color; may be a <tt>pv.Color</tt>.
16 |   9  * @param {string} end the end color; may be a <tt>pv.Color</tt>.
17 |  10  * @returns {Function} a color ramp from <tt>start</tt> to <tt>end</tt>.
18 |  11  * @see pv.Scale.linear
19 |  12  */
20 |  13 pv.ramp = function(start, end) {
21 |  14   var scale = pv.Scale.linear();
22 |  15   scale.range.apply(scale, arguments);
23 |  16   return scale;
24 |  17 };
25 |  18 
-------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![ZalandoTechRadar icon](logo-medium.jpg) 2 | 3 | . 4 | 5 | # Zalando Tech Radar 6 | 7 | The **Zalando Tech Radar** is a tool to inspire and support teams to pick the best technologies for new projects. Based on the ideas of [ThoughtWorks](https://www.thoughtworks.com/radar), our Tech Radar sets out the changes in technologies that are interesting in software development: changes that we think our engineering teams should pay attention to and consider using in their projects. 8 | 9 | This repository shares: 10 | 11 | * the *visualization* of the **[latest Zalando Tech Radar release](http://zalando.github.io/tech-radar/)**, including a short summary of what it includes and how we are using it; 12 | 13 | * *code* for generating the Tech Radar visualization from a simple tabular representation (tsv). The visualization code is based on the [Protovis JavaScript visualization library](http://mbostock.github.io/protovis/) and a fork of [Brett Dargan's Tech Radar visualization tool](https://github.com/bdargan/techradar). We've optimized the layout to make the chart and explanations fit on a double-sided sheet of A4 paper. 14 | 15 | 16 | ## Cool. How can I make my own? 17 | 18 | Create a Google doc with the following columns: 19 | 20 | * **Technology** (e.g. "Hystrix") 21 | * **Quadrant** (Needs to be exactly and at least one of each quadrants: "Platforms & Infrastructure", "Data Mgt", "Languages", "Techniques; Frameworks & Tools") 22 | * *[optional] Comments (e.g. "lib for fault tolerance")* 23 | * **Score** as a float between 2.0 and -2.0 (e.g. "1.8") 24 | * *[optional] Number of votes, for internal bookkeeping* 25 | * *[optional] Consensus score, for internal bookkeeping* 26 | * **Skip** — set to true if entry should not be visualized on chart 27 | 28 | Then follow the instructions below. 29 | 30 | Note: the score-to-ring mapping we use is not linear: 31 | 32 | score 2 ----- 1.5 --------------- 0 ---------- -1 ---------- -2 33 | ring ADOPT TRIAL ASSESS HOLD 34 | 35 | ## How to generate a new chart 36 | 37 | 1. run `gem install liquid` if necessary 38 | 1. on the master google doc, select `File > Download as > Tab-separated values` and store as `data/year_month.tsv` 39 | 1. open `data/year_month.tsv` and delete the first line (which contains the headers) 40 | 1. run `./transform.rb` to generate a new `radar_data.js` 41 | 1. open `index.html` in your browser to inspect the result 42 | 1. repeat the last two steps until you're happy with the arrangement :) 43 | 1. check everything in 44 | 1. merge `master` branch into `gh-pages` 45 | 1. push `gh-pages` to publish the new radar 46 | 47 | 48 | ### Notes 49 | 50 | * if your google doc is public, you can use `./download.sh` to automate steps 2 and 3 51 | * the last `.tsv` file (by lexical order) in `data/` is visualized. The next-to-last `.tsv` file (if it exists) is used to find out which blips have moved, relative to the previous radar. 52 | 53 | ## License 54 | Apache 2.0 — same as [bdargan/techradar](https://github.com/bdargan/techradar) 55 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/barley/barley.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Barley Yields 4 | 5 | 6 | 7 | 15 | 16 |
17 | 101 |
102 | 103 | -------------------------------------------------------------------------------- /lib/jasmine-1.0.1/jasmine.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; 3 | } 4 | 5 | 6 | .jasmine_reporter a:visited, .jasmine_reporter a { 7 | color: #303; 8 | } 9 | 10 | .jasmine_reporter a:hover, .jasmine_reporter a:active { 11 | color: blue; 12 | } 13 | 14 | .run_spec { 15 | float:right; 16 | padding-right: 5px; 17 | font-size: .8em; 18 | text-decoration: none; 19 | } 20 | 21 | .jasmine_reporter { 22 | margin: 0 5px; 23 | } 24 | 25 | .banner { 26 | color: #303; 27 | background-color: #fef; 28 | padding: 5px; 29 | } 30 | 31 | .logo { 32 | float: left; 33 | font-size: 1.1em; 34 | padding-left: 5px; 35 | } 36 | 37 | .logo .version { 38 | font-size: .6em; 39 | padding-left: 1em; 40 | } 41 | 42 | .runner.running { 43 | background-color: yellow; 44 | } 45 | 46 | 47 | .options { 48 | text-align: right; 49 | font-size: .8em; 50 | } 51 | 52 | 53 | 54 | 55 | .suite { 56 | border: 1px outset gray; 57 | margin: 5px 0; 58 | padding-left: 1em; 59 | } 60 | 61 | .suite .suite { 62 | margin: 5px; 63 | } 64 | 65 | .suite.passed { 66 | background-color: #dfd; 67 | } 68 | 69 | .suite.failed { 70 | background-color: #fdd; 71 | } 72 | 73 | .spec { 74 | margin: 5px; 75 | padding-left: 1em; 76 | clear: both; 77 | } 78 | 79 | .spec.failed, .spec.passed, .spec.skipped { 80 | padding-bottom: 5px; 81 | border: 1px solid gray; 82 | } 83 | 84 | .spec.failed { 85 | background-color: #fbb; 86 | border-color: red; 87 | } 88 | 89 | .spec.passed { 90 | background-color: #bfb; 91 | border-color: green; 92 | } 93 | 94 | .spec.skipped { 95 | background-color: #bbb; 96 | } 97 | 98 | .messages { 99 | border-left: 1px dashed gray; 100 | padding-left: 1em; 101 | padding-right: 1em; 102 | } 103 | 104 | .passed { 105 | background-color: #cfc; 106 | display: none; 107 | } 108 | 109 | .failed { 110 | background-color: #fbb; 111 | } 112 | 113 | .skipped { 114 | color: #777; 115 | background-color: #eee; 116 | display: none; 117 | } 118 | 119 | 120 | /*.resultMessage {*/ 121 | /*white-space: pre;*/ 122 | /*}*/ 123 | 124 | .resultMessage span.result { 125 | display: block; 126 | line-height: 2em; 127 | color: black; 128 | } 129 | 130 | .resultMessage .mismatch { 131 | color: black; 132 | } 133 | 134 | .stackTrace { 135 | white-space: pre; 136 | font-size: .8em; 137 | margin-left: 10px; 138 | max-height: 5em; 139 | overflow: auto; 140 | border: 1px inset red; 141 | padding: 1em; 142 | background: #eef; 143 | } 144 | 145 | .finished-at { 146 | padding-left: 1em; 147 | font-size: .6em; 148 | } 149 | 150 | .show-passed .passed, 151 | .show-skipped .skipped { 152 | display: block; 153 | } 154 | 155 | 156 | #jasmine_content { 157 | position:fixed; 158 | right: 100%; 159 | } 160 | 161 | .runner { 162 | border: 1px solid gray; 163 | display: block; 164 | margin: 5px 0; 165 | padding: 2px 0 2px 10px; 166 | } 167 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_behavior_Behavior.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; see an implementing class for details.
10 |   3  *
11 |   4  * @class Represents a reusable interaction; applies an interactive behavior to
12 |   5  * a given mark. Behaviors are themselves functions designed to be used as event
13 |   6  * handlers. For example, to add pan and zoom support to any panel, say:
14 |   7  *
15 |   8  * <pre>    .event("mousedown", pv.Behavior.pan())
16 |   9  *     .event("mousewheel", pv.Behavior.zoom())</pre>
17 |  10  *
18 |  11  * The behavior should be registered on the event that triggers the start of the
19 |  12  * behavior. Typically, the behavior will take care of registering for any
20 |  13  * additional events that are necessary. For example, dragging starts on
21 |  14  * mousedown, while the drag behavior automatically listens for mousemove and
22 |  15  * mouseup events on the window. By listening to the window, the behavior can
23 |  16  * continue to receive mouse events even if the mouse briefly leaves the mark
24 |  17  * being dragged, or even the root panel.
25 |  18  *
26 |  19  * <p>Each behavior implementation has specific requirements as to which events
27 |  20  * it supports, and how it should be used. For example, the drag behavior
28 |  21  * requires that the data associated with the mark be an object with <tt>x</tt>
29 |  22  * and <tt>y</tt> attributes, such as a {@link pv.Vector}, storing the mark's
30 |  23  * position. See an implementing class for details.
31 |  24  *
32 |  25  * @see pv.Behavior.drag
33 |  26  * @see pv.Behavior.pan
34 |  27  * @see pv.Behavior.point
35 |  28  * @see pv.Behavior.select
36 |  29  * @see pv.Behavior.zoom
37 |  30  * @extends function
38 |  31  */
39 |  32 pv.Behavior = {};
40 |  33 
-------------------------------------------------------------------------------- /lib/protovis-3.2/examples/antibiotics/antibiotics-scatter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Antibiotic Effectiveness 4 | 5 | 6 | 7 | 15 | 16 |
17 | 112 |
113 | 114 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/crimea/crimea.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crimean War 4 | 5 | 6 | 7 | 33 | 34 |
35 |
36 | Diagram of the Causes of Mortality
37 | in the Army of the East 38 |
39 | 87 |
88 | The Areas of the blue, red, & black wedges are each measured from the 89 | centre as the common vertex 90 |

The blue wedges measured from the centre of the circle represent area 91 | for area the deaths from Preventible or Mitigable Zymotic Diseases, the 92 | red wedges measured from the center the deaths from wounds, & the 93 | black wedges measured from the center the deaths from all other causes 94 |

In October 1844, & April 1855, the black area coincides with the 95 | red, in January & February 1856, the blue coincides with the black 96 |

The entire areas may be compared by following the blue, the red & 97 | the black lines enclosing them. 98 |

99 |
100 | 101 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_geo_Projection.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; not implemented. There is no explicit constructor; this class
10 |   3  * merely serves to document the representation used by {@link pv.Geo.scale}.
11 |   4  *
12 |   5  * @class Represents a geographic projection. This class provides the core
13 |   6  * implementation for {@link pv.Geo.scale}s, mapping between geographic
14 |   7  * coordinates (latitude and longitude) and normalized screen space in the range
15 |   8  * [-1,1]. The remaining mapping between normalized screen space and actual
16 |   9  * pixels is performed by <tt>pv.Geo.scale</tt>.
17 |  10  *
18 |  11  * <p>Many geographic projections have a point around which the projection is
19 |  12  * centered. Rather than have each implementation add support for a
20 |  13  * user-specified center point, the <tt>pv.Geo.scale</tt> translates the
21 |  14  * geographic coordinates relative to the center point for both the forward and
22 |  15  * inverse projection.
23 |  16  *
24 |  17  * <p>In general, this class should not be used directly, unless the desire is
25 |  18  * to implement a new geographic projection. Instead, use <tt>pv.Geo.scale</tt>.
26 |  19  * Implementations are not required to implement inverse projections, but are
27 |  20  * needed for some forms of interactivity. Also note that some inverse
28 |  21  * projections are ambiguous, such as the connecting points in Dymaxian maps.
29 |  22  *
30 |  23  * @name pv.Geo.Projection
31 |  24  * @see pv.Geo.scale
32 |  25  */
33 |  26 
34 |  27 /**
35 |  28  * The <i>forward</i> projection.
36 |  29  *
37 |  30  * @function
38 |  31  * @name pv.Geo.Projection.prototype.project
39 |  32  * @param {pv.Geo.LatLng} latlng the latitude and longitude to project.
40 |  33  * @returns {pv.Vector} the xy-coordinates of the given point.
41 |  34  */
42 |  35 
43 |  36 /**
44 |  37  * The <i>inverse</i> projection; optional.
45 |  38  *
46 |  39  * @function
47 |  40  * @name pv.Geo.Projection.prototype.invert
48 |  41  * @param {pv.Vector} xy the x- and y-coordinates to invert.
49 |  42  * @returns {pv.Geo.LatLng} the latitude and longitude of the given point.
50 |  43  */
51 |  44 
-------------------------------------------------------------------------------- /transform.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "json" 4 | require "liquid" 5 | 6 | 7 | class Hash 8 | def remap(hash={}) 9 | each { |k,v| yield hash, k, v } 10 | hash 11 | end 12 | end 13 | 14 | 15 | ARCS = [ 16 | { name: "ADOPT", r: 130 }, 17 | { name: "TRIAL", r: 220 }, 18 | { name: "ASSESS", r: 310 }, 19 | { name: "HOLD", r: 400 } 20 | ] 21 | 22 | class Layout 23 | 24 | OFFSET = { 25 | "Data Mgt" => 0, 26 | "Techniques; Frameworks & Tools" => 90, 27 | "Platforms & Infrastructure" => 180, 28 | "Languages" => 270, 29 | } 30 | 31 | def self.angles(start, step) 32 | Proc.new do 33 | Range.new(start, 90-start).step(step).to_a.shuffle + 34 | Range.new(start + (step * 0.5).to_i, 90-start).step(step).to_a.shuffle 35 | end 36 | end 37 | 38 | ANGLES = { 39 | adopt: angles(10, 13), 40 | trial: angles(8, 12), 41 | assess: angles(6, 10), 42 | hold: angles(4, 8), 43 | } 44 | 45 | def self.instance(quadrant, ring) 46 | @instances ||= {} 47 | @instances["#{quadrant}:#{ring.to_s}"] ||= Layout.new(quadrant, ring) 48 | end 49 | 50 | def initialize(quadrant, ring) 51 | @offset = OFFSET[quadrant] 52 | @angles = ANGLES[ring].call 53 | end 54 | 55 | def next_angle 56 | @offset + @angles.shift.to_i 57 | end 58 | end 59 | 60 | 61 | class Blip 62 | attr_reader :name, :quadrant, :score 63 | 64 | def initialize(name, quadrant, score) 65 | @name, @quadrant, @score = name, quadrant, score 66 | @moved = false 67 | end 68 | 69 | def moved! 70 | @moved = true 71 | end 72 | 73 | def ring 74 | return :adopt if score >= 1.5 75 | return :trial if score >= 0 76 | return :assess if score >= -1 77 | return :hold 78 | end 79 | 80 | def radius 81 | return (50..ARCS[0][:r]-10).to_a.sample if ring == :adopt 82 | return (ARCS[0][:r]+10..ARCS[1][:r]-10).to_a.sample if ring == :trial 83 | return (ARCS[1][:r]+10..ARCS[2][:r]-10).to_a.sample if ring == :assess 84 | return (ARCS[2][:r]+10..ARCS[3][:r]-10).to_a.sample 85 | end 86 | 87 | def angle 88 | Layout.instance(quadrant, ring).next_angle 89 | end 90 | 91 | def movement 92 | @moved ? "t" : "c" 93 | end 94 | 95 | def sortkey 96 | [ ring, name.downcase ] 97 | end 98 | 99 | def as_json 100 | { name: name, pc: { r: radius, t: angle }, movement: movement } 101 | end 102 | end 103 | 104 | 105 | class Radar 106 | def initialize(path) 107 | @blips = Radar.parse(path) 108 | end 109 | 110 | def [](name) 111 | @blips[name] 112 | end 113 | 114 | def track_moves(previous) 115 | @blips.each do |name, blip| 116 | prev_ring = previous[name].ring rescue "nil" 117 | if prev_ring != blip.ring 118 | puts "#{name}: #{prev_ring.upcase} --> #{blip.ring.upcase}" 119 | blip.moved! 120 | end 121 | end 122 | end 123 | 124 | # render blips as json into js template 125 | def render 126 | snippets = @blips.values.group_by(&:quadrant).remap do |hash, key, value| 127 | short_key = key.scan(/\w+/).first.downcase 128 | hash[short_key] = JSON.pretty_generate(value.sort_by(&:sortkey).map(&:as_json)) 129 | end 130 | snippets["arcs"] = JSON.pretty_generate(ARCS) 131 | template = Liquid::Template.parse(open("radar_data.js.liquid").read) 132 | open("radar_data.js", "w") do |out| 133 | out.puts template.render(snippets) 134 | end 135 | end 136 | 137 | # parse tab-separated data (exported from google doc) 138 | def self.parse(path) 139 | blips = {} 140 | open(path).each do |line| 141 | cols = line.split("\t") 142 | name, quadrant, score, skip = cols[0], cols[1], cols[3], cols[6] 143 | raise "PLEASE DELETE HEADER LINE: #{path}" if score == "AVG" 144 | next if skip == "TRUE" 145 | next if score.nil? || score.strip.empty? 146 | blip = Blip.new(name, quadrant, score.to_f) 147 | blips[blip.name] = blip 148 | end 149 | blips 150 | end 151 | end 152 | 153 | files = Dir["data/*.tsv"] 154 | radar = Radar.new(files.pop) 155 | previous = files.pop 156 | radar.track_moves(Radar.new(previous)) if previous 157 | radar.render 158 | 159 | -------------------------------------------------------------------------------- /lib/protovis-3.2/examples/antibiotics/antibiotics.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Antibiotic Effectiveness 4 | 5 | 6 | 7 | 19 | 20 |
21 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_physics_Particle.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; not implemented. There is no explicit constructor; this class
10 |   3  * merely serves to document the attributes that are used on particles in
11 |   4  * physics simulations.
12 |   5  *
13 |   6  * @class A weighted particle that can participate in a force simulation.
14 |   7  *
15 |   8  * @name pv.Particle
16 |   9  */
17 |  10 
18 |  11 /**
19 |  12  * The next particle in the simulation. Particles form a singly-linked list.
20 |  13  *
21 |  14  * @field
22 |  15  * @type pv.Particle
23 |  16  * @name pv.Particle.prototype.next
24 |  17  */
25 |  18 
26 |  19 /**
27 |  20  * The <i>x</i>-position of the particle.
28 |  21  *
29 |  22  * @field
30 |  23  * @type number
31 |  24  * @name pv.Particle.prototype.x
32 |  25  */
33 |  26 
34 |  27 /**
35 |  28  * The <i>y</i>-position of the particle.
36 |  29  *
37 |  30  * @field
38 |  31  * @type number
39 |  32  * @name pv.Particle.prototype.y
40 |  33  */
41 |  34 
42 |  35 /**
43 |  36  * The <i>x</i>-velocity of the particle.
44 |  37  *
45 |  38  * @field
46 |  39  * @type number
47 |  40  * @name pv.Particle.prototype.vx
48 |  41  */
49 |  42 
50 |  43 /**
51 |  44  * The <i>y</i>-velocity of the particle.
52 |  45  *
53 |  46  * @field
54 |  47  * @type number
55 |  48  * @name pv.Particle.prototype.vy
56 |  49  */
57 |  50 
58 |  51 /**
59 |  52  * The <i>x</i>-position of the particle at -dt.
60 |  53  *
61 |  54  * @field
62 |  55  * @type number
63 |  56  * @name pv.Particle.prototype.px
64 |  57  */
65 |  58 
66 |  59 /**
67 |  60  * The <i>y</i>-position of the particle at -dt.
68 |  61  *
69 |  62  * @field
70 |  63  * @type number
71 |  64  * @name pv.Particle.prototype.py
72 |  65  */
73 |  66 
74 |  67 /**
75 |  68  * The <i>x</i>-force on the particle.
76 |  69  *
77 |  70  * @field
78 |  71  * @type number
79 |  72  * @name pv.Particle.prototype.fx
80 |  73  */
81 |  74 
82 |  75 /**
83 |  76  * The <i>y</i>-force on the particle.
84 |  77  *
85 |  78  * @field
86 |  79  * @type number
87 |  80  * @name pv.Particle.prototype.fy
88 |  81  */
89 |  82 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_data_LinearScale.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Returns a linear scale for the specified domain. The arguments to this
10 |   3  * constructor are optional, and equivalent to calling {@link #domain}.
11 |   4  * The default domain and range are [0,1].
12 |   5  *
13 |   6  * @class Represents a linear scale; a function that performs a linear
14 |   7  * transformation. <style type="text/css">sub{line-height:0}</style> Most
15 |   8  * commonly, a linear scale represents a 1-dimensional linear transformation
16 |   9  * from a numeric domain of input data [<i>d<sub>0</sub></i>,
17 |  10  * <i>d<sub>1</sub></i>] to a numeric range of pixels [<i>r<sub>0</sub></i>,
18 |  11  * <i>r<sub>1</sub></i>]. The equation for such a scale is:
19 |  12  *
20 |  13  * <blockquote><i>f(x) = (x - d<sub>0</sub>) / (d<sub>1</sub> - d<sub>0</sub>) *
21 |  14  * (r<sub>1</sub> - r<sub>0</sub>) + r<sub>0</sub></i></blockquote>
22 |  15  *
23 |  16  * For example, a linear scale from the domain [0, 100] to range [0, 640]:
24 |  17  *
25 |  18  * <blockquote><i>f(x) = (x - 0) / (100 - 0) * (640 - 0) + 0</i><br>
26 |  19  * <i>f(x) = x / 100 * 640</i><br>
27 |  20  * <i>f(x) = x * 6.4</i><br>
28 |  21  * </blockquote>
29 |  22  *
30 |  23  * Thus, saying
31 |  24  *
32 |  25  * <pre>    .height(function(d) d * 6.4)</pre>
33 |  26  *
34 |  27  * is identical to
35 |  28  *
36 |  29  * <pre>    .height(pv.Scale.linear(0, 100).range(0, 640))</pre>
37 |  30  *
38 |  31  * Note that the scale is itself a function, and thus can be used as a property
39 |  32  * directly, assuming that the data associated with a mark is a number. While
40 |  33  * this is convenient for single-use scales, frequently it is desirable to
41 |  34  * define scales globally:
42 |  35  *
43 |  36  * <pre>var y = pv.Scale.linear(0, 100).range(0, 640);</pre>
44 |  37  *
45 |  38  * The <tt>y</tt> scale can now be equivalently referenced within a property:
46 |  39  *
47 |  40  * <pre>    .height(function(d) y(d))</pre>
48 |  41  *
49 |  42  * Alternatively, if the data are not simple numbers, the appropriate value can
50 |  43  * be passed to the <tt>y</tt> scale (e.g., <tt>d.foo</tt>). The {@link #by}
51 |  44  * method similarly allows the data to be mapped to a numeric value before
52 |  45  * performing the linear transformation.
53 |  46  *
54 |  47  * @param {number...} domain... optional domain values.
55 |  48  * @extends pv.Scale.quantitative
56 |  49  */
57 |  50 pv.Scale.linear = function() {
58 |  51   var scale = pv.Scale.quantitative();
59 |  52   scale.domain.apply(scale, arguments);
60 |  53   return scale;
61 |  54 };
62 |  55 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_lang_init.js.html: -------------------------------------------------------------------------------- 1 |
  1 /*
 9 |   2  * Parses the Protovis specifications on load, allowing the use of JavaScript
10 |   3  * 1.8 function expressions on browsers that only support JavaScript 1.6.
11 |   4  *
12 |   5  * @see pv.parse
13 |   6  */
14 |   7 pv.listen(window, "load", function() {
15 |   8    /*
16 |   9     * Note: in Firefox any variables declared here are visible to the eval'd
17 |  10     * script below. Even worse, any global variables declared by the script
18 |  11     * could overwrite local variables here (such as the index, `i`)!  To protect
19 |  12     * against this, all variables are explicitly scoped on a pv.$ object.
20 |  13     */
21 |  14     pv.$ = {i:0, x:document.getElementsByTagName("script")};
22 |  15     for (; pv.$.i < pv.$.x.length; pv.$.i++) {
23 |  16       pv.$.s = pv.$.x[pv.$.i];
24 |  17       if (pv.$.s.type == "text/javascript+protovis") {
25 |  18         try {
26 |  19           window.eval(pv.parse(pv.$.s.text));
27 |  20         } catch (e) {
28 |  21           pv.error(e);
29 |  22         }
30 |  23       }
31 |  24     }
32 |  25     delete pv.$;
33 |  26   });
34 |  27 
-------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Zalando Tech Radar 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 37 | 38 | 39 | 40 | 41 |
42 | 43 | 44 | 45 | 83 |
46 | 47 |

Purpose — Why Do We Create a Tech Radar?

48 | 49 |

50 | The Zalando Tech Radar is a tool to inspire and support teams to pick the best technologies for new projects; it provides a platform to share knowledge and experience in technologies, to reflect on technology decisions and continuously evolve our technology landscape. Based on ideas of ThoughtWorks, our Tech Radar sets out the changes in technologies that are interesting in software development; changes that we think our engineering teams should pay attention to and consider using in their projects. 51 |

52 | 53 |

Scope — What Is the Tech Radar?

54 | 55 |

56 | The Zalando Tech Radar is a list of technologies, frameworks, tools and methods, complemented by an assessment result, called ring assignment; we use 4 rings with a slightly adapted semantics to fit our purpose: 57 |

    58 |
  • Adopt — Technologies we have high confidence to serve our purpose, also in large scale. Technologies with an usage culture in our Zalando production environment, low risk and recommend to be widely used.
  • 59 |
  • Trial — Technologies that we have seen work with success in project work to solve a real problem; here we have first serious usage experience that confirm benefits and can uncover limitations. Trial technologies are slightly more risky; some engineers in our organization have gone this path and will share knowledge and experiences.
  • 60 |
  • Assess — Technologies that are promising and have clear potential value-add for us; technologies worth to invest some research and prototyping efforts to see if it has impact. Assess technologies have higher risks; they are often brand new and, while promising, highly unproven in our organisation. You will find some engineers that have knowledge on the technology and promote it; you may even find teams that already have started a serious prototyping project.
  • 61 |
  • Hold — Technologies not favoured to be used for new projects. Technologies that we think are not (yet) worth to (further) invest in. Hold technologies should not be used for new projects, but usually can be continued for existing projects.
  • 62 |
63 |

64 | 65 |

66 | The Tech Radar is maintained by the Zalando Technologist Guild — an open group of +25 Zalando senior technologists committed to devote time to the Tech Radar purpose. The guild self organises to maintain the Tech-Radar documents, including the quarterly Zalando Tech-Radar release published here. The ring assignments result from average vote of its members — of course, based on preliminary discussions with the target to achieve high consensus. 67 |

68 | 69 |
70 | 71 |

Internals — How Does It Work?

72 | 73 |

The Technology Guild [internal link] maintains the Tech Radar and Compendium, provides a forum for conversations about technologies, shares knowledge on technologies and support the engineering teams with expert knowledge and peer review feedback on their technology selections. Guild members meet monthly to discuss the updates of the Tech Radar assessments [internal link], and upcoming and ongoing issues around the technologies and architectural decisions. 74 |

75 | 76 |

Together with the Tech Radar we also maintain the Tech Radar Compendium [internal link] — a collection of summaries of listed technologies, i.e. few sentence descriptions of what, why and risks of the technology supplemented with information which teams used it for what kind of problem. It continuously grows with any Tech Radar changes and hopefully evolves fast as a valuable place for us to share information and get teams connected. 77 |

78 | 79 |

The Zalando Tech Radar Principles [internal link], of course, will not work without Zalando engineering team contributions; so our Technology Rules of Play include obligations for the engineering teams: teams must use the Tech Radar as one input source for their technology decisions. Teams are encouraged to challenge the Tech Radar and provide feedback to the Technologist Guild. Depending on the current assessment status of the technology candidate, teams should align with their delivery leads, inform or ask the Technologist Guild for peer review feedback on the purpose and risks and share their knowledge and experience with other teams and the Guild. 80 |

81 | 82 |
84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /radar.js: -------------------------------------------------------------------------------- 1 | function init(h,w) { 2 | 3 | var radar = new pv.Panel() 4 | .width(w) 5 | .height(h) 6 | .canvas('radar'); 7 | 8 | // headline 9 | radar.add(pv.Label) 10 | .left(40) 11 | .top(78) 12 | .text("Zalando Tech Radar — 2017.03") 13 | .font("40px sans-serif"); 14 | 15 | // contact info 16 | radar.add(pv.Label) 17 | .top(875) 18 | .right(40) 19 | .textAlign("right") 20 | .text("Questions? Comments? Ideas?") 21 | .font("28px sans-serif") 22 | .add(pv.Label) 23 | .top(910) 24 | .text("tech-guild-technologists@zalando.de") 25 | .textStyle("blue") 26 | .font("22px monospace") 27 | .add(pv.Label) 28 | .top(940) 29 | .text("#guild-technologists") 30 | .textStyle("blue") 31 | .font("22px monospace"); 32 | 33 | // legend 34 | radar.add(pv.Dot) 35 | .top(940) 36 | .left(50) 37 | .shape("circle") 38 | .fillStyle("grey") 39 | .strokeStyle("grey") 40 | .size(16) 41 | .anchor("right") 42 | .add(pv.Label) 43 | .text("unchanged") 44 | .textStyle("black") 45 | radar.add(pv.Dot) 46 | .top(940) 47 | .left(126) 48 | .shape("triangle") 49 | .fillStyle("grey") 50 | .strokeStyle("grey") 51 | .size(16) 52 | .angle(45) 53 | .anchor("right") 54 | .add(pv.Label) 55 | .text("changed since last edition (2016.10)") 56 | .textStyle("black"); 57 | 58 | 59 | //quadrant lines -- vertical 60 | radar.add(pv.Line) 61 | .data([(h/2-radar_arcs[radar_arcs.length-1].r),h-(h/2-radar_arcs[radar_arcs.length-1].r)]) 62 | .lineWidth(1) 63 | .left(w/2) 64 | .bottom(function(d) {return d;}) 65 | .strokeStyle("#bbb"); 66 | 67 | //quadrant lines -- horizontal 68 | radar.add(pv.Line) 69 | .data([(w/2-radar_arcs[radar_arcs.length-1].r),w-(w/2-radar_arcs[radar_arcs.length-1].r)]) 70 | .lineWidth(1) 71 | .bottom(h/2) 72 | .left(function(d) {return d;}) 73 | .strokeStyle("#bbb"); 74 | 75 | // arcs 76 | radar.add(pv.Dot) 77 | .data(radar_arcs) 78 | .left(w/2) 79 | .bottom(h/2) 80 | .radius(function(d) { return d.r; }) 81 | .strokeStyle("#ccc") 82 | .anchor("top") 83 | .add(pv.Label) 84 | .textBaseline("top") 85 | .textMargin(40) 86 | .text(function(d) { return d.name; }) 87 | .textStyle("#ccc") 88 | .font("bold 40px sans-serif"); 89 | 90 | //Quadrant Ledgends 91 | var radar_quadrant_ctr=1; 92 | var quadrantFontSize = 18; 93 | var headingFontSize = 14; 94 | var stageHeadingCount = 0; 95 | var lastRadius = 0; 96 | var lastQuadrant=''; 97 | var spacer = 16; 98 | var fontSize = 10; 99 | var total_index = 1; 100 | 101 | 102 | for (var i = 0; i < radar_data.length; i++) { 103 | 104 | // quadrant title 105 | if (lastQuadrant != radar_data[i].quadrant) { 106 | lastQuadrant = radar_data[i].quadrant; 107 | radar.add(pv.Label) 108 | .left(radar_data[i].left) 109 | .top(radar_data[i].top) 110 | .text(radar_data[i].quadrant) 111 | .strokeStyle(radar_data[i].color) 112 | .fillStyle(radar_data[i].color) 113 | .font(quadrantFontSize + "px sans-serif"); 114 | } 115 | 116 | // re-order the items by radius, in order to logically group by ring 117 | var itemsByStage = _.groupBy(radar_data[i].items, function(item) { 118 | if (item.pc.r <= radar_arcs[0].r) return 0; 119 | if (item.pc.r <= radar_arcs[1].r) return 1; 120 | if (item.pc.r <= radar_arcs[2].r) return 2; 121 | return 3; 122 | }); 123 | var offsetIndex = 0; 124 | var midIndex = -1; 125 | 126 | for (var stageIndex in itemsByStage) { 127 | if (stageIndex > 0 && _.has(itemsByStage, stageIndex-1)) { 128 | offsetIndex = offsetIndex + itemsByStage[stageIndex-1].length + 1; 129 | } 130 | if ((stageIndex > 1) && (midIndex < 0)) { 131 | midIndex = offsetIndex; 132 | } 133 | 134 | var left = radar_data[i].left; 135 | var top = radar_data[i].top + quadrantFontSize + spacer + (stageIndex * headingFontSize) + (offsetIndex * fontSize); 136 | if (stageIndex > 1) { 137 | left = left + 130; 138 | top = top - (2 * headingFontSize) - (midIndex * fontSize); 139 | } 140 | 141 | // stage label 142 | radar.add(pv.Label) 143 | .left(left + headingFontSize) 144 | .top(top - headingFontSize / 2) 145 | .text(radar_arcs[stageIndex].name) 146 | .strokeStyle("#ccc") 147 | .fillStyle("#ccc") 148 | .font(headingFontSize + "px Courier New"); 149 | 150 | // legend label 151 | radar.add(pv.Label) 152 | .left(left) 153 | .top(top) 154 | .strokeStyle(radar_data[i].color) 155 | .fillStyle(radar_data[i].color) 156 | .add(pv.Dot) 157 | .def("i", top) 158 | .data(itemsByStage[stageIndex]) 159 | .top(function() { return ( this.i() + (this.index * fontSize) );}) 160 | .shape(function(d) {return (d.movement === 't' ? "triangle" : "circle");}) 161 | .cursor(function(d) { return ( d.url !== undefined ? "pointer" : "auto" ); }) 162 | .event("click", function(d) { if ( d.url !== undefined ){self.location = d.url}}) 163 | .size(fontSize) 164 | .angle(45) 165 | .anchor("right") 166 | .add(pv.Label) 167 | .text(function(d) {return radar_quadrant_ctr++ + ". " + d.name;} ); 168 | 169 | // the blip itself 170 | radar.add(pv.Dot) 171 | .def("active", false) 172 | .data(itemsByStage[stageIndex]) 173 | .size(function(d) { return (d.blipSize !== undefined ? d.blipSize : 70); }) 174 | .left(function(d) { return polar_to_raster(d.pc.r, d.pc.t)[0]; }) 175 | .bottom(function(d) { return polar_to_raster(d.pc.r, d.pc.t)[1]; }) 176 | .title(function(d) { return d.name; }) 177 | .cursor(function(d) { return ( d.url !== undefined ? "pointer" : "auto" ); }) 178 | .event("click", function(d) { if ( d.url !== undefined ){self.location = d.url}}) 179 | .angle(Math.PI) // 180 degrees in radians 180 | .strokeStyle(radar_data[i].color) 181 | .fillStyle(radar_data[i].color) 182 | .shape(function(d) { return (d.movement === 't' ? "triangle" : "circle"); }) 183 | .anchor("center") 184 | .add(pv.Label) 185 | .text(function(d) {return total_index++;}) 186 | .textBaseline("middle") 187 | .textStyle("white"); 188 | } 189 | } 190 | 191 | radar.anchor('radar'); 192 | radar.render(); 193 | }; -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_layout_Layout.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Constructs a new, empty layout with default properties. Layouts are not
10 |   3  * typically constructed directly; instead, a concrete subclass is added to an
11 |   4  * existing panel via {@link pv.Mark#add}.
12 |   5  *
13 |   6  * @class Represents an abstract layout, encapsulating a visualization technique
14 |   7  * such as a streamgraph or treemap. Layouts are themselves containers,
15 |   8  * extending from {@link pv.Panel}, and defining a set of mark prototypes as
16 |   9  * children. These mark prototypes provide default properties that together
17 |  10  * implement the given visualization technique.
18 |  11  *
19 |  12  * <p>Layouts do not initially contain any marks; any exported marks (such as a
20 |  13  * network layout's <tt>link</tt> and <tt>node</tt>) are intended to be used as
21 |  14  * prototypes. By adding a concrete mark, such as a {@link pv.Bar}, to the
22 |  15  * appropriate mark prototype, the mark is added to the layout and inherits the
23 |  16  * given properties. This approach allows further customization of the layout,
24 |  17  * either by choosing a different mark type to add, or more simply by overriding
25 |  18  * some of the layout's defined properties.
26 |  19  *
27 |  20  * <p>Each concrete layout, such as treemap or circle-packing, has different
28 |  21  * behavior and may export different mark prototypes, depending on what marks
29 |  22  * are typically needed to render the desired visualization. Therefore it is
30 |  23  * important to understand how each layout is structured, such that the provided
31 |  24  * mark prototypes are used appropriately.
32 |  25  *
33 |  26  * <p>In addition to the mark prototypes, layouts may define custom properties
34 |  27  * that affect the overall behavior of the layout. For example, a treemap layout
35 |  28  * might use a property to specify which layout algorithm to use. These
36 |  29  * properties are just like other mark properties, and can be defined as
37 |  30  * constants or as functions. As with panels, the data property can be used to
38 |  31  * replicate layouts, and properties can be defined to in terms of layout data.
39 |  32  *
40 |  33  * @extends pv.Panel
41 |  34  */
42 |  35 pv.Layout = function() {
43 |  36   pv.Panel.call(this);
44 |  37 };
45 |  38 
46 |  39 pv.Layout.prototype = pv.extend(pv.Panel);
47 |  40 
48 |  41 /**
49 |  42  * @private Defines a local property with the specified name and cast. Note that
50 |  43  * although the property method is only defined locally, the cast function is
51 |  44  * global, which is necessary since properties are inherited!
52 |  45  *
53 |  46  * @param {string} name the property name.
54 |  47  * @param {function} [cast] the cast function for this property.
55 |  48  */
56 |  49 pv.Layout.prototype.property = function(name, cast) {
57 |  50   if (!this.hasOwnProperty("properties")) {
58 |  51     this.properties = pv.extend(this.properties);
59 |  52   }
60 |  53   this.properties[name] = true;
61 |  54   this.propertyMethod(name, false, pv.Mark.cast[name] = cast);
62 |  55   return this;
63 |  56 };
64 |  57 
-------------------------------------------------------------------------------- /lib/jasmine-1.0.1/jasmine-html.js: -------------------------------------------------------------------------------- 1 | jasmine.TrivialReporter = function(doc) { 2 | this.document = doc || document; 3 | this.suiteDivs = {}; 4 | this.logRunningSpecs = false; 5 | }; 6 | 7 | jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) { 8 | var el = document.createElement(type); 9 | 10 | for (var i = 2; i < arguments.length; i++) { 11 | var child = arguments[i]; 12 | 13 | if (typeof child === 'string') { 14 | el.appendChild(document.createTextNode(child)); 15 | } else { 16 | if (child) { el.appendChild(child); } 17 | } 18 | } 19 | 20 | for (var attr in attrs) { 21 | if (attr == "className") { 22 | el[attr] = attrs[attr]; 23 | } else { 24 | el.setAttribute(attr, attrs[attr]); 25 | } 26 | } 27 | 28 | return el; 29 | }; 30 | 31 | jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) { 32 | var showPassed, showSkipped; 33 | 34 | this.outerDiv = this.createDom('div', { className: 'jasmine_reporter' }, 35 | this.createDom('div', { className: 'banner' }, 36 | this.createDom('div', { className: 'logo' }, 37 | this.createDom('a', { href: 'http://pivotal.github.com/jasmine/', target: "_blank" }, "Jasmine"), 38 | this.createDom('span', { className: 'version' }, runner.env.versionString())), 39 | this.createDom('div', { className: 'options' }, 40 | "Show ", 41 | showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }), 42 | this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "), 43 | showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }), 44 | this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped") 45 | ) 46 | ), 47 | 48 | this.runnerDiv = this.createDom('div', { className: 'runner running' }, 49 | this.createDom('a', { className: 'run_spec', href: '?' }, "run all"), 50 | this.runnerMessageSpan = this.createDom('span', {}, "Running..."), 51 | this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, "")) 52 | ); 53 | 54 | this.document.body.appendChild(this.outerDiv); 55 | 56 | var suites = runner.suites(); 57 | for (var i = 0; i < suites.length; i++) { 58 | var suite = suites[i]; 59 | var suiteDiv = this.createDom('div', { className: 'suite' }, 60 | this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"), 61 | this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description)); 62 | this.suiteDivs[suite.id] = suiteDiv; 63 | var parentDiv = this.outerDiv; 64 | if (suite.parentSuite) { 65 | parentDiv = this.suiteDivs[suite.parentSuite.id]; 66 | } 67 | parentDiv.appendChild(suiteDiv); 68 | } 69 | 70 | this.startedAt = new Date(); 71 | 72 | var self = this; 73 | showPassed.onclick = function(evt) { 74 | if (showPassed.checked) { 75 | self.outerDiv.className += ' show-passed'; 76 | } else { 77 | self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, ''); 78 | } 79 | }; 80 | 81 | showSkipped.onclick = function(evt) { 82 | if (showSkipped.checked) { 83 | self.outerDiv.className += ' show-skipped'; 84 | } else { 85 | self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, ''); 86 | } 87 | }; 88 | }; 89 | 90 | jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) { 91 | var results = runner.results(); 92 | var className = (results.failedCount > 0) ? "runner failed" : "runner passed"; 93 | this.runnerDiv.setAttribute("class", className); 94 | //do it twice for IE 95 | this.runnerDiv.setAttribute("className", className); 96 | var specs = runner.specs(); 97 | var specCount = 0; 98 | for (var i = 0; i < specs.length; i++) { 99 | if (this.specFilter(specs[i])) { 100 | specCount++; 101 | } 102 | } 103 | var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s"); 104 | message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"; 105 | this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild); 106 | 107 | this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString())); 108 | }; 109 | 110 | jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) { 111 | var results = suite.results(); 112 | var status = results.passed() ? 'passed' : 'failed'; 113 | if (results.totalCount == 0) { // todo: change this to check results.skipped 114 | status = 'skipped'; 115 | } 116 | this.suiteDivs[suite.id].className += " " + status; 117 | }; 118 | 119 | jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) { 120 | if (this.logRunningSpecs) { 121 | this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); 122 | } 123 | }; 124 | 125 | jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) { 126 | var results = spec.results(); 127 | var status = results.passed() ? 'passed' : 'failed'; 128 | if (results.skipped) { 129 | status = 'skipped'; 130 | } 131 | var specDiv = this.createDom('div', { className: 'spec ' + status }, 132 | this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"), 133 | this.createDom('a', { 134 | className: 'description', 135 | href: '?spec=' + encodeURIComponent(spec.getFullName()), 136 | title: spec.getFullName() 137 | }, spec.description)); 138 | 139 | 140 | var resultItems = results.getItems(); 141 | var messagesDiv = this.createDom('div', { className: 'messages' }); 142 | for (var i = 0; i < resultItems.length; i++) { 143 | var result = resultItems[i]; 144 | 145 | if (result.type == 'log') { 146 | messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); 147 | } else if (result.type == 'expect' && result.passed && !result.passed()) { 148 | messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); 149 | 150 | if (result.trace.stack) { 151 | messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack)); 152 | } 153 | } 154 | } 155 | 156 | if (messagesDiv.childNodes.length > 0) { 157 | specDiv.appendChild(messagesDiv); 158 | } 159 | 160 | this.suiteDivs[spec.suite.id].appendChild(specDiv); 161 | }; 162 | 163 | jasmine.TrivialReporter.prototype.log = function() { 164 | var console = jasmine.getGlobal().console; 165 | if (console && console.log) { 166 | if (console.log.apply) { 167 | console.log.apply(console, arguments); 168 | } else { 169 | console.log(arguments); // ie fix: console.log.apply doesn't exist on ie 170 | } 171 | } 172 | }; 173 | 174 | jasmine.TrivialReporter.prototype.getLocation = function() { 175 | return this.document.location; 176 | }; 177 | 178 | jasmine.TrivialReporter.prototype.specFilter = function(spec) { 179 | var paramMap = {}; 180 | var params = this.getLocation().search.substring(1).split('&'); 181 | for (var i = 0; i < params.length; i++) { 182 | var p = params[i].split('='); 183 | paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); 184 | } 185 | 186 | if (!paramMap["spec"]) return true; 187 | return spec.getFullName().indexOf(paramMap["spec"]) == 0; 188 | }; 189 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_scene_SvgRule.js.html: -------------------------------------------------------------------------------- 1 |
  1 pv.SvgScene.rule = function(scenes) {
 9 |   2   var e = scenes.$g.firstChild;
10 |   3   for (var i = 0; i < scenes.length; i++) {
11 |   4     var s = scenes[i];
12 |   5 
13 |   6     /* visible */
14 |   7     if (!s.visible) continue;
15 |   8     var stroke = s.strokeStyle;
16 |   9     if (!stroke.opacity) continue;
17 |  10 
18 |  11     e = this.expect(e, "line", {
19 |  12         "shape-rendering": s.antialias ? null : "crispEdges",
20 |  13         "pointer-events": s.events,
21 |  14         "cursor": s.cursor,
22 |  15         "x1": s.left,
23 |  16         "y1": s.top,
24 |  17         "x2": s.left + s.width,
25 |  18         "y2": s.top + s.height,
26 |  19         "stroke": stroke.color,
27 |  20         "stroke-opacity": stroke.opacity,
28 |  21         "stroke-width": s.lineWidth / this.scale
29 |  22       });
30 |  23     e = this.append(e, scenes, i);
31 |  24   }
32 |  25   return e;
33 |  26 };
34 |  27 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_physics_DragForce.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Constructs a new drag force with the specified constant.
10 |   3  *
11 |   4  * @class Implements a drag force, simulating friction. The drag force is
12 |   5  * applied in the opposite direction of the particle's velocity. Since Position
13 |   6  * Verlet integration does not track velocities explicitly, the error term with
14 |   7  * this estimate of velocity is fairly high, so the drag force may be
15 |   8  * inaccurate.
16 |   9  *
17 |  10  * @extends pv.Force
18 |  11  * @param {number} k the drag constant.
19 |  12  * @see #constant
20 |  13  */
21 |  14 pv.Force.drag = function(k) {
22 |  15   var force = {};
23 |  16 
24 |  17   if (!arguments.length) k = .1; // default drag constant
25 |  18 
26 |  19   /**
27 |  20    * Sets or gets the drag constant, in the range [0,1]. The default drag
28 |  21    * constant is 0.1. The drag forces scales linearly with the particle's
29 |  22    * velocity based on the given drag constant.
30 |  23    *
31 |  24    * @function
32 |  25    * @name pv.Force.drag.prototype.constant
33 |  26    * @param {number} x the new drag constant.
34 |  27    * @returns {pv.Force.drag} this, or the current drag constant.
35 |  28    */
36 |  29   force.constant = function(x) {
37 |  30     if (arguments.length) { k = x; return force; }
38 |  31     return k;
39 |  32   };
40 |  33 
41 |  34   /**
42 |  35    * Applies this force to the specified particles.
43 |  36    *
44 |  37    * @function
45 |  38    * @name pv.Force.drag.prototype.apply
46 |  39    * @param {pv.Particle} particles particles to which to apply this force.
47 |  40    */
48 |  41   force.apply = function(particles) {
49 |  42     if (k) for (var p = particles; p; p = p.next) {
50 |  43       p.fx -= k * p.vx;
51 |  44       p.fy -= k * p.vy;
52 |  45     }
53 |  46   };
54 |  47 
55 |  48   return force;
56 |  49 };
57 |  50 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_mark_Anchor.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Constructs a new mark anchor with default properties.
10 |   3  *
11 |   4  * @class Represents an anchor on a given mark. An anchor is itself a mark, but
12 |   5  * without a visual representation. It serves only to provide useful default
13 |   6  * properties that can be inherited by other marks. Each type of mark can define
14 |   7  * any number of named anchors for convenience. If the concrete mark type does
15 |   8  * not define an anchor implementation specifically, one will be inherited from
16 |   9  * the mark's parent class.
17 |  10  *
18 |  11  * <p>For example, the bar mark provides anchors for its four sides: left,
19 |  12  * right, top and bottom. Adding a label to the top anchor of a bar,
20 |  13  *
21 |  14  * <pre>bar.anchor("top").add(pv.Label);</pre>
22 |  15  *
23 |  16  * will render a text label on the top edge of the bar; the top anchor defines
24 |  17  * the appropriate position properties (top and left), as well as text-rendering
25 |  18  * properties for convenience (textAlign and textBaseline).
26 |  19  *
27 |  20  * <p>Note that anchors do not <i>inherit</i> from their targets; the positional
28 |  21  * properties are copied from the scene graph, which guarantees that the anchors
29 |  22  * are positioned correctly, even if the positional properties are not defined
30 |  23  * deterministically. (In addition, it also improves performance by avoiding
31 |  24  * re-evaluating expensive properties.) If you want the anchor to inherit from
32 |  25  * the target, use {@link pv.Mark#extend} before adding. For example:
33 |  26  *
34 |  27  * <pre>bar.anchor("top").extend(bar).add(pv.Label);</pre>
35 |  28  *
36 |  29  * The anchor defines it's own positional properties, but other properties (such
37 |  30  * as the title property, say) can be inherited using the above idiom. Also note
38 |  31  * that you can override positional properties in the anchor for custom
39 |  32  * behavior.
40 |  33  *
41 |  34  * @extends pv.Mark
42 |  35  * @param {pv.Mark} target the anchor target.
43 |  36  */
44 |  37 pv.Anchor = function(target) {
45 |  38   pv.Mark.call(this);
46 |  39   this.target = target;
47 |  40   this.parent = target.parent;
48 |  41 };
49 |  42 
50 |  43 pv.Anchor.prototype = pv.extend(pv.Mark)
51 |  44     .property("name", String);
52 |  45 
53 |  46 /**
54 |  47  * The anchor name. The set of supported anchor names is dependent on the
55 |  48  * concrete mark type; see the mark type for details. For example, bars support
56 |  49  * left, right, top and bottom anchors.
57 |  50  *
58 |  51  * <p>While anchor names are typically constants, the anchor name is a true
59 |  52  * property, which means you can specify a function to compute the anchor name
60 |  53  * dynamically. For instance, if you wanted to alternate top and bottom anchors,
61 |  54  * saying
62 |  55  *
63 |  56  * <pre>m.anchor(function() (this.index % 2) ? "top" : "bottom").add(pv.Dot);</pre>
64 |  57  *
65 |  58  * would have the desired effect.
66 |  59  *
67 |  60  * @type string
68 |  61  * @name pv.Anchor.prototype.name
69 |  62  */
70 |  63 
71 |  64 /**
72 |  65  * Returns the anchor target of this mark, if it is derived from an anchor;
73 |  66  * otherwise returns null. For example, if a label is derived from a bar anchor,
74 |  67  *
75 |  68  * <pre>bar.anchor("top").add(pv.Label);</pre>
76 |  69  *
77 |  70  * then property functions on the label can refer to the bar via the
78 |  71  * <tt>anchorTarget</tt> method. This method is also useful for mark types
79 |  72  * defining properties on custom anchors.
80 |  73  *
81 |  74  * @returns {pv.Mark} the anchor target of this mark; possibly null.
82 |  75  */
83 |  76 pv.Anchor.prototype.anchorTarget = function() {
84 |  77   return this.target;
85 |  78 };
86 |  79 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_data_RootScale.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Returns a root scale for the specified domain. The arguments to this
10 |   3  * constructor are optional, and equivalent to calling {@link #domain}.
11 |   4  * The default domain and range are [0,1].
12 |   5  *
13 |   6  * @class Represents a root scale; a function that performs a power
14 |   7  * transformation. <style type="text/css">sub{line-height:0}</style> Most
15 |   8  * commonly, a root scale represents a 1-dimensional root transformation from a
16 |   9  * numeric domain of input data [<i>d<sub>0</sub></i>, <i>d<sub>1</sub></i>] to
17 |  10  * a numeric range of pixels [<i>r<sub>0</sub></i>, <i>r<sub>1</sub></i>].
18 |  11  *
19 |  12  * <p>Note that the scale is itself a function, and thus can be used as a
20 |  13  * property directly, assuming that the data associated with a mark is a
21 |  14  * number. While this is convenient for single-use scales, frequently it is
22 |  15  * desirable to define scales globally:
23 |  16  *
24 |  17  * <pre>var y = pv.Scale.root(0, 100).range(0, 640);</pre>
25 |  18  *
26 |  19  * The <tt>y</tt> scale can now be equivalently referenced within a property:
27 |  20  *
28 |  21  * <pre>    .height(function(d) y(d))</pre>
29 |  22  *
30 |  23  * Alternatively, if the data are not simple numbers, the appropriate value can
31 |  24  * be passed to the <tt>y</tt> scale (e.g., <tt>d.foo</tt>). The {@link #by}
32 |  25  * method similarly allows the data to be mapped to a numeric value before
33 |  26  * performing the root transformation.
34 |  27  *
35 |  28  * @param {number...} domain... optional domain values.
36 |  29  * @extends pv.Scale.quantitative
37 |  30  */
38 |  31 pv.Scale.root = function() {
39 |  32   var scale = pv.Scale.quantitative();
40 |  33 
41 |  34   /**
42 |  35    * Sets or gets the exponent; defaults to 2.
43 |  36    *
44 |  37    * @function
45 |  38    * @name pv.Scale.root.prototype.power
46 |  39    * @param {number} [v] the new exponent.
47 |  40    * @returns {pv.Scale.root} <tt>this</tt>, or the current base.
48 |  41    */
49 |  42   scale.power = function(v) {
50 |  43     if (arguments.length) {
51 |  44       var b = Number(v), p = 1 / b;
52 |  45       scale.transform(
53 |  46         function(x) { return Math.pow(x, p); },
54 |  47         function(y) { return Math.pow(y, b); });
55 |  48       return this;
56 |  49     }
57 |  50     return b;
58 |  51   };
59 |  52 
60 |  53   scale.domain.apply(scale, arguments);
61 |  54   return scale.power(2);
62 |  55 };
63 |  56 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_text_Format.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Abstract; see an implementing class.
10 |   3  *
11 |   4  * @class Represents an abstract text formatter and parser. A <i>format</i> is a
12 |   5  * function that converts an object of a given type, such as a <tt>Date</tt>, to
13 |   6  * a human-readable string representation. The format may also have a
14 |   7  * {@link #parse} method for converting a string representation back to the
15 |   8  * given object type.
16 |   9  *
17 |  10  * <p>Because formats are themselves functions, they can be used directly as
18 |  11  * mark properties. For example, if the data associated with a label are dates,
19 |  12  * a date format can be used as label text:
20 |  13  *
21 |  14  * <pre>    .text(pv.Format.date("%m/%d/%y"))</pre>
22 |  15  *
23 |  16  * And as with scales, if the format is used in multiple places, it can be
24 |  17  * convenient to declare it as a global variable and then reference it from the
25 |  18  * appropriate property functions. For example, if the data has a <tt>date</tt>
26 |  19  * attribute, and <tt>format</tt> references a given date format:
27 |  20  *
28 |  21  * <pre>    .text(function(d) format(d.date))</pre>
29 |  22  *
30 |  23  * Similarly, to parse a string into a date:
31 |  24  *
32 |  25  * <pre>var date = format.parse("4/30/2010");</pre>
33 |  26  *
34 |  27  * Not all format implementations support parsing. See the implementing class
35 |  28  * for details.
36 |  29  *
37 |  30  * @see pv.Format.date
38 |  31  * @see pv.Format.number
39 |  32  * @see pv.Format.time
40 |  33  */
41 |  34 pv.Format = {};
42 |  35 
43 |  36 /**
44 |  37  * Formats the specified object, returning the string representation.
45 |  38  *
46 |  39  * @function
47 |  40  * @name pv.Format.prototype.format
48 |  41  * @param {object} x the object to format.
49 |  42  * @returns {string} the formatted string.
50 |  43  */
51 |  44 
52 |  45 /**
53 |  46  * Parses the specified string, returning the object representation.
54 |  47  *
55 |  48  * @function
56 |  49  * @name pv.Format.prototype.parse
57 |  50  * @param {string} x the string to parse.
58 |  51  * @returns {object} the parsed object.
59 |  52  */
60 |  53 
61 |  54 /**
62 |  55  * @private Given a string that may be used as part of a regular expression,
63 |  56  * this methods returns an appropriately quoted version of the specified string,
64 |  57  * with any special characters escaped.
65 |  58  *
66 |  59  * @param {string} s a string to quote.
67 |  60  * @returns {string} the quoted string.
68 |  61  */
69 |  62 pv.Format.re = function(s) {
70 |  63   return s.replace(/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g, "\\$&");
71 |  64 };
72 |  65 
73 |  66 /**
74 |  67  * @private Optionally pads the specified string <i>s</i> so that it is at least
75 |  68  * <i>n</i> characters long, using the padding character <i>c</i>.
76 |  69  *
77 |  70  * @param {string} c the padding character.
78 |  71  * @param {number} n the minimum string length.
79 |  72  * @param {string} s the string to pad.
80 |  73  * @returns {string} the padded string.
81 |  74  */
82 |  75 pv.Format.pad = function(c, n, s) {
83 |  76   var m = n - String(s).length;
84 |  77   return (m < 1) ? s : new Array(m + 1).join(c) + s;
85 |  78 };
86 |  79 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_scene_SvgBar.js.html: -------------------------------------------------------------------------------- 1 |
  1 pv.SvgScene.bar = function(scenes) {
 9 |   2   var e = scenes.$g.firstChild;
10 |   3   for (var i = 0; i < scenes.length; i++) {
11 |   4     var s = scenes[i];
12 |   5 
13 |   6     /* visible */
14 |   7     if (!s.visible) continue;
15 |   8     var fill = s.fillStyle, stroke = s.strokeStyle;
16 |   9     if (!fill.opacity && !stroke.opacity) continue;
17 |  10 
18 |  11     e = this.expect(e, "rect", {
19 |  12         "shape-rendering": s.antialias ? null : "crispEdges",
20 |  13         "pointer-events": s.events,
21 |  14         "cursor": s.cursor,
22 |  15         "x": s.left,
23 |  16         "y": s.top,
24 |  17         "width": Math.max(1E-10, s.width),
25 |  18         "height": Math.max(1E-10, s.height),
26 |  19         "fill": fill.color,
27 |  20         "fill-opacity": fill.opacity || null,
28 |  21         "stroke": stroke.color,
29 |  22         "stroke-opacity": stroke.opacity || null,
30 |  23         "stroke-width": stroke.opacity ? s.lineWidth / this.scale : null
31 |  24       });
32 |  25     e = this.append(e, scenes, i);
33 |  26   }
34 |  27   return e;
35 |  28 };
36 |  29 
-------------------------------------------------------------------------------- /lib/protovis-3.2/examples/barley/barley.js: -------------------------------------------------------------------------------- 1 | var barley = [ 2 | { yield: 27.00000, variety: "Manchuria", year: 1931, site: "University Farm" }, 3 | { yield: 48.86667, variety: "Manchuria", year: 1931, site: "Waseca" }, 4 | { yield: 27.43334, variety: "Manchuria", year: 1931, site: "Morris" }, 5 | { yield: 39.93333, variety: "Manchuria", year: 1931, site: "Crookston" }, 6 | { yield: 32.96667, variety: "Manchuria", year: 1931, site: "Grand Rapids" }, 7 | { yield: 28.96667, variety: "Manchuria", year: 1931, site: "Duluth" }, 8 | { yield: 43.06666, variety: "Glabron", year: 1931, site: "University Farm" }, 9 | { yield: 55.20000, variety: "Glabron", year: 1931, site: "Waseca" }, 10 | { yield: 28.76667, variety: "Glabron", year: 1931, site: "Morris" }, 11 | { yield: 38.13333, variety: "Glabron", year: 1931, site: "Crookston" }, 12 | { yield: 29.13333, variety: "Glabron", year: 1931, site: "Grand Rapids" }, 13 | { yield: 29.66667, variety: "Glabron", year: 1931, site: "Duluth" }, 14 | { yield: 35.13333, variety: "Svansota", year: 1931, site: "University Farm" }, 15 | { yield: 47.33333, variety: "Svansota", year: 1931, site: "Waseca" }, 16 | { yield: 25.76667, variety: "Svansota", year: 1931, site: "Morris" }, 17 | { yield: 40.46667, variety: "Svansota", year: 1931, site: "Crookston" }, 18 | { yield: 29.66667, variety: "Svansota", year: 1931, site: "Grand Rapids" }, 19 | { yield: 25.70000, variety: "Svansota", year: 1931, site: "Duluth" }, 20 | { yield: 39.90000, variety: "Velvet", year: 1931, site: "University Farm" }, 21 | { yield: 50.23333, variety: "Velvet", year: 1931, site: "Waseca" }, 22 | { yield: 26.13333, variety: "Velvet", year: 1931, site: "Morris" }, 23 | { yield: 41.33333, variety: "Velvet", year: 1931, site: "Crookston" }, 24 | { yield: 23.03333, variety: "Velvet", year: 1931, site: "Grand Rapids" }, 25 | { yield: 26.30000, variety: "Velvet", year: 1931, site: "Duluth" }, 26 | { yield: 36.56666, variety: "Trebi", year: 1931, site: "University Farm" }, 27 | { yield: 63.83330, variety: "Trebi", year: 1931, site: "Waseca" }, 28 | { yield: 43.76667, variety: "Trebi", year: 1931, site: "Morris" }, 29 | { yield: 46.93333, variety: "Trebi", year: 1931, site: "Crookston" }, 30 | { yield: 29.76667, variety: "Trebi", year: 1931, site: "Grand Rapids" }, 31 | { yield: 33.93333, variety: "Trebi", year: 1931, site: "Duluth" }, 32 | { yield: 43.26667, variety: "No. 457", year: 1931, site: "University Farm" }, 33 | { yield: 58.10000, variety: "No. 457", year: 1931, site: "Waseca" }, 34 | { yield: 28.70000, variety: "No. 457", year: 1931, site: "Morris" }, 35 | { yield: 45.66667, variety: "No. 457", year: 1931, site: "Crookston" }, 36 | { yield: 32.16667, variety: "No. 457", year: 1931, site: "Grand Rapids" }, 37 | { yield: 33.60000, variety: "No. 457", year: 1931, site: "Duluth" }, 38 | { yield: 36.60000, variety: "No. 462", year: 1931, site: "University Farm" }, 39 | { yield: 65.76670, variety: "No. 462", year: 1931, site: "Waseca" }, 40 | { yield: 30.36667, variety: "No. 462", year: 1931, site: "Morris" }, 41 | { yield: 48.56666, variety: "No. 462", year: 1931, site: "Crookston" }, 42 | { yield: 24.93334, variety: "No. 462", year: 1931, site: "Grand Rapids" }, 43 | { yield: 28.10000, variety: "No. 462", year: 1931, site: "Duluth" }, 44 | { yield: 32.76667, variety: "Peatland", year: 1931, site: "University Farm" }, 45 | { yield: 48.56666, variety: "Peatland", year: 1931, site: "Waseca" }, 46 | { yield: 29.86667, variety: "Peatland", year: 1931, site: "Morris" }, 47 | { yield: 41.60000, variety: "Peatland", year: 1931, site: "Crookston" }, 48 | { yield: 34.70000, variety: "Peatland", year: 1931, site: "Grand Rapids" }, 49 | { yield: 32.00000, variety: "Peatland", year: 1931, site: "Duluth" }, 50 | { yield: 24.66667, variety: "No. 475", year: 1931, site: "University Farm" }, 51 | { yield: 46.76667, variety: "No. 475", year: 1931, site: "Waseca" }, 52 | { yield: 22.60000, variety: "No. 475", year: 1931, site: "Morris" }, 53 | { yield: 44.10000, variety: "No. 475", year: 1931, site: "Crookston" }, 54 | { yield: 19.70000, variety: "No. 475", year: 1931, site: "Grand Rapids" }, 55 | { yield: 33.06666, variety: "No. 475", year: 1931, site: "Duluth" }, 56 | { yield: 39.30000, variety: "Wisconsin No. 38", year: 1931, site: "University Farm" }, 57 | { yield: 58.80000, variety: "Wisconsin No. 38", year: 1931, site: "Waseca" }, 58 | { yield: 29.46667, variety: "Wisconsin No. 38", year: 1931, site: "Morris" }, 59 | { yield: 49.86667, variety: "Wisconsin No. 38", year: 1931, site: "Crookston" }, 60 | { yield: 34.46667, variety: "Wisconsin No. 38", year: 1931, site: "Grand Rapids" }, 61 | { yield: 31.60000, variety: "Wisconsin No. 38", year: 1931, site: "Duluth" }, 62 | { yield: 26.90000, variety: "Manchuria", year: 1932, site: "University Farm" }, 63 | { yield: 33.46667, variety: "Manchuria", year: 1932, site: "Waseca" }, 64 | { yield: 34.36666, variety: "Manchuria", year: 1932, site: "Morris" }, 65 | { yield: 32.96667, variety: "Manchuria", year: 1932, site: "Crookston" }, 66 | { yield: 22.13333, variety: "Manchuria", year: 1932, site: "Grand Rapids" }, 67 | { yield: 22.56667, variety: "Manchuria", year: 1932, site: "Duluth" }, 68 | { yield: 36.80000, variety: "Glabron", year: 1932, site: "University Farm" }, 69 | { yield: 37.73333, variety: "Glabron", year: 1932, site: "Waseca" }, 70 | { yield: 35.13333, variety: "Glabron", year: 1932, site: "Morris" }, 71 | { yield: 26.16667, variety: "Glabron", year: 1932, site: "Crookston" }, 72 | { yield: 14.43333, variety: "Glabron", year: 1932, site: "Grand Rapids" }, 73 | { yield: 25.86667, variety: "Glabron", year: 1932, site: "Duluth" }, 74 | { yield: 27.43334, variety: "Svansota", year: 1932, site: "University Farm" }, 75 | { yield: 38.50000, variety: "Svansota", year: 1932, site: "Waseca" }, 76 | { yield: 35.03333, variety: "Svansota", year: 1932, site: "Morris" }, 77 | { yield: 20.63333, variety: "Svansota", year: 1932, site: "Crookston" }, 78 | { yield: 16.63333, variety: "Svansota", year: 1932, site: "Grand Rapids" }, 79 | { yield: 22.23333, variety: "Svansota", year: 1932, site: "Duluth" }, 80 | { yield: 26.80000, variety: "Velvet", year: 1932, site: "University Farm" }, 81 | { yield: 37.40000, variety: "Velvet", year: 1932, site: "Waseca" }, 82 | { yield: 38.83333, variety: "Velvet", year: 1932, site: "Morris" }, 83 | { yield: 32.06666, variety: "Velvet", year: 1932, site: "Crookston" }, 84 | { yield: 32.23333, variety: "Velvet", year: 1932, site: "Grand Rapids" }, 85 | { yield: 22.46667, variety: "Velvet", year: 1932, site: "Duluth" }, 86 | { yield: 29.06667, variety: "Trebi", year: 1932, site: "University Farm" }, 87 | { yield: 49.23330, variety: "Trebi", year: 1932, site: "Waseca" }, 88 | { yield: 46.63333, variety: "Trebi", year: 1932, site: "Morris" }, 89 | { yield: 41.83333, variety: "Trebi", year: 1932, site: "Crookston" }, 90 | { yield: 20.63333, variety: "Trebi", year: 1932, site: "Grand Rapids" }, 91 | { yield: 30.60000, variety: "Trebi", year: 1932, site: "Duluth" }, 92 | { yield: 26.43334, variety: "No. 457", year: 1932, site: "University Farm" }, 93 | { yield: 42.20000, variety: "No. 457", year: 1932, site: "Waseca" }, 94 | { yield: 43.53334, variety: "No. 457", year: 1932, site: "Morris" }, 95 | { yield: 34.33333, variety: "No. 457", year: 1932, site: "Crookston" }, 96 | { yield: 19.46667, variety: "No. 457", year: 1932, site: "Grand Rapids" }, 97 | { yield: 22.70000, variety: "No. 457", year: 1932, site: "Duluth" }, 98 | { yield: 25.56667, variety: "No. 462", year: 1932, site: "University Farm" }, 99 | { yield: 44.70000, variety: "No. 462", year: 1932, site: "Waseca" }, 100 | { yield: 47.00000, variety: "No. 462", year: 1932, site: "Morris" }, 101 | { yield: 30.53333, variety: "No. 462", year: 1932, site: "Crookston" }, 102 | { yield: 19.90000, variety: "No. 462", year: 1932, site: "Grand Rapids" }, 103 | { yield: 22.50000, variety: "No. 462", year: 1932, site: "Duluth" }, 104 | { yield: 28.06667, variety: "Peatland", year: 1932, site: "University Farm" }, 105 | { yield: 36.03333, variety: "Peatland", year: 1932, site: "Waseca" }, 106 | { yield: 43.20000, variety: "Peatland", year: 1932, site: "Morris" }, 107 | { yield: 25.23333, variety: "Peatland", year: 1932, site: "Crookston" }, 108 | { yield: 26.76667, variety: "Peatland", year: 1932, site: "Grand Rapids" }, 109 | { yield: 31.36667, variety: "Peatland", year: 1932, site: "Duluth" }, 110 | { yield: 30.00000, variety: "No. 475", year: 1932, site: "University Farm" }, 111 | { yield: 41.26667, variety: "No. 475", year: 1932, site: "Waseca" }, 112 | { yield: 44.23333, variety: "No. 475", year: 1932, site: "Morris" }, 113 | { yield: 32.13333, variety: "No. 475", year: 1932, site: "Crookston" }, 114 | { yield: 15.23333, variety: "No. 475", year: 1932, site: "Grand Rapids" }, 115 | { yield: 27.36667, variety: "No. 475", year: 1932, site: "Duluth" }, 116 | { yield: 38.00000, variety: "Wisconsin No. 38", year: 1932, site: "University Farm" }, 117 | { yield: 58.16667, variety: "Wisconsin No. 38", year: 1932, site: "Waseca" }, 118 | { yield: 47.16667, variety: "Wisconsin No. 38", year: 1932, site: "Morris" }, 119 | { yield: 35.90000, variety: "Wisconsin No. 38", year: 1932, site: "Crookston" }, 120 | { yield: 20.66667, variety: "Wisconsin No. 38", year: 1932, site: "Grand Rapids" }, 121 | { yield: 29.33333, variety: "Wisconsin No. 38", year: 1932, site: "Duluth" } 122 | ]; 123 | -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_pv.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
  9 |   2  * The top-level Protovis namespace. All public methods and fields should be
 10 |   3  * registered on this object. Note that core Protovis source is surrounded by an
 11 |   4  * anonymous function, so any other declared globals will not be visible outside
 12 |   5  * of core methods. This also allows multiple versions of Protovis to coexist,
 13 |   6  * since each version will see their own <tt>pv</tt> namespace.
 14 |   7  *
 15 |   8  * @namespace The top-level Protovis namespace, <tt>pv</tt>.
 16 |   9  */
 17 |  10 var pv = {};
 18 |  11 
 19 |  12 /**
 20 |  13  * Protovis major and minor version numbers.
 21 |  14  *
 22 |  15  * @namespace Protovis major and minor version numbers.
 23 |  16  */
 24 |  17 pv.version = {
 25 |  18   /**
 26 |  19    * The major version number.
 27 |  20    *
 28 |  21    * @type number
 29 |  22    * @constant
 30 |  23    */
 31 |  24   major: 3,
 32 |  25 
 33 |  26   /**
 34 |  27    * The minor version number.
 35 |  28    *
 36 |  29    * @type number
 37 |  30    * @constant
 38 |  31    */
 39 |  32   minor: 2
 40 |  33 };
 41 |  34 
 42 |  35 /**
 43 |  36  * Returns the passed-in argument, <tt>x</tt>; the identity function. This method
 44 |  37  * is provided for convenience since it is used as the default behavior for a
 45 |  38  * number of property functions.
 46 |  39  *
 47 |  40  * @param x a value.
 48 |  41  * @returns the value <tt>x</tt>.
 49 |  42  */
 50 |  43 pv.identity = function(x) { return x; };
 51 |  44 
 52 |  45 /**
 53 |  46  * Returns <tt>this.index</tt>. This method is provided for convenience for use
 54 |  47  * with scales. For example, to color bars by their index, say:
 55 |  48  *
 56 |  49  * <pre>.fillStyle(pv.Colors.category10().by(pv.index))</pre>
 57 |  50  *
 58 |  51  * This method is equivalent to <tt>function() this.index</tt>, but more
 59 |  52  * succinct. Note that the <tt>index</tt> property is also supported for
 60 |  53  * accessor functions with {@link pv.max}, {@link pv.min} and other array
 61 |  54  * utility methods.
 62 |  55  *
 63 |  56  * @see pv.Scale
 64 |  57  * @see pv.Mark#index
 65 |  58  */
 66 |  59 pv.index = function() { return this.index; };
 67 |  60 
 68 |  61 /**
 69 |  62  * Returns <tt>this.childIndex</tt>. This method is provided for convenience for
 70 |  63  * use with scales. For example, to color bars by their child index, say:
 71 |  64  *
 72 |  65  * <pre>.fillStyle(pv.Colors.category10().by(pv.child))</pre>
 73 |  66  *
 74 |  67  * This method is equivalent to <tt>function() this.childIndex</tt>, but more
 75 |  68  * succinct.
 76 |  69  *
 77 |  70  * @see pv.Scale
 78 |  71  * @see pv.Mark#childIndex
 79 |  72  */
 80 |  73 pv.child = function() { return this.childIndex; };
 81 |  74 
 82 |  75 /**
 83 |  76  * Returns <tt>this.parent.index</tt>. This method is provided for convenience
 84 |  77  * for use with scales. This method is provided for convenience for use with
 85 |  78  * scales. For example, to color bars by their parent index, say:
 86 |  79  *
 87 |  80  * <pre>.fillStyle(pv.Colors.category10().by(pv.parent))</pre>
 88 |  81  *
 89 |  82  * Tthis method is equivalent to <tt>function() this.parent.index</tt>, but more
 90 |  83  * succinct.
 91 |  84  *
 92 |  85  * @see pv.Scale
 93 |  86  * @see pv.Mark#index
 94 |  87  */
 95 |  88 pv.parent = function() { return this.parent.index; };
 96 |  89 
 97 |  90 /**
 98 |  91  * Stores the current event. This field is only set within event handlers.
 99 |  92  *
100 |  93  * @type Event
101 |  94  * @name pv.event
102 |  95  */
103 |  96 
-------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_mark_Bar.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
  9 |   2  * Constructs a new bar mark with default properties. Bars are not typically
 10 |   3  * constructed directly, but by adding to a panel or an existing mark via
 11 |   4  * {@link pv.Mark#add}.
 12 |   5  *
 13 |   6  * @class Represents a bar: an axis-aligned rectangle that can be stroked and
 14 |   7  * filled. Bars are used for many chart types, including bar charts, histograms
 15 |   8  * and Gantt charts. Bars can also be used as decorations, for example to draw a
 16 |   9  * frame border around a panel; in fact, a panel is a special type (a subclass)
 17 |  10  * of bar.
 18 |  11  *
 19 |  12  * <p>Bars can be positioned in several ways. Most commonly, one of the four
 20 |  13  * corners is fixed using two margins, and then the width and height properties
 21 |  14  * determine the extent of the bar relative to this fixed location. For example,
 22 |  15  * using the bottom and left properties fixes the bottom-left corner; the width
 23 |  16  * then extends to the right, while the height extends to the top. As an
 24 |  17  * alternative to the four corners, a bar can be positioned exclusively using
 25 |  18  * margins; this is convenient as an inset from the containing panel, for
 26 |  19  * example. See {@link pv.Mark} for details on the prioritization of redundant
 27 |  20  * positioning properties.
 28 |  21  *
 29 |  22  * <p>See also the <a href="../../api/Bar.html">Bar guide</a>.
 30 |  23  *
 31 |  24  * @extends pv.Mark
 32 |  25  */
 33 |  26 pv.Bar = function() {
 34 |  27   pv.Mark.call(this);
 35 |  28 };
 36 |  29 
 37 |  30 pv.Bar.prototype = pv.extend(pv.Mark)
 38 |  31     .property("width", Number)
 39 |  32     .property("height", Number)
 40 |  33     .property("lineWidth", Number)
 41 |  34     .property("strokeStyle", pv.color)
 42 |  35     .property("fillStyle", pv.color);
 43 |  36 
 44 |  37 pv.Bar.prototype.type = "bar";
 45 |  38 
 46 |  39 /**
 47 |  40  * The width of the bar, in pixels. If the left position is specified, the bar
 48 |  41  * extends rightward from the left edge; if the right position is specified, the
 49 |  42  * bar extends leftward from the right edge.
 50 |  43  *
 51 |  44  * @type number
 52 |  45  * @name pv.Bar.prototype.width
 53 |  46  */
 54 |  47 
 55 |  48 /**
 56 |  49  * The height of the bar, in pixels. If the bottom position is specified, the
 57 |  50  * bar extends upward from the bottom edge; if the top position is specified,
 58 |  51  * the bar extends downward from the top edge.
 59 |  52  *
 60 |  53  * @type number
 61 |  54  * @name pv.Bar.prototype.height
 62 |  55  */
 63 |  56 
 64 |  57 /**
 65 |  58  * The width of stroked lines, in pixels; used in conjunction with
 66 |  59  * <tt>strokeStyle</tt> to stroke the bar's border.
 67 |  60  *
 68 |  61  * @type number
 69 |  62  * @name pv.Bar.prototype.lineWidth
 70 |  63  */
 71 |  64 
 72 |  65 /**
 73 |  66  * The style of stroked lines; used in conjunction with <tt>lineWidth</tt> to
 74 |  67  * stroke the bar's border. The default value of this property is null, meaning
 75 |  68  * bars are not stroked by default.
 76 |  69  *
 77 |  70  * @type string
 78 |  71  * @name pv.Bar.prototype.strokeStyle
 79 |  72  * @see pv.color
 80 |  73  */
 81 |  74 
 82 |  75 /**
 83 |  76  * The bar fill style; if non-null, the interior of the bar is filled with the
 84 |  77  * specified color. The default value of this property is a categorical color.
 85 |  78  *
 86 |  79  * @type string
 87 |  80  * @name pv.Bar.prototype.fillStyle
 88 |  81  * @see pv.color
 89 |  82  */
 90 |  83 
 91 |  84 /**
 92 |  85  * Default properties for bars. By default, there is no stroke and the fill
 93 |  86  * style is a categorical color.
 94 |  87  *
 95 |  88  * @type pv.Bar
 96 |  89  */
 97 |  90 pv.Bar.prototype.defaults = new pv.Bar()
 98 |  91     .extend(pv.Mark.prototype.defaults)
 99 |  92     .lineWidth(1.5)
100 |  93     .fillStyle(pv.Colors.category20().by(pv.parent));
101 |  94 
-------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and 10 | distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct or 18 | indirect, to cause the direction or management of such entity, whether by 19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the 20 | outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising 23 | permissions granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation or 30 | translation of a Source form, including but not limited to compiled object code, 31 | generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, made 34 | available under the License, as indicated by a copyright notice that is included 35 | in or attached to the work (an example is provided in the Appendix below). 36 | 37 | "Derivative Works" shall mean any work, whether in Source or Object form, that 38 | is based on (or derived from) the Work and for which the editorial revisions, 39 | annotations, elaborations, or other modifications represent, as a whole, an 40 | original work of authorship. For the purposes of this License, Derivative Works 41 | shall not include works that remain separable from, or merely link (or bind by 42 | name) to the interfaces of, the Work and Derivative Works thereof. 43 | 44 | "Contribution" shall mean any work of authorship, including the original version 45 | of the Work and any modifications or additions to that Work or Derivative Works 46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 47 | by the copyright owner or by an individual or Legal Entity authorized to submit 48 | on behalf of the copyright owner. For the purposes of this definition, 49 | "submitted" means any form of electronic, verbal, or written communication sent 50 | to the Licensor or its representatives, including but not limited to 51 | communication on electronic mailing lists, source code control systems, and 52 | issue tracking systems that are managed by, or on behalf of, the Licensor for 53 | the purpose of discussing and improving the Work, but excluding communication 54 | that is conspicuously marked or otherwise designated in writing by the copyright 55 | owner as "Not a Contribution." 56 | 57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 58 | of whom a Contribution has been received by Licensor and subsequently 59 | incorporated within the Work. 60 | 61 | 2. Grant of Copyright License. 62 | 63 | Subject to the terms and conditions of this License, each Contributor hereby 64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 65 | irrevocable copyright license to reproduce, prepare Derivative Works of, 66 | publicly display, publicly perform, sublicense, and distribute the Work and such 67 | Derivative Works in Source or Object form. 68 | 69 | 3. Grant of Patent License. 70 | 71 | Subject to the terms and conditions of this License, each Contributor hereby 72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 73 | irrevocable (except as stated in this section) patent license to make, have 74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 75 | such license applies only to those patent claims licensable by such Contributor 76 | that are necessarily infringed by their Contribution(s) alone or by combination 77 | of their Contribution(s) with the Work to which such Contribution(s) was 78 | submitted. If You institute patent litigation against any entity (including a 79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 80 | Contribution incorporated within the Work constitutes direct or contributory 81 | patent infringement, then any patent licenses granted to You under this License 82 | for that Work shall terminate as of the date such litigation is filed. 83 | 84 | 4. Redistribution. 85 | 86 | You may reproduce and distribute copies of the Work or Derivative Works thereof 87 | in any medium, with or without modifications, and in Source or Object form, 88 | provided that You meet the following conditions: 89 | 90 | You must give any other recipients of the Work or Derivative Works a copy of 91 | this License; and 92 | You must cause any modified files to carry prominent notices stating that You 93 | changed the files; and 94 | You must retain, in the Source form of any Derivative Works that You distribute, 95 | all copyright, patent, trademark, and attribution notices from the Source form 96 | of the Work, excluding those notices that do not pertain to any part of the 97 | Derivative Works; and 98 | If the Work includes a "NOTICE" text file as part of its distribution, then any 99 | Derivative Works that You distribute must include a readable copy of the 100 | attribution notices contained within such NOTICE file, excluding those notices 101 | that do not pertain to any part of the Derivative Works, in at least one of the 102 | following places: within a NOTICE text file distributed as part of the 103 | Derivative Works; within the Source form or documentation, if provided along 104 | with the Derivative Works; or, within a display generated by the Derivative 105 | Works, if and wherever such third-party notices normally appear. The contents of 106 | the NOTICE file are for informational purposes only and do not modify the 107 | License. You may add Your own attribution notices within Derivative Works that 108 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 109 | provided that such additional attribution notices cannot be construed as 110 | modifying the License. 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, or 113 | distribution of Your modifications, or for any such Derivative Works as a whole, 114 | provided Your use, reproduction, and distribution of the Work otherwise complies 115 | with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. 118 | 119 | Unless You explicitly state otherwise, any Contribution intentionally submitted 120 | for inclusion in the Work by You to the Licensor shall be under the terms and 121 | conditions of this License, without any additional terms or conditions. 122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 123 | any separate license agreement you may have executed with Licensor regarding 124 | such Contributions. 125 | 126 | 6. Trademarks. 127 | 128 | This License does not grant permission to use the trade names, trademarks, 129 | service marks, or product names of the Licensor, except as required for 130 | reasonable and customary use in describing the origin of the Work and 131 | reproducing the content of the NOTICE file. 132 | 133 | 7. Disclaimer of Warranty. 134 | 135 | Unless required by applicable law or agreed to in writing, Licensor provides the 136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, 137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 138 | including, without limitation, any warranties or conditions of TITLE, 139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 140 | solely responsible for determining the appropriateness of using or 141 | redistributing the Work and assume any risks associated with Your exercise of 142 | permissions under this License. 143 | 144 | 8. Limitation of Liability. 145 | 146 | In no event and under no legal theory, whether in tort (including negligence), 147 | contract, or otherwise, unless required by applicable law (such as deliberate 148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 149 | liable to You for damages, including any direct, indirect, special, incidental, 150 | or consequential damages of any character arising as a result of this License or 151 | out of the use or inability to use the Work (including but not limited to 152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 153 | any and all other commercial damages or losses), even if such Contributor has 154 | been advised of the possibility of such damages. 155 | 156 | 9. Accepting Warranty or Additional Liability. 157 | 158 | While redistributing the Work or Derivative Works thereof, You may choose to 159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 160 | other liability obligations and/or rights consistent with this License. However, 161 | in accepting such obligations, You may act only on Your own behalf and on Your 162 | sole responsibility, not on behalf of any other Contributor, and only if You 163 | agree to indemnify, defend, and hold each Contributor harmless for any liability 164 | incurred by, or claims asserted against, such Contributor by reason of your 165 | accepting any such warranty or additional liability. 166 | 167 | END OF TERMS AND CONDITIONS 168 | 169 | APPENDIX: How to apply the Apache License to your work 170 | 171 | To apply the Apache License to your work, attach the following boilerplate 172 | notice, with the fields enclosed by brackets "[]" replaced with your own 173 | identifying information. (Don't include the brackets!) The text should be 174 | enclosed in the appropriate comment syntax for the file format. We also 175 | recommend that a file or class name and description of purpose be included on 176 | the same "printed page" as the copyright notice for easier identification within 177 | third-party archives. 178 | 179 | Copyright [yyyy] [name of copyright owner] 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | http://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /data/2016_10.tsv: -------------------------------------------------------------------------------- 1 | AWS S3 Data Mgt file object store 2.0 ADOPT TRUE see 2nd Release 2 | Cassandra Data Mgt NoSql DB 2.0 ADOPT see 2nd Release 3 | Docker Platforms & Infrastructure Container/Deployment 2.0 ADOPT see 2nd Release 4 | Guava Techniques; Frameworks & Tools standard lib 2.0 ADOPT see 2nd Release 5 | Java Languages impl. language 2.0 ADOPT see 2nd Release 6 | Javascript Languages impl. language 2.0 ADOPT see 2nd Release 7 | Jetty Platforms & Infrastructure webserver 2.0 ADOPT see 2nd Release 8 | Maven Techniques; Frameworks & Tools Build Tool 2.0 ADOPT see 2nd Release 9 | PostgreSQL Data Mgt RDBMS 2.0 ADOPT see 2nd Release 10 | Python Languages impl. language 2.0 ADOPT see 2nd Release 11 | Redis Data Mgt NoSql DB/caching 2.0 ADOPT see 2nd Release 12 | slf4j Platforms & Infrastructure Logging-Facade, multiple implementations (Log4J,Logback) 2.0 ADOPT TRUE see 2nd Release 13 | Solr Data Mgt NoSql Search DB 2.0 ADOPT see 2nd Release 14 | ZMON Platforms & Infrastructure Zalando Monitoring System 2.0 ADOPT see 2nd Release 15 | STUPS Platforms & Infrastructure PaaS tool set 1.9 ADOPT see 2nd Release 16 | log4j2 Platforms & Infrastructure Logging-Framework 1.9 ADOPT see 2nd Release 17 | Nginx Platforms & Infrastructure webserver / loadbalancer 1.9 ADOPT see 2nd Release 18 | Hystrix Platforms & Infrastructure lib for fault tolerance 1.8 ADOPT see 2nd Release 19 | Spring Techniques; Frameworks & Tools impl. frw mixed 1.8 ADOPT see 2nd Release 20 | Scala Languages impl. language 1.8 ADOPT see 2nd Release 21 | Go Languages impl. language 1.8 ADOPT 2016-06-06 TRIAL --> ADOPT YES YES YES YES NO ABSTAIN ABSTAIN ABSTAIN ABSTAIN 22 | Swift Languages impl. language 1.8 ADOPT see 2nd Release 23 | Tomcat Platforms & Infrastructure webserver 1.8 ADOPT see 2nd Release 24 | ElasticSearch Data Mgt NoSql Search DB 1.8 ADOPT 2016-08-29 TRIAL --> ADOPT ABSTAIN YES YES YES YES YES 25 | OpenAPI (Swagger) Techniques; Frameworks & Tools rest api frw 1.8 ADOPT see 2nd Release 26 | Sbt Techniques; Frameworks & Tools Build Tool 1.8 ADOPT see 2nd Release 27 | HAProxy Platforms & Infrastructure loadbalancer 1.7 ADOPT see 2nd Release 28 | Kafka Data Mgt message queues 1.5 ADOPT see 2nd Release 29 | Play (Scala) Techniques; Frameworks & Tools 1.5 ADOPT see 2nd Release 30 | scikit-learn Techniques; Frameworks & Tools lib for machine learning 1.5 ADOPT see 2nd Release 31 | Nakadi Data Mgt event bus 1.4 TRIAL 2016-07-04 NIL --> TRIAL YES YES YES YES YES YES 32 | Typescript Languages impl. language 1.4 TRIAL 2016-09-26 ASSESS --> TRIAL ABSTAIN YES YES YES YES 33 | Guice Techniques; Frameworks & Tools impl. frw for dependency injection 1.4 TRIAL see 2nd Release 34 | OpenNLP Techniques; Frameworks & Tools Natural Language Processing 1.3 TRIAL see 2nd Release 35 | etcd Platforms & Infrastructure distributed key/value store 1.3 TRIAL see 2nd Release 36 | Kairos Data Mgt TS DB 1.3 TRIAL see 2nd Release 37 | Clojure Languages impl. language 1.3 TRIAL see 2nd Release 38 | Thymeleaf Techniques; Frameworks & Tools Templating Framework 1.1 TRIAL see 2nd Release 39 | ReactJS Techniques; Frameworks & Tools JS framework for SPA 1.1 TRIAL see 2nd Release 40 | Gradle Techniques; Frameworks & Tools Build Tool 1.0 TRIAL see 2nd Release 41 | Apache Camel Techniques; Frameworks & Tools enterprise integration framework 0.9 TRIAL see 2nd Release 42 | Spark Data Mgt event processing 0.8 TRIAL see 2nd Release 43 | Camunda BPMN Engine Techniques; Frameworks & Tools workflow engine 0.8 TRIAL see 2nd Release 44 | ClojureScript Languages impl. language 0.7 TRIAL see 2nd Release 45 | AWS SNS Data Mgt messaging service 0.7 TRIAL see 2nd Release 46 | logback Platforms & Infrastructure Logging-Framework 0.7 TRIAL see 2nd Release 47 | AspectJ Techniques; Frameworks & Tools Aspect Oriented Language (JVM) 0.7 TRIAL see 2nd Release 48 | AWS SQS Data Mgt message queues 0.6 TRIAL see 2nd Release 49 | Node.js Techniques; Frameworks & Tools server-side JS 0.6 TRIAL see 2nd Release 50 | Akka (Scala) Techniques; Frameworks & Tools 0.4 TRIAL see 2nd Release 51 | Undertow Platforms & Infrastructure webserver 0.4 TRIAL see 2nd Release 52 | Akka (Java) Techniques; Frameworks & Tools 0.3 TRIAL see 2nd Release 53 | Hadoop/HDFS Data Mgt distributed storage 0.3 TRIAL see 2nd Release 54 | Google BigQuery Data Mgt NoSql DB 0.3 TRIAL see 2nd Release 55 | AWS EMR Data Mgt data processing frw 0.3 TRIAL see 2nd Release 56 | Flink Data Mgt event processing 0.1 TRIAL see 2nd Release 57 | Zookeeper Platforms & Infrastructure distributed computing 0.1 TRIAL see 2nd Release 58 | scilab Techniques; Frameworks & Tools data science 0.0 TRIAL see 2nd Release 59 | ObjectiveC Languages impl. language -0.2 ASSESS TRUE see 2nd Release 60 | AWS DynamoDB Data Mgt NoSql DB -0.3 ASSESS see 2nd Release 61 | AWS Kinesis Data Mgt event processing -0.3 ASSESS see 2nd Release 62 | Mesos Platforms & Infrastructure resource manager -0.4 ASSESS see 2nd Release 63 | Hadoop/YARN Data Mgt cluster resource manager -0.4 ASSESS see 2nd Release 64 | Kubernetes Platforms & Infrastructure cluster resource manager -0.4 ASSESS TRUE see 2nd Release 65 | R Languages impl. language -0.4 ASSESS see 2nd Release 66 | Consul Platforms & Infrastructure distributed computing -0.5 ASSESS TRUE see 2nd Release 67 | Storm Data Mgt event processing -0.5 ASSESS see 2nd Release 68 | Elm Languages -0.7 ASSESS see 2nd Release 69 | Flux Techniques; Frameworks & Tools JS methodology for usage with React -0.7 ASSESS see 2nd Release 70 | Spray Techniques; Frameworks & Tools -0.7 ASSESS TRUE see 2nd Release 71 | jQuery Techniques; Frameworks & Tools JS framework -0.7 ASSESS TRUE see 2nd Release 72 | ScalaJS Languages impl. language -0.7 ASSESS see 2nd Release 73 | AWS Simple Workflow Service Platforms & Infrastructure workflow engine -0.7 ASSESS see 2nd Release 74 | Bash Languages impl. language -0.7 ASSESS TRUE see 2nd Release 75 | AWS Lambda Platforms & Infrastructure computing service -0.8 ASSESS see 2nd Release 76 | Vert.x Techniques; Frameworks & Tools async communication framework -0.8 ASSESS see 2nd Release 77 | Google BigTable Data Mgt NoSql DB -0.8 ASSESS see 2nd Release 78 | Play (Java) Techniques; Frameworks & Tools -0.9 ASSESS see 2nd Release 79 | Kotlin Languages language on the JVM -0.9 ASSESS see 2nd Release 80 | Rust Languages impl. language -0.9 ASSESS see 2nd Release 81 | Aurelia Techniques; Frameworks & Tools JS framework -1.0 ASSESS 2016-08-29 NIL --> ASSESS YES YES NO YES YES YES 82 | Angular Techniques; Frameworks & Tools JS framework -1.0 ASSESS see 2nd Release 83 | Datomic Data Mgt NoSql DB -1.0 ASSESS TRUE see 2nd Release 84 | Hadoop/MR Data Mgt data processing frw -1.0 ASSESS see 2nd Release 85 | Rocket (rkt) Platforms & Infrastructure Container/Deployment -1.0 ASSESS see 2nd Release 86 | RabbitMQ Data Mgt message queues -1.1 HOLD see 2nd Release 87 | InfluxDB Data Mgt TS DB -1.1 HOLD see 2nd Release 88 | Neo4j Data Mgt Graph DB -1.1 HOLD see 2nd Release 89 | Grizzly Platforms & Infrastructure webserver -1.1 HOLD see 2nd Release 90 | Riak Data Mgt NoSql DB -1.2 HOLD see 2nd Release 91 | Elixir Languages impl. language -1.2 HOLD see 2nd Release 92 | log4j Platforms & Infrastructure Logging-Framework -1.2 HOLD see 2nd Release 93 | Hadoop/HBase Data Mgt NoSql DB -1.2 HOLD see 2nd Release 94 | Julia Languages -1.3 HOLD TRUE see 2nd Release 95 | CouchBase Data Mgt NoSql DB -1.3 HOLD see 2nd Release 96 | Haskell Languages impl. language -1.3 HOLD see 2nd Release 97 | HornetQueue Data Mgt message queues -1.4 HOLD see 2nd Release 98 | BackboneJS Techniques; Frameworks & Tools JS framework -1.4 HOLD see 2nd Release 99 | Erlang Languages impl. language -1.4 HOLD see 2nd Release 100 | Aerospike Data Mgt NoSql DB/caching -1.5 HOLD see 2nd Release 101 | Apache Artemis Data Mgt message queues -1.5 HOLD see 2nd Release 102 | C/C++ Languages impl. language -1.5 HOLD see 2nd Release 103 | Coffeescript Languages impl. language -1.5 HOLD see 2nd Release 104 | Takipi Platforms & Infrastructure exception monitoring -1.5 HOLD TRUE see 2nd Release 105 | MySQL Data Mgt RDBMS -1.5 HOLD see 2nd Release 106 | Esper CEP Data Mgt Complex Event Processor -1.6 HOLD see 2nd Release 107 | Graphite Data Mgt TS DB -1.6 HOLD see 2nd Release 108 | Groovy Languages impl. language -1.6 HOLD see 2nd Release 109 | saltstack Platforms & Infrastructure infrastructure management -1.7 HOLD TRUE see 2nd Release 110 | Jython Languages impl. language -1.7 HOLD see 2nd Release 111 | Activiti Techniques; Frameworks & Tools workflow engine -1.8 HOLD see 2nd Release 112 | MongoDB Data Mgt NoSql DB -1.8 HOLD 2016-06-06 HOLD --> ASSESS ABSTAIN ABSTAIN ABSTAIN ABSTAIN ABSTAIN ABSTAIN ABSTAIN ABSTAIN ABSTAIN 113 | Drools Techniques; Frameworks & Tools business rule engine -1.8 HOLD see 2nd Release 114 | PHP Languages -1.8 HOLD see 2nd Release 115 | Oracle DB Data Mgt RDBMS -1.8 HOLD TRUE see 2nd Release 116 | JBoss Platforms & Infrastructure Application Server -1.8 HOLD see 2nd Release 117 | Perl Languages impl. language -1.9 HOLD see 2nd Release 118 | ActiveMQ Data Mgt message queues -1.9 HOLD see 2nd Release 119 | JRuby Languages impl. language -1.9 HOLD see 2nd Release 120 | Ruby Languages impl. language -1.9 HOLD see 2nd Release 121 | MemCached Data Mgt caching -2.0 HOLD 2016-09-26 ADOPT --> HOLD YES YES YES YES YES 122 | AngularJS 1.x Techniques; Frameworks & Tools JS framework -2.0 HOLD 2016-07-04 ASSESS --> HOLD YES YES YES YES YES YES 123 | .NET / languages Languages impl. language -2.0 HOLD see 2nd Release 124 | Mono Languages C# based, .NET compatible RTE -2.0 HOLD see 2nd Release 125 | Puppet Platforms & Infrastructure config mgt -2.0 HOLD see 2nd Release 126 | 127 | 128 | 129 | Data Mgt 39 130 | Languages 30 131 | Platforms & Infrastructure 26 132 | Techniques; Frameworks & Tools 30 133 | 125 134 | 135 | ADOPT 30 136 | TRIAL 28 137 | ASSESS 27 138 | HOLD 40 139 | 125 -------------------------------------------------------------------------------- /lib/protovis-3.2/jsdoc/symbols/src/src_physics_PositionConstraint.js.html: -------------------------------------------------------------------------------- 1 |
  1 /**
 9 |   2  * Constructs a default position constraint using the <tt>fix</tt> attribute.
10 |   3  * An optional position function can be specified to determine how the fixed
11 |   4  * position per-particle is determined.
12 |   5  *
13 |   6  * @class Constraints particles to a fixed position. The fixed position per
14 |   7  * particle is determined using a given position function, which defaults to
15 |   8  * <tt>function(d) d.fix</tt>.
16 |   9  *
17 |  10  * <p>If the position function returns null, then no position constraint is
18 |  11  * applied to the given particle. Otherwise, the particle's position is set to
19 |  12  * the returned position, as expressed by a {@link pv.Vector}. (Note: the
20 |  13  * position does not need to be an instance of <tt>pv.Vector</tt>, but simply an
21 |  14  * object with <tt>x</tt> and <tt>y</tt> attributes.)
22 |  15  *
23 |  16  * <p>This constraint also supports a configurable alpha parameter, which
24 |  17  * defaults to 1. If the alpha parameter is in the range [0,1], then rather than
25 |  18  * setting the particle's new position directly to the position returned by the
26 |  19  * supplied position function, the particle's position is interpolated towards
27 |  20  * the fixed position. This results is a smooth (exponential) drift towards the
28 |  21  * fixed position, which can increase the stability of the physics simulation.
29 |  22  * In addition, the alpha parameter can be decayed over time, relaxing the
30 |  23  * position constraint, which helps to stabilize on an optimal solution.
31 |  24  *
32 |  25  * @param {function} [f] the position function.
33 |  26  */
34 |  27 pv.Constraint.position = function(f) {
35 |  28   var a = 1, // default alpha
36 |  29       constraint = {};
37 |  30 
38 |  31   if (!arguments.length) /** @ignore */ f = function(p) { return p.fix; };
39 |  32 
40 |  33   /**
41 |  34    * Sets or gets the alpha parameter for position interpolation. If the alpha
42 |  35    * parameter is in the range [0,1], then rather than setting the particle's
43 |  36    * new position directly to the position returned by the supplied position
44 |  37    * function, the particle's position is interpolated towards the fixed
45 |  38    * position.
46 |  39    *
47 |  40    * @function
48 |  41    * @name pv.Constraint.position.prototype.alpha
49 |  42    * @param {number} x the new alpha parameter, in the range [0,1].
50 |  43    * @returns {pv.Constraint.position} this.
51 |  44    */
52 |  45   constraint.alpha = function(x) {
53 |  46     if (arguments.length) {
54 |  47       a = Number(x);
55 |  48       return constraint;
56 |  49     }
57 |  50     return a;
58 |  51   };
59 |  52 
60 |  53   /**
61 |  54    * Applies this constraint to the specified particles.
62 |  55    *
63 |  56    * @function
64 |  57    * @name pv.Constraint.position.prototype.apply
65 |  58    * @param {pv.Particle} particles particles to which to apply this constraint.
66 |  59    */
67 |  60   constraint.apply = function(particles) {
68 |  61     for (var p = particles; p; p = p.next) {
69 |  62       var v = f(p);
70 |  63       if (v) {
71 |  64         p.x += (v.x - p.x) * a;
72 |  65         p.y += (v.y - p.y) * a;
73 |  66         p.fx = p.fy = p.vx = p.vy = 0;
74 |  67       }
75 |  68     }
76 |  69   };
77 |  70 
78 |  71   return constraint;
79 |  72 };
80 |  73 
--------------------------------------------------------------------------------