clusto 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: