clusto 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -3,14 +3,40 @@ Clusto
3
3
 
4
4
  *Simple Ruby point clustering*
5
5
 
6
- If you're familiar with the [k-means][1] algorithm then Clusto's clustering process will probably be broadly recognisable, although it does take some liberties in the name of performance.
6
+ In a nutshell, Clusto is a simple way to assign many points to a few clusters, ideally for rendering on a map. It's an alternative to client-side clustering which can cause performance problems and typically necessitates code duplication if your data is used by different client-side languages or frameworks (JavaScript in the browser, Objective-C on iOS, Java on Android).
7
+
8
+ If you're familiar with the [k-means][1] algorithm then Clusto's clustering process should be broadly recognisable, although it does take some liberties in the name of performance.
7
9
 
8
10
  Usage
9
11
  -----
10
12
 
13
+ The `Clusto.cluster` method accepts an array of `Clusto::Point` values, and returns an array of `Clusto::Cluster` objects. Each cluster has one or more `Clusto::Point` values.
14
+
15
+
11
16
  ```ruby
12
17
  points = data.map { |p| Clusto::Point.new(p.x, p.y) }
13
18
  clusters = Clusto.cluster(points)
14
19
  ```
15
20
 
16
- [1]: http://en.wikipedia.org/wiki/K-means_clustering
21
+ The `cluster` method also accepts a `:bounds` parameter, which will determine the initial cluster positions, and a `:grid_size` parameter, the square of which determines the number of clusters. By default, the `:bounds` is set to the minimum bounding rectangle of the supplied points and the `:grid_size` is set to `8`.
22
+
23
+ ```ruby
24
+ bounds = [40.51, -74.39, 40.84, -73.44]
25
+ clusters = Clusto.cluster(points, :bounds => bounds, :grid_size => 10)
26
+ ```
27
+
28
+ Each `point` is assigned to the nearest cluster using the [Haversine formula][2], but you can change the `:distance_method` to `:euclidian` if you wish:
29
+
30
+ ```ruby
31
+ clusters = Clusto.cluster(points, :distance_method => :euclidian)
32
+ ```
33
+
34
+ To keep track of points, you can assign each point an optional `tag` value:
35
+
36
+ ```ruby
37
+ tag = 123
38
+ point = Clusto::Point(x, y, tag)
39
+ ```
40
+
41
+ [1]: http://en.wikipedia.org/wiki/K-means_clustering
42
+ [2]: http://en.wikipedia.org/wiki/Haversine_formula
@@ -0,0 +1,727 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>EmbeddedEditorHidden:Conor</key>
6
+ <false/>
7
+ <key>ExpandedEditorWidth:Conor:displays([(0, 0), (1440, 900)])</key>
8
+ <integer>979</integer>
9
+ <key>ExpandedItems:Conor</key>
10
+ <array>
11
+ <string>4A878945-2576-4616-866A-51179A76DB90</string>
12
+ <dict>
13
+ <key>BookmarkData</key>
14
+ <data>
15
+ Ym9va7wDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
16
+ AAAAAAAAAAAAxAIAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
17
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
18
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
19
+ bGliABwAAAABBgAABAAAABQAAAAkAAAANAAAAEgAAABUAAAAZAAA
20
+ AAgAAAAEAwAAU3wAAAAAAAAIAAAABAMAAK35CgAAAAAACAAAAAQD
21
+ AADdbDEAAAAAAAgAAAAEAwAA9d9sAwAAAAAIAAAABAMAAIaZVAQA
22
+ AAAACAAAAAQDAADrc0QHAAAAAAgAAAAEAwAAhnREBwAAAAAcAAAA
23
+ AQYAAJQAAACkAAAAtAAAAMQAAADUAAAA5AAAAPQAAAAIAAAAAAQA
24
+ AEG2KF6nAAAAGAAAAAECAAACAAAAAAAAAA8AAAAAAAAAAAAAAAAA
25
+ AAAEAAAAAwMAAAUAAAAEAAAAAwMAAPYBAAAJAAAAAQEAAE1hY2lu
26
+ dG9zaAAAAAgAAAAEAwAAAFBRzjYAAAAIAAAAAAQAAEGuaDucAAAA
27
+ JAAAAAEBAAA5RTFFQzM5Qi1DRjVCLTNENDEtQTZGMS1FRjkyNzFC
28
+ Rjk3OEQYAAAAAQIAAIEAAAABAAgA7z8AAAEACAAAAAAAAAAAAAEA
29
+ AAABAQAALwAAAAAAAAABBQAAuAAAAAECAAA4MDlkZTY3MDZkNmU2
30
+ ZDNjMDdkNTFlNDY1MDNjMGE2MzBlNjk0Yzg1OzAwMDAwMDAwOzAw
31
+ MDAwMDAwMDAwMDAwMjA7Y29tLmFwcGxlLmFwcC1zYW5kYm94LnJl
32
+ YWQtd3JpdGU7MDAwMDAwMDE7MDEwMDAwMDU7MDAwMDAwMDAwNzQ0
33
+ NzQ4NjsvdXNlcnMvY29ub3IvZHJvcGJveC9kZXZlbG9wbWVudC9y
34
+ dWJ5L2NsdXN0by9saWIAwAAAAP7///8BAAAAAAAAAA8AAAAEEAAA
35
+ cAAAAAAAAAAFEAAABAEAAAAAAAAQEAAAOAEAAAAAAABAEAAAKAEA
36
+ AAAAAAACIAAA8AEAAAAAAAAQIAAAcAEAAAAAAAARIAAApAEAAAAA
37
+ AAASIAAAhAEAAAAAAAATIAAAlAEAAAAAAAAgIAAA0AEAAAAAAAAw
38
+ IAAA/AEAAAAAAAABwAAAWAEAAAAAAAARwAAAFAAAAAAAAAASwAAA
39
+ ZAEAAAAAAACA8AAABAIAAAAAAAA=
40
+ </data>
41
+ <key>FileURL</key>
42
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/</string>
43
+ <key>TypeID</key>
44
+ <string>_CFileLocator</string>
45
+ <key>Version</key>
46
+ <integer>1</integer>
47
+ </dict>
48
+ <dict>
49
+ <key>BookmarkData</key>
50
+ <data>
51
+ Ym9va9wDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
52
+ AAAAAAAAAAAA5AIAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
53
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
54
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
55
+ bGliACAAAAABBgAABAAAABQAAAAkAAAANAAAAEgAAABUAAAAZAAA
56
+ AFQAAAAIAAAABAMAAFN8AAAAAAAACAAAAAQDAACt+QoAAAAAAAgA
57
+ AAAEAwAA3WwxAAAAAAAIAAAABAMAAPXfbAMAAAAACAAAAAQDAACG
58
+ mVQEAAAAAAgAAAAEAwAA63NEBwAAAAAIAAAABAMAAIZ0RAcAAAAA
59
+ CAAAAAQDAAAjeUQHAAAAACAAAAABBgAAmAAAAKgAAAC4AAAAyAAA
60
+ ANgAAADoAAAA+AAAAAgBAAAIAAAAAAQAAEG2KGYMAAAAGAAAAAEC
61
+ AAACAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAEAAAAAwMAAAYAAAAE
62
+ AAAAAwMAAPYBAAAJAAAAAQEAAE1hY2ludG9zaAAAAAgAAAAEAwAA
63
+ AFBRzjYAAAAIAAAAAAQAAEGuaDucAAAAJAAAAAEBAAA5RTFFQzM5
64
+ Qi1DRjVCLTNENDEtQTZGMS1FRjkyNzFCRjk3OEQYAAAAAQIAAIEA
65
+ AAABAAgA7z8AAAEACAAAAAAAAAAAAAEAAAABAQAALwAAAAAAAAAB
66
+ BQAAvwAAAAECAAAyNDBiZmU4ZTAxNjY0OGYyMjI0ZmRkYzliMzJl
67
+ MTQwMmM5YzA2YjM2OzAwMDAwMDAwOzAwMDAwMDAwMDAwMDAwMjA7
68
+ Y29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQtd3JpdGU7MDAwMDAw
69
+ MDE7MDEwMDAwMDU7MDAwMDAwMDAwNzQ0NzkyMzsvdXNlcnMvY29u
70
+ b3IvZHJvcGJveC9kZXZlbG9wbWVudC9ydWJ5L2NsdXN0by9saWIv
71
+ Y2x1c3RvAADAAAAA/v///wEAAAAAAAAADwAAAAQQAABwAAAAAAAA
72
+ AAUQAAAYAQAAAAAAABAQAABQAQAAAAAAAEAQAABAAQAAAAAAAAIg
73
+ AAAIAgAAAAAAABAgAACIAQAAAAAAABEgAAC8AQAAAAAAABIgAACc
74
+ AQAAAAAAABMgAACsAQAAAAAAACAgAADoAQAAAAAAADAgAAAUAgAA
75
+ AAAAAAHAAABwAQAAAAAAABHAAAAUAAAAAAAAABLAAAB8AQAAAAAA
76
+ AIDwAAAcAgAAAAAAAA==
77
+ </data>
78
+ <key>FileURL</key>
79
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/</string>
80
+ <key>TypeID</key>
81
+ <string>_CFileLocator</string>
82
+ <key>Version</key>
83
+ <integer>1</integer>
84
+ </dict>
85
+ </array>
86
+ <key>FileFilterMode:Conor</key>
87
+ <integer>1</integer>
88
+ <key>OpenDocuments:Conor</key>
89
+ <array>
90
+ <dict>
91
+ <key>BookmarkData</key>
92
+ <data>
93
+ Ym9va/gDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
94
+ AAAAAAAAAAAA6AIAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
95
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
96
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAA4AAAABAQAA
97
+ Y2x1c3RvLmdlbXNwZWMAABwAAAABBgAABAAAABQAAAAkAAAANAAA
98
+ AEgAAABUAAAAZAAAAAgAAAAEAwAAU3wAAAAAAAAIAAAABAMAAK35
99
+ CgAAAAAACAAAAAQDAADdbDEAAAAAAAgAAAAEAwAA9d9sAwAAAAAI
100
+ AAAABAMAAIaZVAQAAAAACAAAAAQDAADrc0QHAAAAAAgAAAAEAwAA
101
+ b3REBwAAAAAcAAAAAQYAAKAAAACwAAAAwAAAANAAAADgAAAA8AAA
102
+ AAABAAAIAAAAAAQAAEG2KF6JAAAAGAAAAAECAAABAAAAAAAAAA8A
103
+ AAAAAAAAAAAAAAAAAAAAAAAAAQUAAAQAAAADAwAAAQAAAAQAAAAD
104
+ AwAABQAAAAQAAAADAwAA9gEAAAkAAAABAQAATWFjaW50b3NoAAAA
105
+ CAAAAAQDAAAAUFHONgAAAAgAAAAABAAAQa5oO5wAAAAkAAAAAQEA
106
+ ADlFMUVDMzlCLUNGNUItM0Q0MS1BNkYxLUVGOTI3MUJGOTc4RBgA
107
+ AAABAgAAgQAAAAEACADvPwAAAQAIAAAAAAAAAAAAAQAAAAEBAAAv
108
+ AAAAwwAAAAECAAA2MzYyMzM0NjBkMTc0YWMwMzI3NDBlYzQyZDA5
109
+ OWIyNjM3OTkxM2U2OzAwMDAwMDAwOzAwMDAwMDAwMDAwMDAwMjA7
110
+ Y29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQtd3JpdGU7MDAwMDAw
111
+ MDE7MDEwMDAwMDU7MDAwMDAwMDAwNzQ0NzQ2ZjsvdXNlcnMvY29u
112
+ b3IvZHJvcGJveC9kZXZlbG9wbWVudC9ydWJ5L2NsdXN0by9jbHVz
113
+ dG8uZ2Vtc3BlYwAA2AAAAP7///8BAAAAAAAAABEAAAAEEAAAfAAA
114
+ AAAAAAAFEAAAEAEAAAAAAAAQEAAARAEAAAAAAABAEAAANAEAAAAA
115
+ AABVEAAAbAEAAAAAAABWEAAAZAEAAAAAAAACIAAAEAIAAAAAAAAQ
116
+ IAAAkAEAAAAAAAARIAAAxAEAAAAAAAASIAAApAEAAAAAAAATIAAA
117
+ tAEAAAAAAAAgIAAA8AEAAAAAAAAwIAAAZAEAAAAAAAABwAAAeAEA
118
+ AAAAAAARwAAAFAAAAAAAAAASwAAAhAEAAAAAAACA8AAAHAIAAAAA
119
+ AAA=
120
+ </data>
121
+ <key>FileURL</key>
122
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/clusto.gemspec</string>
123
+ <key>RelativePath</key>
124
+ <string>./clusto.gemspec</string>
125
+ <key>TypeID</key>
126
+ <string>_CFileLocator</string>
127
+ <key>Version</key>
128
+ <integer>1</integer>
129
+ </dict>
130
+ <dict>
131
+ <key>BookmarkData</key>
132
+ <data>
133
+ Ym9vaxgEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
134
+ AAAAAAAAAAAACAMAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
135
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
136
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
137
+ bGliAAkAAAABAQAAY2x1c3RvLnJiAAAAIAAAAAEGAAAEAAAAFAAA
138
+ ACQAAAA0AAAASAAAAFQAAABkAAAAcAAAAAgAAAAEAwAAU3wAAAAA
139
+ AAAIAAAABAMAAK35CgAAAAAACAAAAAQDAADdbDEAAAAAAAgAAAAE
140
+ AwAA9d9sAwAAAAAIAAAABAMAAIaZVAQAAAAACAAAAAQDAADrc0QH
141
+ AAAAAAgAAAAEAwAAhnREBwAAAAAIAAAABAMAAJZ0RAcAAAAAIAAA
142
+ AAEGAACsAAAAvAAAAMwAAADcAAAA7AAAAPwAAAAMAQAAHAEAAAgA
143
+ AAAABAAAQbYoXsEAAAAYAAAAAQIAAAEAAAAAAAAADwAAAAAAAAAA
144
+ AAAAAAAAAAAAAAABBQAABAAAAAMDAAACAAAABAAAAAMDAAAGAAAA
145
+ BAAAAAMDAAD2AQAACQAAAAEBAABNYWNpbnRvc2gAAAAIAAAABAMA
146
+ AABQUc42AAAACAAAAAAEAABBrmg7nAAAACQAAAABAQAAOUUxRUMz
147
+ OUItQ0Y1Qi0zRDQxLUE2RjEtRUY5MjcxQkY5NzhEGAAAAAECAACB
148
+ AAAAAQAIAO8/AAABAAgAAAAAAAAAAAABAAAAAQEAAC8AAADCAAAA
149
+ AQIAADI5NDI2ODYwNWRhMTkyYjlmNTk3NTRlYmMyYzU4YzBkMmQ4
150
+ NTZhMWQ7MDAwMDAwMDA7MDAwMDAwMDAwMDAwMDAyMDtjb20uYXBw
151
+ bGUuYXBwLXNhbmRib3gucmVhZC13cml0ZTswMDAwMDAwMTswMTAw
152
+ MDAwNTswMDAwMDAwMDA3NDQ3NDk2Oy91c2Vycy9jb25vci9kcm9w
153
+ Ym94L2RldmVsb3BtZW50L3J1YnkvY2x1c3RvL2xpYi9jbHVzdG8u
154
+ cmIAAADYAAAA/v///wEAAAAAAAAAEQAAAAQQAACEAAAAAAAAAAUQ
155
+ AAAsAQAAAAAAABAQAABkAQAAAAAAAEAQAABUAQAAAAAAAFUQAACM
156
+ AQAAAAAAAFYQAACEAQAAAAAAAAIgAAAwAgAAAAAAABAgAACwAQAA
157
+ AAAAABEgAADkAQAAAAAAABIgAADEAQAAAAAAABMgAADUAQAAAAAA
158
+ ACAgAAAQAgAAAAAAADAgAACEAQAAAAAAAAHAAACYAQAAAAAAABHA
159
+ AAAUAAAAAAAAABLAAACkAQAAAAAAAIDwAAA8AgAAAAAAAA==
160
+ </data>
161
+ <key>FileURL</key>
162
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto.rb</string>
163
+ <key>RelativePath</key>
164
+ <string>./lib/clusto.rb</string>
165
+ <key>TypeID</key>
166
+ <string>_CFileLocator</string>
167
+ <key>Version</key>
168
+ <integer>1</integer>
169
+ </dict>
170
+ <dict>
171
+ <key>BookmarkData</key>
172
+ <data>
173
+ Ym9vazgEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
174
+ AAAAAAAAAAAAKAMAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
175
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
176
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
177
+ bGliAAsAAAABAQAAZGlzdGFuY2UucmIAJAAAAAEGAAAEAAAAFAAA
178
+ ACQAAAA0AAAASAAAAFQAAABkAAAAVAAAAHAAAAAIAAAABAMAAFN8
179
+ AAAAAAAACAAAAAQDAACt+QoAAAAAAAgAAAAEAwAA3WwxAAAAAAAI
180
+ AAAABAMAAPXfbAMAAAAACAAAAAQDAACGmVQEAAAAAAgAAAAEAwAA
181
+ 63NEBwAAAAAIAAAABAMAAIZ0RAcAAAAACAAAAAQDAAAjeUQHAAAA
182
+ AAgAAAAEAwAACZBFBwAAAAAkAAAAAQYAALAAAADAAAAA0AAAAOAA
183
+ AADwAAAAAAEAABABAAAgAQAAMAEAAAgAAAAABAAAQbYpyXEAAAAY
184
+ AAAAAQIAAAEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAABBQAA
185
+ BAAAAAMDAAADAAAABAAAAAMDAAAHAAAABAAAAAMDAAD2AQAACQAA
186
+ AAEBAABNYWNpbnRvc2gAAAAIAAAABAMAAABQUc42AAAACAAAAAAE
187
+ AABBrmg7nAAAACQAAAABAQAAOUUxRUMzOUItQ0Y1Qi0zRDQxLUE2
188
+ RjEtRUY5MjcxQkY5NzhEGAAAAAECAACBAAAAAQAIAO8/AAABAAgA
189
+ AAAAAAAAAAABAAAAAQEAAC8AAADLAAAAAQIAADY4N2UzOGJhM2Q2
190
+ Y2JlYmFhNzM3MGFlZTdlZTU5ZTk2Y2RkNWY3YmU7MDAwMDAwMDA7
191
+ MDAwMDAwMDAwMDAwMDAyMDtjb20uYXBwbGUuYXBwLXNhbmRib3gu
192
+ cmVhZC13cml0ZTswMDAwMDAwMTswMTAwMDAwNTswMDAwMDAwMDA3
193
+ NDU5MDA5Oy91c2Vycy9jb25vci9kcm9wYm94L2RldmVsb3BtZW50
194
+ L3J1YnkvY2x1c3RvL2xpYi9jbHVzdG8vZGlzdGFuY2UucmIAANgA
195
+ AAD+////AQAAAAAAAAARAAAABBAAAIQAAAAAAAAABRAAAEABAAAA
196
+ AAAAEBAAAHwBAAAAAAAAQBAAAGwBAAAAAAAAVRAAAKQBAAAAAAAA
197
+ VhAAAJwBAAAAAAAAAiAAAEgCAAAAAAAAECAAAMgBAAAAAAAAESAA
198
+ APwBAAAAAAAAEiAAANwBAAAAAAAAEyAAAOwBAAAAAAAAICAAACgC
199
+ AAAAAAAAMCAAAJwBAAAAAAAAAcAAALABAAAAAAAAEcAAABQAAAAA
200
+ AAAAEsAAALwBAAAAAAAAgPAAAFQCAAAAAAAA
201
+ </data>
202
+ <key>FileURL</key>
203
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/distance.rb</string>
204
+ <key>RelativePath</key>
205
+ <string>./lib/clusto/distance.rb</string>
206
+ <key>TypeID</key>
207
+ <string>_CFileLocator</string>
208
+ <key>Version</key>
209
+ <integer>1</integer>
210
+ </dict>
211
+ <dict>
212
+ <key>BookmarkData</key>
213
+ <data>
214
+ Ym9vazgEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
215
+ AAAAAAAAAAAAKAMAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
216
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
217
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
218
+ bGliAAoAAAABAQAAY2x1c3Rlci5yYgAAJAAAAAEGAAAEAAAAFAAA
219
+ ACQAAAA0AAAASAAAAFQAAABkAAAAVAAAAHAAAAAIAAAABAMAAFN8
220
+ AAAAAAAACAAAAAQDAACt+QoAAAAAAAgAAAAEAwAA3WwxAAAAAAAI
221
+ AAAABAMAAPXfbAMAAAAACAAAAAQDAACGmVQEAAAAAAgAAAAEAwAA
222
+ 63NEBwAAAAAIAAAABAMAAIZ0RAcAAAAACAAAAAQDAAAjeUQHAAAA
223
+ AAgAAAAEAwAADHZEBwAAAAAkAAAAAQYAALAAAADAAAAA0AAAAOAA
224
+ AADwAAAAAAEAABABAAAgAQAAMAEAAAgAAAAABAAAQbYoYL4AAAAY
225
+ AAAAAQIAAAEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAABBQAA
226
+ BAAAAAMDAAADAAAABAAAAAMDAAAHAAAABAAAAAMDAAD2AQAACQAA
227
+ AAEBAABNYWNpbnRvc2gAAAAIAAAABAMAAABQUc42AAAACAAAAAAE
228
+ AABBrmg7nAAAACQAAAABAQAAOUUxRUMzOUItQ0Y1Qi0zRDQxLUE2
229
+ RjEtRUY5MjcxQkY5NzhEGAAAAAECAACBAAAAAQAIAO8/AAABAAgA
230
+ AAAAAAAAAAABAAAAAQEAAC8AAADKAAAAAQIAADE1MjNhOWU2NjMz
231
+ OTE0NDM3OThhN2NjODYyMzZjYzBlZDdlZjI2ZDA7MDAwMDAwMDA7
232
+ MDAwMDAwMDAwMDAwMDAyMDtjb20uYXBwbGUuYXBwLXNhbmRib3gu
233
+ cmVhZC13cml0ZTswMDAwMDAwMTswMTAwMDAwNTswMDAwMDAwMDA3
234
+ NDQ3NjBjOy91c2Vycy9jb25vci9kcm9wYm94L2RldmVsb3BtZW50
235
+ L3J1YnkvY2x1c3RvL2xpYi9jbHVzdG8vY2x1c3Rlci5yYgAAANgA
236
+ AAD+////AQAAAAAAAAARAAAABBAAAIQAAAAAAAAABRAAAEABAAAA
237
+ AAAAEBAAAHwBAAAAAAAAQBAAAGwBAAAAAAAAVRAAAKQBAAAAAAAA
238
+ VhAAAJwBAAAAAAAAAiAAAEgCAAAAAAAAECAAAMgBAAAAAAAAESAA
239
+ APwBAAAAAAAAEiAAANwBAAAAAAAAEyAAAOwBAAAAAAAAICAAACgC
240
+ AAAAAAAAMCAAAJwBAAAAAAAAAcAAALABAAAAAAAAEcAAABQAAAAA
241
+ AAAAEsAAALwBAAAAAAAAgPAAAFQCAAAAAAAA
242
+ </data>
243
+ <key>FileURL</key>
244
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/cluster.rb</string>
245
+ <key>RelativePath</key>
246
+ <string>./lib/clusto/cluster.rb</string>
247
+ <key>TypeID</key>
248
+ <string>_CFileLocator</string>
249
+ <key>Version</key>
250
+ <integer>1</integer>
251
+ </dict>
252
+ <dict>
253
+ <key>BookmarkData</key>
254
+ <data>
255
+ Ym9va/ADAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
256
+ AAAAAAAAAAAA4AIAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
257
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
258
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAkAAAABAQAA
259
+ UkVBRE1FLm1kAAAAHAAAAAEGAAAEAAAAFAAAACQAAAA0AAAASAAA
260
+ AFQAAABkAAAACAAAAAQDAABTfAAAAAAAAAgAAAAEAwAArfkKAAAA
261
+ AAAIAAAABAMAAN1sMQAAAAAACAAAAAQDAAD132wDAAAAAAgAAAAE
262
+ AwAAhplUBAAAAAAIAAAABAMAAOtzRAcAAAAACAAAAAQDAAAeeEQH
263
+ AAAAABwAAAABBgAAnAAAAKwAAAC8AAAAzAAAANwAAADsAAAA/AAA
264
+ AAgAAAAABAAAQbYnWk4AAAAYAAAAAQIAAAEAAAAAAAAADwAAAAAA
265
+ AAAAAAAAAAAAAAAAAAABBQAABAAAAAMDAAABAAAABAAAAAMDAAAF
266
+ AAAABAAAAAMDAAD2AQAACQAAAAEBAABNYWNpbnRvc2gAAAAIAAAA
267
+ BAMAAABQUc42AAAACAAAAAAEAABBrmg7nAAAACQAAAABAQAAOUUx
268
+ RUMzOUItQ0Y1Qi0zRDQxLUE2RjEtRUY5MjcxQkY5NzhEGAAAAAEC
269
+ AACBAAAAAQAIAO8/AAABAAgAAAAAAAAAAAABAAAAAQEAAC8AAAC+
270
+ AAAAAQIAADhlMjY5MDQ1MGE5YmFmMDkzOWMzYWQzNjZmMTJmNTAy
271
+ MGVlMTJjZTE7MDAwMDAwMDA7MDAwMDAwMDAwMDAwMDAyMDtjb20u
272
+ YXBwbGUuYXBwLXNhbmRib3gucmVhZC13cml0ZTswMDAwMDAwMTsw
273
+ MTAwMDAwNTswMDAwMDAwMDA3NDQ3ODFlOy91c2Vycy9jb25vci9k
274
+ cm9wYm94L2RldmVsb3BtZW50L3J1YnkvY2x1c3RvL3JlYWRtZS5t
275
+ ZAAAANgAAAD+////AQAAAAAAAAARAAAABBAAAHgAAAAAAAAABRAA
276
+ AAwBAAAAAAAAEBAAAEABAAAAAAAAQBAAADABAAAAAAAAVRAAAGgB
277
+ AAAAAAAAVhAAAGABAAAAAAAAAiAAAAwCAAAAAAAAECAAAIwBAAAA
278
+ AAAAESAAAMABAAAAAAAAEiAAAKABAAAAAAAAEyAAALABAAAAAAAA
279
+ ICAAAOwBAAAAAAAAMCAAAGABAAAAAAAAAcAAAHQBAAAAAAAAEcAA
280
+ ABQAAAAAAAAAEsAAAIABAAAAAAAAgPAAABgCAAAAAAAA
281
+ </data>
282
+ <key>FileURL</key>
283
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/README.md</string>
284
+ <key>RelativePath</key>
285
+ <string>./README.md</string>
286
+ <key>TypeID</key>
287
+ <string>_CFileLocator</string>
288
+ <key>Version</key>
289
+ <integer>1</integer>
290
+ </dict>
291
+ <dict>
292
+ <key>BookmarkData</key>
293
+ <data>
294
+ Ym9vazAEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
295
+ AAAAAAAAAAAAIAMAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
296
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
297
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAMAAAABAQAA
298
+ bGliAAgAAAABAQAAcG9pbnQucmIkAAAAAQYAAAQAAAAUAAAAJAAA
299
+ ADQAAABIAAAAVAAAAGQAAABUAAAAcAAAAAgAAAAEAwAAU3wAAAAA
300
+ AAAIAAAABAMAAK35CgAAAAAACAAAAAQDAADdbDEAAAAAAAgAAAAE
301
+ AwAA9d9sAwAAAAAIAAAABAMAAIaZVAQAAAAACAAAAAQDAADrc0QH
302
+ AAAAAAgAAAAEAwAAhnREBwAAAAAIAAAABAMAACN5RAcAAAAACAAA
303
+ AAQDAAAIdkQHAAAAACQAAAABBgAArAAAALwAAADMAAAA3AAAAOwA
304
+ AAD8AAAADAEAABwBAAAsAQAACAAAAAAEAABBtihgswAAABgAAAAB
305
+ AgAAAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAEFAAAEAAAA
306
+ AwMAAAMAAAAEAAAAAwMAAAcAAAAEAAAAAwMAAPYBAAAJAAAAAQEA
307
+ AE1hY2ludG9zaAAAAAgAAAAEAwAAAFBRzjYAAAAIAAAAAAQAAEGu
308
+ aDucAAAAJAAAAAEBAAA5RTFFQzM5Qi1DRjVCLTNENDEtQTZGMS1F
309
+ RjkyNzFCRjk3OEQYAAAAAQIAAIEAAAABAAgA7z8AAAEACAAAAAAA
310
+ AAAAAAEAAAABAQAALwAAAMgAAAABAgAAMjQzOTU5ZTMzOGY1NGQ4
311
+ YzM2MWZjZTdkNzdkYzVmYzJkOWNjMmRhOTswMDAwMDAwMDswMDAw
312
+ MDAwMDAwMDAwMDIwO2NvbS5hcHBsZS5hcHAtc2FuZGJveC5yZWFk
313
+ LXdyaXRlOzAwMDAwMDAxOzAxMDAwMDA1OzAwMDAwMDAwMDc0NDc2
314
+ MDg7L3VzZXJzL2Nvbm9yL2Ryb3Bib3gvZGV2ZWxvcG1lbnQvcnVi
315
+ eS9jbHVzdG8vbGliL2NsdXN0by9wb2ludC5yYgDYAAAA/v///wEA
316
+ AAAAAAAAEQAAAAQQAACAAAAAAAAAAAUQAAA8AQAAAAAAABAQAAB4
317
+ AQAAAAAAAEAQAABoAQAAAAAAAFUQAACgAQAAAAAAAFYQAACYAQAA
318
+ AAAAAAIgAABEAgAAAAAAABAgAADEAQAAAAAAABEgAAD4AQAAAAAA
319
+ ABIgAADYAQAAAAAAABMgAADoAQAAAAAAACAgAAAkAgAAAAAAADAg
320
+ AACYAQAAAAAAAAHAAACsAQAAAAAAABHAAAAUAAAAAAAAABLAAAC4
321
+ AQAAAAAAAIDwAABQAgAAAAAAAA==
322
+ </data>
323
+ <key>FileURL</key>
324
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/point.rb</string>
325
+ <key>RelativePath</key>
326
+ <string>./lib/clusto/point.rb</string>
327
+ <key>TypeID</key>
328
+ <string>_CFileLocator</string>
329
+ <key>Version</key>
330
+ <integer>1</integer>
331
+ </dict>
332
+ <dict>
333
+ <key>BookmarkData</key>
334
+ <data>
335
+ Ym9va+gDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
336
+ AAAAAAAAAAAA2AIAAAUAAAABAQAAVXNlcnMAAAAFAAAAAQEAAENv
337
+ bm9yAAAABwAAAAEBAABEcm9wYm94AAsAAAABAQAARGV2ZWxvcG1l
338
+ bnQABAAAAAEBAABSdWJ5BgAAAAEBAABjbHVzdG8AAAcAAAABAQAA
339
+ TElDRU5TRQAcAAAAAQYAAAQAAAAUAAAAJAAAADQAAABIAAAAVAAA
340
+ AGQAAAAIAAAABAMAAFN8AAAAAAAACAAAAAQDAACt+QoAAAAAAAgA
341
+ AAAEAwAA3WwxAAAAAAAIAAAABAMAAPXfbAMAAAAACAAAAAQDAACG
342
+ mVQEAAAAAAgAAAAEAwAA63NEBwAAAAAIAAAABAMAABp4RAcAAAAA
343
+ HAAAAAEGAACYAAAAqAAAALgAAADIAAAA2AAAAOgAAAD4AAAACAAA
344
+ AAAEAABBtidaTgAAABgAAAABAgAAAQAAAAAAAAAPAAAAAAAAAAAA
345
+ AAAAAAAAAAAAAAEFAAAEAAAAAwMAAAEAAAAEAAAAAwMAAAUAAAAE
346
+ AAAAAwMAAPYBAAAJAAAAAQEAAE1hY2ludG9zaAAAAAgAAAAEAwAA
347
+ AFBRzjYAAAAIAAAAAAQAAEGuaDucAAAAJAAAAAEBAAA5RTFFQzM5
348
+ Qi1DRjVCLTNENDEtQTZGMS1FRjkyNzFCRjk3OEQYAAAAAQIAAIEA
349
+ AAABAAgA7z8AAAEACAAAAAAAAAAAAAEAAAABAQAALwAAALwAAAAB
350
+ AgAANDgxZjQxZTU2MDJmZjg5MWMzNzc1ZjNmMTg3NzZkNTYyZjQ2
351
+ YTFiOTswMDAwMDAwMDswMDAwMDAwMDAwMDAwMDIwO2NvbS5hcHBs
352
+ ZS5hcHAtc2FuZGJveC5yZWFkLXdyaXRlOzAwMDAwMDAxOzAxMDAw
353
+ MDA1OzAwMDAwMDAwMDc0NDc4MWE7L3VzZXJzL2Nvbm9yL2Ryb3Bi
354
+ b3gvZGV2ZWxvcG1lbnQvcnVieS9jbHVzdG8vbGljZW5zZQDYAAAA
355
+ /v///wEAAAAAAAAAEQAAAAQQAAB0AAAAAAAAAAUQAAAIAQAAAAAA
356
+ ABAQAAA8AQAAAAAAAEAQAAAsAQAAAAAAAFUQAABkAQAAAAAAAFYQ
357
+ AABcAQAAAAAAAAIgAAAIAgAAAAAAABAgAACIAQAAAAAAABEgAAC8
358
+ AQAAAAAAABIgAACcAQAAAAAAABMgAACsAQAAAAAAACAgAADoAQAA
359
+ AAAAADAgAABcAQAAAAAAAAHAAABwAQAAAAAAABHAAAAUAAAAAAAA
360
+ ABLAAAB8AQAAAAAAAIDwAAAUAgAAAAAAAA==
361
+ </data>
362
+ <key>FileURL</key>
363
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/LICENSE</string>
364
+ <key>RelativePath</key>
365
+ <string>./LICENSE</string>
366
+ <key>TypeID</key>
367
+ <string>_CFileLocator</string>
368
+ <key>Version</key>
369
+ <integer>1</integer>
370
+ </dict>
371
+ </array>
372
+ <key>OpenDocumentsExpanded</key>
373
+ <true/>
374
+ <key>OpenDocumentsVisible</key>
375
+ <true/>
376
+ <key>ProjectViewVisible</key>
377
+ <true/>
378
+ <key>RecentItems:Conor</key>
379
+ <array>
380
+ <dict>
381
+ <key>Date</key>
382
+ <date>2012-10-14T23:51:41Z</date>
383
+ <key>Location</key>
384
+ <dict>
385
+ <key>BookmarkData</key>
386
+ <data>
387
+ Ym9va9QDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
388
+ AAAAAAAAAAAAAAAAAAAA3AIAAAUAAAABAQAAVXNlcnMA
389
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
390
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
391
+ BgAAAAEBAABjbHVzdG8AAA4AAAABAQAAY2x1c3RvLmdl
392
+ bXNwZWMAABwAAAABBgAABAAAABQAAAAkAAAANAAAAEgA
393
+ AABUAAAAZAAAAAgAAAAEAwAAU3wAAAAAAAAIAAAABAMA
394
+ AK35CgAAAAAACAAAAAQDAADdbDEAAAAAAAgAAAAEAwAA
395
+ 9d9sAwAAAAAIAAAABAMAAIaZVAQAAAAACAAAAAQDAADr
396
+ c0QHAAAAAAgAAAAEAwAAb3REBwAAAAAcAAAAAQYAAKAA
397
+ AACwAAAAwAAAANAAAADgAAAA8AAAAAABAAAIAAAAAAQA
398
+ AEG2KF6JAAAAGAAAAAECAAABAAAAAAAAAA8AAAAAAAAA
399
+ AAAAAAAAAAAEAAAAAwMAAAUAAAAEAAAAAwMAAPYBAAAJ
400
+ AAAAAQEAAE1hY2ludG9zaAAAAAgAAAAEAwAAAFBRzjYA
401
+ AAAIAAAAAAQAAEGuaDucAAAAJAAAAAEBAAA5RTFFQzM5
402
+ Qi1DRjVCLTNENDEtQTZGMS1FRjkyNzFCRjk3OEQYAAAA
403
+ AQIAAIEAAAABAAgA7z8AAAEACAAAAAAAAAAAAAEAAAAB
404
+ AQAALwAAAAAAAAABBQAAwwAAAAECAAA2MzYyMzM0NjBk
405
+ MTc0YWMwMzI3NDBlYzQyZDA5OWIyNjM3OTkxM2U2OzAw
406
+ MDAwMDAwOzAwMDAwMDAwMDAwMDAwMjA7Y29tLmFwcGxl
407
+ LmFwcC1zYW5kYm94LnJlYWQtd3JpdGU7MDAwMDAwMDE7
408
+ MDEwMDAwMDU7MDAwMDAwMDAwNzQ0NzQ2ZjsvdXNlcnMv
409
+ Y29ub3IvZHJvcGJveC9kZXZlbG9wbWVudC9ydWJ5L2Ns
410
+ dXN0by9jbHVzdG8uZ2Vtc3BlYwAAwAAAAP7///8BAAAA
411
+ AAAAAA8AAAAEEAAAfAAAAAAAAAAFEAAAEAEAAAAAAAAQ
412
+ EAAARAEAAAAAAABAEAAANAEAAAAAAAACIAAA/AEAAAAA
413
+ AAAQIAAAfAEAAAAAAAARIAAAsAEAAAAAAAASIAAAkAEA
414
+ AAAAAAATIAAAoAEAAAAAAAAgIAAA3AEAAAAAAAAwIAAA
415
+ CAIAAAAAAAABwAAAZAEAAAAAAAARwAAAFAAAAAAAAAAS
416
+ wAAAcAEAAAAAAACA8AAAEAIAAAAAAAA=
417
+ </data>
418
+ <key>FileURL</key>
419
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/clusto.gemspec</string>
420
+ <key>TypeID</key>
421
+ <string>_CFileLocator</string>
422
+ <key>Version</key>
423
+ <integer>1</integer>
424
+ </dict>
425
+ </dict>
426
+ <dict>
427
+ <key>Date</key>
428
+ <date>2012-10-14T23:12:00Z</date>
429
+ <key>Location</key>
430
+ <dict>
431
+ <key>BookmarkData</key>
432
+ <data>
433
+ Ym9va8wDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
434
+ AAAAAAAAAAAAAAAAAAAA1AIAAAUAAAABAQAAVXNlcnMA
435
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
436
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
437
+ BgAAAAEBAABjbHVzdG8AAAkAAAABAQAAUkVBRE1FLm1k
438
+ AAAAHAAAAAEGAAAEAAAAFAAAACQAAAA0AAAASAAAAFQA
439
+ AABkAAAACAAAAAQDAABTfAAAAAAAAAgAAAAEAwAArfkK
440
+ AAAAAAAIAAAABAMAAN1sMQAAAAAACAAAAAQDAAD132wD
441
+ AAAAAAgAAAAEAwAAhplUBAAAAAAIAAAABAMAAOtzRAcA
442
+ AAAACAAAAAQDAAAeeEQHAAAAABwAAAABBgAAnAAAAKwA
443
+ AAC8AAAAzAAAANwAAADsAAAA/AAAAAgAAAAABAAAQbYn
444
+ Wk4AAAAYAAAAAQIAAAEAAAAAAAAADwAAAAAAAAAAAAAA
445
+ AAAAAAQAAAADAwAABQAAAAQAAAADAwAA9gEAAAkAAAAB
446
+ AQAATWFjaW50b3NoAAAACAAAAAQDAAAAUFHONgAAAAgA
447
+ AAAABAAAQa5oO5wAAAAkAAAAAQEAADlFMUVDMzlCLUNG
448
+ NUItM0Q0MS1BNkYxLUVGOTI3MUJGOTc4RBgAAAABAgAA
449
+ gQAAAAEACADvPwAAAQAIAAAAAAAAAAAAAQAAAAEBAAAv
450
+ AAAAAAAAAAEFAAC+AAAAAQIAADhlMjY5MDQ1MGE5YmFm
451
+ MDkzOWMzYWQzNjZmMTJmNTAyMGVlMTJjZTE7MDAwMDAw
452
+ MDA7MDAwMDAwMDAwMDAwMDAyMDtjb20uYXBwbGUuYXBw
453
+ LXNhbmRib3gucmVhZC13cml0ZTswMDAwMDAwMTswMTAw
454
+ MDAwNTswMDAwMDAwMDA3NDQ3ODFlOy91c2Vycy9jb25v
455
+ ci9kcm9wYm94L2RldmVsb3BtZW50L3J1YnkvY2x1c3Rv
456
+ L3JlYWRtZS5tZAAAAMAAAAD+////AQAAAAAAAAAPAAAA
457
+ BBAAAHgAAAAAAAAABRAAAAwBAAAAAAAAEBAAAEABAAAA
458
+ AAAAQBAAADABAAAAAAAAAiAAAPgBAAAAAAAAECAAAHgB
459
+ AAAAAAAAESAAAKwBAAAAAAAAEiAAAIwBAAAAAAAAEyAA
460
+ AJwBAAAAAAAAICAAANgBAAAAAAAAMCAAAAQCAAAAAAAA
461
+ AcAAAGABAAAAAAAAEcAAABQAAAAAAAAAEsAAAGwBAAAA
462
+ AAAAgPAAAAwCAAAAAAAA
463
+ </data>
464
+ <key>FileURL</key>
465
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/README.md</string>
466
+ <key>TypeID</key>
467
+ <string>_CFileLocator</string>
468
+ <key>Version</key>
469
+ <integer>1</integer>
470
+ </dict>
471
+ </dict>
472
+ <dict>
473
+ <key>Date</key>
474
+ <date>2012-10-14T23:11:58Z</date>
475
+ <key>Location</key>
476
+ <dict>
477
+ <key>BookmarkData</key>
478
+ <data>
479
+ Ym9va8QDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
480
+ AAAAAAAAAAAAAAAAAAAAzAIAAAUAAAABAQAAVXNlcnMA
481
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
482
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
483
+ BgAAAAEBAABjbHVzdG8AAAcAAAABAQAATElDRU5TRQAc
484
+ AAAAAQYAAAQAAAAUAAAAJAAAADQAAABIAAAAVAAAAGQA
485
+ AAAIAAAABAMAAFN8AAAAAAAACAAAAAQDAACt+QoAAAAA
486
+ AAgAAAAEAwAA3WwxAAAAAAAIAAAABAMAAPXfbAMAAAAA
487
+ CAAAAAQDAACGmVQEAAAAAAgAAAAEAwAA63NEBwAAAAAI
488
+ AAAABAMAABp4RAcAAAAAHAAAAAEGAACYAAAAqAAAALgA
489
+ AADIAAAA2AAAAOgAAAD4AAAACAAAAAAEAABBtidaTgAA
490
+ ABgAAAABAgAAAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAA
491
+ BAAAAAMDAAAFAAAABAAAAAMDAAD2AQAACQAAAAEBAABN
492
+ YWNpbnRvc2gAAAAIAAAABAMAAABQUc42AAAACAAAAAAE
493
+ AABBrmg7nAAAACQAAAABAQAAOUUxRUMzOUItQ0Y1Qi0z
494
+ RDQxLUE2RjEtRUY5MjcxQkY5NzhEGAAAAAECAACBAAAA
495
+ AQAIAO8/AAABAAgAAAAAAAAAAAABAAAAAQEAAC8AAAAA
496
+ AAAAAQUAALwAAAABAgAANDgxZjQxZTU2MDJmZjg5MWMz
497
+ Nzc1ZjNmMTg3NzZkNTYyZjQ2YTFiOTswMDAwMDAwMDsw
498
+ MDAwMDAwMDAwMDAwMDIwO2NvbS5hcHBsZS5hcHAtc2Fu
499
+ ZGJveC5yZWFkLXdyaXRlOzAwMDAwMDAxOzAxMDAwMDA1
500
+ OzAwMDAwMDAwMDc0NDc4MWE7L3VzZXJzL2Nvbm9yL2Ry
501
+ b3Bib3gvZGV2ZWxvcG1lbnQvcnVieS9jbHVzdG8vbGlj
502
+ ZW5zZQDAAAAA/v///wEAAAAAAAAADwAAAAQQAAB0AAAA
503
+ AAAAAAUQAAAIAQAAAAAAABAQAAA8AQAAAAAAAEAQAAAs
504
+ AQAAAAAAAAIgAAD0AQAAAAAAABAgAAB0AQAAAAAAABEg
505
+ AACoAQAAAAAAABIgAACIAQAAAAAAABMgAACYAQAAAAAA
506
+ ACAgAADUAQAAAAAAADAgAAAAAgAAAAAAAAHAAABcAQAA
507
+ AAAAABHAAAAUAAAAAAAAABLAAABoAQAAAAAAAIDwAAAI
508
+ AgAAAAAAAA==
509
+ </data>
510
+ <key>FileURL</key>
511
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/LICENSE</string>
512
+ <key>TypeID</key>
513
+ <string>_CFileLocator</string>
514
+ <key>Version</key>
515
+ <integer>1</integer>
516
+ </dict>
517
+ </dict>
518
+ <dict>
519
+ <key>Date</key>
520
+ <date>2012-10-14T00:49:57Z</date>
521
+ <key>Location</key>
522
+ <dict>
523
+ <key>BookmarkData</key>
524
+ <data>
525
+ Ym9va/QDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
526
+ AAAAAAAAAAAAAAAAAAAA/AIAAAUAAAABAQAAVXNlcnMA
527
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
528
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
529
+ BgAAAAEBAABjbHVzdG8AAAMAAAABAQAAbGliAAkAAAAB
530
+ AQAAY2x1c3RvLnJiAAAAIAAAAAEGAAAEAAAAFAAAACQA
531
+ AAA0AAAASAAAAFQAAABkAAAAcAAAAAgAAAAEAwAAU3wA
532
+ AAAAAAAIAAAABAMAAK35CgAAAAAACAAAAAQDAADdbDEA
533
+ AAAAAAgAAAAEAwAA9d9sAwAAAAAIAAAABAMAAIaZVAQA
534
+ AAAACAAAAAQDAADrc0QHAAAAAAgAAAAEAwAAhnREBwAA
535
+ AAAIAAAABAMAAJZ0RAcAAAAAIAAAAAEGAACsAAAAvAAA
536
+ AMwAAADcAAAA7AAAAPwAAAAMAQAAHAEAAAgAAAAABAAA
537
+ QbYoXsEAAAAYAAAAAQIAAAEAAAAAAAAADwAAAAAAAAAA
538
+ AAAAAAAAAAQAAAADAwAABgAAAAQAAAADAwAA9gEAAAkA
539
+ AAABAQAATWFjaW50b3NoAAAACAAAAAQDAAAAUFHONgAA
540
+ AAgAAAAABAAAQa5oO5wAAAAkAAAAAQEAADlFMUVDMzlC
541
+ LUNGNUItM0Q0MS1BNkYxLUVGOTI3MUJGOTc4RBgAAAAB
542
+ AgAAgQAAAAEACADvPwAAAQAIAAAAAAAAAAAAAQAAAAEB
543
+ AAAvAAAAAAAAAAEFAADCAAAAAQIAADI5NDI2ODYwNWRh
544
+ MTkyYjlmNTk3NTRlYmMyYzU4YzBkMmQ4NTZhMWQ7MDAw
545
+ MDAwMDA7MDAwMDAwMDAwMDAwMDAyMDtjb20uYXBwbGUu
546
+ YXBwLXNhbmRib3gucmVhZC13cml0ZTswMDAwMDAwMTsw
547
+ MTAwMDAwNTswMDAwMDAwMDA3NDQ3NDk2Oy91c2Vycy9j
548
+ b25vci9kcm9wYm94L2RldmVsb3BtZW50L3J1YnkvY2x1
549
+ c3RvL2xpYi9jbHVzdG8ucmIAAADAAAAA/v///wEAAAAA
550
+ AAAADwAAAAQQAACEAAAAAAAAAAUQAAAsAQAAAAAAABAQ
551
+ AABkAQAAAAAAAEAQAABUAQAAAAAAAAIgAAAcAgAAAAAA
552
+ ABAgAACcAQAAAAAAABEgAADQAQAAAAAAABIgAACwAQAA
553
+ AAAAABMgAADAAQAAAAAAACAgAAD8AQAAAAAAADAgAAAo
554
+ AgAAAAAAAAHAAACEAQAAAAAAABHAAAAUAAAAAAAAABLA
555
+ AACQAQAAAAAAAIDwAAAwAgAAAAAAAA==
556
+ </data>
557
+ <key>FileURL</key>
558
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto.rb</string>
559
+ <key>TypeID</key>
560
+ <string>_CFileLocator</string>
561
+ <key>Version</key>
562
+ <integer>1</integer>
563
+ </dict>
564
+ </dict>
565
+ <dict>
566
+ <key>Date</key>
567
+ <date>2012-10-14T00:20:28Z</date>
568
+ <key>Location</key>
569
+ <dict>
570
+ <key>BookmarkData</key>
571
+ <data>
572
+ Ym9vawwEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
573
+ AAAAAAAAAAAAAAAAAAAAFAMAAAUAAAABAQAAVXNlcnMA
574
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
575
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
576
+ BgAAAAEBAABjbHVzdG8AAAMAAAABAQAAbGliAAgAAAAB
577
+ AQAAcG9pbnQucmIkAAAAAQYAAAQAAAAUAAAAJAAAADQA
578
+ AABIAAAAVAAAAGQAAABUAAAAcAAAAAgAAAAEAwAAU3wA
579
+ AAAAAAAIAAAABAMAAK35CgAAAAAACAAAAAQDAADdbDEA
580
+ AAAAAAgAAAAEAwAA9d9sAwAAAAAIAAAABAMAAIaZVAQA
581
+ AAAACAAAAAQDAADrc0QHAAAAAAgAAAAEAwAAhnREBwAA
582
+ AAAIAAAABAMAACN5RAcAAAAACAAAAAQDAAAIdkQHAAAA
583
+ ACQAAAABBgAArAAAALwAAADMAAAA3AAAAOwAAAD8AAAA
584
+ DAEAABwBAAAsAQAACAAAAAAEAABBtihgswAAABgAAAAB
585
+ AgAAAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAABAAAAAMD
586
+ AAAHAAAABAAAAAMDAAD2AQAACQAAAAEBAABNYWNpbnRv
587
+ c2gAAAAIAAAABAMAAABQUc42AAAACAAAAAAEAABBrmg7
588
+ nAAAACQAAAABAQAAOUUxRUMzOUItQ0Y1Qi0zRDQxLUE2
589
+ RjEtRUY5MjcxQkY5NzhEGAAAAAECAACBAAAAAQAIAO8/
590
+ AAABAAgAAAAAAAAAAAABAAAAAQEAAC8AAAAAAAAAAQUA
591
+ AMgAAAABAgAAMjQzOTU5ZTMzOGY1NGQ4YzM2MWZjZTdk
592
+ NzdkYzVmYzJkOWNjMmRhOTswMDAwMDAwMDswMDAwMDAw
593
+ MDAwMDAwMDIwO2NvbS5hcHBsZS5hcHAtc2FuZGJveC5y
594
+ ZWFkLXdyaXRlOzAwMDAwMDAxOzAxMDAwMDA1OzAwMDAw
595
+ MDAwMDc0NDc2MDg7L3VzZXJzL2Nvbm9yL2Ryb3Bib3gv
596
+ ZGV2ZWxvcG1lbnQvcnVieS9jbHVzdG8vbGliL2NsdXN0
597
+ by9wb2ludC5yYgDAAAAA/v///wEAAAAAAAAADwAAAAQQ
598
+ AACAAAAAAAAAAAUQAAA8AQAAAAAAABAQAAB4AQAAAAAA
599
+ AEAQAABoAQAAAAAAAAIgAAAwAgAAAAAAABAgAACwAQAA
600
+ AAAAABEgAADkAQAAAAAAABIgAADEAQAAAAAAABMgAADU
601
+ AQAAAAAAACAgAAAQAgAAAAAAADAgAAA8AgAAAAAAAAHA
602
+ AACYAQAAAAAAABHAAAAUAAAAAAAAABLAAACkAQAAAAAA
603
+ AIDwAABEAgAAAAAAAA==
604
+ </data>
605
+ <key>FileURL</key>
606
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/point.rb</string>
607
+ <key>TypeID</key>
608
+ <string>_CFileLocator</string>
609
+ <key>Version</key>
610
+ <integer>1</integer>
611
+ </dict>
612
+ </dict>
613
+ <dict>
614
+ <key>Date</key>
615
+ <date>2012-10-14T00:20:28Z</date>
616
+ <key>Location</key>
617
+ <dict>
618
+ <key>BookmarkData</key>
619
+ <data>
620
+ Ym9vaxQEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
621
+ AAAAAAAAAAAAAAAAAAAAHAMAAAUAAAABAQAAVXNlcnMA
622
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
623
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
624
+ BgAAAAEBAABjbHVzdG8AAAMAAAABAQAAbGliAAsAAAAB
625
+ AQAAZGlzdGFuY2UucmIAJAAAAAEGAAAEAAAAFAAAACQA
626
+ AAA0AAAASAAAAFQAAABkAAAAVAAAAHAAAAAIAAAABAMA
627
+ AFN8AAAAAAAACAAAAAQDAACt+QoAAAAAAAgAAAAEAwAA
628
+ 3WwxAAAAAAAIAAAABAMAAPXfbAMAAAAACAAAAAQDAACG
629
+ mVQEAAAAAAgAAAAEAwAA63NEBwAAAAAIAAAABAMAAIZ0
630
+ RAcAAAAACAAAAAQDAAAjeUQHAAAAAAgAAAAEAwAACZBF
631
+ BwAAAAAkAAAAAQYAALAAAADAAAAA0AAAAOAAAADwAAAA
632
+ AAEAABABAAAgAQAAMAEAAAgAAAAABAAAQbYpyXEAAAAY
633
+ AAAAAQIAAAEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAQA
634
+ AAADAwAABwAAAAQAAAADAwAA9gEAAAkAAAABAQAATWFj
635
+ aW50b3NoAAAACAAAAAQDAAAAUFHONgAAAAgAAAAABAAA
636
+ Qa5oO5wAAAAkAAAAAQEAADlFMUVDMzlCLUNGNUItM0Q0
637
+ MS1BNkYxLUVGOTI3MUJGOTc4RBgAAAABAgAAgQAAAAEA
638
+ CADvPwAAAQAIAAAAAAAAAAAAAQAAAAEBAAAvAAAAAAAA
639
+ AAEFAADLAAAAAQIAADY4N2UzOGJhM2Q2Y2JlYmFhNzM3
640
+ MGFlZTdlZTU5ZTk2Y2RkNWY3YmU7MDAwMDAwMDA7MDAw
641
+ MDAwMDAwMDAwMDAyMDtjb20uYXBwbGUuYXBwLXNhbmRi
642
+ b3gucmVhZC13cml0ZTswMDAwMDAwMTswMTAwMDAwNTsw
643
+ MDAwMDAwMDA3NDU5MDA5Oy91c2Vycy9jb25vci9kcm9w
644
+ Ym94L2RldmVsb3BtZW50L3J1YnkvY2x1c3RvL2xpYi9j
645
+ bHVzdG8vZGlzdGFuY2UucmIAAMAAAAD+////AQAAAAAA
646
+ AAAPAAAABBAAAIQAAAAAAAAABRAAAEABAAAAAAAAEBAA
647
+ AHwBAAAAAAAAQBAAAGwBAAAAAAAAAiAAADQCAAAAAAAA
648
+ ECAAALQBAAAAAAAAESAAAOgBAAAAAAAAEiAAAMgBAAAA
649
+ AAAAEyAAANgBAAAAAAAAICAAABQCAAAAAAAAMCAAAEAC
650
+ AAAAAAAAAcAAAJwBAAAAAAAAEcAAABQAAAAAAAAAEsAA
651
+ AKgBAAAAAAAAgPAAAEgCAAAAAAAA
652
+ </data>
653
+ <key>FileURL</key>
654
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/distance.rb</string>
655
+ <key>TypeID</key>
656
+ <string>_CFileLocator</string>
657
+ <key>Version</key>
658
+ <integer>1</integer>
659
+ </dict>
660
+ </dict>
661
+ <dict>
662
+ <key>Date</key>
663
+ <date>2012-10-14T00:20:26Z</date>
664
+ <key>Location</key>
665
+ <dict>
666
+ <key>BookmarkData</key>
667
+ <data>
668
+ Ym9vaxQEAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
669
+ AAAAAAAAAAAAAAAAAAAAHAMAAAUAAAABAQAAVXNlcnMA
670
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
671
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
672
+ BgAAAAEBAABjbHVzdG8AAAMAAAABAQAAbGliAAoAAAAB
673
+ AQAAY2x1c3Rlci5yYgAAJAAAAAEGAAAEAAAAFAAAACQA
674
+ AAA0AAAASAAAAFQAAABkAAAAVAAAAHAAAAAIAAAABAMA
675
+ AFN8AAAAAAAACAAAAAQDAACt+QoAAAAAAAgAAAAEAwAA
676
+ 3WwxAAAAAAAIAAAABAMAAPXfbAMAAAAACAAAAAQDAACG
677
+ mVQEAAAAAAgAAAAEAwAA63NEBwAAAAAIAAAABAMAAIZ0
678
+ RAcAAAAACAAAAAQDAAAjeUQHAAAAAAgAAAAEAwAADHZE
679
+ BwAAAAAkAAAAAQYAALAAAADAAAAA0AAAAOAAAADwAAAA
680
+ AAEAABABAAAgAQAAMAEAAAgAAAAABAAAQbYoYL4AAAAY
681
+ AAAAAQIAAAEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAQA
682
+ AAADAwAABwAAAAQAAAADAwAA9gEAAAkAAAABAQAATWFj
683
+ aW50b3NoAAAACAAAAAQDAAAAUFHONgAAAAgAAAAABAAA
684
+ Qa5oO5wAAAAkAAAAAQEAADlFMUVDMzlCLUNGNUItM0Q0
685
+ MS1BNkYxLUVGOTI3MUJGOTc4RBgAAAABAgAAgQAAAAEA
686
+ CADvPwAAAQAIAAAAAAAAAAAAAQAAAAEBAAAvAAAAAAAA
687
+ AAEFAADKAAAAAQIAADE1MjNhOWU2NjMzOTE0NDM3OThh
688
+ N2NjODYyMzZjYzBlZDdlZjI2ZDA7MDAwMDAwMDA7MDAw
689
+ MDAwMDAwMDAwMDAyMDtjb20uYXBwbGUuYXBwLXNhbmRi
690
+ b3gucmVhZC13cml0ZTswMDAwMDAwMTswMTAwMDAwNTsw
691
+ MDAwMDAwMDA3NDQ3NjBjOy91c2Vycy9jb25vci9kcm9w
692
+ Ym94L2RldmVsb3BtZW50L3J1YnkvY2x1c3RvL2xpYi9j
693
+ bHVzdG8vY2x1c3Rlci5yYgAAAMAAAAD+////AQAAAAAA
694
+ AAAPAAAABBAAAIQAAAAAAAAABRAAAEABAAAAAAAAEBAA
695
+ AHwBAAAAAAAAQBAAAGwBAAAAAAAAAiAAADQCAAAAAAAA
696
+ ECAAALQBAAAAAAAAESAAAOgBAAAAAAAAEiAAAMgBAAAA
697
+ AAAAEyAAANgBAAAAAAAAICAAABQCAAAAAAAAMCAAAEAC
698
+ AAAAAAAAAcAAAJwBAAAAAAAAEcAAABQAAAAAAAAAEsAA
699
+ AKgBAAAAAAAAgPAAAEgCAAAAAAAA
700
+ </data>
701
+ <key>FileURL</key>
702
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/lib/clusto/cluster.rb</string>
703
+ <key>TypeID</key>
704
+ <string>_CFileLocator</string>
705
+ <key>Version</key>
706
+ <integer>1</integer>
707
+ </dict>
708
+ </dict>
709
+ </array>
710
+ <key>RecentItemsExpanded</key>
711
+ <false/>
712
+ <key>RecentItemsVisible</key>
713
+ <true/>
714
+ <key>ScratchpadItemsExpanded</key>
715
+ <false/>
716
+ <key>ScratchpadItemsVisible</key>
717
+ <true/>
718
+ <key>ShowSCMData:Conor</key>
719
+ <false/>
720
+ <key>ToolbarVisible:Conor</key>
721
+ <true/>
722
+ <key>ViewSplitterPosition:Conor</key>
723
+ <real>0.1968826949596405</real>
724
+ <key>WindowFrame:Conor:displays([(0, 0), (1440, 900)])</key>
725
+ <string>rect(44,0,837,1219)</string>
726
+ </dict>
727
+ </plist>
File without changes
@@ -0,0 +1,68 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>HierarchyData</key>
6
+ <array>
7
+ <string>4A878945-2576-4616-866A-51179A76DB90</string>
8
+ </array>
9
+ <key>ProjectItems</key>
10
+ <dict>
11
+ <key>4A878945-2576-4616-866A-51179A76DB90</key>
12
+ <dict>
13
+ <key>ItemData</key>
14
+ <dict>
15
+ <key>BookmarkData</key>
16
+ <data>
17
+ Ym9va5QDAAAAAAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAA
18
+ AAAAAAAAAAAAAAAAAAAAnAIAAAUAAAABAQAAVXNlcnMA
19
+ AAAFAAAAAQEAAENvbm9yAAAABwAAAAEBAABEcm9wYm94
20
+ AAsAAAABAQAARGV2ZWxvcG1lbnQABAAAAAEBAABSdWJ5
21
+ BgAAAAEBAABjbHVzdG8AABgAAAABBgAABAAAABQAAAAk
22
+ AAAANAAAAEgAAABUAAAACAAAAAQDAABTfAAAAAAAAAgA
23
+ AAAEAwAArfkKAAAAAAAIAAAABAMAAN1sMQAAAAAACAAA
24
+ AAQDAAD132wDAAAAAAgAAAAEAwAAhplUBAAAAAAIAAAA
25
+ BAMAAOtzRAcAAAAAGAAAAAEGAACEAAAAlAAAAKQAAAC0
26
+ AAAAxAAAANQAAAAIAAAAAAQAAEG2KF4gAAAAGAAAAAEC
27
+ AAACAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAEAAAAAwMA
28
+ AAQAAAAEAAAAAwMAAPYBAAAJAAAAAQEAAE1hY2ludG9z
29
+ aAAAAAgAAAAEAwAAAFBRzjYAAAAIAAAAAAQAAEGuaDuc
30
+ AAAAJAAAAAEBAAA5RTFFQzM5Qi1DRjVCLTNENDEtQTZG
31
+ MS1FRjkyNzFCRjk3OEQYAAAAAQIAAIEAAAABAAgA7z8A
32
+ AAEACAAAAAAAAAAAAAEAAAABAQAALwAAAAAAAAABBQAA
33
+ tAAAAAECAAAxNzI3MDBkM2JlYzA1N2Q0YTZlYTAwN2M1
34
+ NTMyYjE1MjA3NWFlY2I0OzAwMDAwMDAwOzAwMDAwMDAw
35
+ MDAwMDAwMjA7Y29tLmFwcGxlLmFwcC1zYW5kYm94LnJl
36
+ YWQtd3JpdGU7MDAwMDAwMDE7MDEwMDAwMDU7MDAwMDAw
37
+ MDAwNzQ0NzNlYjsvdXNlcnMvY29ub3IvZHJvcGJveC9k
38
+ ZXZlbG9wbWVudC9ydWJ5L2NsdXN0bwDAAAAA/v///wEA
39
+ AAAAAAAADwAAAAQQAABkAAAAAAAAAAUQAADkAAAAAAAA
40
+ ABAQAAAUAQAAAAAAAEAQAAAEAQAAAAAAAAIgAADMAQAA
41
+ AAAAABAgAABMAQAAAAAAABEgAACAAQAAAAAAABIgAABg
42
+ AQAAAAAAABMgAABwAQAAAAAAACAgAACsAQAAAAAAADAg
43
+ AADYAQAAAAAAAAHAAAA0AQAAAAAAABHAAAAUAAAAAAAA
44
+ ABLAAABAAQAAAAAAAIDwAADgAQAAAAAAAA==
45
+ </data>
46
+ <key>FileURL</key>
47
+ <string>file://localhost/Users/Conor/Dropbox/Development/Ruby/clusto/</string>
48
+ <key>RelativePath</key>
49
+ <string>./</string>
50
+ <key>TypeID</key>
51
+ <string>_CFileLocator</string>
52
+ <key>Version</key>
53
+ <integer>1</integer>
54
+ </dict>
55
+ <key>ItemName</key>
56
+ <string>clusto</string>
57
+ <key>ItemType</key>
58
+ <string>FolderReference</string>
59
+ <key>UserOverrideItemName</key>
60
+ <true/>
61
+ </dict>
62
+ </dict>
63
+ <key>com.barebones.DocumentFormatVersion</key>
64
+ <integer>5</integer>
65
+ <key>com.barebones.DocumentType</key>
66
+ <string>Project</string>
67
+ </dict>
68
+ </plist>
data/clusto.gemspec CHANGED
@@ -1,9 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = 'clusto'
3
- s.version = '0.1.0'
4
- s.author = 'Conor Mulligan'
5
- s.email = 'conmulligan@gmail.com'
6
- s.summary = 'Simple Ruby point clustering'
7
-
2
+ s.name = 'clusto'
3
+ s.version = '0.2.0'
4
+ s.author = 'Conor Mulligan'
5
+ s.email = 'conmulligan@gmail.com'
6
+ s.homepage = 'http://github.com/conmulligan/clusto'
7
+ s.summary = 'Simple Ruby point clustering'
8
+ s.description = 'Clusto is a simple way to assign many points to a few clusters, ideally for rendering on a map.'
9
+ s.license = 'MIT'
10
+
11
+ s.platform = Gem::Platform::RUBY
12
+ s.required_ruby_version = '>= 1.9.1'
8
13
  s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
9
14
  end
data/lib/clusto.rb CHANGED
@@ -9,7 +9,7 @@ module Clusto
9
9
  RADIANS_PER_DEGREES = Math::PI / 180
10
10
  GREAT_CIRCLE_RADIUS = 6371
11
11
 
12
- GRID_SIZE = 8
12
+ DEFAULT_GRID_SIZE = 8
13
13
 
14
14
  def minimum_bounding_rectangle(points)
15
15
  xs = points.collect { |p| p.x }.minmax
@@ -21,7 +21,8 @@ module Clusto
21
21
  def cluster(points, options={})
22
22
  bounds = options[:bounds] || Clusto.minimum_bounding_rectangle(points)
23
23
  distance_method = options[:distance_method] || :haversine
24
-
24
+ grid_size = options[:grid_size] || DEFAULT_GRID_SIZE
25
+
25
26
  # Create clusters
26
27
 
27
28
  clusters = []
@@ -30,13 +31,13 @@ module Clusto
30
31
  y = bounds[3]
31
32
  w = bounds[2] - bounds[0]
32
33
  h = bounds[3] - bounds[1]
33
- grid_w = w / GRID_SIZE
34
- grid_h = h / GRID_SIZE
34
+ grid_w = w / grid_size
35
+ grid_h = h / grid_size
35
36
 
36
37
  column = 0
37
38
  row = 0
38
39
 
39
- (GRID_SIZE ** 2).times do |i|
40
+ (grid_size ** 2).times do |i|
40
41
  offset_x = x + (column * grid_w)
41
42
  offset_y = y - (row * grid_h)
42
43
 
@@ -44,7 +45,7 @@ module Clusto
44
45
  clusters.push(Clusto::Cluster.new(center))
45
46
 
46
47
  column = column+1
47
- if column == GRID_SIZE
48
+ if column == grid_size
48
49
  column = 0
49
50
  row = row+1
50
51
  end
@@ -74,8 +75,6 @@ module Clusto
74
75
 
75
76
  # Reposition clusters
76
77
 
77
- clusters.each do |cluster|
78
- cluster.reposition
79
- end
78
+ clusters.each { |c| c.reposition }
80
79
  end
81
80
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clusto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,14 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-13 00:00:00.000000000 Z
12
+ date: 2012-10-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description:
14
+ description: Clusto is a simple way to assign many points to a few clusters, ideally
15
+ for rendering on a map.
15
16
  email: conmulligan@gmail.com
16
17
  executables: []
17
18
  extensions: []
18
19
  extra_rdoc_files: []
19
20
  files:
21
+ - ./clusto.bbprojectd/Conor.bbprojectsettings
22
+ - ./clusto.bbprojectd/project.bbprojectdata
23
+ - ./clusto.bbprojectd/Scratchpad.txt
24
+ - ./clusto.bbprojectd/Unix Worksheet.worksheet
20
25
  - ./clusto.gemspec
21
26
  - ./lib/clusto/cluster.rb
22
27
  - ./lib/clusto/distance.rb
@@ -24,8 +29,9 @@ files:
24
29
  - ./lib/clusto.rb
25
30
  - ./LICENSE
26
31
  - ./README.md
27
- homepage:
28
- licenses: []
32
+ homepage: http://github.com/conmulligan/clusto
33
+ licenses:
34
+ - MIT
29
35
  post_install_message:
30
36
  rdoc_options: []
31
37
  require_paths:
@@ -35,7 +41,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
35
41
  requirements:
36
42
  - - ! '>='
37
43
  - !ruby/object:Gem::Version
38
- version: '0'
44
+ version: 1.9.1
39
45
  required_rubygems_version: !ruby/object:Gem::Requirement
40
46
  none: false
41
47
  requirements: