Below are my 2011-2012 bowling season results. I’ve been trying to find some sort of useful pattern.
The first thing I see is that I seem to be two different bowlers in 2011 and 2012 — with a nearly 10-pin shift in average.
The other thing I see is a tendency to mix a couple very high point games into a handful of slightly sub-par games. This is a great way to maintain a high-ish average while losing a lot of games — which is exactly what happened.
| Date |
Lane |
Game 1 |
Game 2 |
Game 3 |
Series |
Average |
|---|
| 09/07/2011 |
42 |
179 |
203 |
193 |
575 |
191.67 |
| 09/14/2011 |
38 |
181 |
148 |
200 |
529 |
184.00 |
| 09/21/2011 |
35 |
227 |
202 |
212 |
641 |
193.89 |
| 09/28/2011 |
39 |
190 |
171 |
149 |
510 |
187.92 |
| 10/05/2011 |
|
|
|
|
|
|
| 10/12/2011 |
34 |
194 |
219 |
205 |
618 |
191.53 |
| 10/19/2011 |
37 |
134 |
196 |
159 |
489 |
186.78 |
| 10/25/2011 |
|
|
|
|
|
|
| 11/02/2011 |
32 |
169 |
174 |
161 |
504 |
184.10 |
| 11/09/2011 |
|
|
|
|
|
|
| 11/16/2011 |
33 |
257 |
180 |
227 |
664 |
188.75 |
| 11/30/0211 |
39 |
127 |
202 |
180 |
509 |
186.63 |
| 12/07/2011 |
38 |
205 |
206 |
199 |
610 |
188.30 |
| 12/14/2011 |
34 |
147 |
127 |
125 |
399 |
183.27 |
| 01/04/2012 |
36 |
150 |
132 |
231 |
513 |
182.25 |
| 01/11/2012 |
31 |
167 |
163 |
189 |
519 |
181.54 |
| 01/25/2012 |
40 |
203 |
167 |
127 |
497 |
180.40 |
| 02/01/2012 |
37 |
154 |
174 |
169 |
497 |
179.42 |
| 02/08/2012 |
37 |
186 |
151 |
100 |
437 |
177.31 |
| 02/15/2012 |
|
|
|
|
|
|
| 02/22/2012 |
32 |
235 |
199 |
173 |
607 |
178.78 |
| 02/01/2029 |
34 |
246 |
188 |
177 |
611 |
180.17 |
| 03/07/2012 |
39 |
178 |
152 |
175 |
505 |
179.54 |
| 03/14/2012 |
31 |
135 |
217 |
159 |
511 |
179.08 |
| 03/21/2012 |
|
|
|
|
|
|
| 03/28/2012 |
36 |
154 |
213 |
162 |
529 |
178.95 |
| 04/04/2012 |
33 |
199 |
188 |
189 |
576 |
179.55 |
| 04/11/2012 |
35 |
197 |
200 |
159 |
556 |
179.80 |
| 04/18/2012 |
40 |
173 |
158 |
178 |
509 |
179.38 |
A few simple things that Amazon AWS could offer that would make my life a looot easier.
1. SNS notifications triggered FROM an SQS queue
Many times I’d like to ensure that a message is reliably delivered to an HTTP endpoint. A great way to do this would be to feed an SNS topic from an SQS queue — where an error in sending the notification or an error code in response results in the SQS message remaining on the queue.
Note that the opposite is currently available — the SNS topic can post to an SQS queue. But I don’t see the benefit in this. What do you gain from posting to an SNS topic that drops the message off in an SQS queue over just posting directly to the queue itself?
2. Dynamic content origin servers for S3
Similar to CloudFront, I’d like a request for an S3 item to pull the item from a origin source if it doesn’t already exist ( PUTing it at that location on the way back ).
eg. an image thumbnail at a particular size could be generated IFF it’s requested … later requests serve it directly from S3.
3. S3 event notifications (provided by SNS?)
In many cases I’ve had to consider placing a custom service in front of S3 purely to track PUTs, GETs, etc, and trigger additional processing. If an S3 event dropped a message in an SNS topic … or better yet, an SQS queue backing an SNS topic … most of my reasons for building these services would be mitigated.
Any chance of getting these, Amazon?
UPDATE: Apparently AWS rolled out Delivery Policies for SNS the day I wrote this post. While it does not invalidate point #1, it does provide some of the functionality I was looking for.
Your business model is not the same thing as your data-access pattern.
(Unless your in the business of developing ORM frameworks, then maybe it is)
Unfortunately it seems like the “Rails way” of doing things has convinced a lot of otherwise-decent developers that their business model must ultimately be a subclass of ActiveRecord::Base — and all methods on those classes should mimic ActiveRecord operations. This results in methods that go to great lengths to tell me HOW they might fullfil my request, but often fail to describe what exactly they’re useful for.
Here’s an example from a project I’m working on now:
Device.find_and_update_or_reassign_or_create( user, attributes )
There’s actually a lot of logic code in this method, and it turns out it is pretty core to our business logic. But what does it do? All I can tell you for sure is it will probably perform 2 or 3 DB operations … but when working with a business model, why do I care about that?
Device.provision( user, attributes )
Refactored! In the business domain of this application, I know exactly what it means to provision a device. I do not care (at this level) what DB operations are required to get that done (and they may very-well change over time).
Finally jumping on the Tumblr bandwagon. Not sure why I didn’t do this sooner.